PIC:CRC16校验程序(polynomial=0x8408)

;=======================================
list p=16f84,t=ON,c=132,n=80
radix dec

CBLOCK 0x20
crc_hi ; The CRC Register
crc_lo
temp
ENDC


org 0

goto start

;===============================
crc_8408:

XORWF crc_lo,W ;W = CD ^ ab ==> xy
MOVWF temp ;temp = xy

SWAPF temp,F ;W = yx

RRF temp,w
ANDLW 0x78 ;y<<3

XORWF crc_hi,W ;W = AB ^ (y<<3)
MOVWF crc_lo ;LO = AB ^ (y<<3)
SWAPF temp,W ;W = xy
XORWF temp,W ;W = (y^x) | (x^y) = kk
MOVWF crc_hi ;HI = kk
ANDLW 0x0f ;W = 0k
XORWF crc_lo,W ;W = AB ^ (y<<3) ^ k
BTFSC crc_hi,0 ;
XORLW 0x80 ;W = AB ^ (y<<3) ^ k ^ (k<<7)
MOVWF crc_lo ;LO = AB ^ (y<<3) ^ k ^ (k<<7)

SWAPF temp,W ;W = xy
ANDLW 0xf0 ;W = x0
XORWF crc_hi,F ;W = y<<4 | x^y

RRF crc_hi,W ;W = (y<<4 | x^y) >> 1
ANDLW 7 ;W = x^y >> 1
SWAPF crc_hi,F ;W = x^y<<4 | y
XORWF crc_hi,F ;HI = kx ^ k>>1 = (k<<4) ^ y ^ (k>>1)

RETURN

;=====================================================================

start:

CLRF crc_lo
CLRF crc_hi

MOVLW 0xff
call crc_8408 ; 0f78

MOVLW '2'
call crc_8408 ; ed51

MOVLW '3'
call crc_8408 ; 40f9

MOVLW '4'
call crc_8408 ; 1da9

MOVLW '5'
call crc_8408 ; 5ef8

MOVLW '6'
call crc_8408 ; 2f2c

MOVLW '7'
call crc_8408 ; ae7d

MOVLW '8'
call crc_8408 ; 1507

goto start

end

goto start



;=======================================

http://www.dattalo.com/technical/software/pic/crc_8408.asm

作者:anonymous   更新日期:2005-01-09
来源:internet   浏览次数:

相关文章

相关评论   发表评论