高手请看:网上一篇**大家看看定时器这样设置是否正确

[复制链接]
 楼主| lwg998 发表于 2007-3-20 20:38 | 显示全部楼层 |阅读模式
<br />&nbsp;定时时间(us)&nbsp;TH1&nbsp;TL1&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;50000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;76&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;48077&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;82&nbsp;&nbsp;236&nbsp;&nbsp;<br />&nbsp;&nbsp;46296&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;89&nbsp;&nbsp;&nbsp;86&nbsp;&nbsp;<br />&nbsp;&nbsp;44643&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;95&nbsp;&nbsp;&nbsp;73&nbsp;&nbsp;<br />…&nbsp;…&nbsp;…&nbsp;…&nbsp;…<br />&nbsp;&nbsp;12500&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;211&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;<br /><br /><br />标准51芯片晶振是11.0592M。如何算得的?
maychang 发表于 2007-3-21 09:26 | 显示全部楼层

正确,条件是定时器1工作于模式1(16位)

  
lag3631 发表于 2007-3-21 10:09 | 显示全部楼层

计算方法

对于T1工作在16位定时器的状态<br />每条指令占12条时钟周期,即t1=12/11.0592M(晶振频率)&nbsp;(s)<br />定时时间计算t=[2^16(65536)-T1预存值(TH1&lt&lt8+TL1)]*t1
 楼主| lwg998 发表于 2007-3-21 13:45 | 显示全部楼层

以上是这样的

“对于T1工作在16位定时器的状态<br />每条指令占12条时钟周期,即t1=12/11.0592M(晶振频率)&nbsp;(s)<br />定时时间计算t=[2^16(65536)-T1预存值(TH1&lt&lt8+TL1)]*t1”<br /><br />定时时间计算t=[65536-(TH0*256+TL0)]*t1<br /><br />对吗?<br /><br />
 楼主| lwg998 发表于 2007-3-21 14:06 | 显示全部楼层

这个计算是正确的话应该可以反推回去算出TH0和TL0

如下:要定时50MS&nbsp;&nbsp;晶振频率11.0592&nbsp;&nbsp;标准51<br />用以下方式表示:<br />TH0&nbsp;=&nbsp;预置数/256;<br />TL0&nbsp;=&nbsp;预置数%256;<br /><br />通过:定时时间计算t=[65536-(TH0*256+TL0)]*t1<br />来计算。计算的过程是怎样的?<br />
 楼主| lwg998 发表于 2007-3-21 14:33 | 显示全部楼层

如上:预置数=TH0*256+TL0

还有预置数=65536-50000us/(12/11.0592)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=19456<br /><br />再:预置数=TH0*256+TL0<br />&nbsp;&nbsp;&nbsp;&nbsp;19456&nbsp;=TH0*256+TL0<br /><br />以下不知如何求出TH0和TL0。请知道的朋友继续补充。谢谢
 楼主| lwg998 发表于 2007-3-21 14:54 | 显示全部楼层

刚刚想到的

还有预置数=65536-50000us/(12/11.0592)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=19456<br /><br />再:预置数=TH0*256+TL0<br />&nbsp;&nbsp;&nbsp;&nbsp;19456&nbsp;=TH0*256+TL0&nbsp;<br />刚刚想到的&nbsp;&nbsp;TH0里实际放的数是:预置数/256后的商的整数部分,TL0里放的实际是:预置数/256后的商的余数部分,所以<br /><br />19456/256=76余0,所以<br /><br />TH0&nbsp;=&nbsp;19456/256;<br />TL0&nbsp;=&nbsp;19456%256;<br /><br />所以:TH0&nbsp;=&nbsp;(65536-50000us/(12/11.0592))/256;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TL0&nbsp;=&nbsp;(65536-50000us/(12/11.0592))%256;<br /><br />结论1:TH0&nbsp;=&nbsp;-50000us/(12/11.0592)/256;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TL0&nbsp;=&nbsp;-50000us/(12/11.0592)%256;<br />结论2:TH0&nbsp;=&nbsp;-定时数us/(12/晶振)/256;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TH0&nbsp;=&nbsp;-定时数us/(12/晶振)%256;<br /><br /><br /><br />还有另一种方法:<br /><br />那么:65536-50000/(12/11.0592)=&nbsp;19456&nbsp;=&nbsp;0x4C00<br />TH1&nbsp;=&nbsp;0x4C&nbsp;=&nbsp;76<br />Tl1&nbsp;=&nbsp;0x00&nbsp;=0<br />结论3:<br />65536-定时数us/(12/晶振)<br /><br />由此看出用结论2这种方法表示更省事,也可以根据自己的习惯。呵呵。<br />到此终于弄清楚这两种方法了<br /><br /><br />以上结论不知是否正确,欢迎排砖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

143

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

13

主题

143

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部