MICROCONTROLADORES
UNIVERSIDAD DE LAS FUERZAS ARMADAS ESPE
INGENIERÍA EN ELECTRÓNICA E INSTRUMENTACIÓN
MICROCONTROLADORES
USART ASINCRÓNICO
Andrés Acurio – Fabricio Borja
andyacurys@hotmail.com
fabricio.b.reinoso@hotmail.com
RESUMEN: UART son las siglas de "Universal Asynchronous Receiver-Transmitter". Éste controla los puertos y
dispositivos serie. Se encuentra integrado en la placa base o en la tarjeta adaptadora del dispositivo. Un UART dual, o
DUART, combina dos UARTs en un solo chip. Existe un dispositivo electrónico encargado de generar la UART en cada
puerto serie. Las funciones principales de chip UART son de manejar las interrupciones de los dispositivos conectados al
puerto serie y de convertir los datos en formato paralelo, transmitidos al bus de sistema, a datos en formato serie, para
que puedan ser transmitidos a través de los puertos y viceversa.
ABSTRACT: UART stands for "Universal Asynchronous Receiver-Transmitter". This controls the ports and serial
devices .It is integrated into the motherboard or adapter card in the device. A dual UART, or DUART, combines two
UART s into a single chip. There is an electronic device which generates the serial port UART in each. The main
functions are to handle chip UART interrupts of the devices connected to the serial port and convert the data in parallel
format, transmitted to the system bus, a serial data format, so they can be transmitted through ports and vice versa.
• Circuito de muestreo.
• Generador de baudios.
• Transmisor asíncrono.
• Receptor asíncrono.
8. La USART no soporta la generación de paridad por
hardware.
9. En modo asíncrono la USART se para al entrar el
micro en modo SLEEP.
1 MARCO TEORICO
El USART (universal synchronous asynchronous
receiver transmitter) es uno de los dos puertos series de
los que dispone los PIC16F87X.
Puede funcionar de forma síncrona (half duplex) o
asíncrona (full duplex).
Transmisor Asincronico
Modo asíncrono:
_La transmisión se habilita mediante el bit TXEN, TXSTA
El registro de transmisión es el TXREG. Para transmitir
un dato el software lo escribe en este registro.
_Después de haber escrito el TXREG el dato pasa al
registro de desplazamiento TSR, este registro no se
carga hasta que el bit de STOP del dato anterior no se
ha transmitido.
_Al quedar vacío el TXREG se activa el bit de
interrupción TXIF (PIR1), habilitado por el bit TXIE (PIE).
(TXIF no se desactiva por software, se desactiva sólo
cuando se cargan nuevos datos).
_Hay otro bit el TRMT, TXSTA que muestra el estado del
TSR, no produce ninguna interrupción. (Cuando activa
TRMT está vacío).
_ Para enviar un dato con 9 bits hay habilitar el bit TX9,
(TXSTA) y poner el que se quiere enviar en TX9D
(TXSTA).
1. Modo full-duplex (bidireccional).
2. Utiliza los pines:
• RC6/TX/CK: transmisión (salida).
• RC7/RX/CK: recepción (entrada).
3. Los datos enviados tienen tamaño de byte.
4. En el formato de la trama se añade un bit de Start=0 y
un bit de Stop=1, y puede añadirse un noveno bit de
datos (ejemplo bit de paridad) a los 8 bits del dato:
5. Esta forma de comunicar serie usa la norma RS-232 /
RS-485.
6. Los bits se transmiten a una frecuencia fija y
normalizada.
7. Los bloques que configuran la USART en modo
asíncrono son:
1
MICROCONTROLADORES
Receptor Asincrónico
La recepción se habilita mediante el bit CREN, (RCTA).
_Los datos entran por el pin RC7/RX/DT, llegan hasta el
muestreador y se cargan en el registro de
desplazamiento RSR de forma serie.
_Al recibir el bit de STOP, el dato contenido en RSR
pasa al registro RCREG si está vacío, y se activa el bit
de interrupción RCIF, (PIR1). Habilitada mediante el bit
RCIE (PIE1). (RCIF es de sólo lectura y se desactiva por
hardware al leer RCREG).
_El registro RCREG admite dos datos a la espera de ser
leídos. Formando un FIFO de dos niveles. Si se reciben
tres datos sin que RCREG se lea, el último se pierde. Se
produce un error de sobreescritura y hay que reiniciar el
receptor. El bit de sobre escritura OERR (RCSTA), se
desactiva reseteando el receptor. (CREN=0).
_El error de encuadre FERR, (RCSTA) se produce si el
bit de STOP es un cero. El 9th bit y FERR se cargan a la
vez que RCREG, al leer el último dato de RCREG por lo
tanto siempre hay que leer el 9th bit y FERR antes de
leer RCREG.
Pasos a seguir para implementar la transmisión:
1. Configurar RC6/TX/CK como salida y RC7/RX/DT
como entrada.
2. Poner SYNC=0 y SPEN=1, USART en modo
asíncrono
3. SI se desea activar interrupciones activar TXIE=1.
4. Si el dato es de 9 bits TX9=1 y cargar TX9D
5. Cargar X en SPBRG, y elegir BRGH para controlar la
frecuencia de trabajo.
6. Activar la transmisión TXEN=1,
7. Cargar en TXREG el dato a transmitir.
Pasos a seguir para programar la recepción:
1. Configurar RC6/TX/CK como salida y RC7/RX/DT
como entrada.
2. Cargar X en SPBRG, y elegir BRGH para controlar la
frecuencia de trabajo.
3. Poner SYNC=0 y SPEN=1, USART en modo
asíncrono
4. SI se desea activar interrupciones activar RCIE=1.
5. Si el dato es de 9 bits RX9=1.
6. Habilitar la recepción con CREN=1.
7. Al completarse la recepción RCIF=1 y produce
interrupción si se ha habilitado.
8. Se lee el registro RCSTA y se averigua si se ha
producido algún error.
9. Leer el dato de RDREG.
2
MICROCONTROLADORES
Transmisión y recepción asíncrona en modo Fullduplex;
Caracteres de anchura de 8 – 9 bits programables;
Detección de dirección en modo de 9 bits;
Detección de errores por saturación del búfer de
entrada; y
Comunicación Half Duplex en modo síncrono.
EUSART EN MODO ASÍNCRONO
El USART transmite y recibe los datos utilizando la
codificación de no retorno a cero - NRZ (non-returntozero). Como se muestra en la siguiente figura, no se
utiliza una señal de reloj y los datos se transmiten de
forma muy simple.
Cada dato se transmite de la siguiente forma:
• En estado inactivo la línea de datos permanece en
estado alto (1);
• Cada transmisión de datos comienza con un bit de
arranque (START), el cual, siempre es cero (0);
• Cada dato tiene un ancho de 8 o 9 bits (primero se
transmite el bit menos significativo- LSB); y
• Cada transmisión de datos termina con un bit de
parada (STOP), el cual, siempre es uno (1).
La siguiente figura muestra un ejemplo de cómo se
conecta de manera habitual un microcontrolador
PIC que utiliza el módulo USART.
El circuito RS-232 se utiliza como un convertidor de nivel
de voltaje, para adaptar los niveles de voltaje de la PC y
el microcontrolador al protocolo RS232.
Comunicación Serial RS232
El microcontrolador PIC 16F877A dispone de varios
módulos de comunicación serie independientes, además
cada uno se puede configurar a funcionar en modos
diferentes. El USART es uno de los primeros sistemas
de comunicación serie. Las versiones nuevas de este
sistema están actualizadas y se les denomina un poco
diferente - EUSART.
El
módulo
Transmisor/Receptor
Universal
Síncrono/Asíncrono USART es un periférico de
comunicación serie de entrada/salida. Contiene todos
los generadores de señales de reloj, registros de
desplazamiento y búfers de datos necesarios para
realizar transmisión de datos serie de entrada/salida.
El USART integrado en el PIC16F877A posee las
siguientes características:
Librería UART
MikroBasic posee la librería “UART Library” que nos
permite de manera simple utilizar el USART del
PIC16F877A, para utilizar esta librería lo primero que se
tiene que hacer es configurar el USART de la siguiente
manera:
UART1_Init(baud_rate) ‘ baud rate = velocidad de
transmisión Ej. 9600 bps
Esta instrucción Configura e inicializa el modulo UART
de la siguiente manera:
Recepción habilitada
Transmisión habilitada
Trama de datos de 8 bits
1 bit de parade “STOP”
Paridad de datos deshabilitado
3
MICROCONTROLADORES
Operación asíncrona.
UART1_Data_Ready() ‘ Esta instrucción testea si el
dato recibido en el buffer está listo para ser leído retorna
1 si el dato está listo y 0 si no existe dato.
Una vez que el dato esté listo para ser leído se utiliza:
Rx = UART1_Read() ‘ Este instrucción retorna el valor
listo y almacenado en el buffer, ojo, primero debe
utilizarse UART1_Data_Ready para saber si el buffer
esta lleno y listo para leer.
UART1_Write(dato) ‘ Esta función transmite un dato
4. CONCLUSIONES
5.
El controlador del UART es el componente
clave del subsistema de comunicaciones
series de una computadora.
Cada UART contiene un registro de
desplazamiento que es el método
fundamental de conversión entre las forma
serie y paralelo.
BIBLIOGRAFÍA
http://informatica.uv.es/~rmtnez/sbm/T
EMA25-b&w.pdf
http://www.aquihayapuntes.com/indice
-practicas-pic-en-c/comuicacion-serieasincrona-entre-dos-pics-con-lausart.html
http://es.scribd.com/doc/174943675/M
odulo-Usart
4
MICROCONTROLADORES
ANEXOS
SENSOR DE TEMPERATURA Y EL PIC16F877 CON COMUNICACIÓN USART
ASINCRONICO CON LA PC.
Código MikroBasic:
Program usart
' Definicion de variables globales
dim uart_rd as byte 'Guarda la letra enviada de PC en (uart_rd)
dim temp as word
'Se guarda en (tem) el valor A/D leido del sensor
dim txt as string[5]
'Prgrama principal
main:
TRISD=0
'Salida para prender led
PORTD=0
'Apago el led estado inicial
ADC_init() 'Iniciaizo el ADC
UART1_Init(9600) 'Inicializo modulo UART con velocidad de trasmision de 9600bps
Delay_ms(300) 'Espera para que el UART se estabilize
UART1_WRITE(10)
'Nueva Linea
UART1_WRITE_Text("CONECTADO") 'Envia mensaje a la PC
UART1_WRITE(10)
'Nueva Linea
UART1_WRITE(13)
'Enter
'Bucle infinito
while (TRUE)
'Si existe un dato para leer entra al if (retorna 1 si el dato esta listo y 0 si no existe dato.)
if(UART1_Data_Ready()<>0)then
PORTD.1=1
'|
DELAY_MS(500)
'|Led indicador de recepción de datos al PIC
PORTD.1=0
'|
'Lee el dato recibido de la PC y lo guardaen (uart_rd)
uart_rd=UART1_Read()
select case uart_rd
'Si se preciona tecla("t") lee temperatura sensor.
case "t"
temp= ADC_Read(0) 'Lee del PORTA.0 la temperatura.
temp=temp/2
wordtostr(temp,txt)'Transforma el Word en String para enviarlo a la PC
UART1_Write_Text(txt)'Esta funcion transmite un dato del PIC hacia la PC
PORTD.0=1
'|
DELAY_MS(500)
'|Led indicador de envio de datos a la PC
PORTD.0=0
'|
end select
end if
wend
end.
5
MICROCONTROLADORES
Simulación:
6
MICROCONTROLADORES
7