一、具体思路
-
51单片机定时器0的最大定时时长为65536微秒,即65.536毫秒。而1秒等于1000毫秒。
-
显然,1次定时完全无法实现定时1秒的条件。如此,便要多次定时。将多次定时的时间累加起来,便可以达到定时1秒的目的。
-
为使数据精确,需要改变定时器的初值,使改变后可定时的最大时间与1000取余等于0,即可以被整除。这里通过设置初值使每次定时的时间为50毫秒,1000/50=20,即定时20次便达到定时1秒的目的。
二、代码实现
c #include <reg52.h>
unsigned char num = 0;
// 定时器0
void T0_time() interrupt 1
{
TH0 = (65536 - 50000) / 256;
TL0 = (65536 - 50000) % 256;
num++;
}
// 主函数
void main()
{
EA = 1;
ET0 = 1;
TR0 = 1;
TMOD = 0x01;
TH0 = TH0 = (65536 - 50000) / 256;
TL0 = (65536 - 50000) % 256;
while(1)
{
if(num == 20)
{
num = 0;
p0 = ~p0;
}
}
}