EUSART
Comunicación serial UART, USART, RS232 con el PIC18F4550
DESCRIPCIÓN
La comunicación UART puede transmitir o recibir datos bit a bit, es por eso que recibe el nombre de
comunicación serial, entre dos microcontroladores o también hacia un computador. La conexión a la PC
es bajo el estándar de comunicación RS232, En esta sección se explicaran a detalle todos los registros
involucrados con este tipo de comunicación y se realizaran ejemplos prácticos. A continuación se
describen las características de este módulo UART.
Operación Síncrona y Asíncrona.
Operación Full Dúplex en modo Asíncrono.
Operación Half Dúplex en operación Síncrona Maestro-Esclavo.
Operación de 8 o 9 bits.
Generador de Baud-Rate de Alta y Baja
Calibración Automática de Velocidad de Baudios.
Detección Automática de Recepción de datos.
Detección de errores de OverRun y Frame (datos sobrescritos y dato invalido respectivamente).
2 Interrupciones independientes; TX completado, RX completado.
En las siguientes imágenes se detallaran los registros involucrados al UART
CONFIGURAR BAUD-RATE
Para una correcta Transmisión/Recepción y sin pérdida de datos, es necesario configurar correctamente
el Baud-Rate a través de los registros SPBRGH y SPBRG. En la siguiente tabla se muestra las ecuaciones
para los modos Síncronos y Asíncronos.
Vamos a realizar un ejemplo para despejar un poco nuestras dudas. Si tenemos una Fosc=48Mhz y
queremos unos Baudios de 9600 bps. Calcularemos el valor que debemos escribir en el
registro SPBRG en modo 8 bits y baja Velocidad; BRG=0 y BRG16=0, con la fórmula vista anteriormente.
Como podemos apreciar el resultado no es exacto, esto nos lleva a calcular el error con la siguiente
ecuación.
A continuación se explicarán los PASOS para la Transmisión/Recepción de datos a través de la USART
1. Configurar las líneas pin RX y pin TX como entrada y salida respectivamente, a través del registro
TRISC.
2. Configurar el modo Síncrono o Asíncrono.
3. Configurar el Baud-Rate del USART a través del registro UBRRH y
4. Configurar Tamaño de byte 8/9 bits.
5. Habilitar la Transmisión y Recepción a través de los bits TXEN y RCEN respectivamente.
6. Habilitar la Interrupción de Transmisión/Recepción a través de los
bits TXIE y RCIE respectivamente (opcional).
PROCESO DE TRANSMISIÓN DE DATOS
Para enviar un dato no basta con escribir el valor que se desea enviar en el registro TXREG. Sin
embargo, si se quiere enviar varios datos consecutivos debe tenerse cuidado de NO escribir
un nuevo valor en TXREG antes de que el valor anterior haya sido enviado. Para ello es necesario saber
si el registro TXREG ha quedado libre o está vacío. Esto puede hacerse de 2 formas.
1. Por Sondeo: En este caso el programa debe monitorizar el estado del bit TXIF. Si este bit está
a “1” significa que TXREG está vacío y por tanto podemos escribir el siguiente dato.
2. Por Interrupción: En este caso se habilita la Interrupción a través del bit TXIE, entonces se
producirá una interrupción cada vez que el registro TXREG esté vacío. Por tanto esto nos
permite detectar cuando TXREG está libre para enviar un nuevo dato, sin embargo si
habilitamos dicha Interrupción cuando NO estamos Transmitiendo datos
se generarán Interrupciones continuas mientras TXREG este vacío. Por tanto solo se
debe habilitar esta Interrupción después de haber escrito un nuevo dato en el registro TXREG y
se deshabilitará cuando se ha escrito el ultimo
PROCESO DE RECPCIÓN DE DATOS
Para recibir un dato no basta con leer el valor en el registro RCREG, es necesario esperar a que la
recepción del dato se haya completado correctamente para poder realizar el proceso de lectura del
registro. Esto puede hacerse de 2 formas.
1. Por Sondeo: En este caso el programa debe monitorizar el estado del bit RCIF. Si este bit está
a “1” significa que el dato recibido podrá ser leído del registro RCREG.
2. Por Interrupción: En este caso se habilita la Interrupción a través del bit RCIE, entonces se
producirá una interrupción cada vez que el registro RCREG posea un nuevo Por tanto esto nos
permite detectar cuando RCREG está listo para ser leído.