读取TH0,TL0的值的问题

2012年08月31日 11:45    发布者:风溪香士
我写的一个程序,需要读取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的值为几万。
请各位前辈指点一下,为何会这样?

网友评论

123654789 2012年09月04日
用time=256*TH0+TL0;可正确读取,而用time|=TH0;   time<<=8;   time|=TL0;却不能。具体情况如下。


纯粹是C语言的问题

因为time在使用之前不为0
那么你执行time|=TH0;语句就不能覆盖原来的数值
假如 time在使用之前是等于0x3
      TH0=0X50;
你执行time|=TH0;
那么time就等于0x53
但是你实际上是想要time=0x50
那么你就把time原来的数值携带了进来