CRC校驗最終個人總結(jié)
CRC校驗最終個人總結(jié):某二進制信息碼(kn)的CRC校驗需選
擇一個合適的g(x)除數(shù)(校驗因子)如:CRC-7為X+X+1=10001001
73寬度為7,此校驗因子根據(jù)設(shè)計的需求來選擇(如:CRC-32/CRC-16)。注意,在計算CRC前必須將二進制信息碼左移7位(kn*2),這里的7來源于所選擇的檢驗因子的寬度。然后,再與除數(shù)進行模2運算(從kn的最高位開始和除數(shù)進行異或運算)。最后所剩的寬度為7的7位余數(shù)就是最終CRC計算結(jié)果(當(dāng)計算到只剩7位余數(shù)時就不要再計算了)。之后就可以將經(jīng)過CRC校驗后的信息碼+CRC一起發(fā)送給對方,對方收到添有CRC的信息碼后,將這串代碼再和校驗因子進行異或運算看結(jié)果是否為0。例如:kn=01000000=0x40g(x)=X+X+1=10001001寬度為7
1:移位01000000左移7位=100000000000002:異或運算
10000000000000
10001001校驗因子1001000000
10001001
1100100最終CRC計算結(jié)果3:傳輸發(fā)送
10000001100100
信息碼CRC結(jié)果4:接收檢驗
10000001100100
10001001校驗因子1000100100
10001001校驗因子0
73擴展閱讀:單片機crc校驗實驗報告
單片機課程總實驗
實現(xiàn)CRC校驗
一、實驗?zāi)康?/p>
⒈通過學(xué)習(xí)CRC原理,驗證,檢錯,掌握其工作原理;⒉編寫CRC編碼程序;
⒊總結(jié)實驗過程,編寫提交實驗報告:方案、編程、調(diào)試、結(jié)果、分析、結(jié)論。二、實驗要求
用單片機實現(xiàn)CRC校驗碼(10比特數(shù)據(jù)或任意數(shù)據(jù)長度、生成多項式用G(x)=x5+x4+x2+1),校驗碼顯示在單片機實驗系統(tǒng)數(shù)碼管上。二、實驗器材
1、裝有KeilC51開發(fā)工具的PC機一臺
2、TD-PIT/TD-PIT-B實驗裝置一套
三、實驗原理
1.設(shè)置CRC寄存器,并給其賦初始值。
2.將數(shù)據(jù)的第一個8-bit字符與16位CRC寄存器的低8位進行異或,并把結(jié)果存入CRC寄存器。
3.CRC寄存器向右移一位,最高位補零,移出并檢查最低位。
4.如果LSB為0,重復(fù)第三步;若LSB為1,CRC寄存器與多項式碼相異或。5.重復(fù)第3與第4步直到8次移位全部完成。此時一個8-bit數(shù)據(jù)處理完畢。6.重復(fù)第2至第5步直到所有數(shù)據(jù)全部處理完成。
7.最終CRC寄存器的內(nèi)容即為CRC值。常用的CRC循環(huán)冗余校驗標(biāo)準(zhǔn)多項式如下:CRC(12位)=X12+X11+X3+X2+X+1CRC(16位)=X16+X15+X2+1CRC(CCITT)=X16+X12+X5+1CRC(32位)=X32+X26+X23+X16+X12+X11+X10+X8+X7+X5+X4+X2+X+1以CRC(16位)多項式為例,其對應(yīng)校驗二進制位列為11000000000000101本次實驗以10比特為例。顯示到六位數(shù)碼管中。
其實驗連接圖如下圖所示。四、實驗步驟
1.打開KeilC51開發(fā)工具,新建開發(fā)工具,并保存至相應(yīng)路徑。2.新建文件,編寫代碼。
3.按照實驗連線圖在實驗箱上連線。
4.編譯運行代碼勿誤后,打開實驗箱,點擊調(diào)試,運行。
五、實驗結(jié)果
經(jīng)過調(diào)試程序,在實驗箱數(shù)碼管上顯示二進制數(shù)001110.
六、實驗源代碼#include"Absacc.h"
#defineC8255_AXBYTE[0x7F00]//8255端口地址定義#defineC8255_BXBYTE[0x7F01]#defineC8255_CXBYTE[0x7F02]#defineC8255_CONXBYTE[0x7F03]//數(shù)碼管顯示編號
unsignedchara[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,
0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsignedcharb[]={0x00,0x00,0x00,0x00,0x00,0x00};longMD;longGD;
voiddelay(unsignedinttime){unsignedinti;for(i=0;i
C8255_B=a[b[i]];//查表輸出顯示C8255_A=j;delay(0x100);j=(j>>1)|(j=1;MD=tmp;
tmp=GD;//數(shù)GD有多少位tmp用于暫存GDfor(count_GD=0;GD!=0;count_GD++)GD>>=1;GD=tmp;
//構(gòu)造CRC碼序列
for(tmp=1;tmp
{if(tst0==(tst0&MD))//MD與最高位為1當(dāng)除不盡時最高位為0,
//余數(shù)比除數(shù)少一位
{MD^=GD;//異或除法,被除數(shù)應(yīng)該異或之后少一位}
tst0>>=1;//位數(shù)減一,最高位降低一位
GD>>=1;//除數(shù)保持和被除數(shù)最高位對齊,相當(dāng)于豎式除法左對齊}i=0;
while(1)//轉(zhuǎn)化為2進制輸出,16進制數(shù)模2取余,移位{b[i]=MD%2;i++;MD/=2;if(MD==0||i>6)break;}}
voidmain(){
C8255_CON=0x81;//8255初始化CRC_check(0x28D,0x35);//16進制
while(1)//顯示{
display();delay(0x80);clear();
}}七、實驗心得
實驗指導(dǎo)書上寫的還是很好懂,只是最初接觸的時候確實感覺代碼好多陌生,因為這個調(diào)用機制,變量基本上都是公有變量,直接在函數(shù)里面使用,賦值,在另一個函數(shù)里面接著用?雌饋砗瘮(shù)都是無參和無返回值的。不過后來仔細看了之后發(fā)現(xiàn)這個了之后,使用起來還是蠻順手的了。雖然還是習(xí)慣使用帶參數(shù)的函數(shù),但是不用寫返回值這一點倒也能適應(yīng)。在除法實現(xiàn)方面,通過百度找到了一種模擬豎式除法的方式,左對齊,異或,根據(jù)結(jié)果商數(shù),再左對齊,異或。如此就采用了除數(shù)與被除數(shù)位數(shù)對齊,除數(shù)不足位數(shù)補0的方式,因為0與任何數(shù)異或還是它本身,所以用0補足之后,除數(shù)和被除數(shù)整體異或的結(jié)果和豎式除法左對齊異或的結(jié)果是一樣的。M位除以N位,每次異或之后結(jié)果會降低一位,最終會得到M-N+1位商和N-1位余數(shù)或者0余數(shù)。
友情提示:本文中關(guān)于《CRC校驗最終個人總結(jié)》給出的范例僅供您參考拓展思維使用,CRC校驗最終個人總結(jié):該篇文章建議您自主創(chuàng)作。
來源:網(wǎng)絡(luò)整理 免責(zé)聲明:本文僅限學(xué)習(xí)分享,如產(chǎn)生版權(quán)問題,請聯(lián)系我們及時刪除。