歡迎來到天天文庫
瀏覽記錄
ID:48033839
大?。?80.24 KB
頁數:2頁
時間:2019-09-05
《51單片機Modbus協(xié)議RTU模式校驗CRC計算方法.pdf》由會員上傳分享,免費在線閱讀,更多相關內容在應用文檔-天天文庫。
1、CRC域是兩個字節(jié),包含一16位的二進制值。它由傳輸設備計算后加入到消息中。接收設備重新計算收到消息的CRC,并與接收到的CRC域中的值比較,如果兩值不同,則有誤。CRC是先調入一值是全“1”的16位寄存器,然后調用一過程將消息中連續(xù)的8位字節(jié)各當前寄存器中的值進行處理。僅每個字符中的8Bit數據對CRC有效,起始位和停止位以及奇偶校驗位均無效。CRC產生過程:1.先將CRC設置成0xFFFF2.將CRC中的低字節(jié)與信息中的第一個字節(jié)做XOR(異或)運算,并將運算結果傳回CRC的低字節(jié)(確保是CRC的低字節(jié),而不是CRC)3.CRC右移一位,CRC最
2、高位補0,并判斷移出位。4.如果移出位是0:重復3步驟,如果移出位是1:則CRC與A001H做XOR(異或)運算將運算結果傳回CRC(這次是CRC)。5.重復步驟3和4直到已經右移了8位為止。6.對信息的下一個字節(jié)重復2到5的步驟,直到信息中的數據字節(jié)都處理完。7.此時得到的CRC就是校驗CRC注意:在傳送CRC的時候確保低字節(jié)數據線傳送,然后在傳送高字節(jié)。下面是C代碼:VoidCRC_Check(unsignedchar*gets,unsignedcharlength){UnsignedintI;Unsignedintj;UnsignedintCR
3、C;UnsignedcharCRC_L;UnsignedcharCRC_H;CRC=0xFFFF;CRC_L=CRC;CRC_H=CRC>>8;for(i=0;i>=1;CRC=CRC^0xA001;}else{CRC=CRC/2;}CRC_H=CRC>>8;CRC_L=CRC;}}}判斷接收數據CRC:如:接收數據放在數組rsbuf[],length為接收到數據的總長度。判斷C
4、RC_L是否等于rsbuf[length-2];CRC_H是否等于rsbuf[length-1]
此文檔下載收益歸作者所有