日志档案

发表于 2008-1-11 21:48:02

1

标签: crc使用  

在串口通信中的CRC实现

 

在一些关键的通信在,对数据一致性要求很高的数据通信(如温度控制通信)需要加CRC来进行保证。如是本人在一个项目中用到一段精简的程序:

/*******************************************
函数原型:unsigned int cal_crc(unsigned char *ptr, unsigned char len)
函数功能:CRC校验
******************************************/
unsigned int cal_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*=2; crc^=0x1021;}  
     else crc*=2;
 if((*ptr&i)!=0) crc^=0x1021;               
      }
 ptr++;
  }
 return(crc);

在发送端将要发送的数据放入ptr堆栈中计算值加在后面发送,接受端同样计算收到的信息的CRC码,如果计算的CRC与接受的一致,通信正确,否则要求重发。

系统分类: 通信网络   |   用户分类: 无分类   |   来源: 整理   |   【推荐给朋友】

    阅读(858)    回复(0)  

投一票您将和博主都有获奖机会!