BSF EEPROM,DO ; Otherwise data bit = 1
CALL BITOUT ; Serial data out
RLF TXBUF, F ; Rotate TXBUF left
SKPC ; f(6) ---> f(7)
BCF TXBUF,0 ; f(7) ---> carry
SKPNC ; carry ---> f(0)
BSF TXBUF,0
DECFSZ COUNT, F ; 8 bits done?
GOTO TXLP ; No.
CALL BITIN ; Read acknowledge bit
MOVLW 3
BTFSC EEPROM,DI ; Check for acknowledgement
CALL ERR ; No acknowledge from device
RETLW 0
;
;END SUB
PAGE
;
;-----------------------------------------------------------------------------
; BYTE-WRITE, write one byte to EEPROM device
;-----------------------------------------------------------------------------
; Input : DATAO= data to be written
; ADDR = destination address
; SLAVE = device address (1010xxx0)
; Output : Data written to EEPROM device
;-----------------------------------------------------------------------------
;
ORG 080 ; The location for BYTE-WRITE routine CAN be
; ; assigned anywhere between (377-777) octal.
WRBYTE
MOVF SLAVE,W ; Get SLAVE address
MOVWF TXBUF ; to TX buffer
CALL BSTART ; Generate START bit
CALL TX ; Output SLAVE address
MOVF ADDR,W ; Get WORD address
MOVWF TXBUF ; into buffer
CALL TX ; Output WORD address
MOVF DATAO,W ; Move DATA
MOVWF TXBUF ; into buffer
CALL TX ; Output DATA and detect acknowledgement
CALL BSTOP ; Generate STOP bit
goto wrt_end
;
;
;
;-----------------------------------------------------------------------------
; BYTE-READ, read one byte from serial EEPROM device
;-----------------------------------------------------------------------------
; Input : ADDR = source address
; SLAVE = device address (1010xxx0)
; Output : DATAI = data read from serial EEPROM
;-----------------------------------------------------------------------------
;
ORG 0C0 ; The location for BYTE-READ routine can be
; ; assigned anywhere between (377-777) octal.
RDBYTE
MOVF SLAVE,W ; Move SLAVE address
MOVWF TXBUF ; into buffer (R/W = 0)
CALL BSTART ; Generate START bit
CALL TX ; Output SLAVE address. Check ACK.
MOVF ADDR,W ; Get WORD address
MOVWF TXBUF
CALL TX ; Output WORD address. Check ACK.
CALL BSTART ; START READ (if only one device is
MOVF SLAVE,W ; connected to the I2C bus)
MOVWF TXBUF
BSF TXBUF,0 ; Specify READ mode (R/W = 1)
CALL TX ; Output SLAVE address
CALL RX ; READ in data and acknowledge
上一页 [1] [2] [3] [4] [5] 下一页
本文关键字:程序 PIC单片机,单片机-工控设备 - PIC单片机