PIC单片机CRC校验程序
扫描二维码
随时随地手机看文章
用pic单片机和dallas的ibutton通讯时,编了段产生和校验crc的子程序。
#include <p16ce625.inc> ;-------------------------------
cblock 0x20
datbuff:8 ;assign 8 byte data buffer
bit_cnt ;bit counting
crc_count ;number of bytes for crc
crc_result ;crc resulr
crc_temp ;temporary data buffer during crc
endc ;-------------------------------
#define skp0 btfsc
#define skp1 btfss ;===============================
org 0x000
movlw .7
movwf crc_count
movlw datbuff
movwf fsr ;fsr point to data buffer
call crc_check
movwf datbuff+7
goto $ ;===============================
;check the crc for ? bytes data
;for the polynomial of x^8 + x^5 + x^4 + 1
;derived from dallas"s ibutton standard
;before calling, fsr = data buffer
; crc_count = number of bytes for crc
crc_check ;~~~~~~~~~~~~~~~
clrf crc_result ;initialize the crc buffer
_crc_00
movlw .8 ;number of bits for one byte
movwf bit_cnt ;set bit counter
movf indf,w ;get one data byte
movwf crc_temp ;copy to temporary location
_crc_01
rrf crc_temp,f ;get lsb in c
skpc ;is this lsb=1?
goto _crc_02 ;go if lsb=0
movlw 0x01 ;do if lsb=1
xorwf crc_result,f
_crc_02
rrf crc_result,w ;get lsb of crc
skpc ;test lsb
goto _crc_03 ;go if lsb=0
movlw 0x18 ;do if lsb=1
xorwf crc_result,f ;polynomial implementation
_crc_03
rrf crc_result,w ;whole byte right rotate
rrf crc_result,f
decfsz bit_cnt,f ;bit counting
goto _crc_01 ;go on until aa 8 bits done
incf fsr,f ;pointer update to next byte
decfsz crc_count,f ;byte counting
goto _crc_00 ;go on until all byte done
movf crc_result,w ;get crc, z set if crc=0
return ;return with crc in wend
欲知详情,请登录维库电子市场网()