Ganz ohne Timer Unterstützung wird es zwar nicht gehen, weil man ja eine Refernz für die Zeit braucht.

Aber warum machst Du das Ganze nicht über flankengetriggerte Interrupts?
z.B. INT0 auf steigende Flanke. kommt die dann, das Sensig auf fallende Flanke im Interrupt Umstellen.
Fällt die Flanke dann wiede ab, kannst Du den Zeitstempel der ansteigenden Flanke vom aktuellen Wert abziehen.
So bekommst Du die Impulslänge. Umgekehrt gehts natürlich auch und Du bekommst die Pausenlänge.
Die Ist auch wichtig, weil in der 59 Sekunde kein Puls gesendet wird und somit eine Synchronosation stattfinden kann.

Somit wird die Interruptroutine bei jedem Impuls 2x aufgerufen.
Ein Timer - Ich würde einen 16 Bit Timer verwenden - fungiert nur als Zeitbasis zum Bestimmen der Impulslängen.
Timer Interrupts werden keine aufgerufen.

Die ankommenden Bits schiebst Du in entsprechende Variablen und die Paritätsprüfung läuft auch noch nebenher mit.