Veamos...
Si bien distintas formas y diametros generan distintos tiempos de caida debido al rozamiento con el aire la diferencia es casi despreciable(hablando de esferas siempre y de diametros bastantes cercanos).
De la misma manera que es despreciable la diferencia que hay al lanzar un objeto desde 4000m de altura que desde 2m.
Nosotros lo haciamos para calcular mediante formula algo ya sabido: la aceleracion en caida libre: es decir: esos 9,8m/(s*s).
Bueno, respondiendo a tu pregunta jocmoreno:
Lo que debes hacer es tomar por ejemplo 4 registros.
Los llamare por ejemplo: a1,a2,a3,a4.
Uniendolos podria interpretarlos como un solo numero asi: a4 a3 a2 a1.
En cuanto se libera el objeto, limpias todos los registros y activas el Timer previamente configurado.
Dentro del ISR(Interrupt Service Routine) o rutina de interrupcion(vector 0x04) te fijaras cual interrupcion sucedio: si la del TMR0 o la del RB0 u otra si es que usas.
Si sucedio la del TMR0, que es la que nos interesa, lo unico que haces es ir incrementando las variables de la siguiente forma:
Intr_TMR0
bcf INTCON,T0IF
incfsz a1,F
retlw .0
incfsz a2,f
retlw .0
incfsz a3,f
retlw .0
incfsz a4,f
retlw .0
retlw .1 ;volver indicando desbordamiento(tiempo maximo de caida posible superado)
Listo. Alli tienes las variables que iran almacenando el tiempo de caida.
En cuanto el cuerpo toque el sensor de final de recorrido, sucedera la interrupcion por flanco alto/bajo(segun hayas configurado) en RB0.Aqui desactivas el TMR0 y deberas transformar los valores que poseen a4,a3,a2 y a1 a BCD para mostrarlos en el LCD.
Obviamente la formula que necesitas dependera del tiempo que le tome al TMR0 desbordarse y del oscilador que estes usando.
Un prescaler 1:1 producira interrupciones de TMR0 mas seguidas que un prescaler 1:256. Esto influira directamente en la precision del tiempo a medir.
Saludos.