原理介绍
发射电路
接收电路
跳线帽
1. 使用超声波模块时跳线帽的连接方式
1-3 P10控制超声波发射
2-4 P11控制超声波接收
2. 超声波发射后若遇到物体即返回RX(即P11)接收到返回的超声波后为低电平
3. 超声波的频率要为40khz即一个周期为25us
例程
测距程序
void get_distance()
{
send_wave(); //发射声波
TR1=1; //开始计时
while(TF1==0&&RX==1); //等待声波返回或定时器1溢出
TR1=0; //关闭定时器
if(TF1==1&&RX==1) //定时器溢出
{
distance=999;
TL1 = 0x00; //清零
TH1 = 0x00;
TF1=0; //注意不要忘了清零
}
if(TF1==0&&RX==0) //检测到声波
{
time=(TH1<<8)+TL1; // 这是定时器的计数次数,注意设置的是1T还是12T
distance=time*0.017;
TL1 = 0x00; //清零
TH1 = 0x00;
}
}
·
·
定时器1初始化
void Timer1Init(void)
{
TMOD= 0x00; //设置定时器模式,这里顺便把定时器0,1都设置了
TL1 = 0x00; //设置定时初值
TH1 = 0x00; //设置定时初值
TF1 = 0; //清除TF1标志
TR1 = 0; //定时器1先不开始计时
}
.
.
发送八个周期为25us的超声波
void send_wave()
{
int i;
for(i=0;i<8;i++)
{
TX=0;
Delay12us();
TX=1;
Delay12us();
}
}
.
.
延时大约12.5us
void Delay12_5us() //@11.0592MHz
{
_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();
_nop_();_nop_();
}