这个是我在多路温湿度控制系统中用到的接收方法,Rs485方式的
如果想采用Rs485的朋友也可以参考一下
#define FRAME_HEAD 0x24
uchar RxBuf[7];
volatile bit DataOK=0;
// RxBuf0 1 2 3 4 5
// |HEAD|ID|CMD|TEMP|HUMI|CKSUM1|
//static uchar *PRecCheckSum=(uchar *)&RxBuf[5];
static volatile uchar RxWrIdx=0;
//串口接收中断函数
void serial () interrupt 4 using 3
{
if(RI && !DataOK)
{ uchar ch;
RI = 0;
ch=SBUF;
if(RxWrIdx==0 && ch!= FRAME_HEAD) return; // 这里保证收到帧头
RxBuf[RxWrIdx]=ch;
RxWrIdx++;
if(RxWrIdx>=6) // 这里是收完
{
RxWrIdx =0;
if(RxBuf[5]==(RxBuf[1]+RxBuf[2]+RxBuf[3]+RxBuf[4])&& RxBuf[1]==myID)
DataOK=1;
}
}
}
在主循环中
while(1)
{
if(DataOK)
{
RxCMD = RxBuf[2];
TempWant = RxBuf[3];
HumiWant = RxBuf[4];
if(!(TempWant||HumiWant)) GetTempHumi();
SendData(0);
DataOK =0;
}
...
...
}
void SendData(uchar TxCMD)
{
TxBuf[2] = TxCMD;
TxBuf[3] =Temp;
//TxBuf[3] = TempWant+2;
TxBuf[4] =Humi;
//TxBuf[4] = HumiWant+2;
TxBuf[5]=TxBuf[1]+TxBuf[2]+TxBuf[3]+TxBuf[4];
RS485 = Tx;
del_1ms(10);
SendBytes(TxBuf,6);
del_1ms(10);
RS485 =Rx;
}