CRC校验计算子程序 - 西门子plc .docx

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
PAGE PAGE 1 CRC校验计算子程序 - 西门子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校验值写入数据区结尾

文档评论(0)

小文文小库库 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档