一、
实验内容
1、按照教材P227的图A.32,绘制实验三电路原理图;
2、根据功能要求,编写C51程序;
3、练习μVision3程序动态调试方法,并最终实现8个LED灯依次点亮的功能:P0.0→P0.1→P0.2→P0.3→┅→P0.7→P0.6→P0.5→┅→P0.0的顺序,无限循环,间隔约50ms;
4、观察仿真结果,完成实验报告。
六、实验要求
实验步骤
(1)在ISIS中绘制电路原理图,按照表A4.1将元件添加到编译环境中;
(2)在uVision3中编写C51程序;
(3)利用uVision3的编译调试功能检查语法和逻辑错误;
(4)下载可执行文件,在Proteus中观察仿真结果,检查程序的正确性。
实验要求
提交的实验报告中应包括电路的原理图和实验结果分析。
1、电路分析及原理图
图1
2、编程思路及C51源程序
编程思路
1,P0口赋一初值,使D1灯亮,D2~D8灯灭
2,调用函数delay,传入参数值为50(ms)
3,采用while结构的无限循环体
4,由上向下循环控制(变量i的初值为1,终值小于等于7,增量为+1)5,使P0中的数值向左移1位
6,调用函数delay,传入参数值为50(ms)
7,返回第二部继续进行
源程序
debug灯#include <reg51.h> //预处理命令,将reg51.h头文件包含进来
void delay(unsigned int time ){ //无返回型延时函数delay,传入参数为1个无符
号整形变量,time
unsigned int j=0; //定义1个初值为0的无符号整形变量,j
for (;time>0;time--) //采用for结构的外层循环,变量time的初值
为time,终值大于0,增量为-1
for (j=0;j<125;j++); //采用for结构的内层循环,变量j的初值为0,终
值小于125,增量为+1
}
void main(){ //主函数
unsigned char i; //定义1个位于data区的自动无符号字符型变量,i
P0 = 0x01; //P0口赋一初值,使D1灯亮,D2~D8灯灭
delay(200); //调用函数delay,传入参数值为50(ms)
while( 1 ){ //采用while结构的无限循环体
for(i=1;i<=7;i++){ //由上向下循环控制(变量i的初值为1,终
值小于等于7,增量为+1)
P0=P0<<1; //使P0中的数值向左移1位(左移符为" <<")
delay(200); //调用函数delay,传入参数值为50(ms)}
for(i=1;i<=7;i++){ //由下向下上循环控制(变量i的初值为1,终值
小于等于7,增量为+1)
P0=P0>>1; //使P0中的数值向右移1位(左移符为" >>")
delay(200); //调用函数delay,传入参数值为50(ms)}
3、调试过程简述
1程序单步调试,如图2所示,当执行到delay子程序时,按下F10或stop over 键,调试光标不进入延时子程序直接到主程序的下一行。
2或者设置断点,接着全速运行到断点时,即停止运行,可在此观察有关变量值如图3所示。
3在进入延时子程序示,使用stop out of current function命令,即可执行完光标所在程序内的函数,并指向程序的下一步如图4所示。
图2
图3