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
浏览次数:
相关文章
相关评论 发表评论
- No Comments