ALELUYA!!
Por fin ya funciona. Os adjunto el programa tal como ha quedado:
#include <16f84a.h>
#fuses XT,NOWDT,NOPUT,NOPROTECT
#use delay(clock=4000000)
#use standard_io(A)
#use standard_io(B)
#byte port_a=5
#byte port_b=6
void main(void)
{
int V1;
int V2;
set_tris_a(0b11111); //asignamos el puerto A como entrada
set_tris_b(0b00000000); //asignamos el puerto B como salida
disable_interrupts(GLOBAL); //desactivamos todas las interrupciones
port_b=0; //ponemos el puerto B a cero
while (true) //bucle infinito
{
if (input(PIN_A1))
{
V2=1; //si RA1=1, aparece 1 en RB2
output_high(PIN_B2);
}
if (input(PIN_A2))
{
V2=0; //si RA2=1, aparece 0 en RB2
output_low(PIN_B2);
}
if (input(PIN_A3))
{
V1=1; //si RA3=1, aparece 1 en RB1
output_high(PIN_B1);
}
if (input(PIN_A4))
{
V1=0; //si RA4=1, aparece 0 en RB2
output_low(PIN_B1);
}
if ((input(PIN_A0)==1)&&V1) output_high(pin_B0); //si RA0=1 y RA3=1, activamos relé por RB0
{
if (((input(PIN_A0)==0)&&V1&&!V2)||((input(PIN_A0)==0)&&!V1&&!V2)) output_low(pin_B0); //si RA0=0 y RA3=1, o si RA0=0 y RA3=0,desactivamos relé por RB0
{
if (V1&&V2&&((input(PIN_A0)==0))) output_high(PIN_B3); //si RA1=1 y RA3=1 y RA0=0, activamos relé por RB3
}
if (V1&&!V2&&((input(PIN_A0)==00))) output_low(PIN_B3); //si RA2=1 y RA3=1 y RA0=0, desactivamos relé
}
}
Con las variaciones que os detallo: He añadido una salida mas con otro led, de tal manera que en ciertas condiciones se enciende uno y en otras se enciende el otro
Aunuqe la finalidad tanto en un caso como en el otro, es la de activar un relé me da lo mismo activarlo por una fuente que por la otra, según el caso, pero esto ya es cuestión de añadir una puerta OR de dos entradas conectada a las salidas RB0 y RB3, y solucionado.
Ademas lo he probado con los pins de entrada como indicaba Piriots y a mi manera, y funciona perfectamente.
Os doy las gracias a todos por vuestra ayuda.
Saludos