找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7047|回复: 0
打印 上一主题 下一主题
收起左侧

原创crc8计算方法,直截了当,一看就懂

[复制链接]
跳转到指定楼层
楼主
ID:99556 发表于 2015-12-19 18:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

计算原理:首先把前面两个数据整合成一个16bit数据,对多项式进行异或运算,求出余数再加上后面的一个字节数据,在进行求余,以此类推,加到最后一个数据结束后,别忘了后面还需要对数据进行补充8个0,于是在左移动8位,对多项式求余数,最后所得为crc值。

uchar crc_8(uchar data_1,uchar data_2,uchar data_3,uchar data_4)

{

long data,crc_cal,msb_det;

uchar bit_num=16;

uint crc_data;

crc_cal=0x107;//

msb_det=0x8000;

data=data_1;

data<<=8;

data=data+data_2;

while(bit_num>=9)

{

if ((data&msb_det)==0)//判断最高位

{ msb_det=msb_det>>1;

bit_num--;

}

data=data^(crc_cal<<(bit_num-9));

}

data=(data<<8)|data_3;

bit_num=bit_num+8;

msb_det=0x8000;

while(bit_num>=9)

{

if ((data&msb_det)==0)//判断最高位

{ msb_det=msb_det>>1;

bit_num--;

}

data=data^(crc_cal<<(bit_num-9));

}

data=(data<<8)|data_4;

bit_num=bit_num+8;

msb_det=0x8000;

while(bit_num>=9)

{

if ((data&msb_det)==0)//判断最高位

{ msb_det=msb_det>>1;

bit_num--;

}

data=data^(crc_cal<<(bit_num-9));

}

data=data<<8;

bit_num=bit_num+8;

msb_det=0x8000;

while(bit_num>=9)

{

if ((data&msb_det)==0)//判断最高位

{ msb_det=msb_det>>1;

bit_num--;

}

data=data^(crc_cal<<(bit_num-9));

}

crc_data=data;

return crc_data;

}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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