×
嵌入式 > 嵌入式开发 > 详情

PIC单片机实现CRC算法的小程序

发布时间:2020-07-09 发布时间:
|
PIC单片机实现CRC的小程序

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

#includeP16CE625.INC>

;-------------------------------
cblock0x20
datBuff:8;assign8bytedatabuffer
bit_cnt;bitcounting
CRC_COUNT;numberofbytesforCRC
CRC_RESULT;CRCresulr
crc_temp;temporarydatabufferduringCRC
endc

;-------------------------------
#defineskp0btfsc
#defineskp1btfss


;===============================
org0x000

movlw.7
movwfCRC_COUNT
movlwdatBuff
movwfFSR;FSRpointtodatabuffer
callCRC_CHECK
movwfdatBuff+7
goto$

;===============================
;CHECKTHECRCFOR?BYTESDATA
;ForthepolynomialofX^8+X^5+X^4+1
;DerivedfromDallas'siButtonstandard
;Beforecalling,FSR=databuffer
;CRC_COUNT=numberofbytesforCRC
CRC_CHECK;~~~~~~~~~~~~~~~
clrfCRC_RESULT;initializetheCRCbuffer
_crc_00
movlw.8;numberofbitsforonebyte
movwfbit_cnt;setbitcounter
movfINDF,w;getonedatabyte
movwfcrc_temp;copytotemporarylocation
_crc_01
rrfcrc_temp,f;getLSBinC
skpc;isthisLSB=1?
goto_crc_02;goifLSB=0
movlw0x01;doifLSB=1
xorwfCRC_RESULT,f
_crc_02
rrfCRC_RESULT,w;getLSBofCRC
skpc;testLSB
goto_crc_03;goifLSB=0
movlw0x18;doifLSB=1
xorwfCRC_RESULT,f;polynomialimplementation
_crc_03
rrfCRC_RESULT,w;wholebyterightrotate
rrfCRC_RESULT,f
decfszbit_cnt,f;bitcounting
goto_crc_01;goonuntilaa8bitsdone
incfFSR,f;pointerupdatetonextbyte
decfszCRC_COUNT,f;bytecounting
goto_crc_00;goonuntilallbytedone
movfCRC_RESULT,w;getCRC,ZsetifCRC=0
return;returnwithCRCinW

END


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
keil中调试中无法添加变量到watch