• 大小: 26KB
    文件类型: .c
    金币: 1
    下载: 0 次
    发布日期: 2021-05-16
  • 语言: C/C++
  • 标签: CRC16  

资源简介

收集整理最全的CRC16计算,C语言代码,包括CRC16-IBM/CRC16-MAXIM/CRC16-USB/CRC16-MODBUS/CRC16-CCITT/CRC16-CCITT-FALSE/CRC16-X25/CRC16-XMODEN/CRC16-DNP。 每种代码都包含查表和计算方式。还可以计算CRC表并打印。 有其它自定义CRC16参数可直接修改参数计算器使用,也可修改参数打印CRC表,再用做查表计算。

资源截图

代码片段和文件信息

/******************************************
最全CRC16计算代码
含CRC16-IBM/CRC16-MAXIM/CRC16-USB/CRC16-MODBUS/CRC16-CCITT/CRC16-CCITT-FALSE/CRC16-X25/CRC16-XMODEN/CRC16-DNP。
定义 _CRC16_LOOKUP_TAB 表示使用查表计算, 调用crc16_cal(u8 *pu16 len);
定义 _CRC16_COMPUTATION 表示使用直接计算,调用crc16_cal(u8 *pu16 len);
定义 _CRC16_CAL_TAB表示打印CRC表调用 crc16_tab_cal();

下面定义选择CRC类型
//#define CRC16_IBM   //CAL PASS/TAB PASS
//#define CRC16_MAXIM //CAL PASS/TAB PASS
//#define CRC16_USB      //CAL PASS/TAB PASS
//#define CRC16_MODBUS  //  CAL PASS / TAB PASS
//#define CRC16_CCITT     //CAL PASS  / TAB PASS
#define CRC16_CCITT_FALSE   //CAL PASS /TAB PASS
//#define CRC16_X25   //CAL PASS/TAB PASS
//#define CRC16_XMODEN    //CAL PASS  /TAB PASS  (SSCOM CCITT 为XMODEN)
//#define CRC16_DNP     //CAL PASS /TABP ASS

有其它自定义校验参数,可直接修改参数
    #define CRC_POLY 0x8005 //CRC 多项式
    #define CRC_INIT 0xFFFF //CRC 初始值
    #define CRC_XOROUT  0x0000   //CRC 结果异或值
    #define REFIN   1       //输入反转标志
    #define REFOUT  1       //输出反转标志
*******************************************/
///////////////////CRC/////////////

//#define _CRC16_COMPUTATION
#define _CRC16_LOOKUP_TAB
//#define _CRC16_CAL_TAB  //计算CRC16表并打印

///////////////////////
//#define CRC16_IBM   //CAL PASS/TAB PASS
//#define CRC16_MAXIM //CAL PASS/TAB PASS
//#define CRC16_USB      //CAL PASS/TAB PASS
//#define CRC16_MODBUS  //  CAL PASS / TAB PASS
//#define CRC16_CCITT     //CAL PASS  / TAB PASS
#define CRC16_CCITT_FALSE   //CAL PASS /TAB PASS
//#define CRC16_X25   //CAL PASS/TAB PASS
//#define CRC16_XMODEN    //CAL PASS  /TAB PASS  (SSCOM CCITT 为XMODEN)
//#define CRC16_DNP     //CAL PASS /TABP ASS

#ifdef CRC16_IBM
    #define CRC_POLY 0x8005 //CRC 多项式
    #define CRC_INIT 0x0000 //CRC 初始值
    #define CRC_XOROUT  0x0000    //CRC 结果异或值
    #define REFIN   1       //输入反转标志
    #define REFOUT  1       //输出反转标志
#ifdef _CRC16_LOOKUP_TAB
u16 CRC16_IBM_TAB[256] = {
    0x0000 0xC0C1 0xC181 0x0140 0xC301 0x03C0 0x0280 0xC241 0xC601 0x06C0 0x0780 0xC741 0x0500 0xC5C1 0xC481 0x0440
    0xCC01 0x0CC0 0x0D80 0xCD41 0x0F00 0xCFC1 0xCE81 0x0E40 0x0A00 0xCAC1 0xCB81 0x0B40 0xC901 0x09C0 0x0880 0xC841
    0xD801 0x18C0 0x1980 0xD941 0x1B00 0xDBC1 0xDA81 0x1A40 0x1E00 0xDEC1 0xDF81 0x1F40 0xDD01 0x1DC0 0x1C80 0xDC41
    0x1400 0xD4C1 0xD581 0x1540 0xD701 0x17C0 0x1680 0xD641 0xD201 0x12C0 0x1380 0xD341 0x1100 0xD1C1 0xD081 0x1040
    0xF001 0x30C0 0x3180 0xF141 0x3300 0xF3C1 0xF281 0x3240 0x3600 0xF6C1 0xF781 0x3740 0xF501 0x35C0 0x3480 0xF441
    0x3C00 0xFCC1 0xFD81 0x3D40 0xFF01 0x3FC0 0x3E80 0xFE41 0xFA01 0x3AC0 0x3B80 0xFB41 0x3900 0xF9C1 0xF881 0x3840
    0x2800 0xE8C1 0xE981 0x2940 0xEB01 0x2BC0 0x2A80 0xEA41 0xEE01 0x2EC0 0x2F80 0xEF41 0x2D00 0xEDC1 0xEC81 0x2C40
    0xE401 0x24C0 0x2580 0xE541 0x2700 0xE7C1 0xE681 0x2640 0x2200 0xE2C1 0xE381 0x2340 0xE101 0x21C0 0x2080 0xE

评论

共有 条评论