Bueno el programa para tacómetro te lo envio no es mio lo saque de este foro... de verdad esta muy bueno y te sirve para otras cosas
#include<16f873a.h>
#use delay(clock=16000000)
#define use_portb_lcd TRUE
#fuses xt,noprotect,nowdt,nolvp
#include <lcd.c>
#BYTE PORTA=5
void main()
{
lcd_init();
printf(lcd_putc," I.El.Ar \n DESARROLLO"Giño;
delay_ms(2000);
printf(lcd_putc,"\f de \n INSTRUMENTAL"Giño;
delay_ms(2000);
printf(lcd_putc,"\f SELECCIONAR \n MODO"Giño;
while(true)
{
///////// declaracion de variavles /////////////////////////////////////////////
int reloj;
int funcion;
int MODULADOR;
float VISUALIZA;
long int valor1;
float valor_real;
int1 HERTZ;
//////////////////// configuracion de puertos //////////////////////////////////
set_tris_c(0b11111111);
set_tris_a(0b11111111);
///////// Seleccion del modo a utilizar ////////////////////////////////////////
if(input(PIN_A5))
{
funcion++;
}
if(funcion==6)
{
funcion=1;
}
switch(funcion)
{
/////////////////Modo frecuencimetro 1K en adelante///////////////////////
case 1:
while(!input(PIN_A5))
{
setup_timer_1 ( T1_EXTERNAL );
for(;!input(PIN_A5)Giño
{
if (input(PIN_A2))
{
HERTZ++;
delay_ms(100);
if (HERTZ==1)
{
reloj=100;
}
else if(HERTZ==0)
{
reloj=1;
}
}
delay_ms(reloj);
VISUALIZA=get_timer1();
if(HERTZ==1)
{
VISUALIZA=VISUALIZA/100;
lcd_init();
printf(lcd_putc,"FREC1. \n Kz %4.3f ",visualiza);
set_timer1(0);
}
else if (HERTZ==0)
{
VISUALIZA=VISUALIZA/1000;
lcd_init();
printf(lcd_putc,"FREC1. \n Mz %6.6f ",visualiza);
set_timer1(0);
}
}
}
break;
//////////////////////Modo frecuencimetro de 0 hasta 1K ///////////////////////
case 2:
while (!input(PIN_A5))
{
setup_timer_1 ( T1_EXTERNAL );
for(;!input(PIN_A5)Giño
{
delay_ms(1000);
VISUALIZA=get_timer1();
lcd_init();
printf(lcd_putc,"FREC. \n Hz %f ",visualiza);
set_timer1(0);
}
}
break;
///////////////////////// Modo tacometro ///////////////////////////////////////
case 3:
while(!input(PIN_A5))
{
setup_timer_1 ( T1_EXTERNAL );
for(;!input(PIN_A5)Giño
{
delay_ms(1000);
VISUALIZA=get_timer1();
visualiza=60*visualiza;
lcd_init();
printf(lcd_putc,"TACOMETRO.\n R.P.M. %6.3f ",visualiza);
set_timer1(0);
}
}
break;
}
}}}