USART Programación AVR microcontrolador

1

Quiero establecer una comunicación USART entre mi chip Atmega32a y mi computadora, pero hay algo que no entiendo. Mientras leía la hoja de datos, el registro UBRR es un registro de 12 bits, pero se divide en dos registros de 8 bits: UBRRH que contiene los cuatro bits más significativos y el UBRRL que contiene los ocho bits menos significativos de la velocidad de transmisión de USART; Mi pregunta es: ¿Por qué tengo que cambiar BAUD_PRESCALLER con 8 a la derecha? No entiendo cómo funciona todo esto :( El ejemplo si BAUD_PRESCALLER es 120, en binario sería: 0b01111000 así 0b01111000 > > 8 = 0b00000000; = > ¿Estoy equivocado en alguna parte?

void USART_init(void)
{
    UBRRH = (uint8_t)(BAUD_PRESCALLER>>8); <--- this line
    UBRRL = (uint8_t)(BAUD_PRESCALLER);  <-- and this line
    UCSRB = (1<<RXEN)|(1<<TXEN);
    UCSRC = (1<<UCSZ0)|(1<<UCSZ1)|(1<<URSEL);
}

Adjuntaré la hoja de datos para el registro UBRR:

    
pregunta Simon Maghiar

1 respuesta

1

Suponga que desea un BAUD_PRESCALER = 1024.

La representación binaria de 1024 es: 0b00000100 00000000.

He puesto un espacio después de 8 bits para que pueda distinguir entre los 8 bits menos significativos (LSB) de los 8 bits más significativos (MSB). Para configurar los registros UBRR, debe colocar los 8 MSB en el registro UBRRH y los 8LSB en el registro UBRRL. Para hacer esto, puede simplemente escribir BAUD_PRESCALER en un uint8_t para obtener los LSB:

UBRRL = (uint8_t)(BAUD_PRESCALLER);

Esto asignará 0b00000000 a UBRRL, ya que las 8 MSB se descartarán debido a la conversión a cadena. Recuerda, la transmisión a uint8_t solo te dará los 8 LSB de cualquier número que le des.

Ahora, para el registro UBRRH, primero debe cambiar los 8 MSB a los LSB para que la transmisión de tipos funcione correctamente. Entonces 0b00000100 00000000 debe convertirse en 0b00000100, por lo tanto, el desplazamiento correcto en 8 bits:

UBRRH = (uint8_t)(BAUD_PRESCALLER>>8); //Shifts BAUD_PRESCALLER MSBs into the LSBs
    
respondido por el Chi

Lea otras preguntas en las etiquetas