Modbus CRC 算法

来源:互联网 发布:51单片机开发项目 编辑:程序博客网 时间:2024/06/05 18:18

转自http://www.cnitblog.com/zfly/archive/2005/12/13/5334.html
 
void CRC16(BYTE *Array, BYTE *Rcvbuf,unsigned int Len)
{
  unsigned int IX,IY,CRC;
  CRC=0xFFFF;//set all 1

  if (Len<=0)
  {
    CRC = 0;
  }else{
    Len--;
    for (IX=0;IX<=Len;IX++)
    {
      CRC=CRC^(unsigned int)(Array[IX]);
      for(IY=0;IY<=7;IY++)
      {
        if ((CRC&1)!=0)
        {
          CRC=(CRC>>1)^0xA001;
        }else{
          CRC=CRC>>1;
        }
      }
    }
  }

 
  Rcvbuf[0] = (CRC & 0xff00)>>8;//高位置
  Rcvbuf[1] = (CRC & 0x00ff);//低位置
}
原创粉丝点击