51 单片机内部有 T0 和 T1 两个定时/计数器,可以实现精确时间的定时。采用如下程序可实现 LED 灯以 1Hz 的频率进行闪烁:
#include "reg52.h"
sbit LED = P1^0;
void Timer0_Init(void);
void Timer0_Init(void)
{
TMOD = 0x01; //工作方式1,16位定时器
TH0 = 0x4C; //定时50ms初值高八位
TL0 = 0x00; //定时50ms初值低八位
ET0 = 1; //开定时器0中断
EA = 1; //开总中断
TR0 = 1; //开启定时器0
}
void main(void)
{
Timer0_Init(); //定时器0初始化
while(1)
{
; //等待
}
}
void Timer0() interrupt 1 using 1
{
static unsigned int i; //计数变量
i++;
TH0 = 0x4C; //重装初值,定时50ms初值高八位
TL0 = 0x00; //定时50ms初值低八位
if( i == 20 ) //i=20时定时了1s
{
LED = ~ LED; //LED灯反转
i = 0; //i清零,重新计数
}
}
程序下载后,P1.0 引脚连接的 LED 等以 1Hz 的频率进行闪烁。
dingshiqi1hz.mp4