单片机计数初值的计算(一)
0108-张蓉蓉
例题:定时器在方式1(16位)工作,软件启动,定时操作50ms,计数初值。
解: 设最大计数值为 M,M=2*16 =65536
50ms定时操作需要50000个机器周期,所以需要50000次计数操作
时器初值=65536-50000=15536
解析:
定时或计数方式下计数初值如何确定,定时器选择不同的工作方式,不同的操作模式其计数值均不相同。
若设最大计数值为 M ,各操作模式下的 M 值为:
方式 0 (13位): M=2*13 =8192(假装2*13为2的13次方,下同)
方式 1(16位) : M=2*16 =65536
方式 2 (8位): M=2* 8 =256
方式 3(8位) : M=256 ,定时器 T0 分成 2 个独立的 8 位计数器,所以 TH0 、 TL0 的 M 均为 256
由于 MCS-51 的两个定时器均为加 1 计数器,当初到最大值( 00H 或 0000H )时产生溢出,将 TF 位置 1 ,可发出溢出中断,因此计数器初值 X 的计算式为: X=M- 计数值。式中的 M 由操作模式确定,不同的操作模式计数器的长不相同,故M值也不相同。而式中的计数值与定时器的工作方式有关。
1 、定时工作方式时
因为计数脉冲由内部供给,是对机器周期进行计数,故计数脉冲频率为 f cont =f osc(时钟频率) × 1/12 、计数周期 T=1/f cont =12/f osc ,1个机器周期=1us(不是ms哦),因此计数器初值 X 的计算式为: X=M- 计数值
拓展:有时也会计算TH0、TL0的值
如例题所示,需设置定时器初值15536=65536-50000,即3CB0H(10进制15536转换成16进制数3CB0),所以TH0=0x3c,TL0=0xb0,高位就是TH0的值,低位为TL0的值。
所以,TH0=(M-所需计数次数)/256=初值/256;
TL0=(M-所需技术次数)%256=初值%256