<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > PIC單片機(jī)和Dallas的iButtON通訊時(shí)的CRC校驗(yàn)子程序

          PIC單片機(jī)和Dallas的iButtON通訊時(shí)的CRC校驗(yàn)子程序

          作者: 時(shí)間:2014-01-16 來(lái)源:網(wǎng)絡(luò) 收藏

          時(shí),編了段產(chǎn)生和校驗(yàn)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



          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();