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:
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.
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