单片机在不同的方式下,有不同的最大值。咱们现在针对单片机的方式1,设最大值为M。那么M的值应该是:
M=2^16 = 65535
因为定时器是在一直加1计数的,并且在达到并且超过M的值的时候产生一个中断,因此咱们的初值可以这样定义:
X=M-计数值
何为计数值。可以这样理解,我们如果想定时1ms,那么在这1ms内,计数值就是单片机定时器一直加1的次数(加了多少个1)。
在举一个具体的例子:
单片机频率F=11059200,利用定时器0,模式1产生一个5ms定时中断。
首先咱们应该得到单片机的实际运行的频率,咱们知道,默认是经过了12分频的,所以:
f = F / 12 = 921600 (Hz)
在f下,单片机定时器每次加1的时间是
T = 1/ f = 1.085 X 10-6(S)
已知总的时间(5ms),已知定时器每次加1的时间(T),那么在5ms内,定时器可以加多少个1呢?
G = 5ms / T = 4608 (个)
这个G=4608就是计数值,初值
X= 65535 – 4608 = 60927
然后:
TH0 = X >> 8 ;
TL0 = X ;
至此关于自动重装载值(TH0,TL0)的计算已经全部计算完了。
下面咱们再来验证一下,初值为60927是否真的可以定时5ms。
首先,计算需要加多少个1,才会产生溢出。
Y = 65535 – 60927 = 4608(个)
然后,根据前面的计算,已知每次加1的时间为
T = 1/ f = 1.085 X 10-6(S)
那么初值为60927产生的定时时间应该是:
Time = T X Y
= 4608 X 1.085 X 10-6 (S
= 4.999 ms
综上所述,前面推论完全正确