新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > PIC單片機和Dallas的iButtON通訊時的CRC校驗子程序

        PIC單片機和Dallas的iButtON通訊時的CRC校驗子程序

        作者: 時間:2014-01-16 來源:網絡 收藏

        時,編了段產生和校驗CRC的子程序。

        #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 '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



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 资阳市| 金塔县| 玉山县| 丰宁| 禄丰县| 长丰县| 滦平县| 昌江| 东港市| 蛟河市| 新干县| 南靖县| 微山县| 盘锦市| 新巴尔虎右旗| 昌吉市| 澜沧| 特克斯县| 巩义市| 通榆县| 西吉县| 阳春市| 青冈县| 扎囊县| 南漳县| 平利县| 汶川县| 邢台市| 茌平县| 安龙县| 仙居县| 隆回县| 清水河县| 澄江县| 车险| 泰来县| 灵宝市| 长宁县| 巍山| 浮山县| 闽清县|