恭喜,你发布的帖子
发布于 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校验值写入数据区结尾
请填写推广理由:
分享
只看
楼主