Hola a Todos,
Hace poco empece a utilizar el nuevo entorno de desarrollo
MPLAB X y el nuevo compilador de lenguaje C de Microchip,
MPLAB XC8. En cuanto al entorno MPLAB X me ha gustado mucho ya que es una interfaz más enriquecida y agradable. El hecho de poder instalar distintas versiones del mismo compilador es muy interesante. Bueno, hay muchas cosas mas que agradan que de seguro ustedes se darán cuenta cuando empiecen a usarla con más frecuencia.
En cuanto al compilador C,
MPLAB XC8 me gusta el hecho de poder utilizar las otras familia de PIC y no solo los 18F, aunque las librerías de periféricos solo están disponibles para los 18F (que mal!). Hay algunos problemas en las librerías de periféricos que no descomentan definiciones y es por eso que en algunas funciones aparecen con signo de exclamación en el código, esto es debido a que los prototipos de función no son declarados (por ejemplo prototipo de función de la función OpenUSART es: void OpenUSART ( unsigned char config, unsigned spbrg). En este caso la librería pconfig.h es a que no descomenta las definiciones necesarias dependiendo del PIC utilizado.
Bueno, más adelante podemos revisar mejor lo anterior en más detalle.
A continuación les presente un vídeo paso a paso que realice en cuanto a mi experiencia inicial con el modulo USART usando interrupción con el compilador MPLAB XC8. En este ejemplo, se realiza la escritura y lectura de datos con un ejemplo sencillo. Espero les guste y les ayude.
El código es el siguiente:
/*
* File: main.c
* Author: SebastiánPuenteR (sebaspr@outlook.com)
*
* Created on 14 de abril de 2013, 09:56 PM
*/
#include <xc.h>
#include <plib/usart.h> //Libreria para el manejo del modulo USART
#define EAUSART_V4 //Le especifica al compilador la versión de las funciones del mosdulo USART que se deben declarar.
//Esto lo debería hacer el compilador automaticamente pero debe haber un error y no lo hace.
char CaracterRx;
char MensajeTx[] = "Por favor digite una tecla: ";
void main(void) {
OpenUSART(USART_TX_INT_OFF &
USART_RX_INT_ON & //Activar la interrupcion por la recepcion de dato del buffer de Rx del USART
USART_ASYNCH_MODE & //Modo asincrono (fullduplex)
USART_EIGHT_BIT & //8 bits de datos
USART_CONT_RX & //Recepción continua
USART_BRGH_HIGH, 129); //9600 Baudios
INTCONbits.PEIE = 1; //Activamos interrupcion de perifericos
INTCONbits.GIE = 1; //Activamos las interrupciones globales
while(BusyUSART()); //Se espera a que el buffer de Tx este libre
putsUSART(MensajeTx); //Se envía un string
while(1); //Bucle infinito
}
void interrupt Interrupcion() //Funcion que atiende las interrupciones
{
CaracterRx = ReadUSART(); //Se lee el dato que esta en el buffer de Rx del USART
while(BusyUSART());
putsUSART("\n\rUsted digito la tecla: ");
while(BusyUSART());
WriteUSART(CaracterRx);
PIR1bits.RCIF = 0; //Desactivamos la bandera de recepción en el buffer de entrada del USART
}
En unos días subiré un vídeo mostrando el funcionamiento del ejemplo creado.
Saludos,
SebastianPuenteR,