原创 基于51单片机的定时中断

2010-5-24 10:21 4353 11 11 分类: MCU/ 嵌入式

基于51单片机的定时中断<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


51单片机一般有两个定时/计数器T0T1,我们可以利用定时器中断来进行延时,做成一流水灯。


 


1  硬件设计


利用定时器T0的中断来进行延时而做成的流水灯,其硬件电路与前面介绍的一般流水灯一样,如下所示。


<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />点击看大图


在桌面上双击图标b5144695-201f-473b-a32b-e010697e54fe.jpg,打开ISIS 7 Professional窗口(本人使用的是v7.4 SP3中文版)。单击菜单命令“文件”→“新建设计”,选择DEFAULT模板,保存文件名为“T0.DSN”。在器件选择按钮7f487476-3599-40dc-9b89-f5f7ad565a24.jpg中单击“P”按钮,或执行菜单命令“库”→“拾取元件/符号”,添加如下表所示的元件。



51单片机AT89C51    一片


晶体CRYSTAL 12MHz   一只


瓷片电容CAP 22pF    二只


电解电容CAP-ELEC 10Uf   一只


电阻RES 10K         一只


电阻RES 300R(即300Ω 八只


发光二极管 LED-YELLOW   八只


 


若用Proteus软件进行仿真,则上图中的晶振和复位电路以及U131脚,都可以不画,它们都是默认的。要注意CPU属性中晶振频率的选择。


ISIS原理图编辑窗口中放置元件,再单击工具箱中元件终端图标4c3d1d80-441b-4f92-b778-8cb0bfbf5d5a.jpg,在对象选择器中单击POWERGROUND放置电源和地。放置好元件后,布好线。左键双击各元件,设置相应元件参数,完成电路图的设计。


 


2  软件设计


利用定时器T0的中断来进行延时而做成的流水灯,每个发光二极管的点亮时间为300ms,我们可以设置T0的初值为50ms,在中断中用一计数器进行计数,当其等于6时表示到了300ms,即可进行下一步操作了。在程序开始执行前,中断计数器初值为0,该流水灯的详细流程如下。


8411dbbd-2630-4f7f-92c7-b46a1a1aaeae.jpg


 


该流水灯的详细C51程序如下。


/**********************************************


*T0中断控制P1口八只发光二极管轮流亮 ,12M晶振


***********************************************/


#include <reg51.h>


#include <intrins>


 


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”文件。


 


3  仿真与调试


关于ProteusKeil的联合仿真调试,可参见我以前所写的博文或其它参考资料。需注意ProteusISISKeilμVision3中“T0.HEX”的路径要一致。


启动ProteusISIS,并将其放在屏幕的右上角(可将原理图放大到合适大小);再启动KeilμVision3,并将其放在屏幕的左下角。


    KeilμVision3中执行菜单命令“调试”→“启动/停止调试”,或直接单击图标16450227-20f4-4125-a871-705bc4d89f0a.jpg,进入KeilμVision3调试环境。同时,在Proteus ISIS的窗口中可看出Proteus也进入了程序调试状态。


    KeilμVision3代码编辑窗口中设置相应断点,断点的设置方法:在需要设置断点语句前双击鼠标左键,可设置断点;再次双击,可取消该断点。


KeilμVision3中按F5键(或点击“运行”快捷按钮)运行程序。首先,P0.O点亮D1发光二极管,等待300msD1熄灭,同时P0.1点亮D2发光二极管,同样等待300msD2熄灭,P0.2点亮D3发光二极管……,当P0.7点亮D8发光二极管等待300ms熄灭后,PO.O再次点亮D1发光二极管……如此循环。或可以点击单步、运行到光标处、全速运行等快捷按钮,以及同时观察工程窗口寄存器页面、存储器窗口等,来进行仿真调试。


 


    本人邮箱:txxyc104@163.com,欢迎来信讨论.


 


 


 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
11
关闭 站长推荐上一条 /3 下一条