Problema con _delay_ms y PORT

2

Cada vez que trato de establecer un puerto determinado en alto, luego esperar un poco, luego configurar otro puerto en alto, aparece un problema en el que solo se establecería el último valor. El código que importo a través de USBASP y avrdude es:

#define F_CPU 1000000UL
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>

int main(void)
{
    DDRD = 0b11111111;
    PORTD = 0b11111110;
    _delay_ms(1000);
    PORTD = 0b11111101;

    while(1)
    {
        ;
    }
}

Y eso solo establece todos los pines en PORTD en alto, excepto PD0, ignorando la segunda instrucción. Además, si sustituyo esa pieza de código con algo como esto:

_delay_ms(1000);
DDRD = 0b11111111;
PORTD = 0b11111110;

Enciende todos los pines en el puerto con un retraso de un segundo. Estoy usando un ATmega8A y también completamente perdido.

    
pregunta Nopony

1 respuesta

1

¿por qué no usas while loop? Como sé, el compilador funciona así, ejecuta el bucle while y luego configura los puertos al valor predeterminado y luego ejecuta los bucles nuevamente. Su código funcionará así: primero establecerá PORTD = 0b11111110; luego después de su retraso PORTD = 0b11111101; y después de eso nada cambiará. Te sugiero que escribas el mismo código en el bucle while

    
respondido por el Ramtin

Lea otras preguntas en las etiquetas