He construido un circuito con 4 expansores de 8-bits "PCF8574", dos como entradas y los otros dos como salidas, quiero comunicar todos lo PCF8574 con el bus I2C por medio del pic 16f84a, mi problema es el siguiente,al pulsar uno de los interruptores de entrada del expansor (PCF8574_DireccionLectura1) obtengo la salida del (PCF8574_DireccionEscritura1), pero no obtengo nada en la salida (PCF8574_DireccionEscritura2), cuando pulso los interruptores del (PCF8574_DireccionLectura2).
Me podriais ayudar?
Muchas Gracias.
El programa es el siguiente:
;************************************ BOTONERA I2C.asm *****************************
; ZONA DE DATOS **********************************************************************
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
LIST P=16F84A
INCLUDE <P16F84A.INC>
CBLOCK 0x0C
Dato
ENDC
PCF8574_DireccionLectura1 EQU b"01110001"
PCF8574_DireccionEscritura1 EQU b"01110010"
PCF8574_DireccionLectura2 EQU b"01110101"
PCF8574_DireccionEscritura2 EQU b"01111110"
#DEFINE PCB8574_INT PORTB,0
; ZONA DE CÓDIGOS ********************************************************************
ORG 0
goto Inicio
ORG 4
goto ServicioInterrupcion
Inicio
bsf STATUS,RP0
bsf PCB8574_INT
bcf OPTION_REG,INTEDG
bcf STATUS,RP0
call ServicioInterrupcion
movlw b"10010000"
movwf INTCON
Principal
sleep
goto Principal
; Subrutina "ServicioInterrupcion" ------------------------------------------------------
;
; Lee los interruptores conectados al PCF8574 que actúa como entrada y el resultado lo visualiza
; en los diodos LEDs conectados al PCF8574 configurado como salida.
ServicioInterrupcion
call Retardo_20ms
call PCF8574_Lee1 entrada.
movwf Dato
comf Dato,W
call PCF8574_Escribe1
call Retardo_20ms
call PCF8574_Lee2
movwf Dato
comf Dato,W
call PCF8574_Escribe2
bcf INTCON,INTF
retfie
INCLUDE <BUS_I2C.INC>
INCLUDE <PCF8574(4).INC>
INCLUDE <RETARDOS.INC>
END
;**************************** Librería "PCF8574(4).INC" **********************************
CBLOCK
PCF8574_Dato dato leído o que
ENDC
PCF8574_Lee1
call I2C_EnviaStart
movlw PCF8574_DireccionLectura1
call I2C_EnviaByte
bsf I2C_UltimoByteLeer
call I2C_LeeByte
movwf PCF8574_Dato
call I2C_EnviaStop
movf PCF8574_Dato,W
return
PCF8574_Escribe1
movwf PCF8574_Dato
call I2C_EnviaStart
movlw PCF8574_DireccionEscritura1
call I2C_EnviaByte
movf PCF8574_Dato,W
call I2C_EnviaByte
call I2C_EnviaStop
movf PCF8574_Dato,W
return
PCF8574_Lee2
call I2C_EnviaStart
movlw PCF8574_DireccionLectura2
call I2C_EnviaByte
bsf I2C_UltimoByteLeer
call I2C_LeeByte
movwf PCF8574_Dato
call I2C_EnviaStop
movf PCF8574_Dato,W
return
PCF8574_Escribe2
call I2C_EnviaStart
movlw PCF8574_DireccionEscritura2
call I2C_EnviaByte
bsf I2C_UltimoByteLeer
call I2C_LeeByte
movwf PCF8574_Dato
call I2C_EnviaStop
movf PCF8574_Dato,W
return