我看了好多网站上介绍的CRC校验码的算法,说法各有不同,也不知道孰对孰错,所以,我写了一段求CRC校验码程序,请大家帮忙看一下!
以下是我的CRC校验码的算法程序:
ORGANIZATION_BLOCK MAIN:OB1
TITLE=程序注释
BEGIN
Network 1 // 数据帧初始化
// 网络注释
LD SM0.1
MOVB 16#04, VB0
MOVB 16#01, VB1
MOVB 16#00, VB2
MOVB 16#00, VB3
MOVB 16#00, VB4
MOVB 16#18, VB5
Network 2 // 求数据帧的CRC校验码
LD M0.1
FOR VW10, +1, +6
Network 3 // CRC寄存器AC0及校验数据帧指针AC1初始化
LDW= VW10, +1
MOVW 16#FFFF, AC0
MOVD &VB0, AC1
Network 4 // CRC寄存器低字节与信息帧逐个数据异或
LD SM0.0
XORB *AC1, AC0
Network 5 // 移位8次,每次左移1位。若移出位为1,则CRC寄存器AC0与生成多项式16#A001异或
LD SM0.0
FOR VW12, +1, +8
SRW AC0, 1
AENO
A SM1.1
XORW 16#A001, AC0
Network 6
NEXT
Network 7
LD SM0.0
INCD AC1
Network 8
NEXT
Network 9
LD M0.1
SWAP AC0
AENO
MOVW AC0, VW6
END_ORGANIZATION_BLOCK
以上程序,我下载到PLC里运行,通过监视变量表,得知求得的CRC校验码是16#3C55,不知结果是否正确,请斑竹和各位大虾帮忙解答以下!