(C语言的)
TH0=(65536-100)/ 256
TL0= (65536-100) % 256是什么意思
256与什么有关?
256怎么得出的?
TH0= TL0= 如果用16进制表示也是同样的意思吗?
初始值计算公式是什么?
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进制表达。