?? comport.c
字號:
///////////////////////////////////
//程序: 串口仿真調試演示 //
//文件: comport.c //
//功能: 串口事件處理、分析 //
// //
//作者: 邵子揚 //
//時間: 2006.3 //
//版本: 1.0 //
//修改: //
// 作者: //
// 時間: //
// 原因: //
//////////////////////////////////)
#include "common.h"
byte RTBuf[MAX_COM_BUF_SIZE];//串口緩沖區
fastram byte RTFlag, //串口狀態標志
RTLen, //串口數據長度
RTPtr; //串口收發指針
//串口發送
void ComSend()
{
if(RTPtr < RTLen) //數據未發完
{
WriteCom(RTBuf[RTPtr]); //發送下一個字節
RTPtr++;
}
else
{
StopComSend(); //停止發送
RTFlag = 0; //設置接收標志
}
}
//串口接收
void ComReceive(byte dat)
{
//正在處理數據中,不再接收
if (RTFlag > 1)
{
return ;
}
if (RTFlag == 0)
{
if (dat == FRAMEHEAD) //收到幀頭
{
RTBuf[0] = FRAMEHEAD;
RTPtr = 1;
RTFlag = 1;
RTLen = 5;
}
return ;
}
else
{
RTBuf[RTPtr] = dat;
RTPtr++;
if (RTPtr >= RTLen)//接收到足夠數據
{
RTFlag = 2;
return ;
}
if (RTPtr >= MAX_COM_BUF_SIZE)//意外處理命令超長
{
RTFlag = 0;
return ;
}
}
}
//串口分析
void ComAnalyse()
{
if(RTFlag != 2)return;
if(RTBuf[2] != 0x35)
{
RTFlag = 0;
return;
}
RTFlag = 3;
switch(RTBuf[1])
{
case 0x31:
P0 = 1;
break;
case 0x32:
P0 = 2;
break;
case 0x33:
P0 = 3;
break;
default:
RTFlag = 0;
return;
}
RTBuf[1] = RTBuf[1] + 0x80;
RTBuf[5] = RTBuf[4] + 1;
RTBuf[6] = RTBuf[4] + 2;
RTBuf[7] = RTBuf[4] + 3;
RTLen = 8;
RTPtr = 0;
LED = !LED; //發送數據指示
StartComSend();//啟動發送
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -