高级会员

- 积分
- 548
- 金钱
- 548
- 注册时间
- 2017-10-17
- 在线时间
- 119 小时
|
本帖最后由 冯必兴 于 2022-9-23 18:28 编辑
uint8_t crc8( uint8_t * p_buffer, uint16_t buf_size )
{
uint8_t crc = 0;
uint8_t i=0;
if(buf_size <= 0)
{
return crc;
}
while( buf_size-- )
{
for ( i = 0x80; i != 0; i /= 2 )
{
if ( (crc & 0x80) != 0)
{
crc *= 2;
crc ^= 0x07;
}
else
{
crc *= 2;
}
if ( (*p_buffer & i) != 0 )
{
crc ^= 0x07;
}
}
p_buffer++;
}
return crc;
}
uint8_t crc8_MAXIM(uint8_t *data, uint8_t len)
{
uint8_t crc, i;
crc = 0x00;
while(len--)
{
crc ^= *data++;
for(i = 0;i < 8;i++)
{
if(crc & 0x01)
{
crc = (crc >> 1) ^ 0x8c;
}
else crc >>= 1;
}
}
return crc;
}
交换Byte的高低位的算法(蝶式交换法)
uint8_t Byte_shift(uint8_t data)
{
data = (data << 4)|(data >> 4);
data = ((data << 2) & 0xcc) | ((data >> 2) & 0x33);
data = ((data << 1) & 0xaa) | ((data >> 1) & 0x55);
return data;
}
static uint16_t crc16_moubus (unsigned char* data_value, unsigned char data_length)
{
int i;
unsigned short crc_value = 0xffff;
while (data_length--)
{
crc_value ^= *data_value++;
for (i = 0; i < 8; i++)
{
if (crc_value & 0x0001)
crc_value = (crc_value >> 1) ^ 0xA001;
else
crc_value = crc_value >> 1;
}
}
return(crc_value);
}
|
|