从本质上看,你根本不了解定时器的工作,你就只看代码,又岂能看懂。
51单片机的定时器0是16位,当然,这个模式是可以改变的。我就假设工作在16位模式下,因为大部分时候,也工作在这个模式下。
16位的定时器,但只能用单片机是8位的,所以,就拆分成了两个字节,高八位和低八位。
TH0表示定时器0的高八位,THL0表示低八位。 组合起来就是16位。
TH0和TL0的值满了(即,两个定时器寄存器的值二进制代码都为 1111 1111)时,再计一个数,即再来一个脉冲,加一个数,就形成了溢出,溢出时,产生定时中断。所以初始化的时间应该是
TH0(65536-要定时的时间)/256 取高八位
TH0(65536-要定时的时间)%256 取低八位
至于为什么是256,因为是八位。就相当于你要取数字532 的百位时,你为什么要除以100,而不是除以其他数字。
10进制转16进制,我不明白你要表述的是什么意思,所以无法回答
th0 tl0对定时器来说就是一个无符号int型数(2字节),当定时器启动后,每12时钟周期加一,当等于65535时,产生定时中断。
int型数除256就是将其右移8位,取高八位,等同于>>8。
而余256就是取低8位,等同于 &0x00ff。
那个100就是定时时间,具体求时间就是时钟频率取倒数得到时钟周期,再乘以12,再乘以100。
白的方法,很想知道这个。逃避很容