⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 crc16.txt

📁 CRC计算 对PSTN中的FSK 数据进行效验
💻 TXT
字号:
extern const  U16 CRCDATA;
extern U16 RingDetFlag;

/*******************************************CRC校验************************************************/

/************************************************************************************************
*
* 名称: U16 CRC16_CheckBlock(U16 *Ptr,U16 Blen)
* 功能说明:CRC16 块校验
* 调用: 无
* 输入: 
* 返回值:
* 备注:
************************************************************************************************/
U16 CRC16_CheckBlock(U16 *Ptr,U16 Blen)
{
	U16 i,k;
	U16 CRCData = 0x0000;
	U16 CheckData;
	
	for(i=0,k=0;i<Blen;i++){
		if(!(i%2)){
			CheckData = Ptr[k]>>8;
			CRCData = CRC16_CheckByte(CheckData,CRCData);
		}
		else{
			CheckData = Ptr[k]&0xff;
			CRCData = CRC16_CheckByte(CheckData,CRCData);
			k++;
		}		
	}
	return CRCData;
}

/************************************************************************************************
*
* 名称: U16 CRC16_CheckByte(U16 Data,U16 CRCWord)
* 功能说明:CRC16 字节校验
* 调用: 无
* 输入: 
* 返回值:
* 备注:
************************************************************************************************/
U16 CRC16_CheckByte(U16 Data,U16 CRCWord)
{
	U16 i;
	
	Data = (Data&0xff) << 8; 
    CRCWord = CRCWord ^ Data; 
    for(i=0;i<8;i++){    
        if(CRCWord & 0x8000){
        	CRCWord <<= 1;
            CRCWord ^= CHECK_QUANTIC;
        }
        else{
        	CRCWord <<= 1;
        }
    }
    return CRCWord;
}




//CRC的原理这里就不说了,16位的CRC在工程上有2个标准,1个是欧洲的IEEE,另一个是美国的CRC-16。我的实际应用中是选用CRC-16。CRC的算法有多种,有移位运算法,有查表法,还有一个是半字节查表的。我则只用移位法,不出错啊,不过速度慢了点。这里给出多年使用看的移位法的CRC-16的C的代码。

U16 CRC_16(U16 *buf,U16 len)
{
 const unsigned int crc_gen = 0xa001;  /*1,1000,0000,0000,0101B*/
 unsigned int crc;
 unsigned char i,j;

 crc = 0xffff;
 if (len != 0)
 {
  for(i = 0;i < len;i++)
  {
   crc ^= (unsigned int)(buf[i]);
   for(j = 0;j < 8;j++)
   {
    if (crc & 0x01)
    {
     crc >>= 1;
     crc ^= crc_gen;
    }
    else
     crc >>= 1;
   }
  }
 }

 return crc;
} // end crc_16

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -