技术论坛

 用STL新写了个CRC16的校验FC

返回主题列表
作者 主题
风中的云雾茶
侠客

经验值:900
发帖数:414
精华帖:1
楼主    2010-07-31 13:21:03
主题:用STL新写了个CRC16的校验FC 精华帖 
以前一直用LAD写程序的,两三天前想写个CRC16的FC,发现用LAD不好搞定。查查资料,决定用STL编写。因为以前没用过STL,所以比较费力。现在已经写好了,运算结果与网上下载的CRC16计算器算出的结果一致。各位高手看看那些地方需要改进。如下:

接口:
IN: start_add DInt 起始地址
count Int 校验字节数
DB_No Int 数据块号
OUT: CRC_hi Byte 校验结果高字节
CRC_lo Byte 校验结果低字节
TEMP: TEMP1 Int 0.0 DB块地址寄存器
TEMP2 Int 2.0 校验寄存器
TEMP3 Int 4.0 校验字节数计数
TEMP4 DInt 6.0 地址指针寄存器
TEMP5 Int 10.0 校验位计数

程序代码:
L #DB_No
T #TEMP1
OPN DB [#TEMP1] //打开数据块
L W#16#FFFF
T #TEMP2 //初始化校验寄存器
L #start_add
SLD 3
T #TEMP4 //地址指针寄存器
L #count //装载校验字节数计数初值
lab1: T #TEMP3 //循环1开始
L DBB [#TEMP4]
L LB 3
XOW //低字节异或
T LB 3
L #TEMP4
L P#1.0
+D
T #TEMP4
L 8 //装载校验位计数初值
lab2: T #TEMP5 //循环2开始
L #TEMP2
SRW 1
JP x001 //如果移出位为1跳转x001
JU x002 //否则跳转x002
x001: T #TEMP2
L #TEMP2
L W#16#A001
XOW //字异或
x002: T #TEMP2
L #TEMP5
LOOP lab2 //循环2结束
L #TEMP3
LOOP lab1 //循环1结束
L LB 2
T #CRC_hi //校验结果高字节
L LB 3
T #CRC_lo //校验结果低字节

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