Ich habe so etwas ähnliches mit einem 16F688 gelöst.
Die Servo-Signale vom Empfänger gebe ich auf 2 Eingänge, die ein
Interrupt-on-change erzeugen können.
Dann lasse ich (i.d.R.) Timer1 als Zeitbasis laufen (bei 1:1 Vorteiler
und 8MHz Takt sollte das passen).
Bei einem Anstieg eines Signals merke ich mir den Zählerstand und beim
Abfallen kann man eine einfache Subtraktion durchführen, um die
Differenz zu erhalten. (Achtung! Vorzeichen)
Das macht die Interrupt-Routine, die diese Zahl in eine Variable
schreibt und ein Bit setzt zur Erkennung des neuen Wertes.
Das Hauptprogramm sieht immer nach, ob ein neuer Wert gemessen wurde,
löscht das Bit und wertet diesen dann aus.
Im Hauptprogramm habe ich mit Timer0 und einem 1:64-Vorteiler eine 0,01s
Schleife gebaut, so daß das Hauptprogramm 100mal je Sekunde durchlaufen
wird.
Ich habe hier Timer1 als Zeitbasis für die Messung des Eingangssignals
und als Timer für das Ausgangssignal genommen, weil ich nicht beides
gleichzeitig brauchte, bei Dir ist da evtl. ein weiterer 16-Bit-Timer
nötig.
Im Hauptprogramm kann dann alle 0,01s abwechselnd ein Servo-Signal
angestoßen werden.