新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > PIC單片機CRC校驗程序

        PIC單片機CRC校驗程序

        作者: 時間:2012-10-29 來源:網絡 收藏

        和Dallas的iButtON通訊時,編了段產生和的子

        本文引用地址:http://www.104case.com/article/170729.htm

        #include

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

        cblock 0x20

        datBuff:8 ;assign 8 byte data buffer

        bit_cnt ;bit counting

        _COUNT ;number of bytes for

        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



        關鍵詞: 程序 校驗 CRC 單片機 PIC

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 江津市| 遂川县| 南昌县| 安宁市| 南郑县| 绍兴市| 甘孜| 商河县| 苗栗县| 临沭县| 临邑县| 海南省| 措美县| 车险| 民勤县| 怀仁县| 文登市| 兴和县| 承德县| 靖州| 凯里市| 紫金县| 桦南县| 河曲县| 临沧市| 长沙县| 集安市| 吴堡县| 兴国县| 西宁市| 安化县| 武安市| 来凤县| 临城县| 凤阳县| 永德县| 区。| 博客| 鹿泉市| 通州市| 招远市|