您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 89C51单片机定时器所定时间的计算以及写法
89C51单片机定时器时间的计算以及写法今晚学单片机的时候,有一点儿问题,就去网上看了看,发现了很多人不会单片机定时,也就是具体时间的设定,不知道如何设定,而且有关方面的书籍、资料讲解又太过术语化,所以就写一篇通俗些的语言讲述一下如何定时。为了便于理解,先讲解一点儿关于单片机内部定时器和计数器的基本知识,如果学过数字电路,就不用管这些,看下边的就好了:(1)由于单片机内部定时器、计数器均为八位,所以它们从0开始到计数计满,也就是能从00000000计数到11111111,即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=T1xT2=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=T1xT2=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,即可,不需要进行进制的转换。介绍完了之后,总结一下定时的步骤:确定晶振为XMHZX除以12,进行分频频率求倒数Y,即为时钟周期所定时间为Z,总时间即为T=Y*Z需要赋的初始值为65536-T(把十进制转为十六进制HHLL)高八位放HH,第八位放LL
本文标题:89C51单片机定时器所定时间的计算以及写法
链接地址:https://www.777doc.com/doc-4355297 .html