⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chaoshengceju.c

📁 单片机实现的遥控小汽车的设计研究论文与程序
💻 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 + -