51_LanQiaoBei/模板/蓝桥杯全模块测试例程/超声波测距模块/Driver/Ultrasonic.c

56 lines
1.0 KiB
C
Raw Permalink Normal View History

2025-04-13 01:02:19 +08:00
#include "Ultrasonic.h"
#include "intrins.h"
sbit Tx = P1 ^ 0;
sbit Rx = P1 ^ 1;
void Delay12us(void) //@12.000MHz
{
unsigned char data i;
_nop_();
_nop_();
i = 33; // 38
while (--i)
;
}
void Ut_Wave_Init()
{
unsigned char i;
// <20><><EFBFBD><EFBFBD>8<EFBFBD><38>40kHz<48>ķ<EFBFBD><C4B7><EFBFBD>
// f=40kHz->T=1/f=0.000025s=25us
// 12.5us 1 12.5us 0
for (i = 0; i < 8; i++)
{
Tx = 1;
Delay12us();
Tx = 0;
Delay12us();
}
}
unsigned char Ut_Wave_Data()
{
unsigned int time;
CH = CL = 0; // <20><><EFBFBD><EFBFBD>PCA<43>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
CCON = 0; // <20><>ʼ<EFBFBD><CABC>PCA<43><41><EFBFBD>ƼĴ<C6BC><C4B4><EFBFBD>/PCA<43><41>ʱ<EFBFBD><CAB1>ֹͣ/<2F><><EFBFBD><EFBFBD>CF/
EA = 0; // <20>ر<EFBFBD><D8B1><EFBFBD><EFBFBD>ж<EFBFBD>
Ut_Wave_Init(); // <20><><EFBFBD>ͳ<EFBFBD><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>
EA = 1; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
CR = 1; // PCA<43><41>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
while (Rx && !CF) // TF1
; // <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD>
CR = 0; // PCAֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
if (CF == 0)
{
time = CH << 8 | CL; // <20><>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>
// L=V*T/2
return (time * 0.017); // <20><><EFBFBD>صĵ<D8B5>λ<EFBFBD><CEBB>cm
}
else
{
CF = 0;
return 0;
}
}