使用汇川AM403编写CRC16校验FC

CRC16校验规则

1.初始化CRC16校验寄存器:CRC16:=16#FFFF
2.将数据的第一个字节与CRC16异或
3.比较最低位的值,如果为0,则右移一位,如果为1,则右移一位并且将移位后的值与16#A001异或
4.重复8次3,比较完毕第一个字节的所有数据
5.再将下一个字节与CRC16异或,直到所有数据异或完毕
6.将最后得到的CRC16寄存器的数据高字节与低字节交换位置,得到最终的校验值

代码

//移位指令不能用了,不知道是不是库没装好的问题,也懒得弄了,所以直接用的原始方法移位
变量声明:
	FUNCTION FC_CRC16 : WORD
VAR_INPUT
	DataArr			:			POINTER TO BYTE;
	Length			:			UINT;
END_VAR
VAR
	Temp			:			POINTER TO BYTE;
	i				:			UINT;
	RMoveValue		:			UINT;
	CurData			:			BYTE;
	CRC16L			:			BYTE;
	CRC16H			:			BYTE;
END_VAR
程序:
IF Length<=0 THEN
	FC_CRC16:=0;
RETURN;
END_IF
//CRC寄存器初始化
FC_CRC16:=16#FFFF;
RMoveValue:=0;
//CRC校验
WHILE Length<>0 DO
	length:=Length-1;
	CurData:=DataArr^;
	FC_CRC16:=CurData XOR FC_CRC16;
	FOR i:=0 TO 7 BY 1 DO
		RMoveValue:=FC_CRC16 AND 16#1;	
		IF RMoveValue=1 THEN
			FC_CRC16:=(FC_CRC16 AND 16#FFFE)/2;
			FC_CRC16:=FC_CRC16 XOR 16#A001;
		ELSIF RMoveValue=0 THEN
			FC_CRC16:=(FC_CRC16 AND 16#FFFE)/2;
		END_IF
	END_FOR
	DataArr:=DataArr+1;
END_WHILE
//字节转换
CRC16H:=WORD_TO_BYTE(FC_CRC16);
CRC16L:=WORD_TO_BYTE((FC_CRC16 AND 16#FF00)/256);
FC_CRC16:=CRC16H*256;
FC_CRC16:=FC_CRC16 OR CRC16L;
RETURN;
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值