<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > CRC校驗碼在單片機中的程序實(shí)現及其冗余碼表的求取

CRC校驗碼在單片機中的程序實(shí)現及其冗余碼表的求取

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

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

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

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

1 CRC碼的構成 

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

5.jpg

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

6.jpg

2 多字節信息序列CRC碼的快速算法 

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

其中的ni為信息碼中的各個(gè)字節。

以16位校驗碼的CRC—CCITT標準來(lái)說(shuō)明生成校驗冗余碼的快速算法。N(x)在計算冗余碼的時(shí)候應該在后面補充兩個(gè)零字節,作為待計算的信息碼。為方便起見(jiàn),還統一用N(x)表示。

對應的前k-1個(gè)字節構成的序列可以表示為:

7.jpg

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

3 CRC校驗碼在51單片機上的實(shí)現 

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

8.jpg

9.jpg

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


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


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


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


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



上一頁(yè) 1 2 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>