微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > PIC单片机实现CRC的小程序

PIC单片机实现CRC的小程序

时间:03-08 来源:互联网 点击:
PIC单片机实现CRC的小程序

PIC单片机实现Dallas的iButton通讯时,编了段产生和校验CRC的子程序。
;PIC单片机 www.pic16.com
#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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top