超声波本质,8个40KHz的方波
#ifndef ___Ultrasonic_H__
#define ___Ultrasonic_H__
#include <stc15f2k60s2.h>
void Timer0Init(void);
unsigned char Wave_Recv(void);
#endif
--------------------------
#include "Ultrasonic.h"
void Timer0Init(void) //12微秒@12.000MHz
{
AUXR &= 0x7F; //定时器时钟12T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0xF4; //设置定时初值
TH0 = 0xFF; //设置定时初值
TF0 = 0; //清除TF0标志
TR0 = 0; //定时器0先不计时
}
unsigned char Wave_Recv(void)
{
unsigned char Wave_Num = 10;
unsigned char Dist;
//超声波的发送
Tx = 0; //发射置0,初始化
TL0 = 0xF4; //设置定时初值
TH0 = 0xFF; //设置定时初值
TR0 = 1; //定时器0计时
//TX引脚发送40KHz方波信号驱动超声波发送探头
while(Wave_Num--)
{
while(!TF0);
Tx^=1; //占空比0.5产生方波,信号发送
TF0 = 0;
}
//超声波的接收
TR0 = 0; //关掉定时器为了重装
TL0 = 0;
TH0 = 0;
TR0 = 1;
while(Rx && (~TF0)); //当还未接受到信息时,即Rx=1,TF=0.当有一个变化时,跳出循环
TR0 = 0 ; // 关闭定时器,让计时定格
if(TF0 == 1)
{
Dist = 255; //数据溢出了
TF0 = 0;
}
else
{
Dist = ((TH0<<8) | TL0) * 0.017); //m
}
return Dist;
}