CRC16/ModBus校验与C语言实现方法

news/2024/12/1 0:25:47/

目录

一、什么是CRC16/Modbus校验

二、CRC16/Modbus校验的计算步骤

三、CRC16/Modbus校验的C语言实现


一、什么是CRC16/Modbus校验

        CRC16/Modbus校验在设备通信时可以验证数据帧的完整性,从而避免错误数据。其应用十分广泛,主要应用于Modbus通信协议等,类似的校验方法还有许多,例如和校验,本文主要讲述CRC16校验。

二、CRC16/Modbus校验的计算步骤

        CRC16校验的计算步骤如下:

        - 预置一个16位寄存器值为0xFFFF,我们称为CRC寄存器。
        - 依次取出每位数据并与CRC寄存器的低8位进行异或运算,结果赋值给CRC寄存器。
                - 将CRC寄存器内的值右移一位。
                - 判断移出位,若为0,则继续下一个字节。
                - 若移出位为1,将CRC寄存器与0xA001进行异或运算,结果赋值给CRC寄存器。
                - 重复上述步骤,直到右移8次,即处理完一个字节。
                - 重复步骤2,即处理完每位字节。
        - 将CRC寄存器的高低字节交换位置,得到最终的校验码。

三、CRC16/Modbus校验的C语言实现

       CRC16/Modbus校验的c语言实现方法分为查表法和计算法。计算法基于基础公式原理,理解即可在需要的时候写出,优先推荐。本文也将提供计算法代码。


uint8 reply[]={0xfe,0x01,0x04,0x00,0x00,0x01,0x00,0x4e,0xf5};
void crc()
{int cs = 0xffff;for (int i = 0; i < 7; i++){cs ^= reply[i];for (int j = 0; j < 8; j++){if (cs & 1 == 1){cs >>= 1;cs ^= 0xa001;}else{cs >>= 1;}}}reply[7] = cs & 0xff; // 校验码的低字节reply[8] = (cs & 0xff00) >> 8; // 校验码的高字节
};

http://www.ppmy.cn/news/109031.html

相关文章

1088 Rational Arithmetic(53行代码+超级无敌详细注释,看了必会)

分数 20 全屏浏览题目 切换布局 作者 CHEN, Yue 单位 浙江大学 For two rational numbers, your task is to implement the basic arithmetics, that is, to calculate their sum, difference, product and quotient. Input Specification: Each input file contains on…

HTML <command> 标签

实例 标记一个按钮: <menu> <command οnclick="alert(Hello World)"> Click Me!</command> </menu>浏览器支持 IEFirefoxChromeSafariOpera没有浏览器支持 <command> 标签。 只有 Internet Explorer 9 (更早或更晚的版本都不支持…

【零基础学习C++】欢迎来到C++的世界

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️系列专栏】 文章目录 前言C(The C Programming Language/c plus plus)发展历程语言标准语言特点支持数据封装和数据隐藏支持继承和重用支持多态性 前言 C是一种计算机高级程序设计语言&#xff0c; …

SpringBoot使用-基于Idea搭建WebSocket应用

文章目录 前言搭建WebSocket应用的实操流程验证总结前言 SpringBoot是所有基于Spring开发项目的起点,使得开发者能快速搭建 Spring 项目。在Idea集成工具环境下,通过使用SpringBoot,开发人员选用合适的Maven设置,能够方便地搭建WebSocket应用。 搭建WebSocket应用的实操流…

蓝牙Mesh中的Heartbeat和Heartbeat Publication

Heartbeat&#xff1a; 在蓝牙Mesh网络中&#xff0c;Heartbeat&#xff08;心跳&#xff09;是一种用于监测设备在线状态和网络连通性的机制。它是由每个设备定期发送的小型消息组成&#xff0c;用于指示设备的存在和活动状态。 Heartbeat的主要目的是确保网络中的设备处于活动…

为什么那么多人劝退软件测试?月薪1万以上的就别点进来了

2023年已经过了快一半了&#xff0c;今天跟大家聊一聊软件测试薪资这个话题 和大家说一句掏心窝的话&#xff1a;直到现在&#xff0c;软件测试依旧是寒门改变命运的一个最佳选择之一&#xff0c;要不是怕被喷&#xff0c;我都想把之一去掉&#xff0c;因为想了半天&#xff0…

抽象轻松JavaScript

想象一样&#xff0c;现在有一个苹果&#xff0c;两个苹果&#xff0c;一箱苹果在你面前 看&#xff0c;上面的三种苹果&#xff0c;&#xff08;我写的是苹果就是苹果&#xff09; 语境1 例如你现在要搬运苹果&#xff01; 那么现在上面有苹果&#xff0c;一个&#xff0c;两…

力扣---二叉树OJ题(多种题型二叉树)

文章目录 前言&#x1f31f;一、剑指 Offer 55 - I. 二叉树的深度&#x1f30f;1.1 链接&#xff1a;&#x1f30f;1.2 代码一&#xff1a;&#x1f30f;1.3 代码二&#xff1a;&#x1f30f;1.4 流程图&#xff1a; &#x1f31f;二、100. 相同的树&#x1f30f;2.1 链接&…