看了网上的算法是这样的:
1、设置CRC寄存器,给其赋值0xffff;
2、将待校验数据的第一个字节(8bit)与16位CRC的低字节进行异或操作,结果存入CRC寄存器;
3、CRC寄存器向右移一位,MSB补零,移出并检查LSB;
4、如果LSB为0,重复第三步;若LSB为1,CRC寄存器与多项式码(8005)相异或,结果依然存入CRC寄存器;
5、重复第3、4步,直到8次移位全部完成。即一个8bit字节处理完毕;
6、重复第2至第5步,即依次处理后面的数据字节,直到全部数据处理完成;
7、最终CRC寄存器里的内容即为CRC值。
这是我按照上面的方法异或计算的但是得出来的和软件算的不一样,请帮助看看!(效验字节为01H)
1、定义一个初始值为FFFF的16位的变量,该变量称为CRC寄存器。(想想在程序中,应该怎么表示16位的变量呢?)
2、把欲发送或接收消息的高8位和CRC寄存器的底8位作异或运算,并把结果在赋到CRC寄存器。
3、CRC寄存器右移1位(朝最低位),同时最高位添零。取出并检查最低位是否为1。(Visual Basic 里如何做移位的运算呢?)
4、如果为1,则CRC寄存器与多项式A001异或;如果为0,则重复第3步的动作。(Visual Basic 里如何判断一个字节里某个位的值呢?)
5、重复3和4直到完成了8次移位。这样完整的8位字节将完成处理了。
6、对于下一个8位字节的处理就是重复第2步到第5步了
7、把所有的欲发送或接收消息这样处理后, CRC寄存器里的值就是我们最终需要得到的CRC校验码。
如果你能正确回答我的问题,那么恭喜你,你自己可以用Visual Basic写数据采集卡的控制程序了。
三、Visual Basic程序实现
以江阴长江斯菲尔电力仪表公司CD194E系列多功能电力仪表的MODBUS-RTU通讯协议的报文格式为例,该表通信报文格式使用的校验方式就是CRC-16。通过对地址01H、命令04H、数据地址005CH和数据长度0004H的CRC-16运算后得到主机请求数据报文的CRC16的校验码为31DBH。