S7-200_MODBUS与PIC单片机的通讯之CRC16校验
void CHECK_RX_data(void)
{
CRC_Hi = 0;
CRC_Low = 0;
CRC = 0XFFFF; // 1,设置CRC寄存器,并给其赋值FFFF(hex)
for(a=0;a<15;a++) // 8,重复第2至第7步直到所有数据全部处理完成
{
CRC ^= RX_Data[a]; // 2,将数据的第一个字节与16位CRC寄存器的低8位进行异或,并把结果存入CRC寄存器。
for( b=0; b<8; b++ ) // 7,重复第3与第4步直到8次移位全部完成。
{
CRC_LSB = CRC & 1; // 3,提取LSB
CRC = CRC >> 1; // 4,CRC寄存器向右移一位
CRC = CRC & 0x7FFF ; // 5,MSB补零
if( CRC_LSB==1 ) { CRC^=0xA001; } // 6,检查LSB,如果LSB为0,重复第3步;若LSB为1,CRC寄存器与多项式码0xA001相异或。
}
}
CRC_Hi = CRC/256; CRC_Low = CRC%256; }
// 提取CRC高字节
// 提取CRC低字节