📄 c51 crc16.txt
字号:
C51编程:再求助? [tonysoso] [30次] 01-9-14 上午 08:55:38
最近和别人一起做项目,给了个crc校验,不知道到是怎样的?请大家告述我。谢谢何苦,告述了
我一些,我有点懂了,但还是不太清楚,我太笨了。
开始——〉CRC=OA001H,VOLUE=0FFFFH——〉CV=DATA——〉
VOLUE=VOLUE(XORB)CV——〉COUNT=8——〉IF VOLUE,00=0?
1> YES ——〉VOLUE 右移1位——〉IF COUNT-1=0? (等于0,则结束;否则返回IF
VOLUE,00=0? 语句。)
2〉NO ——〉 VOLUE 右移1位, VOLUE=VOLUE(XORB)CRC ——〉IF COUNT-1=0?
(等于0,则结束;否则返回IF VOLUE,00=0?语句。)
其中: XORB—— 异或
VOLUE——校验值
DATA——数据
COUNT——8位计数
VOLUE,00——VOLUE的最低位
CRC多项式----X^15+X^13+1
是不是上面的流程,就是校验的产生方法?我想知道第一个字节送给cv,进行运算,都到一个
volue,我想问,第二个字节是不是直接从cv=data开始运算? 我可不可以直接把字节,当作
x代入多项式进行运算? 如果行,那不是每个字节都有,一个校验码?最有我怎么都到只有一个
字节的校验码? 我发现我真的太笨了,不好意思,帮帮我
贴上一个C51 CRC16 效验的源程序 [shiaf] [66次] 01-9-14 上午 09:08:17
#pragma small
#include <reg52.h>
unsigned int CRC_16(unsigned int c,unsigned char d);
void main(void)
{
unsigned char crcbuff[] = {31,3,0,1,0,7};
unsigned char a;
unsigned int crc16 = 0xffff;
for(a=0;a<6;a++)
{
crc16 = CRC_16(crc16,crcbuff[a]);
}
}
unsigned int CRC_16(unsigned int c,unsigned char d)
{
unsigned int data e;
unsigned char data f;
e = c^(unsigned int)d;
for(f=0;f<8;f++)
{
if(e&1)
{
e >>= 1;
e ^= 0xa001;
}
else e >>= 1;
}
return e;
}
谁能说说原理 [冰雪人] [0次] 01-9-21 下午 07:23:51
up [冰雪人] [0次] 01-9-21 下午 09:47:42
点击这里回复这篇贴子>>
_____________________________________________________________________________
Copyright?,C51BBS论坛 2000-2001
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -