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

更新时间:2023-11-17 07:55:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

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)%6;

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)%6;

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

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

确定晶振为X MHZ X除以12,进行分频 频率求倒数Y,即为时钟周期 所定时间为Z,总时间即为T=Y*Z 需要赋的初始值为65536- T ( 把十进制转为十六进制 HHLL ) 高八位 放HH,第八位放LL

本文来源:https://www.bwwdw.com/article/f7fv.html

Top