![CRC校驗(yàn)碼軟件_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/17/bdb6c4a7-1420-40fd-b527-18ce10a44845/bdb6c4a7-1420-40fd-b527-18ce10a448451.gif)
![CRC校驗(yàn)碼軟件_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/17/bdb6c4a7-1420-40fd-b527-18ce10a44845/bdb6c4a7-1420-40fd-b527-18ce10a448452.gif)
![CRC校驗(yàn)碼軟件_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/17/bdb6c4a7-1420-40fd-b527-18ce10a44845/bdb6c4a7-1420-40fd-b527-18ce10a448453.gif)
![CRC校驗(yàn)碼軟件_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/17/bdb6c4a7-1420-40fd-b527-18ce10a44845/bdb6c4a7-1420-40fd-b527-18ce10a448454.gif)
![CRC校驗(yàn)碼軟件_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/17/bdb6c4a7-1420-40fd-b527-18ce10a44845/bdb6c4a7-1420-40fd-b527-18ce10a448455.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、CRC校驗(yàn)碼軟件CRC-16是檢測(cè)數(shù)據(jù)在發(fā)送過程中發(fā)生錯(cuò)誤的常用校驗(yàn)方法。一、前言CRC的計(jì)算方式是將欲傳輸?shù)臄?shù)據(jù)塊視為一堆連續(xù)位所構(gòu)成的整個(gè)數(shù)值,將此數(shù)值除以一個(gè)特定的除數(shù),通常以二進(jìn)制表示,此除數(shù)稱為生成多項(xiàng)式(ANSI CRC-16的生成多項(xiàng)式為:x16 + x15 + x2 + 1)。目前較常用的CRC位數(shù)目有8和16以及32,在這里只講述如何寫CRC位數(shù)目為16的程序。CRC位數(shù)目越大,數(shù)據(jù)的錯(cuò)誤檢測(cè)率則越高,但必須多花一些時(shí)間進(jìn)行數(shù)據(jù)的計(jì)算。二、CRC-16計(jì)算步驟CRC-16的計(jì)算方法有兩種:查表法與計(jì)算法,在這里只講述計(jì)算法。在某電力儀表上的說明書中摘錄下來的計(jì)算CRC-16步
2、驟如下:1、 Load a 16-bit register with FFFF hex. Call this the CRC register.2、 Exclusive OR the first 8-bit byte of the message with the low-order byte of the 16-bit CRC, putting the result in the CRC register.3、 Shift the CRC register one bit to the right (toward the LSB), zero-filling the MSB. Extract
3、 and Examine.4、 If the LSB was 1: Exclusive OR the CRC register with polynomial value A001 hex. If the LSB was 0: Repeat step 3 (another shift).5、 Repeat step 3 and 4 until 8 shifts have been performed. When this is done, a complete 8-bit byte will have been processed.6、 Repeat step 2 through 5 for
4、the next 8-bit byte of them message.7、 The final content of the CRC register is the CRC value.中文解釋如下:1、定義一個(gè)初始值為FFFF的16位的變量,該變量稱為CRC寄存器。(想想在程序中,應(yīng)該怎么表示16位的變量呢?)2、把欲發(fā)送或接收消息的高8位和CRC寄存器的底8位作異或運(yùn)算,并把結(jié)果在賦到CRC寄存器。3、CRC寄存器右移1位(朝最低位),同時(shí)最高位添零。取出并檢查最低位是否為1。(Visual Basic 里如何做移位的運(yùn)算呢?)4、如果為1,則CRC寄存器與多項(xiàng)式A001異或;如果為0,
5、則重復(fù)第3步的動(dòng)作。(Visual Basic 里如何判斷一個(gè)字節(jié)里某個(gè)位的值呢?)5、重復(fù)3和4直到完成了8次移位。這樣完整的8位字節(jié)將完成處理了。6、對(duì)于下一個(gè)8位字節(jié)的處理就是重復(fù)第2步到第5步了7、把所有的欲發(fā)送或接收消息這樣處理后, CRC寄存器里的值就是我們最終需要得到的CRC校驗(yàn)碼。如果你能正確回答我的問題,那么恭喜你,你自己可以用Visual Basic寫數(shù)據(jù)采集卡的控制程序了。三、Visual Basic程序?qū)崿F(xiàn)以江陰長(zhǎng)江斯菲爾電力儀表公司CD194E系列多功能電力儀表的MODBUS-RTU通訊協(xié)議的報(bào)文格式為例,該表通信報(bào)文格式使用的校驗(yàn)方式就是CRC-16。通過對(duì)地址01
6、H、命令04H、數(shù)據(jù)地址005CH和數(shù)據(jù)長(zhǎng)度0004H的CRC-16運(yùn)算后得到主機(jī)請(qǐng)求數(shù)據(jù)報(bào)文的CRC16的校驗(yàn)碼為31DBH。 程序界面程序代碼:Private Sub cmdGenerate_Click()Dim OutByte(7) As Byte, CRC16() As Byte, CRC16LO As Byte, CRC16HI As Byte, TempHI As Byte, TempLO As ByteDim i As Integer, j As Integer''''''''''''
7、''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
8、'''''''''''''''''''''''''''''''''''''OutByte(0) = Val("&H" & txtOutByte(0).Text)OutByte(1) = Val("&H" & txtOutByte(1
9、).Text)OutByte(2) = Val("&H" & txtOutByte(2).Text)OutByte(3) = Val("&H" & txtOutByte(3).Text)OutByte(4) = Val("&H" & txtOutByte(4).Text)OutByte(5) = Val("&H" & txtOutByte(5).Text) CRC16LO = &HFF '(1)Load a 16-bit registe
10、r with FFFF hex.call this the CRC register. CRC16HI = &HFFFor i = 0 To UBound (OutByte) - 2 CRC16LO = CRC16LO Xor OutByte (i) '(2)Exclusive OR the first 8-bit byte of the message 'with the low-order byte of the 16-bit CRC, 'putting the result in the CRC register For j = 0 To 7 TempHI
11、 = CRC16HI TempLO = CRC16LO CRC16HI = CRC16HI 2 '(3)Shift the CRC register one bit to the right(toward the LSB),zero-filling CRC16LO = CRC16LO 2 'the MSB.Extract and Examine If (TempHI And &H1) = &H1) Then CRC16LO = CRC16LO Or &H80 '移位時(shí),如果高低位是1,則低高位加1 End If If (TempLO And &a
12、mp;H1) = &H1) Then '(4)if the LSB was 1: CRC16HI = CRC16HI Xor &HA0 'Exclusive OR the CRC register with polynomial value A001 hex. CRC16LO = CRC16LO Xor &H1 End If 'if the LSB was 0: Repeat step 3 (another shift) Next j '(5)Repeat step 3 and 4 until 8 shifts have been per
13、formed. 'when this is done, a complete 8-bit byte will have been processed.Next i '(6)Repeat step 2 through 5 for the next 8-bit byte of them message. OutByte(6) = CRC16LO '(7)The final contents of the CRC register is the CRC value txtOutByte(6) = Hex(OutByte(6) OutByte(7) = CRC16HI txtO
14、utByte(7) = Hex(OutByte(7)End Sub四、Visual C+程序?qū)崿F(xiàn) 程序界面主要代碼:#define CHECKVALUE(pt,nl) if(btData=NULL)|(nLength<=0)AfxMessageBox("無效數(shù)組!");return -1;BOOL CCRC_16Dlg:OnInitDialog()m_strCRC="01 04 00 5C 00 04"UpdateData(FALSE);return TRUE; / return TRUE unless you set the focus to a
15、 controlvoid CCRC_16Dlg:OnOK()UpdateData(TRUE);CString strTemp;strTemp=m_strCRC;WORD CRC;BYTE btData4096;int nLength=StrToHex(strTemp,btData); CRC=ANSI_CRC_16(btData,nLength); /ANSI-16CString str;str.Format(" %02X %02X",(BYTE)(CRC>>8),(BYTE)CRC);AfxMessageBox(str);CDialog:OnOK();WORD
16、 CCRC_16Dlg:ANSI_CRC_16(BYTE* btData,int nLength) /ANSI CRC-16,x16 + x15 + x2 + 1CHECKVALUE(btData,nLength);WORD CRC=0xFFFF;BYTE j,Tmp=0;int i; for(i=0;i<nLength;i+) CRC=btDatai; /做位異或運(yùn)算 for (j=0;j<8;j+) Tmp=CRC&0x0001; /位與運(yùn)算 CRC=CRC>>1; /位右移運(yùn)算 if(Tmp) CRC=(CRC0xA001); return (CRC>
17、;>8)+(CRC<<8);int CCRC_16Dlg:StrToHex(CString str, BYTE *btData)int nLength=str.GetLength();if(nLength<2) return 0;for(int i=0;i<nLength;i+=3) _stscanf(str.Mid(i,2),"%02X",&btDatai/3);return (i+1)/3;五、結(jié)論1, 這兩個(gè)實(shí)例可以當(dāng)作計(jì)算CRC-16的小工具,代碼對(duì)于自己要開發(fā)CRC-16的人員也提供一些參考價(jià)值。2, 如果你在Visual B
18、asic里,右移應(yīng)該做什么運(yùn)算,那么你就真的看進(jìn)去了,如果你不知道,可以發(fā)E-Mail給我。3, 同一個(gè)實(shí)例,兩種開發(fā)語言,值得學(xué)習(xí)一下??吹竭@里,你可以告訴我在VC+中,異或是用什么符號(hào)?是不是很意外呢?CRC校驗(yàn)1、循環(huán)校驗(yàn)碼(CRC碼):是數(shù)據(jù)通信領(lǐng)域中最常用的一種差錯(cuò)校驗(yàn)碼,其特征是信息字段和校驗(yàn)字段的長(zhǎng)度可以任意選定。2、生成CRC碼的基本原理:任意一個(gè)由二進(jìn)制位串組成的代碼都可以和一個(gè)系數(shù)僅為0和1取值的多項(xiàng)式一一對(duì)應(yīng)。例如:代碼1010111對(duì)應(yīng)的多項(xiàng)式為x6+x4+x2+x+1,而多項(xiàng)式為x5+x3+x2+x+1對(duì)應(yīng)的代碼101111。3、CRC碼集選擇的原則:若設(shè)碼字長(zhǎng)度為N,信息字段為K位,校驗(yàn)字段為R位(N=K+R),則對(duì)于CRC碼集中的任一碼字,存在且僅存在一個(gè)R次多項(xiàng)式g(x),使得V(x)=A(x)g(x)=xRm(x)+r(x);其中: m(x)為K次信息多項(xiàng)式, r(x)為R-1次校驗(yàn)多項(xiàng)式,g(x)稱為生成多項(xiàng)式:g(x)=g0+g1x+ g2x2+.+g(R-1)x(R-1)+gRxR發(fā)送方通過指定的g(x)產(chǎn)生CRC碼字,接收方則通過該g(x)來驗(yàn)證收到的CRC碼字。4、CRC校驗(yàn)碼軟件生成方法:借助于多項(xiàng)式除法,其余數(shù)為校驗(yàn)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度住宅租賃市場(chǎng)規(guī)范化管理合同
- 七年級(jí)下冊(cè)語文第五課測(cè)試卷部編版及答案
- 衡陽2025年湖南衡陽市民政醫(yī)院急需緊缺專業(yè)技術(shù)人才引進(jìn)6人筆試歷年參考題庫附帶答案詳解
- 蘇州2025年江蘇蘇州高新區(qū)招聘新興領(lǐng)域?qū)B汓h務(wù)工作者12人筆試歷年參考題庫附帶答案詳解
- 秦皇島2024年河北秦皇島市婦幼保健院第二輪選聘工作人員9人筆試歷年參考題庫附帶答案詳解
- 甘肅2025年甘肅煤田地質(zhì)局考核招聘高層次人才3人筆試歷年參考題庫附帶答案詳解
- 溫州浙江溫州平陽縣農(nóng)業(yè)農(nóng)村局編外人員招聘筆試歷年參考題庫附帶答案詳解
- 溫州2025年浙江溫州市生態(tài)環(huán)境科學(xué)研究院招聘筆試歷年參考題庫附帶答案詳解
- 泰州2025年江蘇泰州興化市部分高中學(xué)校校園招聘教師22人筆試歷年參考題庫附帶答案詳解
- 文山云南文山市人力資源和社會(huì)保障局城鎮(zhèn)公益性崗位工作人員招聘筆試歷年參考題庫附帶答案詳解
- 中國(guó)移動(dòng)自智網(wǎng)絡(luò)白皮書(2024) 強(qiáng)化自智網(wǎng)絡(luò)價(jià)值引領(lǐng)加速邁進(jìn)L4級(jí)新階段
- 8.1認(rèn)識(shí)生命(課件)-2024-2025學(xué)年統(tǒng)編版道德與法治七年級(jí)上冊(cè)
- 陜西省西安市2023-2024學(xué)年七年級(jí)上學(xué)期期末考試數(shù)學(xué)試題(含答案)
- Unit 5 Section B(2a-2c)教學(xué)設(shè)計(jì)2023-2024學(xué)年人教版七年級(jí)英語下冊(cè)
- 三下 第11課 《在線學(xué)習(xí)工具》教案 浙教版2023信息科技
- 【萬通地產(chǎn)償債能力存在的問題及優(yōu)化建議(數(shù)據(jù)論文)11000字】
- 吉利收購沃爾沃商務(wù)談判案例分析
- JGJ/T235-2011建筑外墻防水工程技術(shù)規(guī)程
- 人教版PEP五年級(jí)英語下冊(cè)單詞表與單詞字帖 手寫體可打印
- 如果歷史是一群喵
- 抖音房產(chǎn)直播敏感詞匯表
評(píng)論
0/150
提交評(píng)論