zoukankan      html  css  js  c++  java
  • 单片机CRC源码

     1 /******************************************************************************************
     2  * 函数功能:CRC校验用函数
     3  * 函数输入:puchMsgg是要进行CRC校验的消息,usDataLen是消息中字节数
     4  * 函数输出:计算出来的CRC校验码。
     5  ****************************************************************8*************************/
     6 uint16_t CRC16(uint8_t *puchMsgg,uint8_t usDataLen)//puchMsgg是要进行CRC校验的消息,usDataLen是消息中字节数
     7 {
     8     uint8_t uchCRCHi = 0xFF ; /* 高CRC字节初始化*/
     9     uint8_t uchCRCLo = 0xFF ; /* 低CRC 字节初始化*/
    10     uint8_t uIndex ; /* CRC循环中的索引*/
    11     while (usDataLen--) /* 传输消息缓冲区*/
    12     {
    13         uIndex = uchCRCHi ^ *puchMsgg++ ; /* 计算CRC */
    14         uchCRCHi = uchCRCLo ^ auchCRCHi[uIndex] ;
    15         uchCRCLo = auchCRCLo[uIndex] ;
    16     }
    17     return ((uchCRCHi<< 8) | uchCRCLo) ;
    18 }

    用法举例:

    1 void MessageHandle(uint8_t *pointer_in,uint8_t *pointer_out)
    2 {
    3     CalKey = CRC16(pointer_in+1,*pointer_in-2); //对接收到的命令进行CRC校验,得到新的校验码
    4     //写入校验码
    5     SendKey = CRC16(Pointer_out+1,3);
    6     //将计算出来的校验码装入输出数据缓存中
    7     *(Pointer_out+4) = (uint8_t)(SendKey>>8); 
    8     *(Pointer_out+5) = (uint8_t)(SendKey&0x00FF);
    9 }

    用法中,对于发送帧,是先放CRC高位,后放CRC低位,但在标准ModBus中,先放CRC低位,后放CRC高位。

  • 相关阅读:
    软件测试人员的年终绩效考核怎么应对
    收藏
    顶踩组件 前后两版
    订阅组件
    hdu 1963 Investment 完全背包
    hdu 4939 Stupid Tower Defense 动态规划
    hdu 4405 Aeroplane chess 动态规划
    cf 414B Mashmokh and ACM 动态规划
    BUPT 202 Chocolate Machine 动态规划
    hdu 3853 LOOPS 动态规划
  • 原文地址:https://www.cnblogs.com/wuqi1003/p/5306720.html
Copyright © 2011-2022 走看看