Amigo Jeremy, vas bien.
Con tus
uSxTick a 0.5 uS una vuelta de Timer1 (16 bits) es de 65.536 * 0.5 us son 32.768 uS por vuelta al que podemos llamar
uSxDesb.
Luego puedes calcular cada tiempo como
Ticks x
uSxTick +
Desbordes *
uSxDesb.
Así una pareja de datos de un par de flancos sucesivos del estilo:
Primer Flanco en Ticks 60.000 Desborde 21
Segundo Flanco en Ticks 1.000 Desborde 23
Estarían separados por ((65.535 - 60.000) + 1.000 Ticks *
uSxTick) + (1 *
uSxDesb)
La explicación:
Para llegar (en tiempos) desde el Primer Flanco hasta el Segundo Flanco el Timer1 tiene primero que llegar desde los 60.000 (en el desborde 21) hasta 65.535, pasar de nuevo a 0 (y provocar el desborde 22), recorrer todos los 65.535 ticks de ese desborde, volver de nuevo a 0 (y provocar el desborde 23) y alcanzar los 1000 ticks (del desborde 23)
Así tenemos (en orden de aparición) 5.535 + 65.535 + 1000 Ticks.
Si llamamos
TicksPf y
DesbordesPf a los del primer flanco y
TicksSf y
DesbordesSf a los del segundo la fórmula para calcular cuantos Ticks y microsegundos hay entre ellos incluyendo los sucesivos desbordes sería:
if(DesbordesPf == DesbordesSf ){ // están en el mismo desborde
TicksDiff = TicksSf - TicksPf;
} else { // Están en distintos desbordes
TicksDiff = (65535 - TicksPf ) + TicksSf + ((DesbordesSf - DesbordesPf - 1) * 65535;
}
TiempoSep = TicksDiff * uSxTick;