蓝桥杯----超声波

(一)、超声波

1、原理(图 一)

发送信号阶段:单片机通过翻转发送的引脚P1^0,发送8个40MHZ的方波,此时开始计时。

等待接收信号:通过单片机的接收引脚P1^1检测,未接收到信号时,引脚处于高电平1;接收到信号时,引脚处于低电平0,此时停止计时。如果距离过远的话,定时器会超出计时的范围,数据溢出,成为一个无效的数据。

计算距离:我们通过计算发送与接收之间的时间间隔,再利用数学公式Distance=v * t/2 (v代表声速340m/s ,v*t代表来回的距离,除2后就是要测量的距离),注意此时我们的单位是cm,而且测量的t单位为us,所以还需Distance还需 *103*10-6,换算成最终公式Distance = 0.017 * t (单位cm)

图 一 单片机超声波原理

2、代码解读

图 二 前置工作:开始需要引用头文件,_nop()函数需要定义INTRINS.h,要生成40MHZ方波,通过计算可知周期为25us。注意此时i = 33可以进行少许修改33-37都可以试试,哪个数据更加稳定就用哪个。

图 二 超声波代码解读(前置阶段)

图 三 初始化工作:产生8个40MHZ方波,方波占空比为50%,占空比是高电平在一个周期中所占时间比,因此可以先拉高引脚,12us后再拉低引脚。stc-isp无法生成12.5us精度的延时,所以可以通过现象试一试12us、13us哪一个更适合。

图 三 超声波代码解读(初始化阶段)

图 四做完准备工作后,就可以开始写测距的函数啦,这里我们用PCA计数器来计时。51单片机本身计时器比较少,定时器0需要用于显示功能扫描,定时器可能用于NE555频率获取,定时器2一般用于串口,当然,超声波也可以用定时器1。CMOD=0x00就是初始化PCA计数器,CL = CH = 0就是让它高八位与低八位为0。

超声波代码解读(测距阶段)

附参考底层代码

cs 复制代码
#include <STC15F2K60S2.H>
#include <INTRINS.h>

sbit Tx = P1^0;
sbit Rx = P1^1;


void Delay12us(void)	//@12.000MHz
{
	unsigned char data i;

	_nop_();
	_nop_();
	i = 36;    //注意根据获取数据稳定性作修改
	while (--i);
}

void Ultra_Init(void)  //发送8个40HZ方波
{
	unsigned char i;
	EA = 0;   
	for(i = 0;i<8;i++)
	{
	Tx = 1;
	Delay12us();
	Tx = 0;
	Delay12us();
	}
	EA = 1;
}

unsigned char Ultra_Distance(void)
{
	unsigned int Time;   //注意为int类型数据
	CMOD = 0x00;         //启动外部定时器
	CH = CL = 0;         //清空高八位与低八位
	
	Ultra_Init();
	CR = 1;   //初始化发送后开始计时
	while((Rx == 1) && (CF == 0)); //等待返回波或者距离太远跳出循环
	CR = 0;   //停止计时
	
	if(CF == 0)  //计时变量没有超限
	{
	Time = (CH<<8)|CL;
	return Time*0.017;  //正常返回数据
	}
	else         //计时变量超限
	{
		CF = 0;  //手动拉低标志位重新开始计时
		return 0;
	}
}
相关推荐
艾芯微科技23 分钟前
SKY13370‑374LF|0.5‑6GHz SPDT 射频开关,WLAN/LTE 射频前端实用器件
网络·单片机·嵌入式硬件·集成测试·51单片机
jianqiang.xue2 小时前
收官:从v0.1到“研发新常态“,一套嵌入式智能体的落地与边界
stm32·单片机·物联网·架构·esp32
天空'之城2 小时前
单片机基础核心知识点汇总(三十)
单片机·嵌入式硬件
笨笨饿2 小时前
#137_死机恢复现场_Armino平台AP系统swd调试
git·python·stm32·单片机·嵌入式硬件·物联网·vim
linnux领域2 小时前
面包板供电“插哪都不亮“?一个暗断点引发的排查——硬件新手三板斧
单片机·嵌入式硬件·esp32·arduino·面包板·硬件入门
学linux的QQ蛋5 小时前
吃透传输层:UDP 无连接、TCP 可靠传输、套接字函数、粘包问题详解
单片机·tcp/ip·udp
单片机仿真设计6 小时前
基于 51 单片机老旧电梯层门防夹人装置优化设计(Proteus 仿真)
单片机·嵌入式硬件·proteus
wuyk5559 小时前
104.C 语言字节对齐:从底层原理到工程实践的完整指南
c语言·开发语言·stm32·单片机·嵌入式硬件
新晨单片机设计16 小时前
S006A-基于STM32单片机温湿度检测系统【Proteus仿真+Keil程序+原理图】
stm32·单片机·proteus
逐步前行18 小时前
ESP32-S3-分区表(Partition Table)
单片机