超声波模块测距

超声波接收器:当接收到一段40KHz的频率时,会在第7角(N_B1)产生一个低电平下降脉冲。

N_A1==P10 N_B1==P11

步骤:(根据超声波只能接收40KHz的脉冲频率下手

  1. 利用定时器由超声波发送引脚发出一段40KHz左右的频率脉冲
  2. 重新给定时器赋初值,超声波接收器等待接收由超声波发送引脚发出的40KHz的频率脉冲,并会在第7角(N_B1)产生一个低电平下降脉冲。
//定时器初始化(12us计时)
//函数参数:定时器1初始化
//入口参数:无
//返回值:无
//函数功能:设置系统频率为 12.000MHz,设置定时时长为 12us, \
            定时器模式为 16 位自动重载(模式0),定时器时钟分频为 12T( FOSC/12)\
            用于超声波发送器发出特定的40KHz的脉冲频率。
void Timer0_Init(void)		//12微秒@12.000MHz
{
	AUXR &= 0x7F;		//定时器时钟12T模式,单片机系统时钟为12MHz
	TMOD &= 0xF0;		//设置定时器模式
	TL0 = 0xF4;		//设置定时初始值
	TH0 = 0xFF;		//设置定时初始值
	TF0 = 0;		//清除TF0标志
    
	TR0 = 0;		//定时器0开始计时
}
//超声波模块测距
#include <STC15F2K60S2.H>

sbit TX = P1^0;             //发送引脚
sbit RX = P1^1;             //接收引脚


unsigned char Read_ultrasonic(void)
{
    unsigned char ucDist,Num = 10;
    
    TX = 0;
	TL0 = 0xF4;		//设置定时初始值
	TH0 = 0xFF;		//设置定时初始值,产生12us计数

    TR0 = 1;		//定时器1开始计时    
    
    while(Num--)//发送一段40KHz左右的脉冲信号
    {
        while(!TF0);//溢出标志位
        TX ^= 1;//电平反转
        TF0 = 0;//清除定时器0标志位
    }
    TR0 = 0;        //暂停定时器0
    TL0 = 0;		//重新设置定时初始值
	TH0 = 0;		//重新设置定时初始值
    TR0 = 1;        //开启定时器0
    
    while(RX && !TF0);//等待超声波接收器接收到一个40KHz的脉冲信号,或者是定时器0溢出
    TR0 = 0;        //立刻暂停定时器0定时计数
    if(TF0)         //判断是否是定时器0溢出导致的退出等待
    {
        TF0 = 0;    //清除定时器0标志位
        ucDist = 255;//返回一个最大无效值
    }
    else            //如果超声波接收器接收到了一个40KHz的脉冲信号,则计算距离
        ucDist = ((TH0<<8)|TL0)*0.017;//0.017是由"t(us)*0.000001将时间us转换成s,在*340得到距离单位是m
                                      //,在乘以100将单位m转换成cm,最后/2"得到单程距离;
    return ucDist;
}

 


有不妥之处,还请指出,如有补充,洗耳恭听。此笔记仅供参考,如若对你有所帮助,点个赞加个关注呗谢谢,最后祝愿你旗开得胜,金榜题名。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值