?? 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 + -