我写的一个程序,需要读取TH0,TL0的值,用time=256*TH0+TL0;可正确读取,而用time|=TH0; time<<=8; time|=TL0;却不能。具体情况如下。
外部中断0和定时器0初始化:
P3=0;
TMOD=0x09;
TH0=0;
TL0=0;
IT0=1;
EA=1;
EX0=1;
TR0=1;
外部中断0服务函数:
void int0() interrupt 0
{
// time|=TH0;
// time<<=8;
// time|=TL0;
time=256*TH0+TL0;
// time_l=TL0;
// time_h=TH0;
// time|=time_h;
// time<<=8;
// time|=time_l;
TH0=0;
TL0=0;
}
我是测试HC-SR04超声波模块,它的输出脚接在P32,会输出一个脉冲,我就是要计算这脉冲的高电平时间。
设定了定时器0的GATE位为1,当P32的高电平开始时,TH0,TL0开始计数,当高电平结束时,产生负跳变,进入中断服务函数,计算时间。
以上就是程序的思路。
问题在于,如果用time=256*TH0+TL0;计算时间,得到的值符合实际,time的值为几百;而如果用此语句的上面三句,或者下面四句(见上面中断服务函数)来计算时间,得到的值不符合实际,time的值为几万。
请各位前辈指点一下,为何会这样? |