第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
对的,二楼的说法较为常用的.