#include <xc.h>
#include <stdio.h>
#define _XTAL_FREQ 48000000 //48MHz frecuencia interna
#define led1 LATAbits.LATA5
#define pEcho PORTBbits.RB2
#define lTrig LATBbits.LATB1
void main(void) {
ADCON1bits.PCFG=0b1111; //Todos los puertos son digitales
TRISAbits.RA5 = 0; //RA5 como salida
TRISBbits.RB2 = 1; //RB2 como entrada
TRISBbits.RB1 = 0; //RB1 como salida
T0CONbits.T08BIT=0; //Timer0 seleccionado para registro de 16bits
T0CONbits.T0CS=0; //Timer0 utiliza ciclo interno del reloj micro Fosc/4
T0CONbits.PSA=0; //Activo prescaler del timer0
T0CONbits.T0PS=0b000; //Prescaler de 1:2 - Tiempo de conteo = (4/48M)*2 = 0,16us
INTCONbits.TMR0IE=0; //Desactivada la interrupción por desbordamiento del timer0
INTCONbits.TMR0IF=0; //Limpiar la bandera por desbordamiento del timer 0
int conteo = 0; //Variable para registro del conteo total del pulso Echo del sensor 1
long distancia = 0; //Variable para registro de la distacia medida por el sensor 1
while(1){
TMR0H = 0; //Limpiar Registro alto del timer0
TMR0L = 0; //Limpiar Registro bajo del timer0
lTrig = 1; //Enviamos pulso Trig del sensor HC-SR04
__delay_us(10); //definimos ancho del pulso 10us
lTrig = 0; //Apagamos el pulso
while(!pEcho); //Esperamos que le llegue señal al Echo
TMR0ON = 1; //Encendemos el timer0
while(pEcho); //Esperamos que el Echo deje de recibir señal
TMR0ON = 0; //Apagamos el timer0
conteo = (TMR0L | (TMR0H<<8)); //Se guarda el registro en la variable
distancia = ((conteo)/58); //Distancia en cm
if(distancia <= 10){
led1=!led1;
for(int i=1;i<=100;i++) __delay_ms(10);
}else led1=0;
}
return;
}