📄 comm.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 + -