Vous êtes sur la page 1sur 8

COMUNICACIÓN SERIAL POR LA USART

Hay dos métodos para la comunicación serial de datos: síncrona y asíncrona. En el método de
comunicación síncrona son enviados bloques completos (caracteres) al mismo tiempo. No se
requiere ningún bit adicional (inicio, parada, paridad) para la sincronización de la trama. Los
dispositivos son sincronizados por bloque. Y en la comunicación asíncrona la transmisión de datos
es hecha byte por byte, es decir un byte a la vez. Hay bits adicionales para completar la trama.

En la comunicación síncrona la trama consiste de bits de datos, mientras que en la comunicación


asíncrona el total de número de bits en una trama puede tener más que solamente los bits de
datos

Hay tres formas en la cual la comunicación serial puede hacerse:

1. Simplex: La transmisión se hace en una sola dirección.

2. Half duplex: La transmisión puede hacerse en ambas direcciones pero hacia un lado a la
vez.

3. Full duplex: La transmisión puede hacerse en ambos sentidos simultáneamente.

El ATMEGA16 está equipado con tres diferentes clases de sistemas periféricos para la
comunicación serial:

- Serial USART
- SPI (Interfaz periférica serial)
- TWI (Interfaz de dos hilos)
Serial USART (Universal Synchronous Asynchronous Receiver and Transmission/Transmitter)

La USART proporciona comunicación full-duplex entre el transmisor y el receptor. Tiene hardware


independiente para la comunicación serial localizados en el pin 14 (RXD) y el pin 15 (TXD) para la
interfaz de transmisión y recepción hacia/desde el microcontrolador.

La USART del ATMEGA16 provee modo de comunicación asíncrona y no tiene una línea de reloj
dedicada entre los puntos finales de transmisión y recepción. La sincronización es lograda por la
apropiada configuración de la tasa de baudios, bits de inicio y parada en una secuencia de
transmisión.

Tasa de baudios: En simples palabras es la velocidad en bits por segundo a la cual se transmiten
los datos.

Bit de inicio y parada: Estos bits son usados para sincronizar la trama de datos. El bit de inicio es
un simple bit en nivel bajo y está presente siempre al inicio de la trama indicando que los
siguientes bits son los bits de datos. El bit de parada puede ser uno o dos bits en alto al final de la
trama indicando el final de la misma.

La USART del ATMEGA16 tiene las siguientes características:

- Diferentes tasas de baudios.


- Tamaño de datos variable con opciones de 5 a 9 bits de datos.
- Uno o dos bits de parada.
- Hardware para chequeo de paridad.
- Configuración síncrona o asíncrona.
- Interrupciones separadas para: recepción completa, transmisión completa y registro
de datos vacío.

Registros de la USART

Como en los demás módulos de trabajo se requiere configurar la USART por medio de los
siguientes registros:
UCSR (USART control and status register)

Este está básicamente dividido en tres partes UCSRA, UCSRB y UCSRC.

i. UCSRA

RXC (USART Receive Complete) Es un bit de bandera que se pone en 1 automáticamente cuando
hay un dato en el buffer de recepción que no ha sido leído, y se pone a 0 si está vacío.
TXC (USART Transmit Complete) Es un bit de bandera que se pone en 1 automáticamente cuando
un dato ha sido transmitido completamente.
UDRE (USART Data Register Empty) Es un bit de bandera que se pone automáticamente en 1
cuando el buffer de transmisión está vacío, indicando que está listo para recibir nuevos datos. Este
es borrado cuando se escribe en el registro UDR.

ii. UCSRB

RXCIE (RX Complete Interrupt Enable) Es un bit que cuando vale 1 habilita la interrupción por
recepción completa.
TXCIE (TX Complete Interrupt Enable) Es un bit que cuando vale 1 habilita la interrupción por
transmisión completa.
UDRIE (USART Data Register Empty Interrupt Enable) Es un bit que cuando vale 1 habilita la
interrupción por registro de datos vacío.
RXEN (Receiver Enabled) Buffer de recepción habilitado.
TXEN (Transmitter Enabled) Buffer de transmisión habilitado.

iii. UCSRC

El transmisor y el receptor son configurados con las mismas características de datos que se
configuran en este registro para la apropiada transmisión de datos.
URSEL (USART Register Select) Este bit debe ser puesto a 1 cuando se escribe en el UCSRC, ya que
esta locación de memoria se comparte con UBRRH.
UMSEL (USART Mode Select) 1 para modo síncrono y 0 para modo asíncrono.
UPM[1..0] (USART Parity Mode) Como se muestra en la figura: 00 sin paridad, 10 Paridad par y 11
Paridad Impar.
USBS (USART Stop Select Bit) Indica la cantidad de bits de parada: 1 para dos bits, 0 para un bit.
UCSZ[2..0] (USART Caracter Size) Se combina con el bit 2 del registro UCSRB para fijar el tamaño
de la trama de datos o los bits de datos. Así:

UDR (USART Data Register)

Los registros de la USART para recibir y transmitir datos comparten la misma dirección
referenciada como el registro UDR. Cuando un dato es escrito al registro, este se escribe en el
buffer de transmisión (TXB). Cuando un dato se recibe, este debe leerse del buffer de recepción
(RXB).

UBRR (USART Baud Rate Registers) Basicamente se usan para ajustar la tasa de baudios para la
USART.

El registro UBRRH comparte la misma dirección que el registro UCSRC. La diferencia se basa en el
valor del bit URSEL, si es 0, el registro que se escribe es UBRRH, mientras que cuando es 1, el
registro que se escribe es el UCSRC.

Los registros UBRRH y UBRRL almacenan entre los dos el valor de la tasa de baudios como un dato
de 12 bits que contiene los 4 bits de mayor peso en UBRRH y los 8 bits de menor peso en UBRRL.
La tasa de baudios debe ser la misma en el receptor y el emisor de datos para que exista una
comunicación exitosa.

El valor del registro UBRR se calcula mediante la siguiente fórmula:


Ejemplo: Escriba un programa que permita mostrar en un LCD conectado al microcontrolador
ATMEGA16 cualquiera de los caracteres enviados desde en computador por medio del teclado
usando el puerto serial RS232. Los caracteres son enviados uno a uno.

La conexión del MAX232 con el ATMEGA16 es mostrada en el circuito.

El MAX232 es usado para convertir niveles de voltaje. El pin 11 (T1IN) del MAX232 es conectado al
pin 15 (TX) del microcontrolador AVR y el pin 12 (R1IN) del MAX232 es conectado al pin 14 (RX) del
AVR. En el computador puede usarse el hyperterminal para enviar datos hacia el
microcontrolador.
Explicación del código:

Paso 1. Seleccionar la tasa de baudios. En este caso se hará con 9600 baudios.

Paso 2. Calcular el correspondiente valor del registro UDRR. De acuerdo a la formula mostrada, y
con el cristal de 4MHz típico, el valor será 25d = 19h ó 0x19.

Paso 3. Para inicializar la USART en el microcontrolador:

1. Habilite el hardware de transmisión y recepción.


2. Seleccione el número de bits de parada. Se usarán 2.
3. Fije el tamaño de los datos. Se usarán 8 y sin paridad.
4. Cargue el valor de UDRR.

Paso 4. Obtener los datos de la USART.

Para este paso se debe monitorear el estado de la bandera RXC, este bit se hace 1
automáticamente cuando recibe la señal del bit de parada. Así que si RXC es alto significa que hay
un dato en el registro UDR. Este dato debe colocarse en un registro interno o sino se pierde o se
sobreescribe por otro dato.

;********************************************************************************************
;* Descripcion: Programa de prueba con ATMEGA16 AVR RISC Processor,
;* Ejemplo de manejo de USART.
;*
;* Fecha: 30-05-2011
;* Dispositivo: ATMEGA16
;* Autores: Lewin Lopez
;*
;* Pin RS del LCD se conecta a PB0
;* Pin R/W del LCD se conecta a PB1
;* Pin E del LCD se conecta a PB2
;* Pines D0-D7 del LCD se conecta a PORTA PA0-PA7
;*
;* Configuración de puertos:
;* PORTA: 0xFF SALIDAS
;* PORTB: 0x0F SALIDAS
;*
;* Registros: R16 y R17 -> Retardos LCD
;* R19 -> Intermediario para comandos y/o datos al LCD
;********************************************************************************************

;DIRECTIVAS EN ENSAMBLADOR
.INCLUDE "m16def.inc" ;ATmega16
.DEVICE ATMEGA16

;reset-vector address $0000


.ORG $0000
JMP INICIO ;va al inicio

RETARDO_LCD:
;SUBTRUTINA DE RETARDO PARA LCD
LDI R16, $1F
CICLO0:
LDI R17, $55
CICLO1:
DEC R17
BRNE CICLO1
DEC R16
BRNE CICLO0
NOP
NOP
RET

LCD_RW:
;SUBRUTINA PARA ENVIAR DATO O COMANDO AL LCD
OUT PORTA, R19 ;ENVIO POR PUERTO A
SBI PORTB, $02 ;PONE EN 1 PB2 (ENABLE)
CALL RETARDO_LCD ;ESPERA 2 ms
CBI PORTB, $02
CALL RETARDO_LCD
RET

;PROGRAMA PRINCIPAL
;Cargar el puntero de pila
INICIO:
LDI R19,HIGH(RAMEND) ;Configuracion de...
OUT SPH,R19
LDI R19,LOW(RAMEND)
OUT SPL,R19 ;...la pila: Stack: $045F=RAMEND

;Configuracion de Puertos
LDI R19,$FF ;r16 <- $FF
OUT DDRA,R19 ;portA y portB de salida
OUT DDRB,R19 ;portB salidas

;Inicializacion de Puertos
CLR R19
OUT PORTA,R19
OUT PORTB,R19
CLR R20
CBI PORTB,$00 ;PARA ENVIAR COMANDOS

;Inicializacion del LCD


CONF_LCD:
LDI R19, $0E ;CONTROL ON/OFF
CALL LCD_RW
LDI R19, $1C ;DESPLAZAMIENTO DEL CURSOR
CALL LCD_RW
LDI R19, $06 ;MODO DE FUNCIONAMIENTO
CALL LCD_RW
LDI R19, $38 ;MODO DE TRANSFERENCIA
CALL LCD_RW

;Inicializacion de la USART
LDI R19, $18
OUT UCSRB, R19
LDI R19, $8E
OUT UCSRC, R19
LDI R19, $19
OUT UBRRL, R19
LDI R19, $0E
OUT UCSRC, R19
CLR R19
OUT UBRRH, R19
;SE INICIA EL CURSOR AL INICIO DE LA PRIMERA LINEA Y BORRA TODO
BORRAR:
LDI R19, $01
CALL LCD_RW

;Lectura del buffer de recepcion


CICLO:
SBIC UCSRA, $07
JMP MOSTRAR
JMP CICLO

;imprimir en el LCD el dato recibido


MOSTRAR:
IN R19, UDR
CBI UCSRA, $07
SBI PORTB,$00 ;PARA ENVIAR DATOS
CALL LCD_RW
INC R20
CPI R20,$11
BRNE CICLO
CBI PORTB,$00
CLR R20
JMP BORRAR

Ejercicios de Clase:

a) Escriba un programa que encienda un LED conectado a D7 cuando reciba una ‘P’ por el
puerto serial USART y que lo apague cuando reciba una ‘a’ por el puerto serial. Cada vez
que se recibe un dato este debe mostrarse en el LCD.
b) Escriba un programa que si se presiona un pulsador conectado a D2 (por interrupción
externa) envíe un mensaje hacia el PC por el puerto serial de la USART y luego espere por
recibir una ‘W’ desde el PC para mostrar ese mismo mensaje en el LCD. Luego de 500 ms
se regresa a las condiciones iniciales del programa.

Vous aimerez peut-être aussi