单片机中定时计数器的TH0和TL0的值如何计算?

单片机中定时计数器的TH0和TL0的值如何计算?,第1张

单片机在不同的工作方式下,计数器的位数不同,因而最大计数值也不同。现在设最大计数值为M,那么在各方式下的M值如下;\x0d\方式0:M=2^13=8192\x0d\方式1:M=2^16=65536\x0d\方式2:M=2^8=256\x0d\方式3:定时器0分为两个8为定时器,所以两个M均为256\x0d\因为定时器是做加1计数,并在计满溢出时产生中断,因此初值X可以这样计算:\x0d\X=M-计数值\x0d\现在举例说明定时处置的计算方法,若80C51主频为6MHz,要求产生1ms的定时,计算初值。\x0d\在6MHz的主频下,计数器每加1所需的时间是2uS。若果要产生1ms的计时就需要“加1” 500次。那么500即为计数值,如果要求在方式1下工作,则计数初值X=M-计数值=65536-500=65036=FE0CH

一。10MS定时器初值的计算:1晶振12M12MHz除12为1MHz,也就是说一秒=1000000次机器周期。10ms=10000次 机器周期。65536-10000=55536(d8f0)TH0=0xd8,TL0=0xf02晶振110592M110592MHz除12为921600Hz,就是一秒921600次机器周期,10ms=9216次机器周期。65536-9216=56320(dc00)TH0=0xdc,TL0=0x00二。50MS定时器初值的计算:1晶振12M12MHz除12为1MHz,也就是说一秒=1000000次机器周期。50ms=50000次 机器周期。65536-50000=15536(3cb0)TH0=0x3c,TL0=0xb02晶振110592M110592MHz除12为921600Hz,就是一秒921600次机器周期,50ms=46080次机器周期。65536-46080=19456(4c00)TH0=0x4c,TL0=0x00同理1MS定时器初值的计算:1晶振12M12MHz除12为1MHz,也就是说一秒=1000000次机器周期。1ms=1000次 机器周期。65536-1000=15536(fc18)TH0=0xfc,TL0=0x182晶振110592M110592MHz除12为921600Hz,就是一秒921600次机器周期,50ms=922次机器周期。65536-922=19456(fc66)TH0=0xfc,TL0=0x66

计数初值的计算:

定时或计数方式下计数初值如何确定:定时器选择不同的工作方式,不同的 *** 作模式其计数值均不相同。若设最大计数值为M,各 *** 作模式下的M值为:

模式0 : M=2^13 =8192

模式1: M=2^16=65536
模式2:M=2^8=256
模式3: M=256,定时器T0分成2个独立的8位计数器,所以THO、TLO 的M均为256。

因为MCS-51 的两个定时器均为加1计数器,当初值到最大值( 00H或0000H )时产生溢出,将TF位置1,可发出溢出中断,因此计数器初值X的计算式为: X=M- 计数值。

式中的M由 *** 作模式确定,不同的 *** 作模式计数器的长不相同,故M值也不相同。而式中的计数值与定时器的工作方式有关。
1、计数工作方式时

计数工作方式时,计数脉冲由外部引入,是对外部冲进行计数,因此计数值根据要求确定。其计数初值: X=M- 计数值。

2、定时工作方式时

定时工作方式时,计数脉冲由内部供给,对机器周期进行计数,计数脉冲频率fcont=fosc1/12、计数周期T=1/fcont=12/fosc定时工作方式的计数初值X等于:

X=M-计数值=M-t/T=M-(fosct)/12

式中:fosc为振荡器的振荡频率,t为要求定吋的时间。

扩展资料:

定时器工作方式的设定:

定时器有两种工作方式:定时和计数。由TMOD的D6位和D2位决定,其中D6位决定T1的工作方式,D2位决定T0的工作方式。值为0时工作在定时方式,值为1时工作在计数方式。并且有四种 *** 作模式:

1、模式0:13位计数器,TLi只用低5位。

2、模式1:16位计数器。

3、模式2:8位自动重装计数器,THi的值在计数中不变, TLi 溢出时,THi中的值自动装入TLi中。

4、模式3:T0分成2个独立的8位计数器,T1停止计数。

定时器初值=2^n-m晶振值/分频系数;
n:定时器模式,有13,8,16三种;
m:要定的时间长度,
晶振值:12MHz或6Mhz
分频系数:12
定义10毫秒;定时器模式1,晶振频率12MHz
定时器初值=2^16-10ms12Mhz/12

=65536-10000

=5536
注意单位换算;

单片机的程序运行都是以系统时钟周期为基础,而系统时钟周期又和单片机晶振相关联,一般51单片机的系统时钟周期均为晶振的12分频。
单片机的定时器每计时一次为一个系统时钟周期(如果晶振频率为12MHz,一个系统时钟周期为12/(12M)=1/1000000秒)
单片机定时器定时是顺计时,计数到65536的时候才会产生中断,要定时2ms就得计时2000次,因此就用65536-2000
其实你上面写的两句程序就是取整,高八位给TH0,取余,低八位给TL0
这个没有办法编程的时候直接变,因为如果单片机的晶振频率一变定时器定的时间就会发生变化,而且定时器有八位的和十六位的计算方式都不同,不过你可以去下载51单片机定时器自动计算的小软件,很好用。

单片机在不同的工作方式下,计数器的位数不同,因而最大计数值也不同。现在设最大计数值为M,那么在各方式下的M值如下;
方式0:M=2^13=8192
方式1:M=2^16=65536
方式2:M=2^8=256
方式3:定时器0分为两个8为定时器,所以两个M均为256
因为定时器是做加1计数,并在计满溢出时产生中断,因此初值X可以这样计算:
X=M-计数值
现在举例说明定时处置的计算方法,若80C51主频为6MHz,要求产生1ms的定时,计算初值。
在6MHz的主频下,计数器每加1所需的时间是2uS。若果要产生1ms的计时就需要“加1”
500次。那么500即为计数值,如果要求在方式1下工作,则计数初值X=M-计数值=65536-500=65036=FE0CH

这个其实很简单的,你只需要知道一个条件即可:晶振频率。
因为51单片机的机器周期计算公式是12/晶振频率MHz,若晶振为12MHz,则机器周期就是12/(12×10^6)=1us,也就是说计数器没1us计数一次。
那么有了这个条件就好办多了,一般来说,12MHz晶振下,16位定时器满计数是65536次,每次1us,最大就能计时65536ms,则65536减去多少就是定时多少,如(65536-X)/256,就是定时X微秒。
那么如果晶振不是12MHz,就要把上述的X乘以12/晶振,得到的值就是定时时长。原理相同。
有不懂的地方随时回复我。
希望我的回答能帮助到你。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13330571.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-16
下一篇 2023-07-16

发表评论

登录后才能评论

评论列表(0条)

保存