《CRC16校验C语言程序源码-(附完整的可执行的C语言代码)》由会员分享,可在线阅读,更多相关《CRC16校验C语言程序源码-(附完整的可执行的C语言代码)(8页珍藏版)》请在金锄头文库上搜索。
1、C16校验C语言程序源码 (附完整的可执行的语言代码)/CR6校验在通讯中应用广泛,这里不对其理论进行讨论,只对常用的2种实现措施进行测试。措施一:查表法(56长度的校验表) 速度快,精确,但是对于单片机设备存储占用大,且校验表长度大,输入时容易浮现错误。/- POPUR POLYNOMIAL-/ CCI:x16 x12 x + 0 (001)/ CRC-1: x1 +x1 + x2 + 0 (0x005)defin CC_16_PLYNOMAL0x805onst BYchCRHTalb = / CR高位字节值表0x00, xC, 0x8, 040, 0x01,0C0,x8,x, x0, 0C
2、, 0x80, 0x41,000, 0xC1, x8, 0x40, 0x0, xC0, 0x80,x4, 0x00, 0xC1, x81, 0x4,x00,0xC1, 081,x40, 001, 0xC0, 0x0, 0x1, 0x0, 0x0, x8,041,0x00, 0x, 0x81, 0x40, 0x0, 0xC1,0x,0x4,x0,xC0, 0x8, 0x41,x00,0xC1, x81, 0x40, 0x01, xC0, 08,0x41, 0x01,0xC0,080, x4,0x00, 0, x1, 0x4, x1, 0xC0,0x, 4, 0x00, 1,x81, 0x40,0
3、x00, 0C1,0x81,x40, 0, 0xC0, x80,0x1, 00,0xC1, 0x1, 04,0x0,0x0, 0x80,0x41, x01, 0xC0, 0x0, 041,x00, 0xC, 0x1, 0x40,0x00,0xC1,0x81, 0x40, 0x1, 0xC0, 0x0,41, x01, 0xC0,0x0, 01,0x00, 0xC, 0x81,0x40,x01, 0C0, x8, 041,0x00, 0xC1, 0x1, 0x0,000,xC1, 0x1, x4,0x01,0xC0, 0x80, 041, 0x0, 0xC0, 080,041,000, 0xC1
4、, x, 0x40, x00, 0x1,0x1, 04, 0x01, 0x0, 080,x41,0x0,0xC1, 0x81, 0x0, x01, 0xC0, 0x80, 0x4,0x01, 0x0, 0x0,0x41,0x0, 0C1,x81, 040, x00, 0C1, 0x81,0x40,0x1,0C0, 0x80, 041,x01,00,x80, x41,x00,0C,0x8, x0, 0x01,0x0, 00, 0x41,000,0xC1, x81, x40, x, 0x1, 1, 0x0, 0x01, C, 0x80,0x41,000,xC1, 081,0x40,0x01, 0x
5、C0,0x80, 0x41, 0x,0xC, 00, 4,x00, 0C1, x81, 0x40, 001, 0xC0, 0x,0x41, 0x0,C,01, 040,x00, xC1,0x81, 040, 0x0,C0, 0x80, 0x41, 0x, xC, 0x80,0x41,0x00,0xC1, 0x81, 0x4, 0x00, 0xC1, 0x8, 0x4, ,0C, 0x8, x1,0x00, 0x1, x81,0x4, 01, 0x0, 080, 041, 001, 0, x80, 041,0x, C1, 81,x0;cns BYTE hCRTabe = CRC 低位字节值表0x
6、00,xC0,0xC1, 0x01, 0C3, x3, 002, 0C2, 0xC6, 0x6, 07, 0xC7,0x0, 0xC5,0xC, 0x0, 0xCC, 0x, 0D,0xCD,0x0F, 0CF,0xCE, 0E,0x0,A, 0B, 0x0B, 0xC, 0x0, 0x0, 0C8,D, 0x8, 0x,x9,0x1B, xDB, 0D,, x,0xE, 0xF,xF, 0D,01D, 0x1C, 0xDC,0x14, 0x4,0xD5, 0x15, 0D7, 0x17, 0x16, xD6,0xD2, x12, 0x13, 0xD3,0x1,0D1, 0x, 01, 0F0
7、,x3, 0x1, 0x1, 033, 0xF, 0F2, 0x32,0x36, 0x, F7, 0x7,0xF5, 035, 034,0xF4, 0x3C, 0xFC, 0x, 0x3D,F, 0x3F, 03E, 0xFE,0xFA, 0xA,0x3B, xFB, x39,0xF9, 0xF8, 0x38,0, 0x8, 0xE9, x, 0xE, 02B, x2A, 0xEA, 0xE, 2, 0xF, 0xE,2D, 0D, 0xC,0x2,xE, 0x24, 025, 0xE5, 0x27, 0, 0x, 026,x22,xE2,03, x3, 0xE1, x21, x2, xE,
8、xA0, 0x0, x1, 0xA,06, x,0A2, 0x62, 0x66,A, 0x7, 0x, 0xA5, 065,06, 0xA,xC, 0xAC,xAD, 06, 0x, 0x6F, 06E, xE, 0xAA, x6,06, 0xAB,x69, 0xA9,0, 08, 0x78, 0x8, xB9,0x7, 0xBB, x7B, 0xA,xA,0xBE, x7, 07F, xB,0x7D, 0BD, 0xC,0xC, 0x4, x74,0x75,0xB,0x77, 0, 0B6, x76,072,0xB2, 0xB3, x3,xB1, 0x71,0x0,x,x50, x9, 0x
9、1,0x51, 0x93, 0x53,0x52, x92,0x6, x6, x7, 0x9,05, 95, 4, 0x54, 0x9, 0xC, 0x, 0xD,0xF, 0x9F, 0x, 0x5E,05A, 0x,0x9B, 05B, 0x99, 9,x8, 0x8, x8, 0x48, 0x9, 09,0xB, 0xB, 08,x4,0xE, xE, x8F, 0xF, 0x8, 0x4D, 0x4, 0x8,44,4, 05, x4, 0x87, 0x47, 6, 08, 82, 0x42,03,0x83,0x41, 0x, 0x80,0x0;WORD CR6_(BYT* phsg,
10、D wDaaLn)BYTE chCRC=0xFF; /高RC字节初始化 BYE chRLo= 0x; / 低CR字节初始化 RDwdx;/ CRC循环中的索引 hile (wDaaLen-) /计算CC wndex= hCRL *pchMg+ ; chCRCo=hCRCHi hCRCHTabwIndex; chCi= chRCTalbewIndx ; etur(cRCHi ) |chCLo) ;措施一:列表法(简朴表)const D CRCTalbebs =x000,xCC01,0D80, x1400, 0xF01,x3C00, 080,0E401, 0A001, 0x6C00, 7800,
11、0xB4, 0x5000,09C01, 80, 000, ;WRD R16_(BTE*pchMs, RD wDten)WORD wCR 0xFFF; WO i; YTE chChar;or (i=0;i 4); wCC = wCTalAbs(chChr ) CC) 15 (wCRC 4); rtun wCRC;措施二:定义法 根据RC16OBS原理直接计算,算法简朴但对单片机计算压力大。WORD RC_(BYTE* pchs, WORD wDtaLe)BTE,chChar; OR wCC 0xFFFF; whle (wDataLen) char = *pchMsg; chhar = ByteInver(chh); wCRC= (WRD) chChr) ); o(i = 0; i 8; i+)