定时器工作原理及初值快速计算

 

确定定时器的初值是为了让定时器按照自己的意思(自己规定的秒数)去产生中断。由于定时器计数是用两个8位寄存器结合为一个16位去递加:
  
2^16次方 = 65536(机器周期)

而定时器的默认中断方式是当16位寄存器递增至满(共计65536个机器周期)后,溢出便产生中断。
现在我想让定时器在50ms之后产生中断,则只需要让计数器从TH0TL0初值开始计数,刚刚好50ms之后就溢出,这样便可以控制定时器产生中断。
那么, TH0TL0这个初值是多少呢? 求这个初值只需要 65536 - (50ms内的机器周期数) 现在我们来看看,50ms内的机器周期有多少个:

假设晶振为 11.0592MHz
11.0592MHz => 11059200Hz / 12 = 921600个/秒 (也就是说1秒能运行921600个机器周期)

换算一下, 921600个/秒 = 921.6个/毫秒 = 46080个/50ms 
好了,现在我们计算出了50ms内能运行46080个机器周期,
那么按上述求初值的方法: 初值 = 65536 - 46080 = 19456个。 

最后,总结一下,我们想要让定时器经过50ms后产生中断,只需要给定时器设置一个初值,值为19456 = 0x4c00 即可。

赋值TH0 TL0时也有技巧,就是高位除 /,低位取余 %。
TH0 = 19456/256; // TH0是8位,2^8 = 256
TL0 = 19456%256; // TL0是8位,2^8 = 256

另外,对于精确计算,若想要1秒产生一次中断,只需要50ms中断的定时器产生20次即可得到1秒中断了。

转载于:https://my.oschina.net/jayzonex/blog/10152

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值