Hallo mare_crisium,
erst einmal vielen Dank fuer Deine Auswertung und den sehr ausfuehrlichen "endlichen Zustandsautomaten".
(kann es sein, dass sich ein kleiner Fehler eingeschlichen hat?

"Die Entscheidung, ob der aktuelle Tasterzustand „hoch“ oder „tief“ ist, kann als
Mehrheitsentscheidung betrachtet werden: Beim Z=3 war die Mehrheit der Messwerte „hoch“, bei Z=0 war
sie „tief“. Also werden dem Z-Wert 0 der Tasterzustand „hoch“ und dem Z-Wert 3 der „tief“
### muss es hier nicht umegkehrt lauten? ..oder ich habe es doch nicht begriffen..###
zugeordnet. In den Zuständen 1 und 2 herrscht Stimmengleichheit. Deshalb wird festgelegt, dass der
vorhergehende Tasterzustand unverändert bleibt, bis entweder Z=0 oder Z=3 erreicht wird."

Die Ausfuehrungen dazu habe ich in den Grundzuegen begriffen.
Wobei ich zugeben muss, manches mehrmals durchgelesen und durchdacht zuhaben, bis es so weit war.

Meine Vorstellungen des Schaltens eines Tasters hat nicht so viele Zustaende umfasst.
Bei mir gab es nur die Zustaende und deren Aktionen:
1. Taste gedrueckt (Kein Zustandswechsel an den Tasten)
1a. Taste nicht gedrueckt bei LED-Zustand AUS -> LED AUS (keine Aktion)
1b. Taste nicht gedrueckt bei LED-Zustand AN -> LED AN (keine Aktion)

2. Taste nicht gedrueckt "Wechsel auf" Taste gedrueckt -> Umschalten der LED (Zustandswechsel an den Tasten)
2a. Taste nicht gedrueckt auf Taste gedrueckt bei LED-Zustand AUS -> LED AN (Aktion von AUS auf AN)
2b. Taste nicht gedrueckt auf Taste gedrueckt bei LED-Zustand AN -> LED AUS (Aktion von AN auf AUS)

3. Taste nicht gedrueckt "Wechsel auf" Taste gedrueckt und gehalten -> Umschalten der LED (Zustandswechsel an den Tasten)
3a. Taste gedrueckt gehalten bei LED-Zustand AUS -> LED AN (Aktion von AUS auf AN)
3b. Taste gedrueckt gehalten bei LED-Zustand AN -> LED AUS (Aktion von AN auf AUS)

Die abfallende Taste(gedrueckte Taste Wechsel auf Taste nicht gedrueckt) habe ich nicht betrachten und ihr auch keine Aktion angedacht.
Wenn ich meine Zeile aber nun so lese, stimmt das nicht wirklich... und ich muss Dir Recht geben.
" ..und ihr auch keine Aktion angedacht" - ist falsch, es sollte sich "nur" nichts am LED-Zustand aendern.
somit ergaenze ich hier:
4. Taste gedrueckt gehalten und Taste los gelassen (Zustandswechsel an den Tasten)
4a. bei LED-Zustand AUS -> LED AUS (keine Aktion)
4b. bei LED-Zustand AN -> LED AN (keine Aktion)

Beim Thema "Timer_Routine"- (Teil1) sprichst Du von einem Treiber bzw. Kapselung.
Die Idee bzw. den Hinweis, so an die Sache heran zu gehen, finde ich sehr gut.
In meinen Fall waere es eine Art "Eingangstreiber".
Wobei es sich dann foermlich aufdraengt gleiches an Ausgangsseite zu tun.
Zusammen gesagt einen IO-Treiber fuer das STK500...
Leicht gesagt bzw. geschrieben ich weis.
Aber dieses Thema einmal komplett durchdacht und abgearbeiten - kann mann diesen Treiber immer wieder verwenden, in andere Projecte includen.
Der "IO-Treiber" braeuchte dann nur die Informatioen
-- Input oder Output
- Tastenzustaende in eine Inputvariable zu schreiben
- aus einer Outputvariable in den LED-Port zu schreiben.

Den Vorschlag "Lass' uns diese Version erstmal für eine einzige Taste zum Laufen bringen.." stimme ich,
nach dem was ich nun alles gelesen habe, vollkommen zu.

Nach dem Motto kleine Schritte machen, die aber richtig, soll erst einmal nur das Einlesen funktionieren.

-> Nehmen wir also die Taste, welche am PinD0 gekoppelt ist, als einzulesene Taste.
Als Ausgabe die LED an PortB0.
Ferner sind die Besonderheiten des STK500 bekannt.
Tasten sind mit PullUp-Winderstaende versehen:
Taste nicht betaetigt: liefert beim Einlesen eine log 1
Taste betaetigt: liefert beim Einlesen eine log 0
Der LED-Port schaltet LED AUS bei einer log 1
LED AN bei einer log 0.

Die Timer_Routine liest den Zustand von PinD0 und bereitet ihn so auf, dass
Taste nicht betaetigt eine log 0
Taste betaetigt eine log 1
in die Zustandsvariable schreibt.
??? (Bleibt erst einmal zu klaeren, in welcher Zeit die Timer_Routine aufgerufen werden soll? Was ist ein guter Wert?) ???

Die Zustandsvariable wird entsprechend Deiner Ausfuehrungen getestet:
Um eine gedrueckte Taste(log 1) zu erkennen, muss die Timer_Routine 3 mal nacheinander eine log 1 uebergeben.
Um eine nicht gedrueckte Taste(log 0) zu erkennen, muss die Timer_Routine 3 mal nacheinander eine log 0 uebergeben.

so erst einmal die Theorie. Die Praxis folgt....