我寫的一個程序,需要讀取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的值為幾萬。
請各位前輩指點一下,為何會這樣? |