Hola..
Yo hice algo pero en c.. para el 16f84 sirve.. es lo siguiente.. habilito la interrupcion del tmr0 y la externa.. coloco el preescaler en 64 y con un cristal de 4Mhz, eso hace que este se desborde aproximadamente cada 1ms creo variables para medir el tiempo.. milisegundos, segundos.. cuando hay interrupcion externa (RB0), cambio de flanco de alto a bajo o viceversa, pongo a ceros estas variables, y un "flag" a uno .. cuando de nuevo hay interrupcion externa, miro el "flag"para saber si pongo a cero de nuevo las variables, de lo contrario capturo el valor de las variables de tiempo.. y tengo el periodo de dicha señal y de nuevo pongo el "flag" a cero..
Como dije anteriormente esta en lenguaje c.. lo uso para lo mismo para detectar un tono, de 425Hz y asi saber cual es su periodo, logicamente a la entrada de RB0 tiene que haber una señal cuadrada.
Saludos