-
-
Erfahrener Benutzer
Roboter-Spezialist
robo_wolf,
nee, nee Du bist schon richtig
! Gehen wir anhand des RAM vor:
Wie Du schreibst, steht im RAM nach der Tatenflanke und wenn Ta0 und Ta7 betätigt sind
00 00 81 03 00 9C
So, jetzt musst Du das Programm einfach durchlaufen lassen. Es geht dann von selbst in den Zustand B.1 über. Im RAM steht dann
00 05 81 02 00 9C
05 ist das Zustandsbyte = 0b0101. Das bedeutet: Zeitzähler hat bis T0 gezählt. Deshalb steht in Bits1 und 0 die 0b01. Die Menusteuerung (Bits3 und 2) ist im Zustand 01. In Deiner Nomenklatur ist das Zustand B.1. Das Tastenbyte 0x81 bedeutet, dass weiterhin Ta0 und Ta7 betätigt sind.
Lass' das Programm einfach weiterlaufen. Der Zeitzähler zählt die Differenz T1-T0 ab. Wenn er die Null erreicht, wird er mit 0x03 nachgeladen. Bevor die Anweisung "rcall MNU8CTL_HANDLER" ausgeführt wird, steht nun im RAM
00 06 81 03 00 9C
Das Zustandsbyte ist jetzt 0x06, das entspricht B.2. 0x81 bedeutet, dass Ta0 und Ta7 immer noch betätigt sind. Jetzt wird die Anweisung
"rcall MNU8CTL_HANDLER" ausgeführt. Dabei wird "MNU8CTL_CHKT07" aufgerufen. Weil Ta0 und Ta7 noch immer betätigt sind, geht die Menusteuerung in den Zustand 2, also C über. Der RAM-Inhalt ist deshalb
00 0A 81 03 00 9C
Das Zustandsbyte ist 0x0A. Bits3 und 2 enthalten 0b10, also ist die Menusteuerung im Zustand 2 = C. Der Zeitzähler ist gerade mit derm Abzählen von T1 fertiggeworden, also steht in Bits1 und 0 die 0b10. Er fängt jetzt an, die Differenz T2-T1 abzuzählen.
Das ist genau der Zustand, in dem die Ta0 und Ta7 wieder losgelassen werden dürfen und Menu-Auswahl-Taste betätigt werden muss. Sagen wir mal, Ta2 wird betätigt. Also in der Simulation das T-Flag setzen (es wurde ja eine neue Taste betätigt, das Flankenbit steht also an) und in r16 musst Du 0x02 schreiben.
Wg. der Tastenflanke führt das Programm die Anweisung "rcall MNU8CTL_ZYTRESET" aus. Nachdem auch "rcall MNU8CTL_HANDLER" ausgeführt ist, steht im RAM
00 08 02 03 00 9C
Das Zustandsbyte ist 0x08, was dem Zustand C.0 entspricht. Das Programm läuft weiter bis T0 abgezählt ist, Im RAM steht jetzt
00 09 02 00 00 9C
Anschliessend wird vom "MNU8CTL_HANDLER" die Prozedur "MNU8CTL_CHKTASTEN" aufgerufen und die gewünschte Aktion angestossen. Im RAM steht danach
00 09 02 02 00 9C
So weit einverstanden
?
mare_crisium
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen