第一次接触RTU,用S52的片子,程序基本功能写好以后,只要加上奇偶校验就出问题,例如我接受到上位机的指令00 03 00 00 00 01 crc,加上奇偶校验的程序不是没反应就是应答为00 03 00 00 00 3F CRC,总是不对,我的这部分程序是借鉴网络上的的代码,如下:
if(RI)
{
RI=0;T
receBuf[receCount]=SBUF; //接收数据
receCount++;
if(receCount==8)command_ok=1;
commCount=receCount;
ACC=receBuf[receCount];
//以下进行奇偶校验
if(P!=RB8) js_check=2;
receCount&=0x0f;
dwIntTick=0;TR0=1;//接收完数据,启动接收计时,检测是否停顿超过1.5个字符时间停顿!
}
检验校验部分如下:
js_CRC=receBuf[7]+(receBuf[6]<<8);
if((receBuf[0]==0x0b)&&(js_CRC==crc_z))//是否发给本机,并CRC正确?
{
if(js_check==1)//奇偶校验正确?
{ 相应的操作}
只要加上奇偶校验和检测马上出问题,反馈和接受都不行 |