Hallo zusammen, ich bins mal wieder und wieder mit meinem Lieblings Thema, der State Machine.
Ich habe Folgendes Problem, beim Lesen der States werden nicht alle Daten gelesen.
In der Sub "Change_state" wird der letzt READ nicht ausgeführt also "Read Change_allow" Wenn ich die Read-Anweisungen vertausche ist es das gleich, die letzte Anweisung wird nicht gelesen.
Hat jemand eine Idee woran das liegen könnte, im Moment sehe nicht meinen Fehler nicht und das schon seit zwei Tagen![]()
Hier der Code
Main Loop:
Code:Do 'Menüeintrag und Tastencodes finden und ggf. State wechseln 'hier nur Tastendruck auswerten Gosub Change_state 'Pointer nach Statuswechsel neu setzen If State_renew = 1 Then Gosub Change_state 'Unterprogramm des aktuellen State anspringen LDS R31, {State_gosub+1} 'High see Bascom-Doc Mixing ASM and BASIC LDS R30, {State_gosub} 'Low LSR R31 'Division durch 2 (Alternativ ADR verwenden) ROR R30 'Call zum Sub ICALL 'Pina1-2 werden vom Diplay belegt, Pina6 u PinA7 haben eine schwache Spannung Debounce Pina.3 , 0 , Up_press , Sub Debounce Pina.4 , 0 , Down_press , Sub Debounce Pina.5 , 0 , Plus_press , Sub Debounce Pina.6 , 0 , Minus_press , Sub Debounce Pina.7 , 0 , Ok_press , Sub If Change_allow = 1 Then If Pina.5 = 0 Then Gosub Plus_press 'Value_change = 1 Elseif Pina.5 = 1 Then Gosub Reset_plus End If If Pina.6 = 0 Then Gosub Minus_press 'Value_change = 1 Elseif Pina.6 = 1 Then Gosub Reset_minus End If End If 'LCD refresh wenn Menü verändert If State_renew = 1 Then State_renew = 0 Gosub Lcdprint End If Loop End
Die States:
[/b]Code:'-------------------------------------------------------------------- 'Subroutine: Change_state_ 'Call from: main loop 'Status der State Machine feststellen und ggf. Wechseln '-------------------------------------------------------------------- Change_state: lds R8, {State} lds R9, {State + 1} For Icount = 1 To Key_buttons Read W If Key = Keycode(icount) Then If W <> Loadlabel(null) Then State_renew = 1 Key = Key_null 'reset key status after get a new state of state 'machine (prevent influence on GOSUBs) State = W End If End If Next Icount Read State_gosub 'Adresse des akt. Unterprogramms einlesen Read Lcd_textbuffer 'read LCD text Read Options_id Read Array_id 'Identifier für Array Information Read Change_allow Return P1_1: 'Programm 1 Adr2 P1_2 : Adr2 Null : Adr2 Null : Adr2 P1_1_edit : Adr2 Null : Adr2 Null Adr2 Over_view 'Subroutine for current State Data Title1 Data 1% 'Aktulee Zeile (Hervorheben) Data $10 Data 0% 'Change_allow P1_1_edit: Adr2 Null : Adr2 Null : Adr2 Null : Adr2 Null : Adr2 Null : Adr2 Null Adr2 Change 'Subroutine for current State Data Title1 Data 1% 'Aktulee Zeile (Hervorheben) Data $10 Data 1% 'Change_allow







Zitieren

Lesezeichen