PIC 单片机CRC校验程序
2013-04-01
标签: CRC PIC

用PIC单片机和Dallas的iButton通讯时,编了段产生和校验CRC的子程序。

#include 
;-------------------------------
cblock0x20
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

;-------------------------------
#defineskp0btfsc
#defineskp1btfss
;===============================
org0x000
movlw.7
movwfCRC_COUNT
movlwdatBuff
movwfFSR;FSR point to data buffer
callCRC_CHECK
movwfdatBuff+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;~~~~~~~~~~~~~~~
clrfCRC_RESULT;initialize the CRC buffer
_crc_00
movlw.8;number of bits for one byte
movwfbit_cnt;set bit counter
movfINDF,w;get one data byte
movwfcrc_temp;copy to temporary location
_crc_01
rrfcrc_temp,f;get LSB in C
skpc;is this LSB=1?
goto_crc_02;go if LSB=0
movlw0x01;do if LSB=1
xorwfCRC_RESULT,f
_crc_02
rrfCRC_RESULT,w;get LSB of CRC
skpc;test LSB
goto_crc_03;go if LSB=0
movlw0x18;do if LSB=1
xorwfCRC_RESULT,f;polynomial implementation
_crc_03
rrfCRC_RESULT,w;whole byte right rotate
rrfCRC_RESULT,f
decfszbit_cnt,f;bit counting
goto_crc_01;go on until aa 8 bits done
incfFSR,f;pointer update to next byte
decfszCRC_COUNT,f;byte counting
goto_crc_00;go on until all byte done
movfCRC_RESULT,w;get CRC, Z set if CRC=0
return;return with CRC in W
END


可能会用到的工具/仪表
本站简介 | 意见建议 | 免责声明 | 版权声明 | 联系我们
CopyRight@2024-2039 嵌入式资源网
蜀ICP备2021025729号