当前位置: 代码迷 >> 单片机 >> modbus协议RTU模式下加上奇偶校验就不能通讯
  详细解决方案

modbus协议RTU模式下加上奇偶校验就不能通讯

热度:34   发布时间:2016-04-28 15:03:26.0
求助modbus协议RTU模式下加上奇偶校验就不能通讯
跪求各位路过的牛人,神人,超神给我指条明路吧,兄弟我第一次接触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)//奇偶校验正确?
        { 相应的操作}
只要加上奇偶校验和检测马上出问题,反馈和接受都不行,求牛人帮帮我,江湖救急啊
------解决方案--------------------
兄弟,你这代码看不懂啊。贴就贴全了。crc_z 哪来的?js_check 什么时候是1?
一般奇偶校验在硬件做,还要注意通讯另一端要作相应设置
------解决方案--------------------
奇偶校验有硬件完成,不需要软件检测!
在硬件设定时选择就可以了,如8E1或8O1,否则是8N1
画蛇添足!
------解决方案--------------------
modbus 协议有他的帧格式,是没有奇偶校验位的,这个不能随便改
  相关解决方案