我正在为 PIC18f2520 开发一个简单的 HC SR04 代码,用于接收以厘米为单位的值。情况是,我收到了错误的值,而不是随着近似值而改变。传感器给出没有意义的值。我正在使用一个内部晶体 8Mhz,一个具有 16 位、1:8 预分频器和 TMR1CS = 0 = 内部时钟 (FOSC/4) 的 TIMER1。ms和us的延迟是编译代码。TRIGER 引脚为 RA2,ECHO 引脚为 RA5。有人可以帮助我吗?
#define TRIG RA2
#define echo RA5
void main(void)
{
unsigned char duraca=0,duraca1=0,duraca2=0,duraca3=0;
unsigned char distanci=0;
int i;
Config_micro();
serialBegin();
TRIG=0;
TMR1L=0;
TMR1H=0;
while(1)
{
TRIG=1;
DelayUs(10);
TRIG=0;
while(echo==1);
TMR1ON = 1;
while(echo==0);
TMR1ON = 0;
duraca1=(TMR1L+(TMR1H<<8));
duraca2=(duracao1<<2);
distanci=((duraca1)/58);
printf("distancia: %2d cm\n\r",distanci);
__delay_ms(90);
__delay_ms(90);
__delay_ms(90);
}
}