<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ò ) 收藏

4 碼的查表方法

上面的中,每次計算一組3字節的余項需要進(jìn)行8次循環(huán)操作,每次循環(huán)包括2字節的數據移動(dòng),和3次異或操作。對于時(shí)間要求嚴格的 數據采樣場(chǎng)合,速度可能跟不上。這時(shí)可以把對1字節通信數據的所有取值(共256個(gè))求得碼做成一個(gè)余項表,用查表的方法來(lái)代替余項的循環(huán)求取過(guò)程。

設一普通3字節碼為T(mén)abc=[a b c],把它分解為一特殊的后2字節為零的3字節序列Ta00=[a 00],和一個(gè)2字節序列Tbc=[b c],可以由多項式表

10.jpg

其中Qa00為整數的商式,Ra00和Tbc都是最高次不超過(guò)15的余項,它們的和就是Tabc(x)的余項。每次取信息碼的3字節序列Tabc,先查表得出其中Ta00(x)的余項Ra00(x),這是一個(gè)2字節的多項式,把它和余下的2字節序列Tbc進(jìn)行異或操作,得到新的3字節序列的高2字節,然后取信息碼的下一字節附于其后構成新的3字節序列再分解為T(mén)a00和,循環(huán)查表計算。運用這種方法可以很快求出多字節信息碼Mk的CRC冗余碼。

建立16位CRC的檢驗共需要2×256個(gè)字節。對于80C51系列的來(lái)說(shuō),存儲器ROM一般都有4KB以上的空間,容量上可以滿(mǎn)足要求。

下面給出CRC的求取

11.jpg

12.jpg

每種規則校驗碼的最高位都為1,為編程方便,將其最高位去掉,把校驗碼的位數湊成是一個(gè)字節的整數倍。CRC—CCITT的校驗式為G(x)=x16+x12+x5+1,去掉高位后,校驗碼為0001000000100001(1021H)。取一個(gè)用來(lái)比較的16位數CRC—BYTE=8000H,逐次比較信息碼的最高位是否為1,是則將1記錄在暫存單元CRC—Temp的最低位,如果是0,則低位左移入0,每次暫存單元和信息單元循環(huán)左移,相當于把信息字節的數據逐位從左移入暫存單元中。當暫存單元的最高位變?yōu)?,說(shuō)明已移入了16位數據,然后把暫存單元再左移一次,和16位校驗碼做異或操作,也就相當于進(jìn)行模2除。因為暫存單元被移出的最高位1和校驗碼被舍去的最高位1異或,其結果必然為零,也就等于進(jìn)行了17位異或操作。把所得的余式存放在暫存單元中,接著(zhù)循環(huán),直到將信息碼和補充在尾部的零字節都操作結束,把最后的余式復給CRC—Variable輸出,完成對一個(gè)余項式的處理。

這種方法的好處是很容易對8位或者32位的校驗式求取余項表進(jìn)行擴展,只需將CRC—MODEL改為8位或32位的校驗式模型,比較字節CRC— BYTE改為80H和800000H,追加末尾0字節LAST—BYTE改為1和4個(gè),然后再把對應于16位數據變量CRC—Variable的 unsigned short型,改為un-signed char或unsigned long就可以了。

13.jpg

5 結束語(yǔ)

利用CRC程序可以計算出各種標準下的CRC校驗冗余。在容量允許的情況下,可以利用查表進(jìn)行CRC校驗。在對時(shí)間要求不高、對存儲容量要求嚴格的場(chǎng)合,可以直接利用循環(huán)計算來(lái)求得余項。編程使用8051系列匯編語(yǔ)言,可以最少和高效的指令代碼。該程序算法也可應用于 M68HC和PIC17等系列單片機上。

參考文獻
[1]Joe Campbell著(zhù).徐國定,廖衛東譯.串行通訊C程序員指南[M].北京:清華大學(xué)出版社.1990.
[2]韓炬.CRC算法實(shí)現[J].煤炭科學(xué)技術(shù),2000,(2):11-15.

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>