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:
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
[/b]