打印

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

[复制链接]
2040|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lwg998|  楼主 | 2007-3-20 20:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

 定时时间(us) TH1 TL1   
  50000       76   0   
  48077       82  236  
  46296       89   86  
  44643       95   73  
… … … … …
  12500       211  0   


标准51芯片晶振是11.0592M。如何算得的?

相关帖子

沙发
maychang| | 2007-3-21 09:26 | 只看该作者

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

使用特权

评论回复
板凳
lag3631| | 2007-3-21 10:09 | 只看该作者

计算方法

对于T1工作在16位定时器的状态
每条指令占12条时钟周期,即t1=12/11.0592M(晶振频率) (s)
定时时间计算t=[2^16(65536)-T1预存值(TH1<<8+TL1)]*t1

使用特权

评论回复
地板
lwg998|  楼主 | 2007-3-21 13:45 | 只看该作者

以上是这样的

“对于T1工作在16位定时器的状态
每条指令占12条时钟周期,即t1=12/11.0592M(晶振频率) (s)
定时时间计算t=[2^16(65536)-T1预存值(TH1<<8+TL1)]*t1”

定时时间计算t=[65536-(TH0*256+TL0)]*t1

对吗?

使用特权

评论回复
5
lwg998|  楼主 | 2007-3-21 14:06 | 只看该作者

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

如下:要定时50MS  晶振频率11.0592  标准51
用以下方式表示:
TH0 = 预置数/256;
TL0 = 预置数%256;

通过:定时时间计算t=[65536-(TH0*256+TL0)]*t1
来计算。计算的过程是怎样的?

使用特权

评论回复
6
lwg998|  楼主 | 2007-3-21 14:33 | 只看该作者

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

还有预置数=65536-50000us/(12/11.0592)
          =19456

再:预置数=TH0*256+TL0
    19456 =TH0*256+TL0

以下不知如何求出TH0和TL0。请知道的朋友继续补充。谢谢

使用特权

评论回复
7
lwg998|  楼主 | 2007-3-21 14:54 | 只看该作者

刚刚想到的

还有预置数=65536-50000us/(12/11.0592)
          =19456

再:预置数=TH0*256+TL0
    19456 =TH0*256+TL0 
刚刚想到的  TH0里实际放的数是:预置数/256后的商的整数部分,TL0里放的实际是:预置数/256后的商的余数部分,所以

19456/256=76余0,所以

TH0 = 19456/256;
TL0 = 19456%256;

所以:TH0 = (65536-50000us/(12/11.0592))/256;
      TL0 = (65536-50000us/(12/11.0592))%256;

结论1:TH0 = -50000us/(12/11.0592)/256;
       TL0 = -50000us/(12/11.0592)%256;
结论2:TH0 = -定时数us/(12/晶振)/256;
       TH0 = -定时数us/(12/晶振)%256;



还有另一种方法:

那么:65536-50000/(12/11.0592)= 19456 = 0x4C00
TH1 = 0x4C = 76
Tl1 = 0x00 =0
结论3:
65536-定时数us/(12/晶振)

由此看出用结论2这种方法表示更省事,也可以根据自己的习惯。呵呵。
到此终于弄清楚这两种方法了


以上结论不知是否正确,欢迎排砖

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

143

帖子

0

粉丝