利用定时器T0的中断来进行延时而做成的流水灯,每个发光二极管的点亮时间为300ms,我们可以设置T0的初值为50ms,在中断中用一计数器进行计数,当其等于6时表示到了300ms,即可进行下一步操作了。在程序开始执行前,中断计数器初值为0,该流水灯的详细流程如下。
/**********************************************
*T0中断控制P1口八只发光二极管轮流亮 ,12M晶振
***********************************************/
#include
#include
unsigned char conls="0";
main()
{
TH0=0X3c;TL0=0Xb0;TMOD=0X01;ET0=1;TR0=1;EA=1;
//12MHz,50ms
P0=0XFE
while(1)
;
}
void T0_int(void) interrupt 1
{
TH0=0X3c;TL0=0Xb0;
conls++;
if(conls==6)
{
conls=0x00;
P0=_crol_(P0,1);
//循环左移一位
}
}
打开Keil的μVision3程序(本人使用的是Keil8.05中文版),执行菜单命令“工程”→“新建工程”创建“T0”项目,并选择单片机型号为AT89C51(也可以使用原有项目)。执行菜单命令“文件”→“新建”创建文件,输入C语言源程序,保存为“T0.C”。在Project Workspace窗口中右击源代码组1,选择“添加文件到组‘源代码组 l’”将源程序“T0.C”添加到项目中。
在Keil的μVision3中执行执行菜单命令“工程”→“创建目标”(或点击“创建目标”快捷按钮),编译源程序。如果编译成功,则在“Output Window”的“创建”窗口中显示没有错误,并创建了“T0.HEX”文件。
关于Proteus与Keil的联合仿真调试,可参见我以前所写的博文或其它参考资料。需注意Proteus的ISIS与Keil的μVision3中“T0.HEX”的路径要一致。
启动Proteus的ISIS,并将其放在屏幕的右上角(可将原理图放大到合适大小);再启动Keil的μVision3,并将其放在屏幕的左下角。
在Keil的μVision3中执行菜单命令“调试”→“启动/停止调试”,或直接单击图标 ,进入Keil的μVision3调试环境。同时,在Proteus ISIS的窗口中可看出Proteus也进入了程序调试状态。
在Keil的μVision3代码编辑窗口中设置相应断点,断点的设置方法:在需要设置断点语句前双击鼠标左键,可设置断点;再次双击,可取消该断点。
在Keil的μVision3中按F5键(或点击“运行”快捷按钮)运行程序。首先,P0.O点亮D1发光二极管,等待300ms后D1熄灭,同时P0.1点亮D2发光二极管,同样等待300ms后D2熄灭,P0.2点亮D3发光二极管……,当P0.7点亮D8发光二极管等待300ms熄灭后,PO.O再次点亮D1发光二极管……如此循环。或可以点击单步、运行到光标处、全速运行等快捷按钮,以及同时观察工程窗口寄存器页面、存储器窗口等,来进行仿真调试。