?? com_crc.c
字號:
//循環冗余校驗表及函數庫
//查表
const unsigned short Table_CRC[256]=
{ // CRC 表
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 ,0xe041 ,
0xa001 ,0x60c0 ,0x6180 ,0xa141 ,0x6300 ,0xa3c1 ,0xa281 ,0x6240 ,
0x6600 ,0xa6c1 ,0xa781 ,0x6740 ,0xa501 ,0x65c0 ,0x6480 ,0xa441 ,
0x6c00 ,0xacc1 ,0xad81 ,0x6d40 ,0xaf01 ,0x6fc0 ,0x6e80 ,0xae41 ,
0xaa01 ,0x6ac0 ,0x6b80 ,0xab41 ,0x6900 ,0xa9c1 ,0xa881 ,0x6840 ,
0x7800 ,0xb8c1 ,0xb981 ,0x7940 ,0xbb01 ,0x7bc0 ,0x7a80 ,0xba41 ,
0xbe01 ,0x7ec0 ,0x7f80 ,0xbf41 ,0x7d00 ,0xbdc1 ,0xbc81 ,0x7c40 ,
0xb401 ,0x74c0 ,0x7580 ,0xb541 ,0x7700 ,0xb7c1 ,0xb681 ,0x7640 ,
0x7200 ,0xb2c1 ,0xb381 ,0x7340 ,0xb101 ,0x71c0 ,0x7080 ,0xb041 ,
0x5000 ,0x90c1 ,0x9181 ,0x5140 ,0x9301 ,0x53c0 ,0x5280 ,0x9241 ,
0x9601 ,0x56c0 ,0x5780 ,0x9741 ,0x5500 ,0x95c1 ,0x9481 ,0x5440 ,
0x9c01 ,0x5cc0 ,0x5d80 ,0x9d41 ,0x5f00 ,0x9fc1 ,0x9e81 ,0x5e40 ,
0x5a00 ,0x9ac1 ,0x9b81 ,0x5b40 ,0x9901 ,0x59c0 ,0x5880 ,0x9841 ,
0x8801 ,0x48c0 ,0x4980 ,0x8941 ,0x4b00 ,0x8bc1 ,0x8a81 ,0x4a40 ,
0x4e00 ,0x8ec1 ,0x8f81 ,0x4f40 ,0x8d01 ,0x4dc0 ,0x4c80 ,0x8c41 ,
0x4400 ,0x84c1 ,0x8581 ,0x4540 ,0x8701 ,0x47c0 ,0x4680 ,0x8641 ,
0x8201 ,0x42c0 ,0x4380 ,0x8341 ,0x4100 ,0x81c1 ,0x8081 ,0x4040 ,
};
/*******************************************************************
函 數 名 稱: Receive_CRC_sum
功 能 描 述: 對串口接收到的數據進行CRC_16校驗
參 數 說 明: temp_RxBuf:待校驗數據指針
nLength:待校驗數據長度
返回值 說明: 循環冗余校驗結果 校驗成功返回1、失敗返回0。 (低位在前高位在后)
作 者:
更 新 日 期:
*******************************************************************/
uint8 Receive_CRC_sum(unsigned char *temp_RxBuf,unsigned int nLength)
{
unsigned int i;
unsigned int sum_receive;
unsigned short crc = 0xffff; // 初始化
sum_receive=(*(temp_RxBuf+nLength+1))*256+(*(temp_RxBuf+nLength));
for(i=0;i<nLength;i++)
{
crc = (crc >> 8) ^ Table_CRC[((crc ^ *temp_RxBuf) & 0xff)];
temp_RxBuf++;
}
crc=(crc>>8)^(crc<<8);
if(sum_receive==crc){return (1);} // 高低字節交換
else{return(0);}
}
/*******************************************************************
函 數 名 稱: Send_CRC_sum
功 能 描 述: 求串口發送的數據的CRC_16校驗值
參 數 說 明: temp_RxBuf:待求校驗數據指針
nLength:待校驗數據長度
返回值 說明: 循環冗余校驗結果 (低位在前高位在后)
作 者:
更 新 日 期:
*******************************************************************/
uint16 Send_CRC_sum(unsigned char *temp_TxBuf,unsigned int nLength)
{
unsigned int i;
unsigned short crc = 0xffff; // 初始化
for(i=0;i<nLength;i++)
{
crc = (crc >> 8) ^ Table_CRC[((crc ^ *temp_TxBuf) & 0xff)];
temp_TxBuf++;
}
crc=(crc>>8)^(crc<<8);
//*temp_TxBuf++=crc%256;
//*temp_TxBuf=crc/256;
return(crc);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -