#define _XTAL_FREQ 8000000
#include <xc.h>
#include "config_bits.h"
void setupClock(void);
void configurarUSART(void);
void envia_caracter(unsigned char); // función para la transmisión de caracteres
void envia_cadena(const char*); // función para la transmisión de cadenas de caracteres
void main(void) {
setupClock(); // Internal Clock to 8MHz
configurarUSART(); // Configuramos modulo USART
while(1){
envia_cadena("PRUEBA MODULO USART"); // mensaje a enviar
envia_caracter(13); // usado para salto de linea
}
}
void setupClock()
{
OSCCONbits.IRCF0 = 1;
OSCCONbits.IRCF1 = 1;
OSCCONbits.IRCF2 = 1;
}
void configurarUSART()
{
TRISCbits.RC6 = 0; // configuramos TX como salida
TRISCbits.RC7 = 1; // configuramos RX como entrada
TXSTAbits.SYNC = 0; // habilitamos modo asincrono
TXSTAbits.BRGH = 1;
BAUDCONbits.BRG16 = 0; // configuramos para alta velocidad
SPBRGH = 51; // 9600 baud
RCSTAbits.SPEN = 1; // habilitamos el puerto serie
TXSTAbits.TX9 = 0; // seleccionamos tx a 8 bits
TXSTAbits.TXEN = 1; // habilitamos transmision
}
void envia_caracter(unsigned char caracter){
while(TXSTAbits.TRMT==0); // mientras el registro TSR esté lleno espera
TXREG = caracter; // cuando el el registro TSR está vacio se envia el caracter
}
void envia_cadena(const char *cadena){ // cadena de caracteres de tipo char
while(*cadena != 0x00){ // mientras el ultimo valor de la cadena
// sea distinto al caracter nulo
envia_caracter(*cadena);
cadena++; // incrementa la ubicación de los caracteres en cadena
// para enviar el siguiente caracter de cadena
}
}