|
发表于 2012-9-1 15:27:41
|
显示全部楼层
本帖最后由 dadatou 于 2012-9-1 15:35 编辑
初看似乎像是数据类型溢出了,但仔细分析一下,20*1.84=36.8,即使是字符型,也应该不会溢出,所以可以排除数据类型错误的问题。
于是亲自用Keil试验了一下,楼主完全相同的代码,一个字不改,两种情况软件仿真得出的结果完全相同,TH1=0xFF,TL1=0xDC 没有用硬件去测试,到此两种情况下TH
的值相同,应该不可能出现定时器定时时间不同的情况。
有可能的一种情况是,我的编译器和楼主的版本不同,或者优化等级不同,楼主编译器优先等级太高,可能出现内存覆盖的问题,楼主尝试一下,将第二段代码的两
个表达式拆分,利用中间变量逐步计算。
uchar GATE_TIME = 20;
......
void INIT_T1(void)
{
uint Temp;
TMOD=0x11; //定时器模式
Temp=GATE_TIME*1.84;
TH1=(65536-Temp)/256;
TL1=(65536-Temp)%256;
ET1=1; //打开定时器1中断
TR1=1; //打开计数器1
EA=1; //开总中断
}
|
|