Hola Vszener:
FUNCIONA
Pongo el código y una pequeña explicacion de las conclusiones que he sacado y ya me direis si son correctas:
VOID main()
{
byte estado;
set_tris_a (0xFF); // Puerto_A como entrada
set_tris_b (0xFF); // Puerto_B como entrada
set_tris_d (0x00); // Puerto_D como salida
set_tris_e (0x00); // Puerto_E como salida
setup_adc_ports (NO_ANALOGS); // Puerto A configurado como digital
disable_INTERRUPTS (GLOBAL); // Desactivamos todas las interrupciones
output_d (0x00); // Se borra el puerto d
output_e (0x00); // Se borra el puerto e
WHILE (TRUE)
{
estado = portb;
SWITCH (estado)
{
CASE 0b00000001:
IF (!bit_test (estado, 1))
portd = 0xFF;
Parpadeo();
portd = 0x00;
delay_ms (1000);
BREAK;
CASE 0b00000010:
IF (!bit_test (estado, 2))
portd = 0xAA;
Parpadeo();
portd = 0x00;
delay_ms (1000);
BREAK;
}
}
}
Seguro que estoy equivocado con lo siguiente, ya me contareis:
1º No funcionaba por que faltaba "{" entre el while y el case. Se opuede ver al principio del primer código.
2º Al poner case 0, case 1..... al ser un byte no se ejecutaban los case por que el valor 0 es decimal y no se correspondia con su valor en binario del puerto b.
3º El puerto de entrada lo tengo de lconectado con cada pin una resistancia a masa y el correpondiente interruptor a +5V, pero para que funcionara tengo que poner if(!bit_test(estado,1).De esta forma al accioar el interruptor seria=como es distinto de 0 entonces pongo el puerto d=0xFF. Lo que no entiendo es como con if (bit_test(estado,1) al actuar el interruptor no ejecuta portd=0xFF pues la explicacion seria si el pin es 1 entonces portd=0xFF.
Bueno seguiré profundizando en esto del C.