Hola estalli2, como dice angelgris, tienes
lcd_init(); dentro del bucle infinito, esto significa que el lcd estara iniciando siempre y no funcionara correctamente, sacalo de alli y ponlo antes del bucle infinito, ademas para no estar siempre enviando datos al lcd, bastara con que envies dato cada vez que se activa el
flagHayDatos, otra cosa es que el
flaghaydatos lo limpies dentro de la condicional
if(flaghaydatos)lo coloques dentro de la condicional, existe la posibilidad de que
flagHayDatos=1; se dé justo despues de la condicional y se borre el flag sin que hayas mostrado el valor, tu codigo quedaria mas o menos asi;
void main() {
set_tris_b(0b1111110); // Habilito como entrada RC7 para canal RS232
ext_int_edge(0,L_TO_H); // Configuro captura de 1er flanco de subida
flagToggleFlanco = 0; // inicializo el Flag para cambiar de flanco
enable_interrupts(int_rda); // Habilito las interrupciones necesarias
enable_interrupts(int_ext);
enable_interrupts(global);
lcd_init();
do {
if(flagHayDatos==1){ // Detecto que ya hay datos de flancos ...
if(t2 > t1){ // Compruebo que estoy en la misma vuelta de TMR1
tt = t2 - t1; // Calculo en Tick's de TMR1 el tiempo entre flancos
st = uSxTick * tt; // Calculo en uS el tiempo.
flagHayTransmitir=1; // Indico que tengo nuevo valor para transmitir
lcd_gotoxy(5,1); //salto a columna 4, fila 2
Lcd_putc (" valor");
lcd_gotoxy(5,2); //salto a columna 4, fila 2
Lcd_putc( st);
flagHayDatos=0; // Indico que ya han sido procesados los datos.}
}
} while (TRUE);
Además supngamos que trabajas con bajas frecuencias, el timer1 estara pasando de 65535 a 0 sin que te des cuenta y al llegar la interrupcion de RB0 no obtengas el tiempo real del pulso, esto lo solucionas con un contador en cada flanco para saber cuantas veces se desbordo el timer, al contador lo multipicas por 65536 y le sumas el valor obtenido del timer1 al momento de la interrupcion RB0.
Espero se entienda.
Saludos