那么为什么这样算呢?之前已经说过定时器0工作在方式1时是16位的计数器,其中TH0是高8位,TL0是低8位,单片机复位时TL0和TH0初值如下图所示,每一位的值都是二进制(要么是0要么是1),当TL0计满之后向TH0进位,TH0计满后再加1就申请定时器中断。
TL0计满一次时8位值都是1,也就是255(2的8次方减1),再来一个加1时TL0全部清零向TH0进位,也就是说此时TL0中的值是0000 0000,而TH0中的值是0000 0001,这个时候是计数256次;同样的等到TL0第二次计满时8位值都是1,再来一个加1时TL0全部清零向TH0进位,也就是说此时TL0中的值是0000 0000,而TH0中的值是0000 0010,这个时候是计数2*256次,依次类推,当计满256*256次时溢出。大家看出规律了吗?
假设TL0中的初值是十进制L,TH0中的初值是十进制H,那么经过(256-L)次计数后TH0中的值加1变成H+1,TL0中的值变成0;再经过256次计数后TH0中的值变成H+2,TL0中的值变成0。依次类推,当TH0加了(256-H)次1时发生溢出,定时器请求中断。