📄 485通信程序.c
字号:
/************************************接收字节子程序返回值:串口接收到的字节************************************/uchar Receive_Data(void){ RI=0; while(!RI) { WDI=0;WDI=1;//清看门狗 } RI=0; ACC=SBUF; return ACC;}/*********************************************** 串口发送一个字节函数入口参数: 待发送数据************************************************/void Send_Data(uchar Serial_data){ TI=0; SBUF=Serial_data; while(!TI) { WDI=0;WDI=1;//清看门狗 } TI=0;}/************************************************接收一帧数据子程序入口参数:数组s,用于存储收到的数据返回值:若接收正确,返回真值;否则返回假**************************************************/bit Receive_One(uchar *s){ uchar CS=0x00,Serial_Data; uchar i; WDI=0;WDI=1;//清看门狗 RI=0; Serial_Data=SBUF; if(Serial_Data!=0xf1) return 0; do{ Serial_Data=Receive_Data(); }while(Serial_Data==0xf1); if(Serial_Data!=0x68) return 0; CS+=0x68; s[0]=Receive_Data();//发送来的数据长度也存储,便于转发 CS+=s[0]; WDI=0;WDI=1;//清看门狗 for(i=1;i<=*s;i++) { WDI=0;WDI=1;//清看门狗 *(s+i)=Receive_Data(); CS+=*(s+i); } if(CS!=Receive_Data()) return 0; if(Receive_Data()!=0xfa) return 0; if(s[2]!=Address)///判断是否是本检测分机地址号 return 0; return 1;}/*********************************************** 串口接收中断子程序功能: 接收来自PC机的数据包************************************************/void RXD_Int(void) interrupt 4 using 1{ if(RI) CY=Receive_One(Data_Buffer); if(CY) { Command_Send=true; }}/*********************************************** 串口发送一帧数据子程序入口参数:待发送的数据帧,保存在数组s中************************************************/void Send_One(uchar *s){ uchar CS=0x68; uchar i; WDI=0;WDI=1;//清看门狗 CTR_485=1; Send_Data(0xf1); Send_Data(0xf1); Send_Data(0x68); Send_Data(s[0]); CS=CS+s[0]; for(i=1;i<=s[0];i++) { WDI=0;WDI=1;//清看门狗 Send_Data(s[i]); CS=CS+s[i]; } Send_Data(CS); Send_Data(0xfa); CTR_485=0;}/*********************************************** 命令处理子程序收到PC机的命令后,形成数据帧并向PC发送入口参数:采集到的环境湿度值************************************************/void Send_RH(uchar RH){ uchar dat[10]; dat[0]=4; dat[1]=0x5a; dat[2]=Address; dat[3]=RH; Send_One(dat);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -