一个关于单片机定时器的问题

这个程序的时间怎么算?

定时器的初值跟设置的模式有关,就拿定时器0的模式1(即16位模式)来说 ,由于51系列单片机是8位的,所以需要2个寄存器,高8位称为TH0,低8为称为TL0。定时器的工作原理是输入一个脉冲,寄存器计数+1,等到2个寄存器计数到全部位为1(即11111111 11111111,10进制就是65536),这时,再来一个脉冲,就会溢出,从而产生一个中断,这就是定时中断。
51系列单片机的晶振频率为12MHZ,执行一条指令需要12个晶振周期,即12分频,相当于实际频率为1MHZ,1MHZ的概念就是1秒产生1000000个脉冲,产生1个脉冲需要1/1M=1us,即定时器1us计数一次。假设定时器从0开始计数,产生一个定时中断就需要65536us,实际应用中,这个时间应该由我们来定,比如100us,这样我们就需要让定时器不从0开始,这就需要给它一个初值,很容易就可以想到,初值=(65536-100)x1=65436,高8为TH0=65436/256(或者用移位操作),低8位TL0=65436%256。
总结一下就是(假设设定的定时时间用t表示,单位为ms):
unsigned long tmp;
unsigned char t;
tmp=65536-t*1000;

TH0=tmp/256 或者 =(unsigned char)(tmp>>8) ;
TL0=tmp%256 或者 =(unsigned char)(tmp) ;追问

谢谢你了,看了你的终于懂了,多给你点分,但能不能留下你的QQ号,交个朋友行不

追答

270581704,我最近也是在学习单片机,一起交流

追问

好的!!

温馨提示:答案为网友推荐,仅供参考
第1个回答  2021-04-30

动画效仿定时器原理,生动有趣

相似回答