使用hc-sr04模块连接了单片机,程序也正常烧录了,在没有连接trig时已经可以正常测距,且测出来的距离都正确,我是通过串口通信的方式使用printf打印。但是连接了trig后就无法进行测距,也是不打印了是怎么回事呀?研究了一天了。
#include <intrins.h>
#include <stdio.h>
#include <reg52.h>
sbit Trig = P1^0;
sbit Echo = P1^1;
unsigned int time = 0;
unsigned int S = 0;void delayms(unsigned int time){ unsigned int i,j; for(i=0;i<110;i++) for(j=0;j<time;j++);
}
void Timer0_Init()
{ TMOD &= 0xf0; //清空定时器0 TMOD |= 0x01; //设置定时器0为方式一 TH0 = 0; TL0 = 0; TR0 = 0; EA = 1; ET0 = 1;
}void Uart_Init()
{ SCON = 0x50; //01010000 TMOD &= 0x0f; //清空定时器1 TMOD |= 0x20; //00100000 设置定时器T1为方式一 TH1 = 0xfd; //设置波特率为9600 TL1 = 0xfd; TR1 = 1; TI = 1;}void StartModule() //启动模块 { Trig = 1; nop(); nop(); nop(); nop(); nop(); nop(); nop(); nop(); nop(); nop(); nop(); nop(); nop(); nop(); Trig = 0; }void Count(){ while(!Echo); TR0 = 1; while(Echo); TR0 = 0; time = TH0*256 + TL0; time = 12/11.0592; //单片机晶振频率为11.0592所以需要乘上12、11.0592 S = time0.017; //计算出厘米 TH0 = 0; TL0 = 0; printf("distance: %dcm\n",S);}void main(){ unsigned int i =0; Timer0_Init(); Uart_Init(); while(1) { StartModule(); Count(); delayms(500); } }
请查看hc-sr04模块的使用手册,trig引脚连接的话是需要输入一个至少10us的高电平方波用来出发超声波模块产生超声波的,否则该模块不会工作。