51单片机的定时器问题

51单片机
STC 89c52RC 的芯片,晶振频率 11.0592MHZ
使用定时器 0,设置精确的任意时间间隔 T(比如:1秒,2秒等)
TH0 和 TL0 如何初始化?
void timer0() interrupt 1
{
TH0 = ?
TL0 = ?
regist++;
}

请高人给出 这一段 以及 在主函数中对应的 C语言 程序
我需要一个能定任意时间间隔的通式,而不是某个具体问题的程序
最好能给出TH0,TL0的值是如何算出来的讲解

如果是 11.0592MHZ 真的没有办法精确到一秒么? 如果不能,那按照12计算,最后的间隔是大了还是小了?

假设要求50ms中断,求定时器初值。
晶振11.0592M,每个机器周期时间为:t=12×(1/11.0592M) 单位:us
50ms所需机器周期为:50×1000÷t=46080
那么需要初值为:
0xFFFF-46080=65535-46080=19456=0x4C00
因此,置初值为TH=0x4c,TL=0x00,经过46080个指令周期,计数器将产生50ms定时中断。

如果需要1秒
则连续20次上述中断即可达到
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-04-07
使用11.0592MHz的晶振频率,定时的初始值较难控制。
如果使用12MHz的晶振,其基本的时间单位是1us,精确定时到整数的us、ms、以及多少秒,都是可以实现的。

任意时间间隔的通式,还是没有的,定时短的几十微秒,长的几天,不可能有个通式。
第2个回答  2010-01-04
void timer0() interrupt 1
{
TH0=0x3C;
TL0=0xB0;//一次中断就是50ms,12M晶振
count++;
if(count==20)//更改,可以实现其他时间
{SEC++;count=0;}//20次中断,就是50*20=1000ms=1s
}

有软件专门帮你计算的,什么懒人C51之类的,或者51单片机定时器计算。
12M晶振下,定时器最多定时长度在毫秒级,再长就要用上面的方法累计定时了。

TH0,TL0的值是如何算出来
单片机教材都讲了的,可以找来看看。

按照12计算,最后的间隔是大了还是小了?
晶振频率增加了,时间会少。如果想真正的精确,51单片机并不好做,用汇编可以精确点,多跑几天就看得出误差了。
第3个回答  2010-01-04
11059200÷12=921600

921600÷3=307200

307200÷3=102400

102400÷51200=2

所以要定时1s就很简单了,比如TH0:TL0的值等于51200,那么中断2×3×3=18次就是1s。如果初值为512×2×3×3=9216,则一次中断为10ms。

还有很多组合方法!
第4个回答  2010-01-04
对的,二楼的说法较为常用的.
相似回答