Claro porque el modesto 16f84 tiene solo el timer0 tienes que usar por ejemplo de la serie 16f87x o de 18fxxx. Mira este programa es para contar los pulsos de un sensor de luz TSL230 que entrega la cantida de luz en una frecuencia variable. Le faltan muchas mejoras pero igual te puede servir de guia para comenzar.
Salud2
#include <16F873A.h>
#device adc=8
#use delay(clock=4000000)
#fuses NOWDT,HS, NOPUT, NOPROTECT, NODEBUG, BROWNOUT, NOLVP, NOCPD, NOWRT
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
#include <lcd2.c>
void frecuencia(void);
void lcd_inicio();
void sensibilidad(void);
void retardo(int);
int16 pulsos=0;
int sensib=0;
int i=0;
int16 muestra[11];
#INT_TIMER0
captura_pulsos()
{
frecuencia();
}
void main()
{
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_spi(FALSE);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);
setup_timer_1(T1_EXTERNAL);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
disable_interrupts(INT_TIMER0);
disable_interrupts(GLOBAL);
lcd_init();
set_tris_c(0b10000111); // RC0 entrada fo Rc1 encender sensor
lcd_putc("f"

;
lcd_gotoxy(1,1);
printf(lcd_putc,"Sist. de medicion"

;
lcd_gotoxy(1,2);
printf(lcd_putc,"de luz en bosque"

;
retardo(20);
set_timer1(0);
lcd_putc("f"

;
lcd_gotoxy(1,1);
printf(lcd_putc,"Parc:"

;
lcd_gotoxy(12,1);
printf(lcd_putc,"S:"

;
sensibilidad();
lcd_gotoxy(1,2);
printf(lcd_putc,"Med:"

;
while(1)
{
if (input(PIN_C1))
{
if (sensib!=0)
{
lcd_gotoxy(5,2);
printf(lcd_putc,"..........."

;
for(i=0;i<=10;i++)
{
output_bit(PIN_A3,0);
set_timer0(0);
enable_interrupts(INT_TIMER0);
enable_interrupts(GLOBAL);
set_timer0(2); // cuenta 4/4000000*256*(256-2) aprox 65ms
set_timer1(0);
delay_ms(70);
}
pulsos=(muestra[5]+muestra[6]+muestra[7]+muestra[8])/4;
switch (sensib){
case 1:
pulsos=12.85714*pulsos;
break;
case 2:
pulsos=1.28571*pulsos;
break;
case 3:
pulsos=0.12857*pulsos;
break;
}
lcd_gotoxy(5,2);
printf(lcd_putc,"%lu LUX",pulsos);
}
else
{
lcd_gotoxy(5,2);
printf(lcd_putc,"ajuste sensib."

;
}
}
if (input(PIN_C2)) // apagar
{
if (sensib<3)
sensib+=1;
else
sensib=0;
lcd_gotoxy(5,2);
printf(lcd_putc," "

;
sensibilidad();
}
retardo(1);
}
}
void frecuencia (void)
{
pulsos=get_timer1();
disable_interrupts(INT_TIMER0);
disable_interrupts(GLOBAL);
set_timer1(0);
output_bit(PIN_A3,1);
muestra
=pulsos;
//while(input(pin_C1));
}
void sensibilidad(void)
{
switch (sensib)
{
case 0:
lcd_gotoxy(14,1);
printf(lcd_putc,"off"
;
output_bit(PIN_c3,0);
output_bit(PIN_c4,0);
break;
case 1:
lcd_gotoxy(14,1);
printf(lcd_putc,"baj"
;
output_bit(PIN_c4,0);
output_bit(PIN_c3,1);
break;
case 2:
lcd_gotoxy(14,1);
printf(lcd_putc,"med"
;
output_bit(PIN_c3,0);
output_bit(PIN_c4,1);
break;
case 3:
lcd_gotoxy(14,1);
printf(lcd_putc,"alt"
;
output_bit(PIN_c4,1);
output_bit(PIN_c3,1);
break;
}
}
void retardo (int demora)
{
int i;
for(i=0;i<=demora;i++)
delay_ms(100);
}