串口1 9600 8 1 N
串口2 9600 8 1 E
串口2向串口1发送数据,由于一些原因 串口1无法改成偶校验接收,所以接收到的数据很混乱
串口1接收到的乱数据 01 03 11 26 D8 75 03 8A 08 6C FF 
串口1接收到的正常数据 01 03 04 03 0B 06 8A 09 B2 感觉可以通过位操作把偶校验的数据转化成无校验的数据,但不知道如何转化。

解决方案 »

  1.   

    MARK下
    听了高手讲解,我还是不明白,如何逆向法呢?
      

  2.   

    如果你对传的两个设备是pc的话,那肯定是你的串口配置不一样,比如波特率,奇偶校验位,如果不是两台pc互传可能你的设备有问题,我原理遇到跟你差不多的情况,结果发现是单片机的晶振接错了
      

  3.   

    服务端 <-------------> 串口1设备 <------------->串口2设备串口1设备只负责数据转发功能。
    他们之间通讯使用modbus协议。
    modbus协议本身是带校验的。
    如果说无校验串口往有校验串口发送数据会有丢失,那串口2设备的crc校验就不会正确,串口2设备就不会返回任何数据。
    现在的情况是串口2返回了数据,不过数据很乱。
    我按照sudianbo所说的方式尝试的改了改,感觉改的不对。可能是改的方法有问题
      

  4.   

    能不能把设备的code反汇编后改串口设置?
      

  5.   

    转换成2进制,每读取9bit数据,向右做一次位移存储*16+ 下次读取的
      

  6.   


    设你发送十六进制数位数为2N,
    则接受的比特位是N*9
    第一次把带校验位的数据和 0X1FE 左移(N-1)*9后相与,再向右(N-1)*9+1位。
    。。2                                2                    2

    n。。                n              
    然后再把第一次的到的数据*16+ 下次得到的
    转成16进制数应该就是的,一个笨办法,不知道对不对,