¿Alguien puede ayudarme a entender qué es incorrecto en mi lógica al escribir un botón que enciende un LED de esta manera? Conozco la forma XOR, solo quiero averiguar por qué no funciona cuando está escrito en este formulario.
Aquí está el código:
#include <avr/io.h>
#define LED 5
#define BUTTON 0
int main(void)
{
DDRD |= (1<<LED);
DDRD &= ~(1<<BUTTON);
unsigned char flag = 0;
while(1)
{
if(PIND & (1<<BUTTON) && flag == 0)
{
PORTD |= (1<<LED);
flag = 1;
}
if(PIND & (1<<BUTTON) && flag == 1)
{
PORTD &= ~(1<<LED);
flag = 0;
}
}
}
Editar: ahora el código funciona bien después de agregar la demora, pero ¿podría explicar por qué la necesito (demora) cuando alterno el led de esta manera pero no cuando alterna usando el método XOR? Aquí está el código para el método xor:
#define F_CPU 8000000Ul
#include <avr/io.h>
#define led 5
#define pb 0
int main(void)
{
DDRD|= 1<<led;
PORTD &= ~(1<<led);
unsigned char press=0;
while(1)
{
//TODO:: Please write your application code
if(PIND&(1<<pb))
{
if (press == 0 )
{
PORTD ^= (1<<led); //toggling the led
press =1;
}
}
else
{
press = 0;
}
}
}