51单片机定时器初始值的问题

(C语言的)
TH0=(65536-100)/ 256
TL0= (65536-100) % 256是什么意思
256与什么有关?
256怎么得出的?
TH0= TL0= 如果用16进制表示也是同样的意思吗?
初始值计算公式是什么?
10进制转化成16进制有什么简便算法?

从本质上看,你根本不了解定时器的工作,你就只看代码,又岂能看懂。
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进制,我不明白你要表述的是什么意思,所以无法回答追问

那个书上写的 T=(2^n-定时值)12/foce
跟这个有什么区别?
是不是T算出来是两个高低8位合在一起的?
10进制转16进制就是 我用 65536-定时值后 会有一个很大的数啊 然后 要换成16进制 感觉好难换
我是刚学单片机没多久,可能提的问题有点幼稚.
感谢高手的指导~O(∩_∩)O哈哈~

追答

首先,定时器0有几种工作模式,你应该看书去。我记不太清了,记得有个13位的还有个16位,以及个8位重装的,要看你在哪种工作模式下,没记错的话,应该是TMOD进行设置工作模式。
假设是工作在16位工作模式下,单片机的晶振是12MHZ,51一般是12分频,即频率被降低了12倍。相当1MHZ,1MHZ的概念就是1秒有1000000个脉冲。而定时器是来一个脉冲,就加一个数。那麽,也就是说加一个数的时间是1/1M=1us。 那麽如果此时TH0和TL0都为0x00值的话,即每一次溢出(如果开了中断,就是每一次进入中断)的时间为 65536us。当然,你不需要这麽多,比如你只需要100us,那麽就 TH0=(65536-100)/256;TL0=(65536-100)%256;即可。
虽然我看不懂你的公式是什么,但我这个是不会错的,你可以直接理解我的说法。

另外,你说减去后,是个很大的数,其实没必要转化成16进制。在C语言中,赋值是不需要转化的。
即赋16进制的数 TH0=0x10;是等价于 TH=16;只不过十六进制前面多了个0x,为的是告诉机器这是一个十六进制的数,没有规定非要16进制赋值才行。但一般就是习惯上,用16进制表达。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-12-07
th0 tl0对定时器来说就是一个无符号int型数(2字节),当定时器启动后,每12时钟周期加一,当等于65535时,产生定时中断。
int型数除256就是将其右移8位,取高八位,等同于>>8。
而余256就是取低8位,等同于 &0x00ff。
那个100就是定时时间,具体求时间就是时钟频率取倒数得到时钟周期,再乘以12,再乘以100。
第2个回答  2013-12-07
白的方法,很想知道这个。逃避很容