|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
實(shí)用資料——CRC校驗(yàn)碼生成算法 |
| 作者:chunyang 欄目:通信技術(shù) |
1.預(yù)置1個(gè)16位的寄存器(下稱CRC寄存器),初試化其內(nèi)容為十六進(jìn)制數(shù)0xFFFF; 2.把第一個(gè)待計(jì)算的數(shù)據(jù)即通訊信息幀的首字節(jié)與CRC寄存器的低8位相異或,把結(jié)果放回CRC寄存器; 3.把CRC寄存器的內(nèi)容右移一位用0填補(bǔ)最高位即進(jìn)行邏輯移位處理并檢查右移后的移出位; 4.如果移出位為0重復(fù)第3步即再次右移一位,如果移出位為1則CRC寄存器與CRC生成多項(xiàng)式0xA001(1010 0000 0000 0001)進(jìn)行異或運(yùn)算,結(jié)果放回CRC寄存器; 5.重復(fù)步驟3和4,直到右移8次,對(duì)整個(gè)8位數(shù)據(jù)全部進(jìn)行同樣處理; 6.重復(fù)步驟2到步驟5,進(jìn)行通訊信息幀下一個(gè)字節(jié)的處理; 7.將該通訊信息幀所有字節(jié)按上述步驟計(jì)算完成后,最后得到的CRC寄存器的內(nèi)容即為CRC校驗(yàn)碼,將其附著在原通訊信息幀后進(jìn)行傳輸即可。如果用于Modbus協(xié)議設(shè)備則還需交換高低8位,非Modbus協(xié)議設(shè)備可以不必交換。接收方依同樣方法進(jìn)行計(jì)算,只是計(jì)算的內(nèi)容不要包括最后兩個(gè)字節(jié),然后比較生成的CRC校驗(yàn)碼和數(shù)據(jù)幀中的是否相同即可。如果發(fā)送方交換CRC校驗(yàn)碼的高低8位,則接收方可以計(jì)算包括交換后的CRC碼在內(nèi)的整個(gè)數(shù)據(jù)幀,傳輸正確的話結(jié)果恒為0x0000。 |
| 2樓: | >>參與討論 |
| 作者: ida 于 2007/4/14 8:05:00 發(fā)布:
啊,這個(gè)應(yīng)該對(duì)我很有價(jià)值 呵呵呵呵呵呵呵 |
|
| 3樓: | >>參與討論 |
| 作者: bcaiyo 于 2007/4/15 13:35:00 發(fā)布:
好東西!直接! |
|
| 4樓: | >>參與討論 |
| 作者: Chang_HS 于 2007/4/16 13:58:00 發(fā)布:
經(jīng)過實(shí)驗(yàn)驗(yàn)證嗎? 如果發(fā)送方交換CRC校驗(yàn)碼的高低8位,則接收方可以計(jì)算包括交換后的CRC碼在內(nèi)的整個(gè)數(shù)據(jù)幀,傳輸正確的話結(jié)果恒為0x0000。 上面這句怎么理解? 是不是如果交換高低位,則多計(jì)算2個(gè)字節(jié)結(jié)果會(huì)為0? |
|
| 5樓: | >>參與討論 |
| 作者: chunyang 于 2007/4/16 16:41:00 發(fā)布:
自己試試吧 |
|
| 6樓: | >>參與討論 |
| 作者: 雨亭工作室 于 2007/5/7 3:54:00 發(fā)布:
有現(xiàn)成的呀 |
|
|
|
| 免費(fèi)注冊(cè)為維庫電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |