Hola de nuevo:
Os adjunto el programa final, solo chequea las entradas y asi pone las salidas.
Solo os ponga parte de el pues todo el resto del programa es casi igual. Solo adjunto la configuracion.
LIST P=16F876 ;Selecciona el tipo de micro.
LIST C=132 ;Número de caracteres por línea.
#INCLUDE <P16F876.INC> ;Inserta librería igualdades de registros micro.
#Define Banco_0 bcf STATUS,RP0 ;Selección del banco 0 de la memoria de programa.
#Define Banco_1 bsf STATUS,RP0 ;Selección del banco 1 de la memoria de programa.
; #Define CS1_ON bsf PORTA,0 ;Se habilita las entradas.
; #Define CS1_OFF bcf PORTA,0 ;Se deshabilita las entradas.
#Define CS3_ON bsf PORTA,1 ;Se habilita las salidas.
#Define CS3_OFF bcf PORTA,1 ;Se deshabilita las salidas.
W_Temporal EQU 0x20 ;Dir. a guardar el W en operaciones para salvar su valor.
Status_Temporal EQU 0x21 ;Dir. a guardar el STATUS en operaciones y salvar su valor.
Delay_Tiempo_1 EQU 0x22 ;Dir. a guardar el valor de contaje a en rutinas de delay.
Delay_Tiempo_2 EQU 0x23 ;Dir. a guardar el valor de contaje a en rutinas de delay.
Byte_Entrada EQU 0x24 ;Var_temporal del dato leido de las entradas.
Byte_Salida EQU 0x25 ;Var_temporal del dato a WR para el periférico de Salida-1.
ORG 0x00 ;Dirección del Vector de RESET. Desactivar si hay bootloader.
; ORG 0x1F00 ;Dirección del Vector de RESET cuando hay bootloader.
goto Inicio ;Comienzo del programa después del vector de Interrupción.
ORG 0x05 ;una posición detrás Vector_Interrupción.
;; 1.1.- Configuración de los registros del micro a utilizar.
Inicio Banco_1 ;Selección del banco 1 de la memoria de programa.
movlw b"00000000" ;Se configura la puerta B como salida.
movwf PORTB ;Puerta B configurada como salida.
movlw b"11111111" ;Se configura el puerto C como entradas.
movwf TRISC ;Puerta C configurada como entrada.
movlw b"00000110" ;Valor a cargar W para configurar la
movwf ADCON1 ;Puerta A como E/S digitales.
movlw 0x00 ;Valor para reconfigurar la puerta A como salida.
movwf TRISA ;Puerta A = salida.
Banco_0 ;Selección del banco 0 de la memoria de programa.
movlw b"10000111" ;Pull_up=Off, InterpRB0=Off,Clock=Interno,Contador=Ascendente y
movwf OPTION_REG ;Predivisor de 1:256 asociado al temporizador TMR0.
clrf Byte_Salida ;Al empezar se borra el contenido del registro de las salidas.
call WR_Salida;Se escribe el dato inicial en la salida.
; 2.1.- Se realiza la comprobación del estado del presostato B44.
B44 call RD_Entrada ;Se lee el estado de las entradas.
btfsc Byte_Entrada,0 ;Está el presostato B44 abierto. B44=>0.
goto URG ;¿No? => B44=1 Se sigue con la prueba en el punto URG.
bcf Byte_Salida,0 ;Valor para dejar el rele 1 desactivado.
call WR_Salida ;Se escribe el dato en la salida.
goto A23 ;Se
Apartir se checuea otra entrada y asi sucesivamente..
Tengo definidos al principio los Byte_entrada y Bayte _salida al princio en direcciones de memoria 0x24 y 0x25.
WR_Salida y RD_Entrada se encargan de leer y escribir en los puertos B y C
Gracias