.版本 2
.子程序 CRC16_MODBUS, 整数型, , CRC16_MODBUS查表算法
.参数 欲校验的整数, 字节集
.局部变量 crc, 整数型
.局部变量 table, 整数型, , "256"
.局部变量 i, 整数型
' Name: CRC-16/MODBUS X16+X15+X2+1
' Poly: 0x8005
' lnit: 0xFFFF
' Refin: Ture
' Refout: Ture
' Xorout: 0x0000
' Note:
' —————————————————输入、输出反转、结果不异或————————————————————
.变量循环首 (0, 255, 1, i)
crc = i
.变量循环首 (1, 8, 1, )
.如果 (位与 (crc, 1) ≠ 0)
crc = 位异或 (右移 (crc, 1), 40961) ' // 多项式 “0xA001”= Reverse “0x8005”
.否则
crc = 右移 (crc, 1)
.如果结束
.变量循环尾 ()
table [i + 1] = crc
.变量循环尾 ()
crc = 65535 ' // 初始值“0xFFFF”)
.变量循环首 (1, 取字节集长度 (欲校验的整数), 1, i)
crc = 位异或 (右移 (crc, 8), table [位异或 (欲校验的整数 [i], 位与 (crc, 255)) + 1])
.变量循环尾 ()
返回 (crc)