OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4451|回复: 0

CRC16_MODBUS_CRC8,CRC8_MAXIM 校验算法

[复制链接]

13

主题

49

帖子

0

精华

高级会员

Rank: 4

积分
548
金钱
548
注册时间
2017-10-17
在线时间
119 小时
发表于 2022-8-30 11:59:52 | 显示全部楼层 |阅读模式
本帖最后由 冯必兴 于 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);
}





正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-26 04:27

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表