英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流

标题: CRC循环冗余校验(CCITT-16) [打印本页]

作者: winnie    时间: 2009-3-17 14:11
标题: CRC循环冗余校验(CCITT-16)
CRC循环冗余校验(最好是CCITT-16标准)及相关crc校验的程序
作者: winnie    时间: 2009-3-17 14:13
START MOVLW DATAe

MOVWF ADDR ;将[e 0 0]余式表首地址DATAe存入ADDR
SWAPF BYTEa,0  
ANDLW 0FH ;求e和e指定的[e 0 0] 余式高字节的相对地址
ADDWF ADDR,1  ;取其绝对地址,存入ADDR

MOVF ADDR,0 ;把这一绝对地址再存入W  

CALL TABLE ;查表,返回时he00放在W中
MOVWF RESULTh ;把he00存入RESULTh
MOVLW 16  
ADDWF ADDR,0 ;求e指定的[e 0 0]余式低字节的绝对地址
CALL TABLE ;查表,返回时le00放在W中
MOVWF RESULTl ;把le00存入RESULTl
MOVLW DATAf  
MOVWF ADDR ;将[f 0 0]余式表首地址DATAf存入ADDR
MOVF BYTEa,0  
ANDLW 0FH ;求f和f指定的[f 0 0]余式高字节的相对地址  
ADDWF ADDR,1 ;取其绝对地址,存入ADDR
MOVF ADDR,0  ;把这一绝对地址再存入W
CALL TABLE ;查表,返回时hf00放在W中
XORWF RESULTh,0  ;he00与hf00异或,得ha00,存入W
XORWF BYTEb,0 ;ha00与b异或,得habc,存入W
MOVF BYTEa ;habc存入BYTEa
MOVLW 16  
ADDWF ADDR,0  ;求f指定的[f 0 0]余式低字节的绝对地址
CALL  TABLE  ;查表,返回时lf00放在W中
XORWF RESULTl,0  ;le00与lf00异或,得la00,存入W
XORWF BYTEc,0 ;la00与c异或,得labc,存入W
MOVF BYTEb ;labc存入BYTEb
RETLW 0



[ e 0 0 ] 余式表

00
10
20
30
40
50
60
70
80
90
A0
B0
C0
D0
E0
F0

0000
1231
2462
3653
48C4
5AF5
6CA6
7E97
9188
83B9
B5EA
A7DB
D94C
CB7D
FD2E
EF1F




[ f 0 0 ] 余式表

00
01
02
03
04
05
06
07
08
09
0A
0B
0C
0D
0E
0F

0000
1021
2042
3063
4084
50A5
60C6
70E7
8108
9129
A14A
B16B
C18C
D1AD
E1CE
F1EF




欢迎光临 英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流 (http://www.enroobbs.com/) Powered by Discuz! X3.2