"hat jemand schonmal etwas ähnliches programmiert."
Ja, aber natürlich nicht auf nem PIC.
Ich hab früher Assembler (8051) gemacht und kann Dir zustimmen, daß es
schnell unübersichtlich wird, wenn man einfach drauf los schreibt.
Man muß besonders in Assembler erstmal ein Grundgerüst (Ablaufplan)
machen, ehe man losprogrammiert.
Und vor allem muß man sich erstmal Aufbau- und Aufrufkonventionen für
Funktionsmodule ausdenken und diese dann einhalten (welche Register
werden für Parameterübergabe reserviert usw.).
Man darf auch nie zuviel in einer Funktion gleichzeitg machen, sondern
immer schön in Unterfunktionen aufteilen.
Der PIC hat dabei Probleme, da er nur eine begrenzte Stacktiefe hat.
Trotzdem sollte man nicht auf Modularität verzichten, sondern sie dann
mit Macros als Inline-Funktion schreiben.
Der exponentiell steigenden Komplexität kannst Du dadurch begegnen, daß
Du alles in einer großen Statemachine laufen läßt.
Nachfolgend ein Beispiel in C:
http://www.mikrocontroller.net/forum/read-4-405548.html#new
Da es dabei 4 verschiedene Tastenereignisse gibt, müssen die einzelnen
States immer im 5-er Abstand sein und das Tastenereignis (1..4) wird
dann dazu addiert, falls es auftritt. Somit lassen sich beliebige
State-Wechsel realisieren, der Phantasie sind da keine Grenzen
gesetzt.
In Assembler macht man Statemachines mit einer Sprungtabelle, woraus
dann durch den Wert des States die entsprechende Sprungadresse
ausgewält wird (indirekter Sprung). Der 8051 hat dafür einen speziellen
Befehl (JMP @A+DPTR).
Beim PIC ist das kniffliger und vor allem muß man Sprünge über die
Bankgrenze gesondert berechnen.
Peter