电工技术基础_电工基础知识_电工之家-电工学习网

欢迎来到电工学习网!

CRC校验核算子程序

2017-09-10 12:04分类:PLC基础知识 阅读:

 

TITLE=子程序注释
// CRC-16码由两个字节构成,在开端时CRC寄存器的每一位都预置为1,然后把CRC寄存器与8-bit的数据进行异或,往后对CRC寄存器从高到低进行移位,在最高位(MSB)的方位补零,而最低位(LSB),移位后现已被移出CRC寄存器)假定为1,则把寄存器与预界说的多项式码(16#A001)进行 异或,不然假定LSB为零,则无需进行异或。重复上述的由高至低的移位8次,榜首个8-bit数据处理完毕,用此刻CRC寄存器的值与下一个8-bit数据异或并进行如前一个数据似的8次移位。悉数的字符处理完毕后CRC寄存器内的值即为终究的CRC值。
//   下面为CRC的核算进程:
//   1.设置CRC寄存器,并给其赋值FFFF(hex)。
//   2.将数据的榜首个8-bit字符与16位CRC寄存器的低8位进行异或,并把成果存入CRC寄存器。
//   3.CRC寄存器向右移一位,MSB补零,移出并查看LSB。
//   4.假定LSB为0,重复第三步;若LSB为1,CRC寄存器与多项式码相异或。
//   5.重复第3与第4步直到8次移位悉数完毕。此刻一个8-bit数据处理完毕。
//   6.重复第2至第5步直到悉数数据悉数处理完毕。
//   7.终究CRC寄存器的内容即为CRC值。
//
// 输入参数:
// 待校验数据区指针,榜首个字节为数据长度
// LD0 DataBuff IN DWORD
Network 1
LD SM0.0
MOVW 16#FFFF, AC0 //初始化CRC寄存器
BTI *LD0, LW4 //数据缓冲区榜首个字节为数据长度
MOVD LD0, LD6
INCD LD6 //指针指向榜首个待处理字节
Network 2
LD SM0.0
FOR AC2, +1, LW4 //开端循环处理每一个字节
Network 3
LD SM0.0
XORB *LD6, AC0 //字节首要与CRC寄存器低位进行异或
Network 4
LD SM0.0
FOR AC1, +1, +8 //移位处理循环,处理一个字节的8位
Network 5
LD SM0.0
SRW AC0, 1 //CRC寄存器右移一位
Network 6
LD SM1.1 //假定移出位为0,则进入下一次循环
XORW 16#A001, AC0 //假定移出位为1,CRC寄存器与多项式16#A001异或
Network 7
NEXT
Network 8
LD SM0.0
INCD LD6 //指针加1指向下一个字节
Network 9
NEXT
Network 10
LD SM0.0
SWAP AC0 //沟通CRC寄存器凹凸字节
MOVW AC0, *LD6 //CRC校验值写入数据区完毕

上一篇:S7-PLCSIM软件的功用

下一篇:致使IO毛病停机的要素

相关推荐

电工推荐

    电工技术基础_电工基础知识_电工之家-电工学习网
返回顶部