Estoy tratando de escribir un código donde, cuando se presiona un botón, se alterna un PUERTO entero.
Entonces obtuve un botón en el PUERTO E en el pin 0, y 8 leds en el PORTD, también obtuve un indicador de depuración en el pin 1 del PUERTO E
void main() {
// Interrupt flags, enable global and external interrupt
INTCON = 0x90;
TRISE.F0 = 1;
TRISE.F1 = 0;
TRISD= 0x00;
do {
if (PORTE.F0 == 1) {
Delay_ms(100);
if (PORTE.F0 == 1) {
LATD ^= 1;
Delay_ms(1000);
}
}
PORTE.F1 ^= 1;
Delay_ms(1000);
} while(1);
}
El problema es que ninguna de las dos cosas sucede, al presionar un botón no se alterna el puerto D y el pin 1 en el PUERTO E no parpadea como debería.
En caso de que obtuviera un microcontrolador 18F4550 con un oscilador de 20 Mhz, codificando en C con el compilador mikroC IDE, dejé que el IDE configurara todos los bits de configuración. ¿En qué me he equivocado?
Prueba simple.
void main() {
TRISD=0;
LATD = 0xFF;
while(1){
LATD=~LATD;
Delay_ms(1000)
}
}
esto hace que los leds parpadeen cada segundo.
Actualizar.
Cambié la declaración de alternancia de LATD a LATD ^= 0xFF;
como sugiere una respuesta. Pero esto hizo que no funcionara. Así que estoy pensando que definitivamente el problema sobre las declaraciones de detección de pulsación de botón.
Así es como se establecen los bits de configuración: