基于proteus的51单片机仿真实例五十七、定时器/计数器T0的定时实例

1、本例使用定时器T0的定时中断来控制P1.0端口的LED闪烁,定时周期为100MS,LED点亮50MS,熄灭50ms。
2、实现方法:首先将定时器设置为定时方式,然后选择工作方式,在使用定时中断前要先打开总中断,然后再打开定时中断。定时的初值根据计算好的值进行设置,在定时中断中还要重新装载定时初值。
3、在keil c51中新建工程ex45,编写如下程序代码,编译并生成ex45.hex文件
#include <reg51.h>   //包含头文件
 sbit LED=P1^0;      //端口位定义
 //主函数
 void main(void)
 {
   EA = 1;     //开总中断
 ET0 = 1;    //定时器T0中断允许
 TMOD = 0x01;   // 设置定时器的工作方式
 TH0 = (65536-46083)/256;    //定时器赋初值
 TL0 = (65536-46083)%256;
 TR0 = 1;       //开启定时器
 LED = 1;       //关闭LED
 while(1)
 {
 }
 }
 //定时器0的定时中断服务函数
 void Time0(void) interrupt 1 using 0 
 {
   LED = ~LED;     // 断口点评取反
 TH0 = (65536-46083)/256;    //定时器重新赋初值
 TL0 = (65536-46083)%256;
 }
 
4、 在proteus中新建仿真文件ex45.dsn,电路原理图如下所示:

 基于proteus的51单片机仿真实例五十七、定时器/计数器T0的定时实例
5、将ex45.hex文件载入at89c51中,启动仿真,按动按键,观察程序运行结果,下图是某一时刻程序运行结果
基于proteus的51单片机仿真实例五十七、定时器/计数器T0的定时实例