版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)專心-專注-專業(yè)精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)題目名稱:用模2除法計(jì)算CRC碼的CRC校驗(yàn)軟件設(shè)計(jì)引言: 循環(huán)冗余碼 CRC 檢驗(yàn)技術(shù)廣泛應(yīng)用于測(cè)控及通信領(lǐng)域,CRC計(jì)算可以靠專用的硬件來(lái)實(shí)現(xiàn),但是對(duì)于低成本的微控制器系統(tǒng),在沒(méi)有硬件支持下實(shí)現(xiàn)CRC檢驗(yàn),關(guān)鍵的問(wèn)題就是如何通過(guò)軟件來(lái)完成CRC計(jì)算,也就是CRC算法的問(wèn)題。實(shí)驗(yàn)設(shè)計(jì)要求:C3用模2除法計(jì)算CRC碼的CRC校驗(yàn)軟件設(shè)計(jì)環(huán)境要求:Windows2000/XP/7;C;信息交換內(nèi)容為文本文件;信息交換方式為共享文件編碼要求:生成多項(xiàng)式為CRC-CCITT功
2、能要求:能在兩臺(tái)計(jì)算機(jī)機(jī)上運(yùn)行程序,一臺(tái)產(chǎn)生CRC碼,另一臺(tái)校驗(yàn)。課程設(shè)計(jì)目標(biāo): 用C語(yǔ)言設(shè)計(jì)課程程序,完成用模2出發(fā)計(jì)算CRC碼的CRC校驗(yàn)軟件設(shè)計(jì),掌握CRC碼的計(jì)算方法;掌握用C語(yǔ)言計(jì)算CRC碼的算法;熟練并掌握C語(yǔ)言在通信網(wǎng)絡(luò)中的編程實(shí)現(xiàn)方式及功能CRC 簡(jiǎn)介 CRC 校驗(yàn)的基本思想是利用線性編碼理論,在發(fā)送端根據(jù)要傳送的 k 位二進(jìn)制碼序列,以一定的規(guī)則產(chǎn)生一個(gè)校驗(yàn)用的監(jiān)督碼(既 CRC 碼)r 位,并附在信息后邊,構(gòu)成一個(gè)新的二進(jìn)制碼序列數(shù)共(k+r)位,最后發(fā)送出去。在接收端,則根據(jù)信息碼和 CRC碼之間所遵循的規(guī)則進(jìn)行檢驗(yàn),以確定傳送中是否出錯(cuò)。16 位的 CRC 碼產(chǎn)生的規(guī)則
3、是先將要發(fā)送的二進(jìn)制序列數(shù)左移 16 位(既乘以 162 )后,再除以一個(gè)多項(xiàng)式,最后所得到的余數(shù)既是 CRC 碼,如式(2-1)式所示,其中 B(X)表示 n 位的二進(jìn)制序列數(shù),G(X)為多項(xiàng)式,Q(X)為整數(shù),R(X)是余數(shù)(既 CRC 碼)。 (2-1)求CRC碼所采用模 2 加減運(yùn)算法則,既是不帶進(jìn)位和借位的按位加減,這種加減運(yùn)算實(shí)際上就是邏輯上的異或運(yùn)算,加法和減法等價(jià),乘法和除法運(yùn)算與普通代數(shù)式的乘除法運(yùn)算是一樣,符合同樣的規(guī)律。生成CRC碼的多項(xiàng)式如下,其中CRC-16 和CRC-CCITT產(chǎn)生 16 位的CRC碼,而CRC-32 則產(chǎn)生的是 32 位的CRC碼。 接收方將接收到
4、的二進(jìn)制序列數(shù)(包括信息碼和 CRC 碼)除以多項(xiàng)式,如果余數(shù)為0,則說(shuō)明傳輸中無(wú)錯(cuò)誤發(fā)生,否則說(shuō)明傳輸有誤,關(guān)于其原理這里不再多述。用軟件計(jì)算 CRC 碼時(shí),接收方可以將接收到的信息碼求 CRC 碼,比較結(jié)果和接收到的 CRC 碼是否相同。CRC原理:CRC碼為循環(huán)冗余校驗(yàn)碼,基本表示方式為(n,k),其中n為數(shù)據(jù)位數(shù),k為校驗(yàn)碼位數(shù)。CRC碼校驗(yàn)的基本思想是利用線性編碼理論,在發(fā)送端根據(jù)要傳送的(n,k)位二進(jìn)制碼序列,以一定的規(guī)則產(chǎn)生一個(gè)校驗(yàn)用的監(jiān)督碼(既CRC碼)r位,并附在信息后邊,構(gòu)成一個(gè)新的二進(jìn)制碼序列數(shù)共(k+r)位,最后發(fā)送出去。在接收端,則根據(jù)信息碼和CRC碼之間所遵循的規(guī)
5、則進(jìn)行檢驗(yàn),以確定傳送中是否出錯(cuò)。采用CRC校驗(yàn)時(shí),發(fā)送方和接收方用同一個(gè)生成多項(xiàng)式g(x),并且g(x)的首位和最后一位的系數(shù)必須為1。CRC的處理方法是:發(fā)送方以g(x)去除t(x),得到余數(shù)作為CRC校驗(yàn)碼。校驗(yàn)時(shí),以計(jì)算的校正結(jié)果是否為0為據(jù),判斷數(shù)據(jù)幀是否出錯(cuò)。CRC校驗(yàn)可以100地檢測(cè)出所有奇數(shù)個(gè)隨機(jī)錯(cuò)誤和長(zhǎng)度小于等于k(k為g(x)的階數(shù))的突發(fā)錯(cuò)誤。所以CRC的生成多項(xiàng)式的階數(shù)越高,那么誤判的概率就越小。對(duì)于一個(gè)二進(jìn)制序列數(shù)可以表示為式(3-1):求此二進(jìn)制序列數(shù)的 CRC 碼時(shí),先乘以216 后(既左移 16 位),再除以多項(xiàng)式 G(X),所得的余數(shù)既是所要求的 CRC 碼。
6、如式(3-2)所示:可以設(shè): 其中Qn(X ) 為整數(shù), Rn (X )為 16 位二進(jìn)制余數(shù)。將式(3-3)代入式(3-2)得:可以設(shè):其中Qn-1 ( X ) 為整數(shù),Rn-1( X ) 為 16 位二進(jìn)制余數(shù) ,將式(3-5)代入式(3-4),如上類推,最后得到:根據(jù)CRC的定義,很顯然,十六位二進(jìn)制數(shù) R0(X)既是我們要求的CRC碼。式(3-5)是編程計(jì)算 CRC 的關(guān)鍵,它說(shuō)明計(jì)算本位后的 CRC 碼等于上一位 CRC 碼乘以 2 后除以多項(xiàng)式,所得的余數(shù)再加上本位值除以多項(xiàng)式所得的余數(shù)。以下為求循環(huán)冗余碼的函數(shù):int crc_CCITT(int data_crc) int da
7、ta,ax,bx,cx; int px=0 x11021; data=data_crc; ax=0;bx=0; data15; data0;cx-) if(ax16)&0 x1=0 x1) ax=axpx; ax31; data16)&0 x1=0 x1) ax=axpx;return ax; 這段代碼首先將data數(shù)據(jù)左移16位,即將數(shù)據(jù)乘以2的16次方,將數(shù)據(jù)的前17位放到ax中,ax存放的是每次與px做模二加的數(shù)據(jù),同時(shí)data的前16位刪除,接下來(lái)的循環(huán)操作是先判斷ax數(shù)據(jù)的第17位是否為1,如果為1,則與px異或,即做模二加,如果不為1,則不作任何操作,然后將ax左移一位,因上面的操
8、作已將data的第17位置0,所以左移一位不會(huì)改變數(shù)據(jù),然后將data中的第一位數(shù)據(jù)放到data的第1位,刪除data的第一位,此操作后ax又變?yōu)槔?7位操作數(shù),循環(huán)結(jié)束后,已經(jīng)將所有的數(shù)據(jù)都操作完,但是此時(shí)的余數(shù)為17位,我們需要的結(jié)果為16位,所以,還要又一次數(shù)據(jù)操作,即判斷此時(shí)的ax第17位是否為1,如果為1,則與px模二加,得到最后的結(jié)果,如果不是1,則這時(shí)的結(jié)果即使我們需要的結(jié)果。設(shè)計(jì)的功能:1、用模二除法計(jì)算CRC碼的CRC校驗(yàn)軟件設(shè)計(jì),生成多項(xiàng)式為CRC-CCITT。2、能在兩臺(tái)計(jì)算機(jī)機(jī)上運(yùn)行程序,一臺(tái)產(chǎn)生CRC碼,另一臺(tái)校驗(yàn)。信息交換內(nèi)容為文本文件;信息交換方式為共享文件。3、
9、環(huán)境要求:Windows2000/XP/7 C。程序流程圖:發(fā)送端(電腦甲) -文件共享-接收端(電腦乙)開(kāi)始開(kāi)始讀取code.txt到code輸入數(shù)據(jù)存入code接收的數(shù)據(jù)模二除多項(xiàng)式g(x)得到余項(xiàng)result計(jì)算CRC余項(xiàng)result=0?將CRC余項(xiàng)接在code的后面賦給codeCRC存入crc.txtcode存入code.txt傳輸失敗傳輸正確,顯示信息碼結(jié)束結(jié)束程序清單:發(fā)送端:#include #include int crc;int crc_CCITT(int data_crc) int data,ax,bx,cx; int px=0 x11021; data=data_crc
10、; ax=0;bx=0; data15; data0;cx-) if(ax16)&0 x1=0 x1) ax=axpx; ax31; data16)&0 x1=0 x1) ax=axpx; data_crc=16; crc=ax; data_crc=data_crc+ax; printf(px=0 x%xn,px); printf(crc=%xn,crc); printf(code=%xn,data_crc); return data_crc;main() FILE *fp_crc,*fp_code; int crcnum; int ch; printf(n); printf(請(qǐng)輸入數(shù)據(jù):n)
11、; scanf(%x,&ch); crcnum=crc_CCITT(ch); fp_code=fopen(C:UsersyujunDesktop新建文件夾code.txt,w); fp_crc=fopen(C:UsersyujunDesktop新建文件夾crc.txt,w); fprintf(fp_code,%x,crcnum); fprintf(fp_crc,%x,crc); fclose(fp_crc); fclose(fp_code); printf(n); system(pause);接收端:#include #include int crc_CCITT(int data_crc) l
12、ong int data,ax,bx,cx; long int px=0 x11021; data=data_crc; ax=0;bx=0; data15; data0;cx-) if(ax16)&0 x1=0 x1) ax=axpx; ax31; data16)&0 x1=0 x1) ax=axpx; return ax;main() FILE *fp_code; int data_t; int ax,ch,crc; int n=16; fp_code=fopen(C:UsersyujunDesktop新建文件夾code.txt,r); fscanf(fp_code,%x,&ch); fcl
13、ose(fp_code); printf(n); printf(t文件讀出數(shù)據(jù)為:%xn,ch); ax=chn; crc=crc_CCITT(ax); ch=n; if(crcch=0) printf(t數(shù)據(jù)傳送準(zhǔn)確無(wú)誤n); printf(tcrc校驗(yàn)碼為%xn,crc); else printf(數(shù)據(jù)錯(cuò)誤!); printf(nt); system(pause);測(cè)試數(shù)據(jù)及其結(jié)果發(fā)送端:接收端:數(shù)據(jù)計(jì)算:Px=0 x11021=();Data=0 x2365=(101)2; 110 丿 10110 (10110)2=0 x6fb6; 正確數(shù)據(jù)計(jì)算??偨Y(jié): 兩周的課程設(shè)計(jì)結(jié)束了,在這次的課程設(shè)計(jì)中不僅檢驗(yàn)了我所學(xué)習(xí)的知識(shí),也培養(yǎng)了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情。在設(shè)計(jì)中和同學(xué)們相互探討,相互學(xué)習(xí),相互監(jiān)督。學(xué)會(huì)了合作,學(xué)會(huì)了運(yùn)籌帷幄,學(xué)會(huì)了寬容,學(xué)會(huì)了理解,也學(xué)會(huì)了做人與處世?;仡櫰鸫舜握n程設(shè)計(jì),至今我仍感慨頗多,的確,從從拿到題目到完成整個(gè)編程,從理論到實(shí)踐,在兩周的日子里看了大半天終于看懂了,看來(lái)看書(shū)得積極主動(dòng)一點(diǎn):CRC說(shuō)了那么多實(shí)則是用一個(gè)規(guī)定的多項(xiàng)式(假設(shè)最高次是r,當(dāng)然包含r+1位)把要發(fā)送的數(shù)據(jù)左移r位后,再去除那個(gè)多項(xiàng)式,當(dāng)然會(huì)得到一個(gè)余數(shù)(設(shè)為r(x),)那么這
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024簡(jiǎn)單家具維修合同范本
- 2024年加工承攬合同標(biāo)的與質(zhì)量標(biāo)準(zhǔn)
- 2024建筑材料采購(gòu)合同范本下載
- 2024年度公園綠化樹(shù)苗采購(gòu)合同
- 2024年山東濰坊物業(yè)委托管理合同
- 迷霧解說(shuō)課件教學(xué)課件
- 2024年度互聯(lián)網(wǎng)金融產(chǎn)品研發(fā)與推廣合同
- 04版智能家居系統(tǒng)研發(fā)與銷售合同
- 2024年度云服務(wù)提供商合同
- 2024年店鋪投資合作協(xié)議
- 《領(lǐng)導(dǎo)梯隊(duì):全面打造領(lǐng)導(dǎo)力驅(qū)動(dòng)型公司》解讀
- 護(hù)理質(zhì)量安全與風(fēng)險(xiǎn)管理的案例分析
- 工程流體力學(xué)課后習(xí)題答案-(杜廣生)
- AI智能客服應(yīng)用實(shí)踐
- 《止吐藥臨床應(yīng)用》課件
- 幕墻工程檢驗(yàn)批質(zhì)量驗(yàn)收記錄
- 危險(xiǎn)化學(xué)品經(jīng)營(yíng)企業(yè)安全生產(chǎn)獎(jiǎng)懲制度范本
- 報(bào)價(jià)單模板完
- 30題藥品質(zhì)量檢測(cè)崗位常見(jiàn)面試問(wèn)題含HR問(wèn)題考察點(diǎn)及參考回答
- 《嬰幼兒行為觀察、記錄與評(píng)價(jià)》期末試卷及答案 卷3
- 企業(yè)戰(zhàn)略管理概述
評(píng)論
0/150
提交評(píng)論