<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讀寫1-wire EEPROM DS2430的實(shí)例程序

          使用PIC讀寫1-wire EEPROM DS2430的實(shí)例程序

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

          ;------------------------------------------------
          ; template to init before read
          ; to
          ;-------------------------------------------------
          ; movlw H'00'
          ; movwf Addr

          本文引用地址:http://www.ex-cimer.com/article/171047.htm

          ;-------------------------------------------------
          ; read one byte
          ; input
          ; Addr = starting address to read
          ; output
          ; RxB = data to read
          ;--------------------------------------------------
          Rd
          call REE2ScratchPAD
          call HostRdScratchPAD
          return


          ;;--------- host read scratch pad ----------------------------
          ;; save desired data into RxB
          ;;
          ;;--------------------------------------------------------------

          HostRdScratchPAD
          call DS2430AInitState
          banksel TxB
          movlw SkipROM
          movwf TxB
          call TxBYTE ; SkipROM

          movlw RScratch ; read scratch PAD Command
          movwf TxB
          call TxBYTE

          movf Addr,W ; starting address to read
          movwf TxB
          call TxBYTE

          call R2430A ; read desired scratch pad into RxB
          call RstPulse
          return


          ;-------------- write memory scratch scratch pad ------------------------
          ; write one byte into scratch PAD
          ; input
          ; Addr = starting address to write
          ; TxBuffer = data to save
          ; output
          ; ErrCode = 0 -> write ok
          ; = 1 -> write fail
          ;---------------------------------------------------------------------------

          WrScratchPAD
          call DS2430AInitState
          movlw SkipROM ; 0xCC
          movwf TxB
          call TxBYTE ; SkipROM

          movlw WScratch ; write memory scratch pad, 0x0f
          movwf TxB
          call TxBYTE

          movf Addr,W ; starting address of memory scratch pad
          movwf TxB ; TxBYTE use TxB
          call TxBYTE

          movf TxBuffer,W ;
          movwf TxB
          call TxBYTE
          call RstPulse ; reset pulse
          call delay500us ; wait presence pulse
          return

          ;---------- CP2EE ---copy whole scratch pad to EE ----------------------
          ; write memory scratch
          ; verify memory scratch
          ; copy memory scratch to EE
          ;----------------------------------------------------------------------
          CP2EE
          call DS2430AInitState ; 0x55 + 0xa5 + hi 10ms // [ScratchPad -> ]
          banksel TxB
          movlw SkipROM
          movwf TxB
          call TxBYTE ; SkipROM
          movlw CPScratch ; 0x55
          movwf TxB
          call TxBYTE
          movlw H'a5'
          movwf TxB
          call TxBYTE
          call ForceHi ; min 10ms refter to datasheet
          return

          ;--------- REE2ScratchPAD --- copy whole EE to ScrathPAD ----------------
          ; copy EE to whole memory scatch
          ; read memory scratch
          ;format I: 0xf0 + Addr +R +R + reset pulse, copy byte by byte
          ;format II: 0xf0 + Addr + reset pulse, copy whole
          ;------------------------------------------------------------------------
          REE2ScratchPAD
          call DS2430AInitState
          banksel TxB
          movlw SkipROM
          movwf TxB
          call TxBYTE ; SkipROM
          movlw REEROM ;; Read from EE into ScratchPAD
          movwf TxB
          call TxBYTE ;;
          call RstPulse ;; copy all
          return

          ;----------R2430A ---- Host read the scratch PAD ------------------------
          ; Read 2430A Scratch PAD
          ; LSB first
          ; save the result in RxB
          ;------------------------------------------------------------------------

          R2430A ; returns byte in RxB
          movlw .8
          movwf LoopCounter
          clrf RxB
          RLoop
          call SetLo ;
          nop
          call SetHi ; it will pull up by resistor
          nop ; delay to sample reliable bit
          nop
          nop
          nop
          nop
          nop
          nop
          nop
          nop
          nop
          nop
          nop
          nop
          nop
          nop

          banksel PORTB
          movf PORTB,W
          movwf Temp
          btfss Temp,Bit2

          goto gLo
          bsf CARRY
          goto rol
          gLo
          bcf CARRY
          rol
          banksel RxB
          rrf RxB,F
          call delay60us ; tdrv + trelease
          banksel LoopCounter
          decfsz LoopCounter,F
          goto RLoop
          movf RxB,W ; save the result in W
          return

          ;----------------------------------------------------------
          ; strong pull up
          ;
          ;----------------------------------------------------------
          ForceHi

          bsf PBDir,Bit2
          movf PBDir,W ;; input

          banksel TRISB
          movwf TRISB ;; set input, pull by external resistor
          call delay100ms
          bcf PBDir,Bit2 ;; output
          movf PBDir,W
          movwf TRISB
          return
          ;-------------------------------------------------------------
          ; reset pulse
          ;
          ;--------------------------------------------------------------
          RstPulse
          call SetHi
          call SetLo
          call delay500us
          call SetHi ;Pull up by resistor
          return
          ;---------------------------------------------------------------
          ; reset pulse followed presence pulse
          ;
          ;---------------------------------------------------------------
          DS2430AInitState
          call SetHi
          call SetLo
          call delay500us ; reset pulse
          call SetHi
          call delay500us ; presence pulse, pull up by resistor
          return


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

          init
          movlw H'3f'
          movwf PBDir ; 0x00111111
          banksel TRISB
          movwf TRISB ; force all portC as input
          ; movlw b'00000000' ; GP2 pull-up,GP4 output
          ; movwf WPU ; connect the D of DS2430A to Port A
          ;--------------------------------------------------------------------
          ; toggle from bank0 to bank1
          ; option register
          ; 7: 1: port A pull-up OFF, 0:port A pull-up ON
          ; 6: 1: rising INT , 0:fall INT
          ; 5: 1: T0CKI to TMR0, 0: internal cycle to TMR0
          ; 4: 1: Hi to Lo count 0: Lo to Hi count
          ; 3: 1: Precale to WDT 0: Prescale to TMR0
          ; 2:0 prescale value
          ;---------------------------------------------------------------------
          movlw b'11000010' ;; pull-up ON,rising INT, internal cycle to TMR0,Lo to Hi count,Pre to TMR0,1:8
          movwf OPTION_REG ;; ,prescal over 8
          banksel INTCON
          clrf INTCON
          clrf PORTB
          movlw 0x07 ;; comparator off
          movwf CMCON ;; comparator off
          clrf TMR0

          ;;--------------------------------------------------------
          ;; 7: X
          ;; 6: 1: Timer1 on if T1G
          ;; 5:4 : 11:/8,10:/4,01:/2,00:/1
          ;; 3 : 1 LP for timer 1 on, 0: LP for timer1 of
          ;; 2 : 1 do not sync external , 0 sync external clock
          ;; 1 : 1: clock source external , 0: clock source internal
          ;; 0 : 1: enable timer 1 ,0: disable timer 1
          ;;---------------------------------------------------------

          ; movlw b'00000000' ;x,no gate control,over 8,LP osc to timer1 off,x,internal clock,stop timer
          ; movwf T1CON
          movlw b'00111000'
          movwf T1CON
          clrf PIR1
          return

          ;;-------------------------
          ;; init interrup enable,
          ;;-------------------------
          init_int_en



          評(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); })();