• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > CRC校驗碼在單片機中的程序?qū)崿F(xiàn)及其冗余碼表的求取

    CRC校驗碼在單片機中的程序?qū)崿F(xiàn)及其冗余碼表的求取

    作者: 時間:2012-02-15 來源:網(wǎng)絡(luò) 收藏

    嵌入式系統(tǒng)與微機組成的工業(yè)檢測和數(shù)據(jù)采集系統(tǒng)中,計算機與之間經(jīng)常需要進行數(shù)據(jù)通信。在數(shù)字通信過程中,干擾有可能使接收到的二進制數(shù)和發(fā)送的不一致,造成“0”和“1”互變的差錯。一個實用的通信系統(tǒng)必需能發(fā)現(xiàn)這種差錯,并加以糾正或給出重新發(fā)送信息。(CyclicRedundancy Code循環(huán)冗余碼),也稱多項式編碼。是一種檢錯效率高、原理簡單、易于的通信編碼,是目前在數(shù)字通信領(lǐng)域應(yīng)用最為廣泛的一種檢驗方式。如16位的 —CCITT標(biāo)準(zhǔn)可以檢測出所有的單位錯、雙位錯、奇位數(shù)錯及小于等于16位的突發(fā)錯,大于17位的突發(fā)錯檢錯率為99.9984%[1]。可見, 碼的檢錯率要大大高于一般的奇偶。因此CRC可以應(yīng)用于重要數(shù)據(jù)的通信場合,如下位機運行狀態(tài)的檢測、運行模式或參數(shù)的在線重設(shè)置等。

    本文引用地址:http://www.czjhyjcfj.com/article/172105.htm

    對于8位的系統(tǒng),要CRC通信就必須編寫生成CRC碼的指令,且由于單片機的存儲器很少、運算速度也比較低,因此要求代 碼盡量少,算法必須簡單。下面將以CRC—CCITT標(biāo)準(zhǔn)為例來介紹CRC通信碼的單片機過程。

    1 CRC碼的構(gòu)成 

    4.jpg
      
    求得余式R(x),使等式左端的代數(shù)式恰為CRC校驗式G(x)的整數(shù)倍。則將其與待發(fā)送的數(shù)據(jù)多項式xr·M(x)相加得到的r+k次多項式的各個系數(shù)(mk-1,mk-2,…,m1,m0,rr-1,rr-2,…,r1,r0)作為編碼一起發(fā)送,其中高k位是信息位,低r位是附加校驗位。在數(shù)據(jù)接收端,再對接收到的信息碼進行校驗,如能被同 一個G(x)整除,則表明通信正確;若余數(shù)不為0,表示數(shù)據(jù)傳輸有誤,從而達(dá)到檢錯的目的。

    5.jpg

    CRC校驗雖然不能100%檢測出錯誤,但它的漏檢率相當(dāng)?shù)汀Bz概率和所選取的校驗標(biāo)準(zhǔn)相關(guān),國際上已有多種CRC校驗式標(biāo)準(zhǔn)。其中8位的CRC碼標(biāo)準(zhǔn)有CDT約定,其校驗式為G(x)=x8+x2+x+1;16位的標(biāo)準(zhǔn)有CCITT(國際電報電話咨詢委員會推薦)標(biāo)準(zhǔn)G(x)=x16+x12+x5+1,和IBM公司提出的CRC-16標(biāo)準(zhǔn)G(x)=x16+x12+x2+1;校驗錯誤效率最高的是具有32位CRC校驗碼的

    6.jpg

    2 多字節(jié)信息序列CRC碼的快速算法 

    假設(shè)需要傳送的一組信息碼N為k個字節(jié)二進制序列:
      Nk=[n1 n2……nk]

    其中的ni為信息碼中的各個字節(jié)。

    以16位校驗碼的CRC—CCITT標(biāo)準(zhǔn)來說明生成校驗冗余碼的快速算法。N(x)在計算冗余碼的時候應(yīng)該在后面補充兩個零字節(jié),作為待計算的信息碼。為方便起見,還統(tǒng)一用N(x)表示。

    對應(yīng)的前k-1個字節(jié)構(gòu)成的序列可以表示為:

    7.jpg

    關(guān)系,若已知算式Nk-1的余項Rk-1,就可以求得Nk的余項Rk,已知Rk-2,就可求得Rk-1,依次類推。因為校驗式G(x)的最高項為16次,x8 Rk-1(x)+nk(x)的最高冪次不超過23,所以最后可歸結(jié)為求[n1 n2 n3]3字節(jié)序列余項的問題,每次遞推都進行3字節(jié)的求余運算。按照上述的方法,很容易編制單片機上CRC校驗碼的實現(xiàn)程序。

    3 CRC校驗碼在51單片機上的實現(xiàn) 

    以CRC-CCITT標(biāo)準(zhǔn)為例,按前面多字節(jié)數(shù)據(jù)CRC冗余碼的構(gòu)造過程,51系列單片機計算多字節(jié)數(shù)據(jù)的CRC碼程序如下。其中,從31H開始存放信息字節(jié)數(shù)據(jù),算得校驗碼的高8位存于R3,低8位存于R4。

    8.jpg

    9.jpg

    51單片機相關(guān)文章:51單片機教程


    單片機相關(guān)文章:單片機教程


    單片機相關(guān)文章:單片機視頻教程


    單片機相關(guān)文章:單片機工作原理


    數(shù)字通信相關(guān)文章:數(shù)字通信原理



    上一頁 1 2 下一頁

    評論


    相關(guān)推薦

    技術(shù)專區(qū)

    關(guān)閉
    主站蜘蛛池模板: 明光市| 和龙市| 西充县| 聂拉木县| 永靖县| 阜新| 洛南县| 沭阳县| 岑溪市| 德惠市| 胶南市| 庆元县| 三门县| 涪陵区| 河池市| 南宁市| 竹溪县| 通辽市| 娄底市| 嘉兴市| 陇南市| 珲春市| 瑞丽市| 宿松县| 乐平市| 都江堰市| 阿合奇县| 普定县| 新蔡县| 靖西县| 南安市| 崇明县| 河北区| 晋宁县| 荣昌县| 隆化县| 尼木县| 铁岭市| 东乌珠穆沁旗| 缙云县| 宜春市|