Die Auswertung wird schon so ähnlich wie im Programm ganz oben laufen. Grob geschätzt ist die Laufzeit pro Decoder und Durchlauf etwa 100 Zyklen, eher etwas schneller. Man sollte für einen Schritt den der Decoder macht wenigstens 4 Durchläufe der decoderroutine haben.

Wenn man das ganze in eine Timer ISR legen will, sollte man aber den ganzen Code in eins haben ohne Funktionsaufruf. Die alternative wäre es die Decoderroutine nur bei einer Änderung, z.B. über den Pinchange interupt aufzurufen.