51_LanQiaoBei/题目/真题/13 第十三届国赛_左岚/第十三届国赛/Driver/ultrasound.c

51 lines
1.0 KiB
C
Raw Permalink Normal View History

2025-04-13 01:02:19 +08:00
#include <ultrasound.h>
#include "intrins.h"
sbit Tx = P1 ^ 0;
sbit Rx = P1 ^ 1;
void Delay12us() //@12.000MHz
{
unsigned char i;
_nop_();
_nop_();
i = 38;
while (--i)
;
}
void Ut_Wave_Init()
{
unsigned char i;
for (i = 0; i < 8; i++)
{
Tx = 1;
Delay12us();
Tx = 0;
Delay12us();
}
}
unsigned char Ut_Wave_Data() // 超声波距离读取函数
{
unsigned int time; // 时间储存变量
TMOD &= 0x0f; // 配置PCA工作模式
TH1 = TL1 = 0; // 复位计数值 等待超声波信号发出
Ut_Wave_Init(); // 发送超声波信号
TR1 = 1; // 开始计时
while ((Rx == 1) && (TF1 == 0))
; // 等待接受返回信号或者定时器溢出
TR1 = 0; // 停止计时
if (TF1 == 0) // 定时器没有溢出
{
time = TH1 << 8 | TL1; // 读取当前时间
return (time * 0.017); // 返回距离值
}
else
{
TF1 = 0; // 清除溢出标志位
return 0;
}
}