2 votos

Problema con _delay_ms y PORT

Cada vez que intento poner un puerto determinado en alto, luego esperar algún tiempo, luego poner algún otro puerto en alto, obtengo un problema en el que sólo se establece 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 pone todos los pines en PORTD a alto excepto PD0, ignorando la segunda instrucción. Además, si reemplazo ese trozo de código con algo como esto:

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

Enciende todos los pines del puerto con un retardo de un segundo. Estoy usando un ATmega8A y también completamente perdido.

1voto

¿por qué no usas el bucle while? por lo que se el compilador funciona asi ejecuta el bucle while y luego pone los puertos en el valor por defecto y luego ejecuta el bucle while de nuevo tu codigo funcionara asi : primero pondra PORTD = 0b11111110; luego despues de tu retardo PORTD = 0b11111101; y despues de eso nada cambiara. Te sugiero que escribas el mismo código dentro del bucle while

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X