论文网
English Papers
万事OK网
发表论文
 
 首页 > IT文章 > 程序设计 >
CRC算法原理及C语言实现

[科技论文网] http://www.scipapers.com    2007-12-01  


      38h   2802B89E 5F058808 C60CD9B2 B10BE924
      3Ch   2F6F7C87 58684C11 C1611DAB B6662D3D

      40h   76DC4190 01DB7106 98D220BC EFD5102A
      44h   71B18589 06B6B51F 9FBFE4A5 E8B8D433
      48h   7807C9A2 0F00F934 9609A88E E10E9818
      4Ch   7F6A0DBB 086D3D2D 91646C97 E6635C01

      50h   6B6B51F4 1C6C6162 856530D8 F262004E
      54h   6C0695ED 1B01A57B 8208F4C1 F50FC457
      58h   65B0D9C6 12B7E950 8BBEB8EA FCB9887C
      5Ch   62DD1DDF 15DA2D49 8CD37CF3 FBD44C65

      60h   4DB26158 3AB551CE A3BC0074 D4BB30E2
      64h   4ADFA541 3DD895D7 A4D1C46D D3D6F4FB
      68h   4369E96A 346ED9FC AD678846 DA60B8D0
      6Ch   44042D73 33031DE5 AA0A4C5F DD0D7CC9

      70h   5005713C 270241AA BE0B1010 C90C2086
      74h   5768B525 206F85B3 B966D409 CE61E49F
      78h   5EDEF90E 29D9C998 B0D09822 C7D7A8B4
      7Ch   59B33D17 2EB40D81 B7BD5C3B C0BA6CAD

      80h   EDB88320 9ABFB3B6 03B6E20C 74B1D29A
      84h   EAD54739 9DD277AF 04DB2615 73DC1683
      88h   E3630B12 94643B84 0D6D6A3E 7A6A5AA8
      8Ch   E40ECF0B 9309FF9D 0A00AE27 7D079EB1

      90h   F00F9344 8708A3D2 1E01F268 6906C2FE
      94h   F762575D 806567CB 196C3671 6E6B06E7
      98h   FED41B76 89D32BE0 10DA7A5A 67DD4ACC
      9Ch   F9B9DF6F 8EBEEFF9 17B7BE43 60B08ED5

      A0h   D6D6A3E8 A1D1937E 38D8C2C4 4FDFF252
      A4h   D1BB67F1 A6BC5767 3FB506DD 48B2364B
      A8h   D80D2BDA AF0A1B4C 36034AF6 41047A60
      ACh   DF60EFC3 A867DF55 316E8EEF 4669BE79

      B0h   CB61B38C BC66831A 256FD2A0 5268E236
      B4h   CC0C7795 BB0B4703 220216B9 5505262F
      B8h   C5BA3BBE B2BD0B28 2BB45A92 5CB36A04
      BCh   C2D7FFA7 B5D0CF31 2CD99E8B 5BDEAE1D

      C0h   9B64C2B0 EC63F226 756AA39C 026D930A
      C4h   9C0906A9 EB0E363F 72076785 05005713
      C8h   95BF4A82 E2B87A14 7BB12BAE 0CB61B38
      CCh   92D28E9B E5D5BE0D 7CDCEFB7 0BDBDF21

      D0h   86D3D2D4 F1D4E242 68DDB3F8 1FDA836E
      D4h   81BE16CD F6B9265B 6FB077E1 18B74777
      D8h   88085AE6 FF0F6A70 66063BCA 11010B5C
      DCh   8F659EFF F862AE69 616BFFD3 166CCF45

      E0h   A00AE278 D70DD2EE 4E048354 3903B3C2
      E4h   A7672661 D06016F7 4969474D 3E6E77DB
      E8h   AED16A4A D9D65ADC 40DF0B66 37D83BF0
      ECh   A9BCAE53 DEBB9EC5 47B2CF7F 30B5FFE9

      F0h   BDBDF21C CABAC28A 53B39330 24B4A3A6
      F4h   BAD03605 CDD70693 54DE5729 23D967BF
      F8h   B3667A2E C4614AB8 5D681B02 2A6F2B94
      FCh   B40BBE37 C30C8EA1 5A05DF1B 2D02EF8D

     

     CRC算法原理及C語言實現

    对于RF通讯的通讯可靠性,有很强的检错能力的CRC.
    这里列出了实际中8,16位单片机用到的CRC实用子程序.

    • 1. 半字节16位CRC---halfBcal_crc
    • 2.查表CRC---Bytecal_crc
    • 3.位计算的CRC.----bitcal_crc
    • 4.CRC检错的程序----IsCrc16
    • 5.一个很不错的CRC计算程序,--CRC16



    同时本文列出了调用函数和例程

    const code Ploy=0x1021;

    #ifndef uchar
    typedef unsigned char uchar;
    #endif
    #ifndef uint
    typedef unsigned int uint;
    #endif
    static unsigned short crc; //16bit
    unsigned int code crc_ta[16]={ /* CRC 半字节余式表 */ 0X0000,0X1021,0X2042, 0X3063, 0X4084, 0X50A5, 0X60C6, 0X70E7, 0X8108,0X9129,0XA14A,0XB16B,0XC18C,0XD1AD,0XE1CE,0XF1EF, };


    unsigned int code crc_tab[256]={ /* CRC 余式表 */ 0X0000, 0X1021, 0X2042, 0X3063, 0X4084, 0X50A5, 0X60C6, 0X70E7, 0X8108, 0X9129, 0XA14A, 0XB16B, 0XC18C, 0XD1AD, 0XE1CE, 0XF1EF, 0X1231, 0X0210, 0X3273, 0X2252, 0X52B5, 0X4294, 0X72F7, 0X62D6, 0X9339, 0X8318, 0XB37B, 0XA35A, 0XD3BD, 0XC39C, 0XF3FF, 0XE3DE, 0X2462, 0X3443, 0X0420, 0X1401, 0X64E6, 0X74C7, 0X44A4, 0X5485, 0XA56A,0XB54B, 0X8528, 0X9509, 0XE5EE, 0XF5CF, 0XC5AC, 0XD58D, 0X3653, 0X2672, 0X1611, 0X0630, 0X76D7, 0X66F6, 0X5695, 0X46B4, 0XB75B,0XA77A, 0X9719, 0X8738, 0XF7DF, 0XE7FE, 0XD79D, 0XC7BC, 0X48C4,0X58E5, 0X6886, 0X78A7, 0X0840, 0X1861, 0X2802, 0X3823, 0XC9CC, 0XD9ED, 0XE98E, 0XF9AF, 0X8948, 0X9969, 0XA90A, 0XB92B, 0X5AF5, 0X4AD4, 0X7AB7, 0X6A96, 0X1A71, 0X0A50, 0X3A33, 0X2A12, 0XDBFD, 0XCBDC, 0XFBBF, 0XEB9E, 0X9B79, 0X8B58, 0XBB3B, 0XAB1A, 0X6CA6, 0X7C87, 0X4CE4, 0X5CC5, 0X2C22, 0X3C03, 0X0C60, 0X1C41, 0XEDAE, 0XFD8F, 0XCDEC, 0XDDCD, 0XAD2A, 0XBD0B, 0X8D68, 0X9D49, 0X7E97, 0X6EB6, 0X5ED5, 0X4EF4, 0X3E13, 0X2E32, 0X1E51, 0X0E70, 0XFF9F, 0XEFBE, 0XDFDD, 0XCFFC, 0XBF1B, 0XAF3A, 0X9F59, 0X8F78, 0X9188, 0X81A9, 0XB1CA, 0XA1EB, 0XD10C, 0XC12D, 0XF14E, 0XE16F, 0X1080, 0X00A1, 0X30C2, 0X20E3, 0X5004, 0X4025, 0X7046, 0X6067, 0X83B9, 0X9398, 0XA3FB, 0XB3DA, 0XC33D, 0XD31C, 0XE37F, 0XF35E, 0X02B1, 0X1290, 0X22F3, 0X32D2, 0X4235, 0X5214, 0X6277, 0X7256, 0XB5EA, 0XA5CB, 0X95A8, 0X8589, 0XF56E, 0XE54F, 0XD52C, 0XC50D, 0X34E2, 0X24C3, 0X14A0, 0X0481, 0X7466, 0X6447, 0X5424, 0X4405, 0XA7DB, 0XB7FA, 0X8799, 0X97B8, 0XE75F, 0XF77E, 0XC71D, 0XD73C, 0X26D3, 0X36F2, 0X0691, 0X16B0, 0X6657, 0X7676, 0X4615, 0X5634, 0XD94C, 0XC96D, 0XF90E, 0XE92F, 0X99C8, 0X89E9, 0XB98A, 0XA9AB, 0X5844, 0X4865, 0X7806, 0X6827, 0X18C0, 0X08E1, 0X3882, 0X28A3, 0XCB7D, 0XDB5C, 0XEB3F, 0XFB1E, 0X8BF9, 0X9BD8, 0XABBB, 0XBB9A, 0X4A75, 0X5A54, 0X6A37, 0X7A16, 0X0AF1, 0X1AD0, 0X2AB3, 0X3A92, 0XFD2E, 0XED0F, 0XDD6C, 0XCD4D, 0XBDAA, 0XAD8B, 0X9DE8, 0X8DC9, 0X7C26, 0X6C07, 0X5C64, 0X4C45, 0X3CA2, 0X2C83, 0X1CE0, 0X0CC1, 0XEF1F, 0XFF3E, 0XCF5D, 0XDF7C, 0XAF9B, 0XBFBA, 0X8FD9, 0X9FF8, 0X6E17, 0X7E36, 0X4E55, 0X5E74, 0X2E93, 0X3EB2, 0X0ED1, 0X1EF0 };

    unsigned int halfBcal_crc(unsigned char *ptr, unsigned char len)
    {
    unsigned int crc;
    unsigned char da;
    crc=0;
    while(len--!=0)
    {
    // da=((uchar)(crc/256))/16; /* 暂存CRC 的高四位 */
    da=((unsigned char)(crc>>8))>>4;
    crc<<=4; /* CRC 右移4 位,相当于取CRC 的低12 位)*/
    crc^=crc_ta[da^(*ptr/16)]; /* CRC 的高4 位和本字节的前半字节相加后查表计算CRC, 然后加上上一次CRC 的余数 */
    da=((unsigned char)(crc>>8))>>4; /* 暂存CRC 的高4 位 */
    crc<<=4; /* CRC 右移4 位, 相当于CRC 的低12 位) */
    crc^=crc_ta[da^(*ptr&0x0f)]; /* CRC 的高4 位和本字节的后半字节相加后查表计算CRCH缓笤偌由仙弦淮蜟RC 的余数 */

    ptr++; }

    return(crc);

    }

    unsigned int bitcal_crc(unsigned char *ptr, unsigned char len)


    { unsigned char i; unsigned int crc=0; while(len--!=0)

    {

    for(i=0x80; i!=0; i/=2)

    {

    if((crc&0x8000)!=0)

    {

    crc<<=1;

    crc^=0x1021;

    } /* 余式CRC 乘以2 再求CRC */

    else crc<<=1;

    if((*ptr&i)!=0) crc^=Ploy; /* 再加上本位的CRC */ }

    ptr++;

    }

    return(crc);

    }

    unsigned int Bytecal_crc(unsigned char *ptr, unsigned char len)

    {

    unsigned int crc;

    unsigned char da;

    crc=0;

    while(len--!=0)

    {

    da=(uchar) (crc/256); /* 以8 位二进制数的形式暂存CRC 的高8 位 */

    crc<<=8; /* 左移8 位,相当于CRC 的低8 位乘以8 */

    crc^=crc_tab[da^*ptr]; /* 高8 位和当前字节相加后再查表求CRC ,再加上以前的CRC */

    ptr++;

    }

    return(crc);

    }

    uchar IsCrc16(const uchar *pData,int len)

    { uint fcs;

    fcs=0xffff;

    while(len>0)

    {

    fcs = (fcs << 8)^ crc_tab[fcs^ (*pData)&0xff];

    len--;

    pData++;

    }

    return(!fcs);    来源:

声明:本文由网友推荐或作者提交,版权归原作者所有,刊登此文仅为传播知识,展示研究成果,提高文章引用率。未经原作者授权,禁止用于任何形式的商业行为。科技论文网倡导尊重知识、尊重劳动、保护原创、知识共享。由于部分论文文章来于网络,文章作者不祥,请相关的原创作者与我们联系,以便加上您的署名。

上一页 1 2 3 4 5 6 7 8 9 下一页  
CRC算法原理及C语言实现
下面没有链接了     欧几里德算法及其实现
最新论文
·[程序设计]CRC算法原理及C语言实现
·[程序设计]欧几里德算法及其实现
·[程序设计]蚁群算法Python实现
·[程序设计]图像二值化算法源码
·[程序设计]经典面试问题:12小球问题算法2
·[程序设计]经典面试问题:12小球问题算法
·[程序设计]图像几何变换插值算法
·[程序设计]C算法—堆排序
·[程序设计]人机博弈程序实现
·[程序设计]A*算法Python实现
 
 

搜索论文

Google
论文分类

论文网 论文发表网 论文 免费论文网 找论文网 毕业论文 中国论文网 英语论文 百度论文 聘教网 易搜
 免费发布论文    中国论文网 2008版权所有  业务联系:pinjiao@126.com