89C51单片机定时器所定时间的计算以及写法

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

89C51单片机定时器时间的计算以及写法

今晚学单片机的时候,有一点儿问题,就去网上看了看,发现了很多人不会单片机定时,也就是具体时间的设定,不知道如何设定,而且有关方面的书籍、资料讲解又太过术语化,所以就写一篇通俗些的语言讲述一下如何定时。

为了便于理解,先讲解一点儿关于单片机内部定时器和计数器的基本知识,如果学过数字电路,就不用管这些,看下边的就好了:

(1)由于单片机内部定时器、计数器均为八位,所以它们从0开始到计数计满,也就是能从0000 0000计数到1111 1111,即

2^0到2^16,转换成十进制,就是0——65536。

(2)外部的晶振电路提供的频率,到单片机内部,经过硬件电路,进行了12分频,不要问为什么,就这么记着就好了。比如外

部晶振是12MHZ的,那么到了单片机内部,用的频率就是

1MHz的。

89C51单片机常使用的晶振频率为12MHz和11.0592MHz两种,主要讲述这两种频率的,如果用其他的,只需要相应改变即可,下面分别讲述如何定时:

(1)使用12MHz晶振:

单片机工作的频率f:12MHz/12=1MHz,

那么时钟周期T1:T1=1/f=1μs,

比如你要定时T2=50ms=50000μs,

你需要总时间T=T1 x T2=50000,也就是说你需要50000个周期才能走完你所要定的时间,当把数全都计满,是需要65536个周期,也就是说还有65536-50000=15536个周期没有走,那么,我们可以把这个初始值放到计数器里面,让它从15536开始计数,当计够50000个周期,也就计满了,即到达了65536。

就像水往水缸里流,你需要流满半缸水的时间,但是现在水缸是空的,你可以先把水缸灌半缸水,然后让它从半缸水开始流,当流满了的时候,也就到了你需要的那个时间。

然后,15536转成十六进制为:0x3CB0,将3C放到定时器的高8位,B0放到第8位,就完成了定时。

我们在写程序赋初始值的时候一般是这么写的,可以参考一下:TH0=0x3C;

TL0=0xB0;

或者

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

PS:如果你定时是其他的,可以把根据我上边讲解的,把T=50000换成相应的数值即可。

(2)使用11.0592MHz晶振:

单片机工作的频率f:11.0592MHz/12=0.9216MHz,

那么时钟周期T1:T1=(1/0.9216)μs,

比如你要定时T2=50ms=50000μs,那么总时间T= T1 x

T2=46080个周期才能走完,所以,剩下了65536-46080=19456个周期,只要把定时器的初始值设置为19456就可以了。

根据上边的,可以把19456转化成十六进制,为0x4C00,高8位放置4C,第8位放置00即可。

在赋初值的时候可以这么写:

TH0=0x4C;

TL0=0x00;

或者

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

PS:通过两个对比,可以看出,第二个程序会明显好于第一个,因为只需要改动里面的T=50000,即可,不需要进行进制的转换。

介绍完了之后,总结一下定时的步骤:

确定晶振为除以12,进行分频

频率求倒数Y,即为时钟周期所定时间为Z,总时间即为

(把十进制转为十六进制 HHLL )高八位放HH,第八位放LL

相关文档
最新文档