//11.0592MHz 10mS重载值(65536-9216)
#define T_RELOAD_ (65536-9216)
#define T_RELOAD_LO (T_RELOAD_ & 0x00FF)//等于0
#define T_RELOAD_HI (T_RELOAD_ >> 8)
//T_RELOAD_LO为0,代码如下.
void T0_int(void) interrupt 1
{
TH0 = T_RELOAD_HI;
//代码
}
//12MHz 10mS重载值(65536-10000)
#define T_RELOAD_ (65536-10000)
#define T_RELOAD_LO (T_RELOAD_ & 0x00FF)//等于240
#define T_RELOAD_HI (T_RELOAD_ >> 8)
//T_RELOAD_LO不为0,代码如下.
void T0_int(void) interrupt 1
{
unsigned int i;
TR0 = 0;
i=T_RELOAD_+15+(TL0|(TH0<<8));
//修正值15是T0由关闭到开启的机器周期数.要看汇编代码调整.
TL0=(unsigned char)i;
TH0=(unsigned char)(i>>8);
TR0 = 1;
//代码
}
上述2段代码都能实现精确定时,无累积误差.可以看出,使用11.0592M晶振代码更简单,效率更高.
|