56 lines
1.0 KiB
C
56 lines
1.0 KiB
C
#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;
|
|
// 发送8个40kHz的方波
|
|
// 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; // 清空PCA寄存器计数值
|
|
CCON = 0; // 初始化PCA控制寄存器/PCA定时器停止/清除CF/
|
|
|
|
EA = 0; // 关闭总中断
|
|
Ut_Wave_Init(); // 发送超声波驱动信号
|
|
EA = 1; // 开启总中断
|
|
CR = 1; // PCA开始计数
|
|
while (Rx && !CF) // TF1
|
|
; // 等待接收
|
|
CR = 0; // PCA停止计数
|
|
if (CF == 0)
|
|
{
|
|
time = CH << 8 | CL; // 单位为毫秒
|
|
// L=V*T/2
|
|
return (time * 0.017); // 返回的单位是cm
|
|
}
|
|
else
|
|
{
|
|
CF = 0;
|
|
return 0;
|
|
}
|
|
} |