新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 使用PIC讀寫1-wire EEPROM DS2430的實例

        使用PIC讀寫1-wire EEPROM DS2430的實例

        作者: 時間:2011-05-17 來源:網(wǎng)絡(luò) 收藏

        ;-------- read address 0 --------------------------
        movlw H'00'
        movwf Addr
        call Rd

        goto $
        ;----------------------------------------------
        ; template to init before write
        ; to
        ;-----------------------------------------------
        ; movlw H'00'
        ; movwf Addr
        ; movlw H'3C'
        ; movwf TxBuffer

        ;---------------------------------------------
        ; write one byte
        ; input
        ; Addr = starting address to write
        ; TxB = data to save
        ; output =
        ; ErrCode = 0 -> write ok
        ; = 1 -> write fail
        ;-----------------------------------------------
        WrDS2430
        call WrScratchPAD
        call CP2EE
        return

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


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

        ;-------------------------------------------------
        ; read DS2430 one byte
        ; input
        ; Addr = starting address to read
        ; output
        ; RxB = data to read
        ;--------------------------------------------------
        RdDS2430
        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



        關(guān)鍵詞: DS2430 實例 EEPROM 1-wire PIC 讀寫 使用

        評論


        相關(guān)推薦

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

        關(guān)閉
        主站蜘蛛池模板: 临朐县| 海伦市| 祁阳县| 大庆市| 新源县| 海原县| 克拉玛依市| 平利县| 安塞县| 永善县| 丰顺县| 日照市| 右玉县| 额敏县| 沂水县| 盐池县| 石渠县| 崇礼县| 兰州市| 陆河县| 文安县| 绵阳市| 土默特左旗| 泾阳县| 娱乐| 安达市| 邻水| 定结县| 民和| 塘沽区| 温泉县| 金山区| 尉氏县| 赣州市| 嘉鱼县| 汝阳县| 涿州市| 台湾省| 麟游县| 洞头县| 黄骅市|