【keil 51单片机proteus 仿真】这是个“嘀、嘀、……”报警声程序:在中断函数里为什么要重新赋初值呢??

#define uint unsigned int
uchar count;

void main()
{

TMOD=1;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
k=1;
while(1);

}
void timer() interrupt 1
{ TH0=(65536-50000)/256;//看这里,看这里,看这里,请问在这里为什么
TL0=(65536-50000)%256; //要重新赋初值呢??
count++;
if (count==4)
{ count=0;
k=~k;
}

}

你使用的定时器模式(TMOD =1)不会自动重载初值的。如果不重新赋值则下次计65535。
51定时器有4中模式:
工作模式0是13位计数器,其由一个高8位(0~7)计数器(TH0或TH1)和一个具有32位分频的低8位计数器中的(TL0或TL1)的低5位(0~4)组合成。
工作模式1与模式0的区别在于计数的位数不同,模式1是由TH0(或TH1)的高8位(0~7)和TL0(或TL1)的低8位(0~7)组合成的16位计数器。
工作模式2是将TL0(或TL1)配制成自动重新装入的8位计数器。
工作模式3是将16位计数器分成2个相互独立的8位计数器TL0和TH0。定时器/计数器的工作模式3只适用于T0。对于T1,设置为模式3时,相当于使TR1=0,使其停止计数。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-08-26
因为进入中断,其值减为0,如果不重装初值,下次计数值就是65535
第2个回答  2010-08-26
第一个装初值是要进入中断,同理,第二次装初值也是为了进入中断循环,每溢出一次进入一次中断,count加1,就是这样而已
相似回答