c modbus RTU CRC16校驗和計算

2021-09-25 19:33:29 字數 833 閱讀 7116

校驗和演算法:

1) 預置 1 個 16 位的暫存器為十六進製制ffff(即全為 1) , 稱此暫存器為 crc暫存器。

2) 把第乙個 8 位二進位制資料 (通訊資訊幀的第乙個位元組) 與 16 位的 crc暫存器的低 8 位相異或, 把結果放於 crc暫存器。

3) 把 crc 暫存器的內容右移一位( 朝低位)用 0 填補最高位, 並檢查右移後的移出位。

4) 如果移出位為 0, 重複第 3 步 ( 再次右移一位); 如果移出位為 1, crc 暫存器與多項式a001 ( 1010 0000 0000 0001) 進行異或。

5) 重複步驟 3 和步驟 4, 直到右移 8 次,這樣整個8位資料全部進行了處理。

6) 重複步驟 2 到步驟 5, 進行通訊資訊幀下乙個位元組的處理。

7) 將該通訊資訊幀所有位元組按上述步驟計算完成後,得到的16位crc暫存器的高、低位元組進行交換。

8) 最後得到的 crc暫存器內容即為 crc碼。

**:

static ushort crc16(byte pdatabytes)

else}}

return crc;

}

**解釋:

1、if ((crc & 0x01) == 0x01) 這行**即是判斷最後一位是0還是1

2、^符號為異或位運算,參加運算的兩個位,如果這兩個位的值相同,則異或的結果為0。如果值不同,則結果為1

如:1^1=0,1^0=1

3、>>符號是位右移符號,將二進位制表示的位整體向右移動。如:1111向右移動一位後就變成了0111。

4、&符號是邏輯與運算符號,兩個二進位制位的值相同,則運算結果為1,不同為0

16狀態模式

狀態模式 設計模式其實很簡單 筆記 定義 當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類。抽象的狀態類 public abstract calss state 具體狀態a public class concretestatea extends state 覆蓋父類的抽象方法 ...

16 子網劃分

上圖中有三個辦事處 中心的 東邊的和西邊的。中心辦事處通過專用點對點廣域網線路與東邊和西邊的辦事處相連。公司分配到具有64個位址的位址塊,其開始位址是70.12.100.128 26 這個管理機構決定把32個位址分配給中心辦事處,把其餘的位址分配給另外的兩個辦事處。請設計一方案?從70.12.100...

16 實驗分析

本篇總結實驗部分要做哪些分析 哪些對比。主要目的是幫助寫好 的實驗章節。首先,寫清楚實驗的資料 資料規模 資料屬性。其次,實驗中的各種引數,網路用了幾層,什麼啟用函式,什麼特徵,還有實驗環境,機器的效能,cpu 記憶體 磁碟 顯示卡 作業系統 程式語言 ide版本 分析的時候要分析時間複雜度 空間複...