欧美午夜精品理论片a级按摩,亚洲视频免费观看,欧美特黄一级,中文字幕一区二区av

我要找:  
您的位置:電源在線首頁(yè)>>行業(yè)資訊>>交流培訓(xùn)>>計(jì)算CRC-16循環(huán)冗余校驗(yàn)碼的C51程序正文

計(jì)算CRC-16循環(huán)冗余校驗(yàn)碼的C51程序

2008/2/4 11:22:44   深圳市諾順科技有限公司  供稿
分享到:

一、計(jì)算步驟:

1、定義一個(gè)初始值為FFFF的16位的組合變量(regs),該變量稱為CRC寄存器。

2、把欲發(fā)送或接收消息的高8位和CRC寄存器的底8位作異或運(yùn)算,并把結(jié)果在賦到CRC寄存器。

3、CRC寄存器右移1位(朝最低位),同時(shí)最高位添零。取出并檢查最低位是否為1。

4、如果為1,則CRC寄存器與多項(xiàng)式A001異或;如果為0,則重復(fù)第3步的動(dòng)作。

5、重復(fù)3和4直到完成了8次移位。這樣完整的8位字節(jié)將完成處理了。

6、對(duì)于下一個(gè)8位字節(jié)的處理就是重復(fù)第2步到第5步了

7、把所有的欲發(fā)送或接收消息這樣處理后,CRC寄存器里的值就是我們最終需要得到的CRC校驗(yàn)碼(在result中)。

二、C51源程序

/*CRC數(shù)組計(jì)算程序*/

#include <stdio.h>

typedef unsigned char uchar;//定義簡(jiǎn)寫(xiě)類(lèi)型

typedef unsigned short u16;//定義簡(jiǎn)寫(xiě)類(lèi)型

u16 result;//放計(jì)算后的CRC結(jié)果值

u16 len=6;//參與計(jì)算的數(shù)組個(gè)數(shù)(不包括CRC兩子節(jié))

//數(shù)組1

//uchar ppp[]={0xFF,0x03,0xC0,0x21,0x04,0x03,0x00,0x07,0x0D,0x03,0x06};

//CRC高節(jié)=0x9b,CRC低節(jié)=0x03,即result=0x9B03  len=11

//數(shù)組2

uchar ppp[]={0x64,0x03,0x00,0x0A,0x00,0x01};

//CRC高節(jié)=0xfd,CRC低節(jié)=0xad 即result=0xfdad len=6

//定義組合結(jié)構(gòu)

typedef union

{

    u16 val;

    struct

    {

        u16 bit0 : 1;

        u16 bit1 : 1;

        u16 bit2 : 1;

        u16 bit3 : 1;

        u16 bit4 : 1;

        u16 bit5 : 1;

        u16 bit6 : 1;

        u16 bit7 : 1;

        u16 bit8 : 1;

        u16 bit9 : 1;

        u16 bit10 : 1;

        u16 bit11 : 1;

        u16 bit12 : 1;

        u16 bit13 : 1;

        u16 bit14 : 1;

        u16 bit15 : 1;

    } bits;

} CRCREGS;

CRCREGS regs;

 

u16 CRCCheck(uchar *pp,u16 CRClen)

{

bit a;

int i,j;

regs.val=0xffff;

pp=&ppp[0];

for(i=0;i<CRClen;i++)

 {

  regs.val^=pp[i];

  for(j=0;j<8;j++)

   {

    a=regs.bits.bit0;

    regs.val>>=1;   

    if(a) regs.val^=0xA001;

   }

 }

  return regs.val;

}

 

/* 主程序 */

void main()

{

result=CRCCheck(ppp,len);

}

三、簡(jiǎn)要說(shuō)明

1、程序中列了兩組數(shù),可以做測(cè)試用,結(jié)果都在注釋中,注意 len 的值要與數(shù)組的個(gè)數(shù)相匹配,數(shù)組1為11,數(shù)組2為6;

2、regs.val是一個(gè)共用體變量,該變量既可以作為字用,也可以進(jìn)行位操作,詳細(xì)情況請(qǐng)參照變量union和共用和struct結(jié)構(gòu)類(lèi)型體說(shuō)明;

3、在主程序中直接調(diào)用result=CRCCheck(ppp,len);即可得到CRC-16結(jié)果,注意ppp是一個(gè)數(shù)組變量,在函數(shù)中是當(dāng)成數(shù)組變量指針用的。

本人參考了許多資料,通過(guò)反復(fù)修本人認(rèn)為是比較精練的C51程序,完全可以直接用到編程中去。希望能夠?qū)ν杏兴鶐椭?
   免責(zé)聲明:本文僅代表作者個(gè)人觀點(diǎn),與電源在線網(wǎng)無(wú)關(guān)。其原創(chuàng)性以及文中陳述文字和內(nèi)容未經(jīng)本站證實(shí),對(duì)本文以及其中全部或者部分內(nèi)容、文字的真實(shí)性、完整性、及時(shí)性本站不作任何保證或承諾,請(qǐng)讀者僅作參考,并請(qǐng)自行核實(shí)相關(guān)內(nèi)容。
本文鏈接:計(jì)算CRC-16循環(huán)冗余校驗(yàn)碼的C51
http:www.mangadaku.com/news/2008-2/200824112244.html
  投稿熱線 0755-82905460    郵箱  :news@cps800.com
關(guān)于該條新聞資訊信息已有0條留言,我有如下留言:
請(qǐng)您注意:
·遵守中華人民共和國(guó)的各項(xiàng)有關(guān)法律法規(guī)
·承擔(dān)一切因您的行為而導(dǎo)致的法律責(zé)任
·本網(wǎng)留言板管理人員有權(quán)刪除其管轄的留言內(nèi)容
·您在本網(wǎng)的留言內(nèi)容,本網(wǎng)有權(quán)在網(wǎng)站內(nèi)轉(zhuǎn)載或引用
·參與本留言即表明您已經(jīng)閱讀并接受上述條款
用戶名: 密碼: 匿名留言   免費(fèi)注冊(cè)會(huì)員
關(guān)鍵字:
        
按時(shí)間:
關(guān)閉
主站蜘蛛池模板: 门源| 泾川县| 波密县| 蛟河市| 内黄县| 神木县| 高雄市| 定陶县| 新昌县| 桑日县| 清河县| 桦川县| 南木林县| 玉山县| 丰城市| 新乐市| 察哈| 通渭县| 阳西县| 南漳县| 休宁县| 子长县| 临泽县| 富蕴县| 六盘水市| 凤翔县| 调兵山市| 旬邑县| 夹江县| 大姚县| 儋州市| 唐河县| 镇安县| 临海市| 西华县| 津市市| 股票| 尉氏县| 横峰县| 弥勒县| 华池县|