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

📄 comm.c

📁 单片机实现的遥控小汽车的设计研究论文与程序
💻 C
字号:
////////////////////////////////////////////////////////////////////////
//文件名:comm.c
//功能描述:主单片机的串口通信程序
////////////////////////////////////////////////////////////////////////
#include "reg52.h"
#include "comm.h"
#include "disp.h"
#include "msg.h"

data uchar temp_msg;

bdata bit flag_qianzhang=0; //前方有无障碍标志
bdata bit flag_houzhang=0;  //后方有无障碍标志
bdata bit flag_found=0;     //光源是否找到标志
data char source_degree; //光源方位
                          //小车正前方为0,左方为负,右方为正

//////////////////////////////////////////////////////////////////
//函数声明
void initcomm(void);    //初始化串口通信
uchar getqianzhang(void); //获取前方是否有障碍
uchar gethouzhang(void);  //获取后方是否有障碍
uchar testfound(void);    //获取是否找到光源的信息
int getsourcedegree(void); //获取光源的方位
void sendmsg(uchar msg);     //向从机发送一条命令
//////////////////////////////////////////////////////////////////
//串口中断处理函数
//主要负责接受
//使用高优先级
//接收到的数据格式为:若RB8=1,则此次接收到的是光源方位值
//若RB8=0,则此次接收到的是消息值

void comm(void) interrupt 4
{
        if(TI)
        {
               TI=0;
        }
        if(RI)
        {
                RI=0;
                temp_msg=SBUF;
                //led[0]=temp_msg; //测试用语句
                if(RB8) //接收到光源方位值
                {
                        flag_found=1;
                        source_degree=temp_msg;
                        led[2]=temp_msg>>4;  //测试用语句
                        led[3]=temp_msg&0x0f;//测试用语句
                        return;
                }
                else    //接收到其他消息
                {
                        switch(temp_msg)
                        {
                                case MSG_QIANZHANG:
                                     flag_qianzhang=1;
                                     return;
                                case MSG_HOUZHANG:
                                     flag_houzhang=1;
                                     return;
                                case MSG_NOQIANZHANG:
                                     flag_qianzhang=0;
                                     return;
                                case MSG_NOHOUZHANG:
                                     flag_houzhang=0;
                                     return;
                                case MSG_NOTFOUND:
                                     flag_found=0;
                                     return;
                        }
                 }

        }
}

/////////////////////////////////////////////////////////////////
//初始化串口通信
void initcomm(void)
{
        SCON=0x90;
        PCON|=0x80;
        ES=1;
        PS=1;
}

/////////////////////////////////////////////////////////////////
//获取前方是否有障碍
uchar getqianzhang(void)
{
        return flag_qianzhang;
}

////////////////////////////////////////////////////////////////
//获取后方是否有障碍
uchar gethouzhang(void)
{
        return flag_houzhang;
}
/////////////////////////////////////////////////////////////////
//获取是否找到光源的信息
uchar testfound(void)
{
        return flag_found;
}

/////////////////////////////////////////////////////////////////
//获取光源的方位
//正前方为0度
//左方为负值-180~0
//右方为正值0~180
int getsourcedegree(void)
{
        int temp;
        temp=source_degree;
        temp=temp*=18;
        temp/=13;
        return temp;
}

/////////////////////////////////////////////////////////////////
//向从机发送一条命令
void sendmsg(uchar msg)
{
        SBUF=msg;
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -