您现在的位置: 主页 > MCU > 单片机技术应用 > PIC单片机CRC校验程序 -
本文所属标签:
为本文创立个标签吧:

PIC单片机CRC校验程序 -

来源: 网络用户发布,如有版权联系网管删除 2018-09-06 

[导读]用PIC单片机和Dallas的iButtON通讯时,编了段产生和校验CRC的子程序。#include;-------------------------------cblock 0x20datBuff:8 ;assign 8 byte data bufferbit_cnt ;bit countingCRC_COUNT ;number of bytes

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

本文引用地址: http://www.21ic.com/app/mcu/201210/149165.htm

#include

;-------------------------------

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 W END



              查看评论 回复



嵌入式交流网主页 > MCU > 单片机技术应用 > PIC单片机CRC校验程序 -
 

"PIC单片机CRC校验程序 -"的相关文章

网站地图

围观()