单片机定时器计算?

#define TIME_PER_SEC 200 //定义任务时钟频率,200Hz
#define CLOCK 22118400 //定义时钟晶振,单位Hz
//定时器0初始化
void timer0_init(void)
{
unsigned char i;
for(i=0;i<MAX_TASK;i++) task_delay[i]=0; //任务延时量清零
TMOD = (TMOD & 0XF0) | 0X01; //定时器 0工作在模式 1, 16Bit定时器模式
TH0 = 255-CLOCK/TIME_PER_SEC/12/256;
TL0 = 255-CLOCK/TIME_PER_SEC/12%256;
TR0 =1;
ET0 =1; //开启定时器和中断
}
从TH0和TL0计算出的延时时间是多少啊?

第1个回答  2013-10-12
计算定时器,最原始的公式是(65536-初值)*12/晶振值=定时的时间,由此式子推出:初值=65536-(晶振值*定时时间/12)。则TH0=初值/256,TL0=初值%256,最终结果就是
TH0 = 255-CLOCK/TIME_PER_SEC/12/256;
TL0 = 255-CLOCK/TIME_PER_SEC/12%256;
其中除以TIME_PER_SEC,是因为TIME_PER_SEC表示要定时的时间的倒数。
第2个回答  2016-01-06
 一、计算:
  1.晶振12M
  12MHz除12为1MHz,也就是说一秒=1000000次机器周期。10ms=10000次 机器周期。 65536-10000=55536(d8f0) TH0=0xd8,TL0=0xf0
  2.晶振11.0592M
  11.0592MHz除12为921600Hz,就是一秒921600次机器周期,10ms=9216次机器周期。

  二、参考资料:
  http://wenku.baidu.com/link?url=NKwBgYZhresxh_H7Vr7wjRFmuwXwIvhK70DjBd0Alt7MT1oBdQvrm85WbXSQej3m2qwlYyoc4XbeNx0bY8-930MYa9hBU01VnlRtftho3FG
第3个回答  推荐于2017-12-16
TH0 =( 255-CLOCK/TIME_PER_SEC/12)/256;
TL0 = (255-CLOCK/TIME_PER_SEC/12)%256;
这个地方应该有括号,TH0=(255-22118400/200/12)/256
其中22118400/200这个代表所使用的晶振是多大的,这里使用的是11.0592mhz的。然后除以12是代表12分频, 这里给个公式给你 a=-T*f/12 其中a为记数初值,T为定时间隔,f为晶振mhz,-T代表无符号的意思!本回答被提问者采纳
第4个回答  2012-07-07
th0 = (255-22118400/200/12)/256 = 2;
TL0 = (255-22118400/200/12)%256=6