贴一段CRC校验程序,请看看哪里有错误?

已锁定

妍妍

  • 帖子

    149
  • 精华

    0
  • 被关注

    3

论坛等级:游士

注册时间:2009-07-29

普通 普通 如何晋级?

贴一段CRC校验程序,请看看哪里有错误?

4128

13

2009-12-15 21:22:27

将论坛里“学生在此”用户贴出的程序做了一些改动,用逐位法计算CRC,同样的程序在单片机里计算出来的CRC校验码跟PLC计算出的不一样,用网上下载的CRC校验软件得出的结果与单片机运行结果一样,不知道哪里出错了,希望大家指点指点!G(X)简记为1021.
FUNCTION_BLOCK "WCRC_FB"

TITLE =

VERSION : 0.1
VAR_INPUT

db_no : INT ;

dbb_no : INT ;

byte_len : INT ;

END_VAR

VAR_OUTPUT

wcrc : WORD ;

END_VAR

VAR

old_wcrc : WORD ;

c : BYTE ;

j : INT ;

END_VAR

VAR_TEMP
db_no1 : INT ;
END_VAR

BEGIN

NETWORK

TITLE =
L #db_no
T #db_no1
OPN DB [#db_no1]
// 发送指令的起始字节放在指针AR1中
L #dbb_no
LAR1
//初始化old_wcrc=0xffff;
L W#16#FFFF
T #old_wcrc
// 进入大循环,byte_len:需要计算CRC的字节个数
loop: L #byte_len
L 0
<=I
JC end
//c:字节
L DBB [AR1,P#0.0]
T #c
//字节与crc寄存器异或
L #old_wcrc
L #c
XOW
T #old_wcrc
//j:位个数
L 0
T #j
//判断一个字节是否计算完,j是否为8
a: L #j
L 8
>=I
JC b
//得到lsb位
L #old_wcrc
L W#16#1
AW
//判断lsb,为1:右移一位;为0:右移一位与1021异或。位指针加1
JZ c
L #old_wcrc
SRW 1
L W#16#1021
XOW
T #old_wcrc
c: L #old_wcrc
SRW 1
T #old_wcrc

L 1
L #j
+I
T #j
JU a
b: L -1
L #byte_len
+I
T #byte_len
//指向下一个字节
+AR1 P#1.0
//输出最终的CRC值
JU loop
end: L #old_wcrc
T #wcrc
BE
END_FUNCTION_BLOCK
贴一段CRC校验程序,请看看哪里有错误? 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54616条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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