色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應用 > 循環(huán)冗余校驗碼的單片機及CPLD實現(xiàn)

          循環(huán)冗余校驗碼的單片機及CPLD實現(xiàn)

          作者: 時間:2012-03-20 來源:網(wǎng)絡 收藏

          1 基本原理

          本文引用地址:http://cafeforensic.com/article/171833.htm

          串行數(shù)據(jù)的差錯檢驗是保證數(shù)據(jù)正確的必要手段,通常采用奇遇法和冗余法。這兩種方法都是通過冗余數(shù)據(jù)來提供必要信息。奇偶法適用于以字節(jié)為單位數(shù)據(jù)傳輸。例如用偶校驗傳送1個ASCII字符時,要附加1個校驗位,從而使全部9位中“1”的個數(shù)為偶數(shù)。奇偶校驗簡單易行,但當數(shù)據(jù)崩潰或出現(xiàn)多位錯誤時,往往不能檢驗出來,因而可靠性不高。

          冗余碼校驗法利用了和反饋機制,校驗碼由輸入數(shù)據(jù)與歷史數(shù)據(jù)經(jīng)過較為復雜的運算而得到。因此,冗余碼包含了更為豐富的數(shù)據(jù)間的信息,可靠性更高。校好的循環(huán)冗余碼可校驗出以下錯誤:①全部數(shù)據(jù)位任意奇數(shù)個位出錯;②全部數(shù)據(jù)位中任意連續(xù)2位出錯;③處于一個8位時間窗內(nèi)的任1~8位數(shù)據(jù)出錯。

          使用循環(huán)冗余碼校驗方法通信時,發(fā)送方先計算待發(fā)數(shù)據(jù)的校驗碼,然后將數(shù)據(jù)與校驗碼起發(fā)出;接收方接收數(shù)據(jù)的同時進行循環(huán)冗余碼的計算,并將計算結(jié)果與來自發(fā)送方的校驗碼相比較,如不相同表示傳輸過程中出現(xiàn)了錯誤,接收方必須通知發(fā)送方再次發(fā)送該組數(shù)據(jù)。

          假設(shè)要傳輸64位數(shù)據(jù)(最后8位是校驗碼),并使用多項式x8+x5+x4+1來產(chǎn)生8位循環(huán)冗余校驗碼(以下簡稱CRC碼)。其邏輯結(jié)構(gòu)可用異或門和移位寄存器表示,如圖1所示。寄存器的值即為輸入數(shù)據(jù)的CRC碼。首先來輸入數(shù)據(jù)與最低位的異或值,如為“0”,只需將當前CRC碼邏輯右移1位(首位補零),即可得到新CRC碼;如為“1”,則將當前CRC碼與18H異或,再循環(huán)右移1位即可。該校驗碼有以下特點:①當輸入的8位數(shù)據(jù)(低位在前)與當前 CRC碼相同時,輸出的CRC碼將是零。因此,當包含8位CRC碼的全部64位數(shù)據(jù)輸入后,輸出的CRC碼應為零。②只要有非零位即可判決傳輸錯誤,而必復雜的校驗技術(shù)。

          39.gif

          2 用匯編語言產(chǎn)生循環(huán)冗長余校驗碼

          在8051上,由以下代碼可得8位CRC碼(存于變量CRC中),8位輸入數(shù)據(jù)暫存于ACC中。
          DO_CRC:PUSH ACC ;保存輸入數(shù)據(jù)
          PUSH B ;保存B寄存器
          PUSH ACC ;再次保存
          MOV B,#8 ;共有8位數(shù)據(jù)
          CRC_LOOP:XRL A,CRC
          RRC A ;將最低位與輸入數(shù)據(jù)的異或值放入進位標志中
          MOV A,CRC
          JNC ZERO
          XRL A,#18H;當前CRC碼與18H異或
          ZERO: RRC A ;右移1位
          MOV CRC,A ;保存新CRC碼
          POP ACC
          RR A ;取出輸入數(shù)據(jù)的第2位
          PUSH ACC
          DJNZ B,CRC_LOOP ;循環(huán)
          POP ACC
          POP B
          POP ACC ;恢復各寄存器
          RET

          上述程序?qū)γ恳晃惠斎霐?shù)據(jù)都要執(zhí)行一系列操作,運算量很大,但內(nèi)存占用少,適合于內(nèi)存緊張的情況。當內(nèi)存充裕時,可以使用效率更高的查表法。

          3 用查表法求CRC碼

          將輸入數(shù)據(jù)按字節(jié)分開,每字節(jié)值在0~255之間。令當前CRC碼為00H,當分別輸入0~255時,得到256個CRC碼。將它們順序排列就構(gòu)成了循環(huán)冗余校驗碼表。用當前CRC碼與輸入字節(jié)異或后的值作為下標,查表即可求出新CRC碼。下例中,crc存放CRC碼,ACC存放輸入字節(jié), crc_table為循環(huán)冗余校驗表的入口地址。代碼如下:
          XRL A,crc ;當前CRC碼與輸入數(shù)據(jù)異或
          PUSH DPH
          PUSH DPL ;保存數(shù)據(jù)指針
          MOV DPTR #crc_table
          MOVC A,@A+DPTR;查表
          MOV crc,A
          POP DPL
          POP DPH ;恢復數(shù)據(jù)指針
          RET
          crc_table:
          DB 00H,5EH,BCH,E2H,61H,3FH,DDH,83H
          DB C2H,9CH,7EH,20H,A3H,FDH,1FH,41H
          DB 9DH,C3H,21H,7FH,FCH,A2H,40H,1EH
          ……


          上一頁 1 2 下一頁

          評論


          相關(guān)推薦

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

          關(guān)閉