下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、CRC16校驗C語言程序源碼最近忙著做一個觸摸屏和單片機之間的通訊,主要使用了Modbus RTU 協(xié)議,在協(xié)議用到了 CRC16 校驗,所以在網(wǎng)上找了很多資料,個人感覺這篇文章寫的比較好,所以轉(zhuǎn)載過來學習學習。/CRC16校驗在通訊中應用廣泛,這里不對其理論進行討論,只對常見的3種/實現(xiàn)方法進行測試。方法1選用了一種常見的查表方法,類似的還有512字/節(jié)、256字等查找表的,至于查找表的生成,這里也略過。/ - POPULAR POLYNOMIALS -/ CCITT: x16 + x12 + x5 + x0 (0x1021)/ CRC-16: x16 + x15 + x2 + x0 (0x
2、8005)#define CRC_16_POLYNOMIALS 0x8005/ -/ CRC16計算方法1:使用2個256長度的校驗表/ -const BYTE chCRCHTalbe = / CRC 高位字節(jié)值表0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x0
3、1, 0xC0, 0x80, 0x41,0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0
4、x40,0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,0x00, 0xC1,
5、0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,0x00, 0xC1, 0x81, 0x40, 0x00
6、, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x
7、40, 0x01, 0xC0, 0x80, 0x41,0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,0x00, 0xC1, 0x81, 0x40;const BYTE chCRCLTalbe = / CRC 低位字節(jié)值表0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06, 0x07, 0xC7,0x05, 0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD, 0x0F, 0xCF, 0xCE, 0x0E,
8、 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09, 0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A, 0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, 0x14, 0xD4, 0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3, 0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3, 0xF2, 0x32, 0x36, 0xF6,
9、 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4, 0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A, 0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29, 0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, 0x2D, 0xED, 0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26, 0x22, 0xE2, 0xE3, 0x23,
10、 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60, 0x61, 0xA1, 0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67, 0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F, 0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68, 0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA, 0xBE, 0x7E, 0x7F, 0xBF, 0x7D, 0xBD,
11、 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5, 0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71, 0x70, 0xB0, 0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92, 0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C, 0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B, 0x99, 0x59, 0x58, 0x98,
12、 0x88, 0x48, 0x49, 0x89, 0x4B, 0x8B, 0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C, 0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42, 0x43, 0x83, 0x41, 0x81, 0x80, 0x40;WORD CRC16_1(BYTE* pchMsg, WORD wDataLen)BYTE chCRCHi = 0xFF; / 高CRC字節(jié)初始化BYTE chCRCLo = 0xFF; / 低CRC字節(jié)初始化WOR
13、D wIndex; / CRC循環(huán)中的索引while (wDataLen-)/ 計算CRCwIndex = chCRCLo *pchMsg+ ;chCRCLo = chCRCHi chCRCHTalbewIndex;chCRCHi = chCRCLTalbewIndex ;return (chCRCHi << 8) | chCRCLo) ;/ -/ CRC16計算方法2:使用簡單的校驗表/ -const WORD wCRCTalbeAbs =0x0000, 0xCC01, 0xD801, 0x1400, 0xF001, 0x3C00, 0x2800, 0xE401, 0xA001,
14、 0x6C00, 0x7800, 0xB401, 0x5000, 0x9C01, 0x8801, 0x4400,;WORD CRC16_2(BYTE* pchMsg, WORD wDataLen)WORD wCRC = 0xFFFF;WORD i;BYTE chChar;for (i = 0; i < wDataLen; i+)chChar = *pchMsg+;wCRC = wCRCTalbeAbs(chChar wCRC) & 15 (wCRC >> 4);wCRC = wCRCTalbeAbs(chChar >> 4) wCRC) & 15
15、(wCRC >> 4);return wCRC;/ -/ CRC16計算方法3:使用直接結(jié)算的方法/ -WORD CRC16_3(BYTE* pchMsg, WORD wDataLen)BYTE i, chChar;WORD wCRC = 0xFFFF;while (wDataLen-)chChar = *pchMsg+;chChar = ByteInvert(chChar);wCRC = (WORD) chChar) << 8);for (i = 0; i < 8; i+)if (wCRC & 0x8000)wCRC = (wCRC << 1) CRC_16_POLYNOMIALS;elsewCRC <<= 1;wCRC = WordInvert(wCRC);return wCRC;/試驗數(shù)據(jù):/ 采用Metrowerks CodeWarrior在DSP56
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年租賃期限內(nèi)的房產(chǎn)租賃合同
- 二十四式太極拳 說課稿-2023-2024學年高三上學期體育與健康人教版必修第一冊
- 2025年人工智能教育平臺保密協(xié)議范本4篇
- 第三單元寫作《布局謀篇》說課稿-2024-2025學年統(tǒng)編版語文九年級下冊
- 排球雙手正面墊球 說課稿-2024-2025學年高二上學期體育與健康人教版必修第一冊
- Unit 2 School Life Lesson 1 My School Day(說課稿)2024-2025學年北師大版(2024)七年級英語上冊
- 2025年智能醫(yī)療設備采購與維護合同模板4篇
- 二零二四年養(yǎng)殖場養(yǎng)殖工人職業(yè)技能鑒定與認證合同3篇
- 滬科版 信息技術 必修 3.1.5 聲音信息的加工 說課稿001
- 2025年度鋁礦礦山生態(tài)修復合作協(xié)議4篇
- GB/T 37238-2018篡改(污損)文件鑒定技術規(guī)范
- 普通高中地理課程標準簡介(湘教版)
- 河道治理工程監(jiān)理通知單、回復單范本
- 超分子化學簡介課件
- 高二下學期英語閱讀提升練習(一)
- 易制爆化學品合法用途說明
- 【PPT】壓力性損傷預防敷料選擇和剪裁技巧
- 大氣喜慶迎新元旦晚會PPT背景
- DB13(J)∕T 242-2019 鋼絲網(wǎng)架復合保溫板應用技術規(guī)程
- 心電圖中的pan-tompkins算法介紹
- 羊絨性能對織物起球的影響
評論
0/150
提交評論