CRC8校验算法
6/30/2017 2:45:50 PM
/********************************************************/
/*DS18B20的CRC8校验程序*/
/********************************************************/
uchar calcrc_1byte(uchar abyte)
{
uchar i, crc_1byte;
crc_1byte = 0; //设定crc_1byte初值为0
for (i = 0; i < 8; i++)
{
if (((crc_1byte ^ abyte) & 0x01))
{
crc_1byte ^= 0x18;
crc_1byte >>= 1;
crc_1byte |= 0x80;
}
else
crc_1byte >>= 1;
abyte >>= 1;
}
return crc_1byte;
}
uchar calcrc_bytes(uchar* p, uchar len)
{
uchar crc = 0;
while (len--) //len为总共要校验的字节数
{
crc = calcrc_1byte(crc ^ *p++);
}
return crc; //若最终返回的crc为0,则数据传输正确
}
public static byte CRC8(byte[] buffer)
{
byte crc = 0;
for (int j = 0; j < buffer.Length; j++)
{
crc ^= buffer[j];
for (int i = 0; i < 8; i++)
{
if ((crc & 0x01) != 0)
{
crc >>= 1;
crc ^= 0x8c;
}
else
{
crc >>= 1;
}
}
}
return crc;
}