📄 serial.c
字号:
#include <at89x51.h>
#include "serial.h"
#include "function.h"
#define MAXCMDSIZE 20
typedef unsigned char uchar;
typedef unsigned int uint;
unsigned char SerialCmd[20],SerialRet[10];
bit SerialReq;
void Send(unsigned char * s,int len)
{
int i;
ES=0;
REN=0;
for(i=0;i<len;i++)
{
SBUF=s[i];
while(!TI){}
TI=0;
}
REN=1;
ES=1;
}
void SendAddr(bit success)
{
ES=0;
REN=0;
if(success)
SBUF=DEVICE_ID;
else
SBUF=0;
while(!TI){}
TI=0;
REN=1;
ES=1;
}
unsigned char CheckSum(unsigned char * c)
{
unsigned char len,checksum,i;
len=c[0];
checksum=0;
for(i=0;i<len;i++)
checksum=checksum^c[i];
if(checksum==0xff)
checksum=0xfe;
return checksum;
}
bit ProcessCmd()
{
bit success=1;
ES=0;
if(CheckSum(SerialCmd)!=SerialCmd[SerialCmd[0]])
{
SendAddr(0);
SerialReq=0;
ES=1;
return 0;
}
switch (SerialCmd[1])
{
case CMD_PING:
SerialRet[0]=0;
break;
case CMD_ENABLE_MANUAL_CON:
if(!SetManCon(1)) success=0;
break;
case CMD_DISABLE_MANUAL_CON:
if(!SetManCon(0)) success=0;
break;
case CMD_QUERY_ROOM:
if(!GetRoom()) success=0;
break;
case CMD_QUERY_DATA:
if(!GetData()) success=0;
break;
case CMD_SET_MANUAL_CON_TIME:
if(!SetManTime()) success=0;
break;
case CMD_CON_LIGHT:
if(!SetLight()) success=0;
break;
case CMD_CON_AIRCON:
if(!SetAirCon()) success=0;
break;
case CMD_ADJ_TIMER:
if(!SetTime()) success=0;
break;
case CMD_SETTIMER_LIGHT: break;
case CMD_SETTIMER_AIRCON: break;
case CMD_SETTIMER_POWER: break;
}
if(success)
{
SendAddr(1);
if(SerialRet[0]>0)
{
Send(SerialRet,SerialRet[0]+1);
}
}
else
{
SendAddr(0);
SerialReq=0;
ES=1;
return 0;
}
SerialReq=0;
ES=1;
return 1;
}
void Serial_ISR () interrupt 4
{
static unsigned char tlen,len,state;
if (!RI) {RI=0;TI=0;return;}
if(SBUF==0xff && SerialReq==0)
{
state=1;
tlen=0;
len=0;
RI=0;TI=0;
return;
}
switch (state)
{
case 0:
break;
case 1:
if(SBUF==DEVICE_ID)
state=2;
else
state=0;
break;
case 2:
len=0;
tlen=SBUF;
if(tlen>MAXCMDSIZE)
tlen=MAXCMDSIZE;
SerialCmd[0]=tlen;
state=3;
break;
case 3:
len++;
SerialCmd[len]=SBUF;
if(len>=tlen)
{
tlen=0;
len=0;
state=0;
SerialReq=1;
}
}
RI=0;TI=0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -