1\需要CRC16校验的数据
LD SM0.1
MOVB 16#1, VB200
MOVB 16#03, VB201
MOVB 16#0, VB202
MOVB 16#0, VB203
MOVB 16#0, VB204
MOVB 16#1, VB205
2\调用CRC16子程序 FIRST为第一个数据,NUM为需要校验的数据个数,CRC16为CRC16校验码,高低位未换
LD SM0.0
CALL SBR_0:SBR0, &VB200, 6, VW300
子程序:
LD0 FIRST IN DWORD
LW4 NUM IN INT
LW6 CRC16 OUT WORD
程序内容:
1\第一个数据的指针给AC1,CRC16寄存器初始化FFFFH
LD SM0.0
MOVD #FIRST:LD0, AC1
MOVW 16#FFFF, #CRC16:LW6
2\外循环,几个数据循环几次
LD SM0.0
FOR VW1000, 1, #NUM:LW4
3\LB7为CRC16的低字节,与第一个数据异或
LD SM0.0
XORB *AC1, LB7
4\内循环,右移8次
LD SM0.0
FOR VW1002, 1, 8
5\CRC16右移一位并且高位补0,这里用了一7FFFH的与来实现, 求别的好办法。
LD SM0.0
SRW #CRC16:LW6, 1
ANDW 16#7FFF, #CRC16:LW6
6\SM1。1为1时执行和A001H的异或,就是判断LSB的0或1。
LD SM1.1
XORW 16#A001, #CRC16:LW6
7\内循环结束
NEXT
8\AC1加1,处理下个数据
LD SM0.0
INCW AC1
9\外循环结束
NEXT
求助:CRC16校验中右移后高位补零,大家都是怎么做的?
CRC16校验的子程序在实际应用中调用此程序大家都是怎么做的?
大家是不是把得到校验码的程序写在SBR里,还是中断?
有用过200走
modbus控制变频器的高手能否提供个简单点程序参考下,主要是看下调用方法.
暂时问题还没想到多少,后续补充.