LD SM0.0 //
BTI ModbusBufr, #count // 得到接收到的缓冲区字节计数
MOVD &ModbusBufr, #ptr // 得到缓冲区地址
INCD #ptr // 指针加一
XORD AC0, AC0 // AC0清零
MOVD 16#FFFF, AC2 //初始化AC2
FOR AC1, +1, #count // 循环所有字节
MOVB *#ptr, AC0 // 字节送AC0
XORW AC2, AC0 // 异或
ANDW 16#FF, AC0 // 取低字节
SLW AC0, 1 // 得到CRC表中的一个索引
MOVD &ModbusTable, AC3 // 取CRC表首地址
+I AC0, AC3 // 索引加起始地址
SWAP AC2 // 交换AC2高低字节
ANDW 16#FF, AC2 // 取AC2低字节
XORW *AC3, AC2 // 或CRC表中的值
INCD #ptr:LD4 // 地址加1
NEXT // 循环结束
LD SM0.0 //
SWAP AC2 // 交换AC2高低字节
MOVW AC2, #crc:LW0 // AC2内容即CRC值
MOVW AC2, *#ptr:*LD4 // 把AC2