RTU协议给的CRC校验算法

来源:本站
导读:目前正在解读《RTU协议给的CRC校验算法》的相关信息,《RTU协议给的CRC校验算法》是由用户自行发布的知识型内容!下面请观看由(电工学习网 - www.9pbb.com)用户发布《RTU协议给的CRC校验算法》的详细说明。

老帖中发现的一个CRC校验,帖子说是正确的,可我感觉在第一个FOR循环,AC1在怎么加一,永远都是将&VB0的数据送给它啊,是我理解错误,还是程序有错误?怎么修改才好呢?
Network1//网络标题
//网络注释
LDSM0.1

MOVB16#1,VB0

MOVB16#1,VB1

MOVB16#0,VB2

MOVB16#20,VB3

MOVB16#0,VB4

MOVB16#20,VB5
Network2
LDM0.1

FORVW10,+1,+6
Network3
LDW=VW10,+1

MOVW16#FFFF,AC0

MOVD&VB0,AC1
Network4
LDSM0.0

XORB*AC1,AC0
Network5
LDSM0.0

FORVW12,+1,+8

SRWAC0,1

AENO

ASM1.1

XORW16#A001,AC0
Network6
NEXT
Network7
LDSM0.0

INCDAC1
Network8
NEXT
Network9
LDM0.1

SWAPAC0

AENO

MOVWAC0,VW6

答:程序没问题,CRC本身的校验机制要清楚。请参考RTU协议给的CRC校验算法。
CRC开始时先把寄存器的16位全部置成“1”,然后把相邻2个8位字节的数据放入当前寄存器中,只有每个字符的8位数据用作产生CRC,起始位,停止位和奇偶校验位不加到CRC中。产生CRC期间,每8位数据与寄存器中值进行异或运算,其结果向右移一位(向LSB方向),并用“0”填入MSB,检测LSB,若LSB为“1”则与预置的固定值异或,若LSB为“0”则不作异或运算。重复上述处过程,直至移位8次,完成第8次移位后,下一个8位数据,与该寄存器的当前值异或,在所有信息处理完后,寄存器中的最终值为CRC值。
产生CRC的过程:
1.把16位CRC寄存器置成FFFFH.
2.第一个8位数据与CRC寄存器低8位进行异或运算,把结果放入CRC寄存器。
3.CRC寄存器向右移一位,MSB填零,检查LSB.
4.(若LSB为0):重复3,再右移一位。
(若LSB为1):CRC寄存器与AoolH进行异或运算
5.重复3和4直至完成8次移位,完成8位字节的处理。
6.重复2至5步,处理下一个8位数据,直至全部字节处理完毕。
7.CRC寄存器的最终值为CRC值。
8.把CRC值放入信息时,高8位和低8位应分开放置。
把CRC值放入信息中,发送信息中的16位CRC值时,先送低8位,后送高8位。

提醒:《RTU协议给的CRC校验算法》最后刷新时间 2023-07-10 04:11:44,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《RTU协议给的CRC校验算法》该内容的真实性请自行鉴别。