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

这篇具有很好参考价值的文章主要介绍了CRC16/ModBus校验与C语言实现方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、什么是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语言实现方法分为查表法和计算法。计算法基于基础公式原理,理解即可在需要的时候写出,优先推荐。本文也将提供计算法代码。文章来源地址https://www.toymoban.com/news/detail-469726.html


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; // 校验码的高字节
};

到了这里,关于CRC16/ModBus校验与C语言实现方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C语言CRC-16 CCITT-FALSE格式校验函数

    CRC-16校验产生2个字节长度的数据校验码,通过计算得到的校验码和获得的校验码比较,用于验证获得的数据的正确性。基本的CRC-16校验算法实现,参考: C语言标准CRC-16校验函数。 不同应用规范通过对输入数据前处理和输出数据后处理的方式不同,又产生了不同的应用规范校

    2024年02月12日
    浏览(48)
  • C#: CRC8,CRC16,CRC32 校验代码

    说明:CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似

    2024年01月18日
    浏览(43)
  • CRC校验码生成逻辑的实现原理详解——结合C语言和Verilog语言代码分析

    因为前段时间用到CRC校验码,所以在网上找到了很多有关CRC校验码计算原理以及生成CRC校验码的代码实现(包括C语言和Verilog语言的实现)的文章,但关于CRC校验码代码实现的原理未能找到相关文章,于是自己结合C语言和Veirlog语言的实现代码以及CRC校验码的计算原理,对CR

    2023年04月22日
    浏览(100)
  • CRC(循环冗余校验码的校验方法)

    5个关键点: 1.信息码:即给出要校验的二进制码 2.生成多项式:一般多项式会给,从最高位的指数位数就可以得到有几个校验码;如果没给多项式,肯定会给个多项式二进制码,根据它来推就行(具体推的规律,下面会讲) 3.校验位:由多项式的最高位指数得出 4.多项式对应

    2024年02月08日
    浏览(42)
  • C语言CRC-32 STM32格式校验函数

    CRC-32校验产生4个字节长度的数据校验码,通过计算得到的校验码和获得的校验码比较,用于验证获得的数据的正确性。基本的CRC-32校验算法实现,参考: C语言标准CRC-32校验函数 不同厂家通过对输入数据前处理和输出数据后处理的方式不同,又产生了不同的厂家校验函数,这

    2023年04月27日
    浏览(57)
  • CRC校验(2):CRC32查表法详解、代码实现及CRC反转

    对于现在的CPU来说,基本上都在硬件上实现了CRC校验。但我们还是想用软件来实现一下CRC的代码,这样可以更深入地理解里面的原理。所以这一节就来详细地解释如何使用查表法从软件上来实现CRC-32的校验。另外,CRC还有一种反转的情况,实际上反转和不反转没有什么太大的

    2024年02月09日
    浏览(248)
  • 十六、基于FPGA的CRC校验设计实现

    循环冗余校验(Cyclic Redundancy Check, CRC)是一种根据网络数据包或计算机文件等数据产生简短固定位数校验码的一种信道编码技术,主要用来检测或校验数据传输或者保存后可能出现的错误。它是利用除法及余数的原理来作错误侦测的。 多项式一般指输入数据异或的对象;其

    2023年04月24日
    浏览(52)
  • CRC校验码详解+Verilog实现(含代码)

    目录 CRC码简介 CRC校验码生成步骤  CRC码生成多项式  CRC校验码Verilog实现 CRC即循环冗余校验,是一种数字通信中的常用信道编码技术。其特征是信息段和校验字段的长度可以任意选定 CRC码是由2部分组成的,前部分是信息码,后部分是校验码,如果CRC码长共 n bit,信息码长

    2023年04月08日
    浏览(47)
  • CRC校验原理与FPGA实现(含推导过程)

      CRC校验全称为循环冗余校验(Cyclic Redundancy Check),常用于数据传输中的错误检测。   在学习CRC校验前,需要了解CRC校验中的几个基本概念: NAME:参数模型名称,比如CRC-8、CRC-16、CRC-32等 WIDTH:CRC校验位宽度 POLY:多项式的简写,用十六进制表示。例如:CRC-8的多项式

    2024年02月03日
    浏览(91)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包