‘壹’ 51单片机的定时器初值到底是TH0 = (65536-x) /256;还是TH0 = (65535-x) /256;
51单片机的定时器初值确定时,我们通常使用65536减去定时脉冲个数来计算。这是因为16位计数器的最大可写入数值为65535。假设定时周期为1微秒,且频率为12MHz,即一个脉冲到来即溢出,此时应写入65535,即65536-1。
因此,(65536-x)/256是正确的计算方法。考虑到定时时间不可能为零,(65536-x)/256的结果不会是256,小于256的数都可以装入。同样地,对于TL0来说,也不会是256,因为256的倍数除以256后余数为0。
实际上,不管是65535还是65536,对TH0写入的结果是一样的。但对于TL0(或整个计数器来说),理论上存在一个脉冲的差别。假设定时周期为1微秒,写入65535时,定时器一打开,脉冲立即到来,可能不到1微秒。而写入65534,则需两个脉冲才会溢出,时间肯定大于1微秒。
这种方法用于实现这么小的定时,显然是不准确的。还有中断响应时间、主程序响应时间等都需要考虑。对于长时间定时,这个误差是可以忽略的。要想减小误差,可以提高晶振或系统时钟的频率。当定时脉冲个数较多时,就不必纠结这一个脉冲的误差了,同时中断响应时间和中断程序处理的时间也减小了,大多数情况下是可以忽略的。