单片机定时时间怎么算,,下面程序的50ms是怎么算出来的啊。求过程

void InitTime(void)
{

TMOD=0x51;//T0为定时器工作于方式1,T1为计数器工作于方式1
TH0=0x4C;//定时器50ms赋高8初值 , 12M晶振
TL0=0x00;//定时器50ms赋低8初值 , 12M晶振
TR0=1;//开定时器1
TH1=0;//计数器赋高8初值初值
TL1=0;//计数器赋低8初值
TR1=1;//开计数器0
ET0=1;
EA=1;
}
void timeo(void) interrupt 1
{
TH0=0x4C;//定时器50ms赋高8初值
TL0=0x00;//定时器50ms赋低8初值
nm=nm+1;

if(nm==10)
{
TR1=0; //关闭T1定时器,定时1S完成
TR0=0;//关闭T0
}

12MHz晶振,经典51核是12分频,因此时钟周期为1μs。
50ms = 50000μs,因此定时器累加至溢出需要50000个周期。
因此65536 - 50000 = 15536 = 0x3CB0
因此TH0 = 0x3C,TL0 = 0xB0。

0x4C00这个初值对应的不是12MHz晶振,*而是11.0592MHz晶振。你抄错了。
温馨提示:答案为网友推荐,仅供参考
相似回答