回复:西门子200smart 模拟量及modbus通讯应用一例

已锁定

WWCWWC

西门子1847工业学习平台

  • 帖子

    9108
  • 精华

    157
  • 被关注

    1473

论坛等级:至圣

注册时间:2008-07-26

钻石 钻石 如何晋级?

发布于 2022-04-26 16:46:53

15楼

//   下面为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值。

LD     SM0.0

MOVW   16#FFFF, AC0                //初始化CRC寄存器

BTI    *LD0, LW4                   //数据缓冲区第一个字节为数据长度

INCD   LD6                               //指针指向第一个待处理字节

LD     SM0.0

FOR    AC2, +1, LW4                //开始循环处理每一个字节

LD     SM0.0

XORB   *LD6, AC0                   //字节首先与CRC寄存器低位进行异或

LD     SM0.0

FOR    AC1, +1, +8                 //移位处理循环,处理一个字节的8位

LD     SM0.0

SRW    AC0, 1                      //CRC寄存器右移一位

LD     SM1.1                       //如果移出位为0,则进入下一次循环

XORW   16#A001, AC0                //如果移出位为1,CRC寄存器与多项式16#A001异或

NEXT

LD     SM0.0

INCD   LD6                         //指针加1指向下一个字节

NEXT

LD     SM0.0

SWAP   AC0                         //交换CRC寄存器高低字节

MOVW   AC0, *LD6                   //CRC校验值写入数据区结尾


评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-200 SMART

共有8940条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。