El artículo anterior explica la comunicación en serie mediante transferencia de datos de 8 bits. El microcontrolador AVR también admite la transferencia de datos en serie con tamaños de cuadro de 5, 6, 7 y 9 bits de datos. El tamaño del marco de datos se puede ajustar según la aplicación. Por ejemplo, considere un sistema que necesita transmitir sólo códigos ASCII como datos. En este caso, el tamaño de la trama de datos de 7 bits es suficiente porque la longitud de los datos del código ASCII es igual a 7 bits. Esto hará que el sistema sea más eficiente, ahorrando tiempo en un período de reloj en cada transmisión de trama de datos. Este artículo explica la transferencia de datos en serie con diferentes tamaños de marco.
El tamaño del marco de datos se puede seleccionar configurando los bits UCSZ (Tamaño de caracteres USART). El registro UCSRC contiene bits UCSZ (1:0) y UCSRB contiene bits UCSZ2. La siguiente tabla muestra la configuración de bits UCSZ correspondiente a diferentes tamaños de tramas de datos.
Fig. 2: Configuración de bits UCSZ para comunicación en serie de diferentes tamaños de tramas de datos
Cronograma:
Caso 1: Tamaño de trama 5, 6 y 7 bits:
Estos tres tamaños de trama se pueden seleccionar programando solo los bits UCSZ1 y UCSZ0. No es necesario programar el bit UCSZ2 porque el valor predeterminado de este bit es cero.
Por ejemplo: UCSRC= (1<
// Sin paridad, 1 bit de parada.
Los pasos de programación para enviar y recibir datos seguirán siendo los mismos que los utilizados para transmitir y recibir datos de 8 bits. Para obtener más información, los lectores pueden consultar el artículo anterior sobre comunicación en serie .
Programa de prueba para recepción y transmisión de 6 bits:
Se escribe un programa de prueba para la comunicación de datos de 6 bits entre el microcontrolador y la PC. En este experimento, la entrada se obtiene del usuario a través de un teclado. Los datos correspondientes se envían al microcontrolador a través del puerto COM de la PC. El microcontrolador recibe los datos y los devuelve al puerto COM de la PC. HyperTerminal se utiliza para configurar el puerto COM para que sea compatible con este experimento.
Los siguientes pasos se utilizan para configurar los puertos COM:
1. Configure la velocidad en baudios = 9600 bps, bit de datos = 6, paridad = ninguna, bit de parada = 1.
Fig. 3: Configurar puertos COM para comunicación serie
2. Seleccione la casilla de verificación correspondiente a Echo como se muestra en la siguiente imagen para observar la transmisión y recepción de datos.
Salida:
El siguiente resultado se recibe cuando se presionan 1 2 3 4 5 6 teclas ABCDEFG en el teclado.
Fig. 5: Salida de comunicación serie entre AVR y PC
Como se muestra en la imagen de arriba, se recibe la salida adecuada cuando se presionan las teclas numéricas, pero cuando se presionan las teclas alfabéticas, aparece algún símbolo. Este resultado inesperado se recibe porque estamos trabajando con un tamaño de trama de datos de 6 bits. Si se selecciona la trama de datos de 6 bits, los dos bits más significativos se enmascararán a cero al leer la UDR. El código ASCII de '1' es 0x31 (0011 0001). Si se enmascaran los dos bits más significativos, queda 11 0001, que también es igual a 0x31. El tamaño de los códigos ASCII para todos los valores numéricos es de 6 bits, por lo que no habrá problemas al recibir y transmitir valores numéricos en modo de 6 bits. Pero el valor ASCII de 'A' es 0x41 (0100 0001). Si se enmascaran los dos bits más significativos, quedará 00 0001, que es igual a 0x01, por lo que se imprimirá algún símbolo inusual.
Caso 2: tamaño de trama de 9 bits:
La comunicación de datos de 9 bits se puede utilizar en la comunicación multiprocesador. Para seleccionar la trama de datos de 9 bits, todos los bits UCSZ se establecen en 1 (UCSZ (2:0) = 7).
Por ejemplo:
UCSRB=(1<
UCSRC=(1<
1. Transmisión de datos de 9 bits:
Los datos de 9 bits deben almacenarse en un buffer antes de la transmisión. Dado que el tamaño de los datos del registro UDR es de solo 8 bits, el noveno bit debe almacenarse en el bit TXB8 del registro UCSRB antes de que el byte inferior se almacene en la UDR.
void usert_tx(unsigned int serial_data) //transmisión de función{
2. Recepción de datos de 9 bits:
El noveno bit debe leerse del bit RXB8 antes de leer el byte inferior. También se debe verificar el estado de FE (Error de trama), DOR (Sobreejecución de datos) y PE (Error de paridad) para verificar los datos.
unsigned int usert_rx(void) // función para recepción
{
mientras(!(UCSRA & (1<
si(UCSRA & ((1<
devolver -1;
UCSRB =(UCSRB>>1)&0x01; //filtrar 9 bits
retorno ((UCSRB<<8) UDR); // valor de retorno
}
Código fuente del proyecto
###
// Programa para comunicación serial (USART) con diferentes tamaños de marco usando microcontrolador AVR
###
Diagramas de circuito
Diagrama de circuito de comunicación serie-USART con diferentes tamaños de bastidor utilizando el microcontrolador AVR |
Componentes del proyecto
- ATmega16
- LCD
- MAX232