Conexión en serie ATMEGA328p

1

Escribí una función para conectarme a través de UART e imprimir una cadena con fines de depuración. Pero mi lógica no se suma de alguna manera ... Veo la línea "Número aleatorio" impresa en la consola pero increíblemente rápida ... no importa lo que agregué para un valor de _delay_ms, no es utilizable. ¿Me perdí algo?

¿Por qué mi función de demora no influye en la salida del terminal serie?

void initUSART(void) {

    #define BAUDRATE ((F_CPU) / (BAUD * 8UL)-1) // Set Baud Rate Value for UBRR

    // Set register
    UBRR0H = (BAUDRATE >> 8);
    UBRR0L = BAUDRATE;
    UCSR0A |= (1 << U2X0);  
    // Enable USART transmitter and receiver
    UCSR0B = (1 << TXEN0) | (1 << RXEN0);
    // Set 8 data bits and 1 stop bit
    UCSR0C = (1 << UCSZ01) | (1 << UCSZ00);
}

void transmitByte(uint8_t data) {
    // Wait for empty transmit buffer
    loop_until_bit_is_set(UCSR0A, UDRE0);
    UDR0 = data;
}

void printString(const char myString[]) {
    uint8_t i = 0;
    while (myString[i]) {
        transmitByte(myString[i]);
        i++;
    }
}

int main(void)
{
    setup();    
    randomSeed(adcRead(0));

    while (1) 
    {   
        printString("Random Number:\n");
        _delay_ms(100000);
    }

    return (0);
}

Cuando uso \r\n al final de la cadena, la salida se vuelve realmente extraña:

    
pregunta sesc360

0 respuestas

Lea otras preguntas en las etiquetas