#include <xc.h>
#define _XTAL_FREQ 8000000
#include "uart_tra.h"
#include "flex_lcd.h"
#include <stdio.h>
// CONFIG1
#pragma config FOSC = INTOSC // Oscillator Selection (INTOSC oscillator: I/O function on CLKIN pin)
#pragma config WDTE = OFF // Watchdog Timer Enable (WDT disabled)
#pragma config PWRTE = ON // Power-up Timer Enable (PWRT enabled)
#pragma config MCLRE = OFF // MCLR Pin Function Select (MCLR/VPP pin function is digital input)
#pragma config CP = OFF // Flash Program Memory Code Protection (Program memory code protection is disabled)
#pragma config CPD = OFF // Data Memory Code Protection (Data memory code protection is disabled)
#pragma config BOREN = ON // Brown-out Reset Enable (Brown-out Reset enabled)
#pragma config CLKOUTEN = OFF // Clock Out Enable (CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin)
#pragma config IESO = OFF // Internal/External Switchover (Internal/External Switchover mode is enabled)
#pragma config FCMEN = OFF // Fail-Safe Clock Monitor Enable (Fail-Safe Clock Monitor is enabled)
// CONFIG2
#pragma config WRT = OFF // Flash Memory Self-Write Protection (Write protection off)
#pragma config PLLEN = OFF // PLL Enable (4x PLL enabled)
#pragma config STVREN = ON // Stack Overflow/Underflow Reset Enable (Stack Overflow or Underflow will cause a Reset)
#pragma config BORV = LO // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (Vbor), low trip point selected.)
#pragma config LVP = ON // Low-Voltage Programming Enable (Low-voltage programming enabled)
unsigned char buffer[20];// Para LCD
unsigned char datos[20]; // String de 20 caracters
int x=0;// Contador
unsigned int borrar;
void interrupt Uart()
{
if(PIR1bits.RCIF==1)
{
x++;
if(x==1)
{
datos[0]=RCREG;
sprintf(buffer,"%c",datos[0]);// C es de caracter
Lcd_Out2(2,1,buffer);
}
if(x==2)
{
datos[1]=RCREG;
sprintf(buffer,"%c",datos[1]);// C es de caracter
Lcd_Out2(2,2,buffer);
}
if(x==3)
{
datos[2]=RCREG;
sprintf(buffer,"%c",datos[2]);// C es de caracter
Lcd_Out2(2,3,buffer);
}
if(x==4)
{
datos[3]=RCREG;
sprintf(buffer,"%c",datos[3]);// C es de caracter
Lcd_Out2(2,4,buffer);
}
if(x==5)
{
datos[4]=RCREG;
sprintf(buffer,"%c",datos[4]);// C es de caracter
Lcd_Out2(2,5,buffer);
}
if(x==6)
{
datos[5]=RCREG;
sprintf(buffer,"%c",datos[5]);// C es de caracter
Lcd_Out2(2,6,buffer);
}
if(x==7)
{
datos[6]=RCREG;
sprintf(buffer,"%c",datos[6]);// C es de caracter
Lcd_Out2(2,7,buffer);
}
if(x==8)
{
datos[7]=RCREG;
sprintf(buffer,"%c",datos[7]);// C es de caracter
Lcd_Out2(2,8,buffer);
}
if(x==9)
{
datos[8]=RCREG;
sprintf(buffer,"%c",datos[8]);// C es de caracter
Lcd_Out2(2,9,buffer);
}
if(x==10)
{
datos[9]=RCREG;
sprintf(buffer,"%c",datos[9]);// C es de caracter
Lcd_Out2(2,10,buffer);
}
if(x==11)
{
datos[10]=RCREG;
sprintf(buffer,"%c",datos[10]);// C es de caracter
Lcd_Out2(2,11,buffer);
}
if(x==12)
{
datos[11]=RCREG;
sprintf(buffer,"%c",datos[11]);// C es de caracter
Lcd_Out2(2,12,buffer);
}
if(x==13)
{
datos[12]=RCREG;
sprintf(buffer,"%c",datos[12]);// C es de caracter
Lcd_Out2(2,13,buffer);
}
if(x==14)
{
datos[13]=RCREG;
sprintf(buffer,"%c",datos[13]);// C es de caracter
Lcd_Out2(2,14,buffer);
}
if(x==15)
{
datos[14]=RCREG;
sprintf(buffer,"%c",datos[14]);// C es de caracter
Lcd_Out2(2,15,buffer);
}
if(x==16)
{
datos[15]=RCREG;
sprintf(buffer,"%c",datos[15]);// C es de caracter
Lcd_Out2(2,16,buffer);
}
if(x==16)
{x=0;}//Reiniciamos el contador
if(RCSTAbits.OERR==1)//Error de sobre escritura
{
LATAbits.LATA6=1;
RCSTAbits.CREN=0;
RCSTAbits.CREN=1;
}
}
}
void main(void)
{
// OSC
OSCCONbits.IRCF=0b1110; //8Mhz
OSCCONbits.SPLLEN=0;
OSCCONbits.SCS=0b10;
TRISAbits.TRISA6=0;// RA6 Como salida
LATAbits.LATA6=0; // RA6 Como 0 logico
TRISAbits.TRISA4=0;// RA6 Como salida
LATAbits.LATA4=0; // RA6 Como 0 logico
Lcd_Init(); //inicializamos el lcd
Lcd_Cmd(LCD_CLEAR); //limpiamos lcd
Lcd_Cmd(LCD_CURSOR_OFF); //apagamos el cursor
Lcd_Out(1, 1, "LECTOR RFID");
iniciar_usart();//inicia el módulo USART PIC
while(1)
{
}
return;
}