martes, 9 de enero de 2018

Librerias para XC8 PIC16F877A (USART parte 1)


Este es el inicio de una serie de posts en los cuales documentare y explicare el uso de librerías para el compilador XC8 que facilitaran el manejo de los periféricos del microcontrolador PIC16F877A.

Estas librerías están basadas en las librerías para el PIC18F452 que venían con el compilador C18 de Microchip, los periféricos de este microcontrolador son parecidos a los del PIC16F877A, por lo  que tenemos un buen punto de partida para poder realizar estas librerías

Comenzamos modificando el código para la  librería del puerto de comunicaciones USART, ya que podremos usar este módulo para  enviar mensajes a la computadora y poder depurar las librerías de los otros periféricos.

Configuración del USART

void OpenUSART (unsigned char config, unsigned char spbrg);

Esta función se utiliza para configurar el USART. El parámetro config sirve para definir el modo de trabajo del USART y el parámetro spbrg se utiliza para definir la velocidad a la que se realizara la comunicación.

Para definir el valor del argumento config se crea una mascara de bits  realizando operaciones lógicas AND (&) con los siguientes parámetros:


Parámetro Descripción
USART_TX_INT_ON Habilita la interrupción de transmisión del USART
USART_TX_INT_OFF Deshabilita la interrupción de transmisión del USART
USART_RX_INT_ON Habilita la interrupción de recepción del USART
USART_RX_INT_OFF Deshabilita la interrupción de recepción del USART
USART_SYNCH_MODE Selecciona el modo de comunicación sincrona
USART_ASYNCH_MODE Selecciona el modo de comunicación asincrona
USART_NINE_BIT Habilita comunicación  de 9 bits
USART_EIGHT_BIT Habilita comunicación de 8 bits
USART_SYNC_MASTER En una comunicación sincrona el microcontrolador es maestro
USART_SYNC_SLAVE En una comunicación sincrona el microcontrolador es esclavo
USART_CONT_RX Habilita la recepción continua
USART_SINGLE_RX Deshabilita la recepción continua
USART_BRGH_HIGH El generador de baudios trabaja a alta velocidad
USART_BRGH_LOW El generador de baudios trabaja a baja velocidad
USART_ADDEN_ON Habilita la detección de dirección, usando el bit 8
USART_ADDEN_OFF Deshabilita la detección de dirección

El valor del argumento spbrg se calcula usando la formula que se encuentra en la hoja de datos:
Se debe tomar en cuenta que la formula varia si se desea utilizar una comunicación sincrona o asincrona. Otro parámetro a tomar en cuenta es la velocidad de trabajo del generador de baudios ya que se puede obtener un menor error en la velocidad de transmisión  en la comunicación asincrona dependiendo la frecuencia de oscilador que utilicemos.

Para manejar las comunicaciones con 9 bits y los posibles errores en la recepción de datos se declara la union USART.

En base a la union USART se declara  USART_Status que se utiliza dentro las funciones de envío y recepción de datos para poder usar el noveno bit y el control de errores. USART_Status también debe declararse en el programa principal para poder acceder a sus campos.

Transmisión de datos

void WriteUSART (char data);

Esta función envía un byte a través del USART, si se habilita una comunicación de 9 bits, se debe fijar el valor de este bit en el campo TX_NINE de la unión USART_Status

void putrsUSART (const char *data);

Se utiliza para enviar una cadena de caracteres guardada en la memoria flash del microcontrolador, el final de la cadena se indica con el carácter NULL (0x00), este último carácter no es enviado.

void putsUSART (char *data);

Esta función envía una arreglo de caracteres guardados en la memoria RAM del microcontrolador, el final de la cadena se indica con el carácter NULL (0x00), este último carácter no es enviado.

Recepción de datos

char ReadUSART (void);

Realiza la lectura del dato recibido que se encuentra en el registro RCREG, si se tiene una comunicación de 9 bits, guarda el bit 8 en el campo RX_NINE de la unión USART_Status. En caso de existir errores en la recepcion estos se informan mediante los bits FRAME_ERROR y OVERRUN_ERROR.

void getsUSART (char *buffer, unsigned char len);

Esta rutina recibe una cadena de caracteres desde el USART, los caracteres recibidos son almacenados en un arreglo de la memoria RAM. La cantidad de datos que se reciben vienen dados por el argumento len. La función espera recibir todos los caracteres antes de salir.

Macros

CloseUSART()

Se utiliza para cerrar el USART, se deshabilitan las interrupciones relacionadas, la transmision y recepcion de datos.

BusyUSART()

Se utiliza para revisar si ya se termino de enviar el dato, es decir, se pone en 1 cuando el buffer de transmision esta desocupado.

DataRdyUSART()

Se utiliza para revisar si se tiene un dato en el buffer de recepción del USART, Para limpiar la bandera relacionada se debe leer ese dato.

putcUSART()

Nombre alternativo para WriteUSART().

getcUSART()

Nombre alternativo para ReadUSART().

No hay comentarios:

Publicar un comentario