调试超声波测距程序时,由测得的时间计算距离时发生错误,单片机程序如下:
#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; //启动计数
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;就对了*/
|