調試超聲波測距程序時,由測得的時間計算距離時發(fā)生錯誤,單片機程序如下:
#include <stc15.h>
void main()
{
unsigned int i;
unsigned long S;
unsigned int Time;
AUXR &= 0x7F; //定時器時鐘12T模式 12M晶振機器周期1us
TMOD &= 0xF0; //設置定時器模式
TL0 = 0x00; //設置定時初值
TH0 = 0x00; //設置定時初值
TF0 = 0; //清除TF0標志
TR0 = 0; //定時器0開始計時
ET0 = 0;
EA = 1; //使能
TR0=1; //啟動計數(shù)
for (i=0;i<500;i++); //模擬測量時間
TR0=0;
Time=TH0*256+TL0;
TH0=0;
TL0=0;
S=(Time*17)/1000; //計算距離(此計算結果不對,原因是S不能保存32位結果)
}
/*償試使用 S=((Time<<4)+Time)/1000;也不對
但使用 S=(_lrol_(Time,4)+Time)/1000;就對了*/
|