📄 chaoshengceju.c
字号:
////////////////////////////////////////////////////////////////////
//文件名:chaoshengceju.c
//功能描述:从单片机上超声测距任务
////////////////////////////////////////////////////////////////////
#include "reg52.h"
#include "INTRINS.H"
#include "chaoshengceju.h"
#include "timer0_s.h"
#include "comm_s.h"
#define NOP10() _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
#define NOP11() _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
sbit T_QIAN=P0^0; //前超声发射端
sbit T_HOU=P0^1; //后超声发射端
sbit RECEVE=P1^0; //超声接受端
sbit LED_QIAN=P0^7; //前方障碍指示灯
sbit LED_HOU=P0^6; //后方障碍指示灯
void trans_qian(void); //向前方发射超声波束
void trans_hou(void); //向后方发射超声波束
/////////////////////////////////////////////////////////////////
//探测前方障碍的距离
//若无障碍则返回0
void chaosheng_qian(void)
{
uint i;
i=1;
EA=0; //关中断
RECEVE=1;
trans_qian(); //向前方发射超声波束
//设置时间门,消除直接耦合
delay_100us(5);
while(1)
{
if(!RECEVE) //检测到回波,认为有障碍
{
EA=1;
sendmsg(MSG_QIANZHANG,0); //向主控单片机发送有障碍消息
LED_QIAN=0; //前障指示灯亮
return;
}
if(++i>50) //若在一定的时间内没有检测到回波,认为无障碍
{
EA=1;
sendmsg(MSG_NOQIANZHANG,0); //向主控单片机发送无障碍消息
LED_QIAN=1;
return;
}
}
}
/////////////////////////////////////////////////////////////////
//探测后方障碍的距离
//若无障碍则返回0
void chaosheng_hou(void)
{
uint i;
i=1;
EA=0;
RECEVE=1;
trans_hou();
//设置时间门,消除直接耦合
delay_100us(5);
while(1)
{
if(!RECEVE)
{
EA=1;
sendmsg(MSG_HOUZHANG,0);
LED_HOU=0;
return;
}
if(++i>50)
{
EA=1;
sendmsg(MSG_NOHOUZHANG,0);
LED_HOU=1;
return;
}
}
}
//////////////////////////////////////////////////////////////////
//向前方发射超声波束
//40KHZ,10个周期
//通过查看反汇编代码将每个周期调整为25us
void trans_qian(void)
{
uchar i;
for(i=10;i;i--)
{
T_QIAN=0;
NOP10();
T_QIAN=1;
NOP11();
}
}
//////////////////////////////////////////////////////////////////
//向后方发射超声波束
//40KHZ,10个周期
//通过查看反汇编代码将每个周期调整为25us
void trans_hou(void)
{
uchar i;
for(i=10;i;i--)
{
T_HOU=0;
NOP10();
T_HOU=1;
NOP11();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -