Nein, der Programmablauf ist folgender:

while (TRUE) {
lese pins aus
warte 10ms
übertrage über UART 4-6 Bytes
}

Dabei entsteht folgendes Problem:
Auf Basis deiner oben angegebenen 35ms je Durchlauf ergibt sich:
1200 Baud als Übertragungsrate für den UART... Kommt das vielleicht hin?

Die nächste Sache ist: was bezweckst du mit dem 10ms warten? Dadurch, dass du nur alle 10ms abtastest, behen dir alle verloren, die es schaffen zwischen deinem Abtasten zu treffen. Nach Shannon darfst du nur mit 50Hz drehen, also 20ms pro Raster (so dass du zwei Abtastungen je Lücken-Ganzstellen-Kombi hast).

Also mach zwei Sachen:
1.) UART schneller laufen lassen
2.) immer nur die Zustandswechsel übertragen und nicht alles. Dadurch bekommst du die Schleife sehr viel schneller und deine Abtastrate liegt irgendwo bei 100 kHz, also kannst du mit 50kHz drehen... das sollte reichen.... Du speicherst also immer den aktuellen Wert, machst ein XOR mit dem alten Wert und wenn sich etwas ändert, kommt dabei 1 heraus. Wenn eien 1 herauskommt, dann überträgst du das an den Rechner. Wenn eine 0 heraus kommt, dann wird nichts übertragen, sondern wieder Pinstatus eingelesen und verglichen usw.
Damit solltest du kein Zeitproblem mehr haben...

MfG
Stefan