本帖最后由 刘前辈 于 2011-6-22 10:22 编辑
这里扩展2字节存放Crc 码:
unsigned char Array[4]={0xaa,0x59,00,00};
/******************************
形参: 一个指针和一个长度值
返回值: 一个unsigned int的CRC校验码
******************************/
unsigned int Crcprocess(unsigned char data *p,unsigned char len)
{
unsigned char i;\
unsigned int Crc;
while(len--)
{
for(i=0x80;i!=0;i>>=1)
{
if((Crc&0x8000) != 0) { Crc<<=1; Crc ^= 0x1021;}
else { Crc<<=1;}
if((*p&i) != 0) Crc ^= 0x1021;
}
p++;
}
return Crc;
}
void main( )
{
unsigned int CRC_B;
// 发送端
CRC_B=Crcprocess(Array,2); // 0xaa59的Crc码CRC_B=0x3969
Array[2]=CRC_B>>8; // 0x39
Array[3]=CRC_B; // 0x69
// 发送数据帧Array[4]=0xaa593969.
/*********************************************/
// 下面是接收数据端对接收帧 0xaa593969 进行Crc 帧校验
unsigned char Array[6]; // 接收帧数据。
if ( Crcprocess(Array, 4 ) != 0)
{
// 接收帧Crc帧校验错误处理代码;
}
// 若Crc==0,接收帧校验正确。
while(1);
}
Hotpower的网上CRC计算,选用crc16-ccitt(X16+X12+X5+1),初值为0000.
// |