微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 使用PIC读写1-wire EEPROM DS2430的实例程序

使用PIC读写1-wire EEPROM DS2430的实例程序

时间:08-12 来源:互联网 点击:

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
banksel INTCON
bsf INTCON,GIE ;; GIE=1
bcf INTCON,PEIE ;;
bcf INTCON,T0IE ;; T0IE=1
bcf INTCON,INTE ;; GP2 interrupt enable
; bcf INTCON,RAIE ;; disable GPIO port change interrupt

;------------------------------------------------
; clear int flag
;------------------------------------------------
bcf INTCON,T0IF
bcf INTCON,INTF
; bcf INTCON,RAIF
bcf PIR1,TMR1IF
; movlw H'00'
; movwf INTCON

banksel PIE1
bcf PIE1,EEIE
bcf PIE1,ADIE
bcf PIE1,CMIE
bsf PIE1,TMR1IE ; enable Timer 1, timer 1 use as delay
return

;--------------------------------------------
; Tx BYTE to 2430A
; LSB first, MSB last
;--------------------------------------------
TxBYTE
movlw .8
movwf LoopCounter
bcf CARRY
RollTxB
banksel TxB
rrf TxB,F
btfss CARRY
goto LoBit
call TxHi
goto bloop
LoBit
call TxLo
bloop
banksel LoopCounter
decfsz LoopCounter,F
goto RollTxB
return

;

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top