使用PIC读写1-wire EEPROM DS2430的实例程序
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
;
DS2430 实例 程序 EEPROM 1-wire PIC 读写 使用 相关文章:
- 使用PIC读写1-wire EEPROM DS2430的实例(05-17)
- 国外现场总线应用实例两则(12-21)
- 三菱PLC编程技巧及实例图解(12-19)
- 单片机的七个创意设计实例(从易到难),附电路图、源代码、演示视频(06-11)
- PCI驱动程序开发实例(02-21)
- 51单片机做信号发生器实例编程(01-16)