Hace poco tuve un examen escrito para una clase y una de las preguntas fue escribir un programa para el ATmega8515. Escribí esto:
#include <avr/io.h>
#define F_CPU 4000000UL
#include <util/delay.h>
#define Delay 5000
int main(void){
DDRB = 0xFF; //set to output
DDRA = 0x00; //set to input
PORTB = 0xFF; //turn off all LEDs
while(1) {
if (PINA == 0b11111100){ //if SW0 and SW1 are pressed
for(uint8_t i = 7; i<=0; i--){
PORTB &= ~(1<<i); //Turn on led at location i
_delay_ms(Delay); //Delay
PORTB |= (1<<i); //Turn off led at location i
_delay_ms(Delay); //Delay
}
}
else if(PINA == 0b11111110){
for(uint8_t i=0; i>=7; i++){
PORTB &= ~(1<<i);
_delay_ms(Delay);
PORTB |= (1<<i);
_delay_ms(Delay);
}
}
else if(PINA == 0b11111101){
for(uint8_t i = 7; i<=0; i--){
PORTB &= ~(1<<i);
_delay_ms(Delay);
PORTB |= (1<<i);
_delay_ms(Delay);
}
for(uint8_t i=0; i>7; i++){
PORTB &= ~(1<<i);
_delay_ms(Delay);
PORTB |= (1<<i);
_delay_ms(Delay);
}
}
else{}
}
}
Por alguna razón, esto no funciona.
El resultado esperado es que si se presionan los dos primeros interruptores (SW0 & SW1), los leds se desplazarán de izquierda a derecha. Si se presiona el primer interruptor (SW0), los LED se desplazarán de derecha a izquierda. Y si se presiona el segundo interruptor (SW1), los leds se desplazarán de izquierda a derecha yendo y viniendo para siempre
A partir de ahora, sé que los bucles for funcionan, los he probado en otros programas. Simplemente parece que no estoy recibiendo ninguna entrada de los interruptores.