#define RS LATDbits.LATD1
#define EN LATDbits.LATD3
#define D4 LATDbits.LATD4
#define D5 LATDbits.LATD5
#define D6 LATDbits.LATD6
#define D7 LATDbits.LATD7
#define _XTAL_FREQ 48000000
#include <xc.h>
#include "lcd.h"
/*CONFIG1L*/
#pragma config PLLDIV = 2 /*Configuro el registo para una entrada de 8MHz*/
#pragma config CPUDIV = OSC1_PLL2/*Ahora divido el oscilador de 96Mhz entre 2 para obtener los 48MHz*/
#pragma config USBDIV = 2/*Indico que la fiente de reloj viene del oscilador dividido entre 2*/
/*CONFIG1H: CONFIGURATION REGISTER 1 HIGH*/
#pragma config FOSC = HSPLL_HS /*Indica que es un oscilador de High Speed con el PLL habilitado*/
#pragma config FCMEN = OFF /*Habilita el monitor de reloj aprueba de fallos*/
#pragma config IESO = OFF /*Sirve para cambiar la fuente de reloj entre internos y externos*/
/*CONFIG2L: CONFIGURATION REGISTER 2 LOW*/
#pragma config PWRT = OFF /*Permite iniciar el PIC con un retardo de 72ms despues de ser alimentado*/
#pragma config BOR = OFF /*Deshabilito la opcion de reiniciar el microcontrolador en caso de inestabilidad en su alimentaciond de voltaje*/
#pragma config VREGEN = OFF /*Deshabilito el regulador de voltaje interno de USB*/
/* CONFIG2H: CONFIGURATION REGISTER 2 HIGH */
#pragma config WDT = OFF /*Deshabilito el Perro Guardian, sirve en caso de que el pic se pierda en un proceso*/
/*CONFIG3H: CONFIGURATION REGISTER 3 HIGH*/
#pragma config PBADEN = OFF /*Indica si el puerto B es analogico o digital*/
#pragma config LPT1OSC = OFF /*No configura el TIMER1 como de bajo consumo*/
#pragma config MCLRE = 1 /*Habilita el pin del MASTERCLEAR que es el reset del microcontrolador*/
/*CONFIG4L: CONFIGURATION REGISTER 4 LOW*/
#pragma config STVREN = ON /*Deshabilita el reicicio en caso de pila llena o bajo flujo*/
/*CONFIG5L: CONFIGURATION REGISTER 5 LOW */
#pragma config CP0 = OFF /*Deshabilito el bit de proteccion de codigo*/
#pragma config CP1 = OFF /*Deshabilito el bit de proteccion de codigo*/
#pragma config CP2 = OFF /*Deshabilito el bit de proteccion de codigo*/
#pragma config CP3 = OFF /*Deshabilito el bit de proteccion de codigo*/
/*CONFIG6L: CONFIGURATION REGISTER 6 LOW*/
#pragma config WRT0 = 0FF /*Deshabilito el bit de proteccion contra escritura de codigo*/
#pragma config WRT1 = 0FF /*Deshabilito el bit de proteccion contra escritura de codigo*/
#pragma config WRT2 = 0FF /*Deshabilito el bit de proteccion contra escritura de codigo*/
#pragma config WRT3 = 0FF /*Deshabilito el bit de proteccion contra escritura de codigo*/
/*CONFIG7L: CONFIGURATION REGISTER 7 LOW*/
#pragma config EBTR0 = OFF /*Deshabilito el bit de proteccion de lectura de tabla*/
#pragma config EBTR1 = OFF /*Deshabilito el bit de proteccion de lectura de tabla*/
#pragma config EBTR2 = OFF /*Deshabilito el bit de proteccion de lectura de tabla*/
#pragma config EBTR3 = OFF /*Deshabilito el bit de proteccion de lectura de tabla*/
/*CONFIG7H: CONFIGURATION REGISTER 7 HIGH */
#pragma config EBTRB = OFF /*Deshabilito el bit de protección de lectura de tabla de bloque de inicio*/
/*Declaro del valor del oscilador*/
/*Programacion para hacer uso de un sensor ultrasonico*/
/*Declaro las variables a ocupar*/
#define echo PORTBbits.RB4
char uni[10] = {'0','1','2','3','4','5','6','7','8','9'};
char dec[10] = {'0','1','2','3','4','5','6','7','8','9'};
char cen[10] = {'0','1','2','3','4','5','6','7','8','9'};
long valor = 0;
float distancia = 0;
int unidades, decenas, centenas = 0;
void main(void)
{
/*Configuracion del Timer1*/
T1CONbits.TMR1CS = 0; /*Configuro el timer1 como temporizador*/
T1CONbits.T1OSCEN = 1;
T1CONbits.T1RUN = 1;
T1CONbits.T1CKPS0 = 1;
T1CONbits.T1CKPS1 = 1;
T1CONbits.RD16 = 1; /*Eligo la configuracion de 16 bits.*/
TRISB = 1;
TRISA = 0;
LATA = 0;
TRISC = 0;
LATC = 0;
TRISD = 0; /*Declaro el puerto D como salida*/
LATD = 0; /*Limpio la informacion del puerto D*/
Lcd_Init(); /*Inicio la LCD*/
Lcd_Clear();
Lcd_Set_Cursor(1,1);
Lcd_Write_String("Sens Ultrasonico");
while (1)
{
/*Pongo a cero los registros TMRL/H*/
TMR1L = 0;
TMR1H = 0;
LATAbits.LA0 = 1; /*Activo el trigger*/
__delay_us(10);
LATAbits.LA0 = 0; /*Desactivo el trigger*/
wihle (echo == 1)
{
T1CONbits.TMR1ON = 1;
}
while (echo == 0)
{
T1CONbits.TMR1ON = 0;
valor =(TMR1L | TMR1H <<

;
}
LATC = valor;
distancia = valor*.022666666;
centenas = distancia / 100;
decenas = (distancia - (centenas*100))/10;
unidades = (distancia -(centenas*100)-(decenas*10));
Lcd_Set_Cursor(2,1);
Lcd_Write_Char(cen[centenas]);
Lcd_Set_Cursor(2,2);
Lcd_Write_Char(dec[decenas]);
Lcd_Set_Cursor(2,3);
Lcd_Write_Char(uni[unidades]);
__delay_ms(500);
}
}