Saludos a todos y felicitaciones por el foro es demasiado bueno, coloque este tema porque estoy trabajando con el SRF08 Ultrasonido controlándomelo un PIC16F877 para medir distancia, pero tengo problema cuando estoy leyendo los registros de la medición, cada vez que lo hago leo 255. Lo estoy simulando en proteus y la rutina de I2C para escribir en el sensor las hace bien pero cuando leo no. les voy a Mostar el código en .ASM para ver en que me pueden ayudar.
DO EQU 1
DI EQU 0
#DEFINE PIN_SDA PORTD,3
#DEFINE PIN_CLK PORTD,2
INICIO
MOVLW B'11100000'
MOVWF SLAVE
CALL LEER_M
GOTO FIN
FIN GOTO FIN
LEER_M
CALL BSTART
CALL RET_65MS
BCF SLAVE,0
MOVF SLAVE,W
MOVWF TXBUF
CALL TX
CALL RET_65MS
MOVLW 01H
MOVWF TXBUF ;
CALL TX ;
CALL RET_65MS
BSF SLAVE,0
MOVF SLAVE,W
MOVWF TXBUF
CALL TX
CALL RET_65MS
CALL RX
MOVF RXBUF,W
CALL BSTOP
MOVF RXBUF,W
MOVWF DISTANCIA_L
RETURN
BSTART
BSF PIN_SDA
NOP
NOP
BSF PIN_CLK
NOP
NOP
BCF PIN_SDA
NOP
NOP
BCF PIN_CLK
NOP
NOP
RETURN
BSTOP
BCF PIN_SDA
NOP
NOP
BSF PIN_CLK
NOP
NOP
BSF PIN_SDA
NOP
NOP
RETURN
BITOUT
BSF STATUS,RP0
BCF PIN_SDA
CLRF STATUS
BSF PIN_SDA
BTFSS PING,DO
BCF PIN_SDA
CLKOUT GOTO $+1
GOTO $+1
GOTO $+1
BSF PIN_CLK
GOTO $+1
GOTO $+1
GOTO $+1
GOTO $+1
BCF PIN_CLK
GOTO $+1
GOTO $+1
GOTO $+1
GOTO $+1
RETLW 0
BITIN
BSF PING,DI
BSF STATUS,RP0
BSF PIN_SDA
CLRF STATUS
GOTO $+1
GOTO $+1
BSF PIN_CLK
GOTO $+1
GOTO $+1
GOTO $+1
GOTO $+1
GOTO $+1
GOTO $+1
GOTO $+1
GOTO $+1
BTFSS PIN_SDA
BCF PING,DI
BCF PIN_CLK
GOTO $+1
GOTO $+1
GOTO $+1
GOTO $+1
RETLW 0
TX MOVLW .8
MOVWF COUNT
TXLP BCF PING,DO
BTFSC TXBUF,7
BSF PING,DO
CALL BITOUT
RLF TXBUF,1
DECFSZ COUNT
GOTO TXLP
CALL BITIN
RETLW 0
RX CLRF RXBUF
MOVLW .8
MOVWF COUNT
BCF STATUS,0
RXLP RLF RXBUF,1
CALL BITIN
BTFSC PING,DI
BSF RXBUF,0
DECFSZ COUNT
GOTO RXLP
BSF PING,DO
CALL BITOUT
RETLW 0