/*Este programa lee la frecuencia ingresada por el timer0 (pinA4)
 y calibra mediante el adc (pinAn0)las RPM*/
#include <16f876a.h>
#device adc=10
#use delay(clock=20000000)
#fuses HS,NOWDT,NOPROTECT,NOLVP,PUT,NODEBUG,BROWNOUT,NOCPD,NOWRT
#include <lcd.c> 

#use fast_io(B)
#use fast_io(c)
#use fast_io(a)

long   variable;
int16 contador=0,rpm,freq;

#int_timer1
void timer1_isr(void)
{
   contador=get_timer0();
   set_timer0(0);
   set_timer1(3036);
}

void main()
{
   set_tris_a(0b00010001); 
   output_a  (0b00000000);
   set_tris_c(0b00000000);
   output_c  (0b00000000);
   lcd_init();
   setup_timer_0(rtcc_ext_h_to_l | rtcc_div_8);
   setup_timer_1(t1_internal | t1_div_by_8);
   
   set_timer0(0);
   set_timer1(3036);
   enable_interrupts(int_timer1);
   enable_interrupts(global);
   
  //****************ADC**************************
   setup_adc_ports(AN0);
   setup_adc (ADC_CLOCK_INTERNAL);
 //********************************************************
   
  
   while(1)
    { 
      
       set_adc_channel(0);
       delay_ms(10);
       variable=(float)read_adc()*0.009;
               
       freq=contador*27.6;
             
       lcd_gotoxy(1,1);
       printf(lcd_putc,"Hz %Lu " ,freq);
        lcd_gotoxy(8,1);
       printf(lcd_putc,"cont %Lu " ,contador);
      
       rpm=freq*variable;
       lcd_gotoxy(1,2);
       printf(lcd_putc,"Rpm %lu " ,rpm);
       
        
  
    }
}