⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 c51 crc16.txt

📁 c51源程序总结
💻 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 + -