发表于:2005-12-12 23:33:00
25楼
-------------------
//初始化程序
//先算好CRC表,这样计算速度快
Network 5 // //初始化CRC ---1
LD SM0.0
MOVD MD24, AC3 // 装入表指针
MOVD +0, AC2 // 装入索引 index.
FOR MW28, +1, +256 // 外循环开始
MOVW AC2, AC0 // 值 = index.
FOR MW30, +1, +8 // 内循环开始(由于每字节8位,所以循环8次).
SRW AC0, 1 // 移出LS位
-----------------------
这是一个子函数:GetCRC
参数:inDataNum - 信息长度
inDataAddr -信息地址
Network 1
// 保存AC寄存器的值
LD SM0.0
MOVD AC0, LD7
MOVD AC1, LD11
MOVD AC2, LD15
MOVD AC3, LD19
Network 2
LD SM0.0
MOVD 16#FF, AC0 //CRC H
MOVD 16#FF, AC1 //CRC L
MOVD LD1, AC2 //数据地址
BTI LB0, MW30
//WDR // 复位看门狗
//------------
FOR MW28, +1, MW30
XORB *AC2, AC0
INCD AC2
+I AC0, AC0 //AC0*2
MOVD MD24, AC3 //CRC表的地址
+D AC0, AC3
INCD AC3
XORB *AC3, AC1
MOVD AC1, AC0
DECD AC3
MOVB *AC3, AC1
Network 3
NEXT
Network 4
LD SM0.0
BTI AC0, LW5
SLW LW5, 8
ORW AC1, LW5
Network 5 // 返回
// 恢复AC寄存器的值
LD SM0.0
MOVD LD7, AC0
MOVD LD11, AC1
MOVD LD15, AC2
MOVD LD19, AC3