关于Modbus-RTU实现CRC-16的逻辑代码

1、我们都知道Modbus-RTU实现需要增加CRC的校验,CRC-16的计算规则需要对每一位进行计算并判断最后一位是1还是0,下面就是先贴代码在说逻辑,CRC是一个16位的数据,分为高低位

2、前提-CRC的数值是 前面的数据进行逻辑计算得到的,

举例:01 04 00 00 00  01 ——>计算,然后得到一个CRC,放到发送数组内。

3、计算规则,从第一个8位字节开始,

第一步:字节n 异或 0xFFFF(m) ,

第二步:判断最后一位,如果是1,则向右移1位,同时对计算结果异或0xA001,

                                        如果是0,则向右移1位。这个时候就结束了一个循环,

然后对这个字节N所有的数据进行一轮8次,最终的结果就是,m从0xFFFF变成这一个字节的数据CRC数值。对整个数据的数据进行一轮计算就可以得到整个数据的CRC。

第三步:计算之后的数值是高低位交换的,换句话就是,高8位是CRC_低,低8位是CRC_高

发送的时候,记得交换一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值