#include "Frecuencimetro.h"

//Rutina de interrupcion por captura en CCP1
#INT_CCP1
void CCP1_isr() {
   //Deshabilita capturas en CCP1
   //y habilita capturas en CCP2
   setup_ccp1(CCP_OFF);
   setup_ccp2(CCP_CAPTURE_RE);
}

//Rutina de interrupcion por captura en CCP2
#INT_CCP2
void CCP2_isr() {
   //Deshabilita capturas en CCP2
   setup_ccp2(CCP_OFF);
}

//Retorna el periodo de la seņal
unsigned LONG calc_periodo(){
   RETURN(CCP_2 - CCP_1 - 1);
}

//Retorna la frecuencia de la seņal
//NOTA: FBUS=FOSC/4=1000000
unsigned LONG calc_frecuencia(){
   RETURN(1000000 / calc_periodo());
}

//Inicializa variables y habilita captura en CCP1
void medir_frecuencia(){
   enable_interrupts(INT_CCP1);
   enable_interrupts(INT_CCP2);
   setup_ccp1(CCP_CAPTURE_RE);
}

void main() {
   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);   //TIMER DE LOS CANALES CCP
   enable_interrupts(GLOBAL);
   WHILE(1){
      medir_frecuencia();
      delay_ms(1000);
      printf("FRECUENCIA: %Lu \r\n", calc_frecuencia());
   }
}

