mimecar creo que el problema que tienes es que se te está desbordando la variable. Esto suponiendo que tu variable ulNumeroCuentas sea de 16 bits.
A mi modo de verlo, no hay inconvenientes en el tiempo en que demora el cálculo porque tu trabajas con valores 'tomados' por el hardware del PIC (es decir los módulos CCP). Solo tienes que preocuparte en que los flancos no lleguen muy cerca uno de otro el resto funcionará sin problemas.
Usando un ejemplo extremo, el pic podría estar haciendo cualquier otra cosa, capturarse el 1er valor, luego capturarse el 2do valor (de hecho el pic automáticamente los habrá guardado en CCP1 y CCP2) y si tienes tiempo, hacer el cálculo que pretendes unos segundos despues (obviando el detalle del overflow del timer).
Más allá de eso, creo que el cálculo es inexacto y que se podría simplificar.
1) Porque no usas el evento especial con la interrupción del CCP1 y directamente haces que resetee el timer? Con esto te alivias de muchos dolores de cabeza! El flag del CCP1 lo puedes conservar hasta el cálculo en el bucle principal para saber que ese flanco ya lo tienes
.
2) Sin observar tu bloqeu de programa, creo que no te hace falta usar interrupciones, si tienes tiempo entre flanco porque podrias directamente en el bucle ppal del programa verificar si CCP1IF y CCP2IF estan activadas.
3) Observa el siguiente cálculo.
ulNumeroCuentas = T3Overflow * (65535-1) + uiCuentaFinal + 65535 - uiCuentaInicial;
En la parte que dice T3Overflow * (65535-1) , creo que debiera ser T3Overflow*65536
También No se porque sumas de nuevo 65535, si quieres tener en cuenta el overflow por si uiCuentaFinal es menor, ya lo habias hecho antes con el T3Overflow.
Además si T3Overflow esta en 0 o en 1, porque no pruebas el siguiente código.
if (T3Overflow)
{
uiNumeroCuentas = uiCuentaFinal - uiCuentaInicial;
}
else
{
ulNumeroCuentas = 65536 + uiCuentaFinal - uiCuentaInicial;
}
Teniendo en cuenta que ulNumeroCuentas sea de 32 bits. De todas formas, fijate que podrias modificar el prescaler en función del ancho de pulsos a sensar.
Si encima usas la opcion de que el CCP1 resetee el timer, la uiCuentaInicial deja de tener sentido.
Espero haber sido esclarecedor.
Saludos