如果要進行乙個「複雜運算」(包括加減運算,但是運算步驟很多),尤其是需要重複使
用這個演算法處理資料時候,使用 c 函式功能塊將非常方便。
舉個栗子:用公式: a= b/c+b*c+(c-3)*d 完成運算。
方法一:如果使用梯形圖編寫上述公式,處理步驟與程式如下:
雖然只有以上三個步驟,但是梯形圖只支援兩個源運算元,所以必須分成多步求結果。
在上面梯形圖運算中有幾點要注意:
(1)mul 運算結果為雙字,就是說 mul d1 d2 d14[d15],結果是存放在d14[d15]兩個
暫存器內。
(2)div 運算結果分商和餘數,即:div d1 d2 d16,商在d16 中,餘數在d17 中,所以
如果運算有餘數則精度就降低了,要得到精確的結果得用浮點數運算。
(3)在求和時,由於d16 為商,是單字資料,所以加運算的時候得先統一資料型別,最終
得到的結果存放在d22[d23]中。
方法二:使用c 函式寫,梯形圖程式如下:
首先,我們對上面的 c 語言梯形圖指令結構進行解析:
result 為函式功能塊的名稱
d0 表示函式中 w[0]為 d0,w[1]為d1 以此類推,如果 s2 為d32,則函式塊中
w[0]為d32,w[1]為d33 以此類推
m0 表示函式中 b[0]為 m0,b[1]為 m1 以此類推,如果 s2 為m32,則函式塊中
b[0]為m32,b[1]為m33 以此類推
c 語言部分內容如下:
通過兩種方法的對比可以看出,通過 c 函式功能,能夠大大簡化梯形圖程式設計,提高編
程效率。
上面的c 函式運算和梯形圖相似,精度也不高,如果要得到精確結果則使用浮點運算。
又來乙個栗子:
利用函式功能塊計算出crc 校驗值。
(1)令16-bit 暫存器(crc 暫存器)=ffffh。
(2)將第乙個8-bit byte 的訊息與低位元 16-bit crc 暫存器異或(exclusive or)。
(3)右移一位crc 暫存器,將0 填入高位元處。
(4)檢查右移的值,如果是 0,就將第三步的新值存入 crc 暫存器內,如果為非 0,那
麼將crc 暫存器的值與a001h 異或,將結果存入crc 暫存器內。
(5)重複(3)到(4),將8-bit 全部運算完成。
(6)重複(2)到(5),取下乙個8-bit 的訊息指令,直到所有訊息指令運算完成。最後,
得到的 crc 暫存器的值,即是crc 的校驗碼。值得注意的是crc 的校驗碼必須交換放置與訊息指令的檢查碼中。
分別存入了 crc 校驗值的高位與低位。
CRC16 校驗演算法
1 迴圈校驗碼 crc碼 是資料通訊領域中最常用的一種差錯校驗碼,其特徵是資訊字段和校驗欄位的長度可以任意選定。2 生成crc碼的基本原理 任意乙個由二進位制位串組成的 都可以和乙個係數僅為 0 和 1 取值的多項式一一對應。例如 1010111對應的多項式為x6 x4 x2 x 1,而多項式為x5...
CRC16校驗演算法實現
迴圈冗餘碼校驗英文名稱為cyclical redundancy check,簡稱crc。它是利用除法及餘數的原理來作錯誤偵測 error detecting 的。實際應用時,傳送裝置計算出crc值並隨資料一同傳送給接收裝置,接收裝置對收到的資料重新計算crc並與收到的crc相比較,若兩個crc值不同...
CRC16 校驗演算法原理,以及C 例子
1 迴圈校驗碼 crc碼 是資料通訊領域中最常用的一種差錯校驗碼,其特徵是資訊字段和校驗欄位的長度可以任意選定。2 生成crc碼的基本原理 任意乙個由二進位制位串組成的 都可以和乙個係數僅為 0 和 1 取值的多項式一一對應。例如 1010111對應的多項式為x6 x4 x2 x 1,而多項式為x5...