So sieht das Programm nun erstmal aus. Wenns logischer, einfacher, etc. geht dann ruhig meckern
Code:
$regfile "m32def.dat"
$crystal = 16000000
$framesize = 100
$swstack = 100
$hwstack = 100


Config Portd.7 = Output                                     'Ports/Pins definieren
Config Portc = Output
Config Porta = Input
Config Pinb.0 = Input


Declare Sub Stelle1                                         'Subroutinen festlegen
Declare Sub Stelle2
Declare Sub Stelle3
Declare Sub Stelle4
Declare Sub Erfolg


Led1 Alias Portc.7                                          'Alias
Led2 Alias Portc.6
Led3 Alias Portc.5
Led4 Alias Portc.4
Taster Alias Pinb.0



Do

If Taster = 0 Then                                          'Erste Stelle anwählen
Gosub Stelle1
Else
Toggle Portc                                                '"Startsequenz"
Waitms 500
Toggle Portc
Waitms 500
End If

Loop

End                                                         'end program


Sub Stelle1
 Do
 If Pina = 128 And Taster = 0 Then
 Gosub Stelle2                                              'Sprung zur nächsten Stelle wenn Eingabe richtig und bestätigung gedrückt wurde
Else
 Toggle Led1
  Waitms 500
  Toggle Led1
  Waitms 500
  End If
 Loop
End Sub

Sub Stelle2
 Do
  If Pina = 16 And Taster = 0 Then
  Gosub Stelle3                                             'Sprung zur nächsten Stelle wenn Eingabe richtig und bestätigung gedrückt wurde
 Else
  Toggle Led2
  Waitms 500
  Toggle Led2
  Waitms 500
  End If
 Loop
End Sub

Sub Stelle3
 Do
  If Pina = 64 And Taster = 0 Then
  Gosub Stelle4                                             'Sprung zur nächsten Stelle wenn Eingabe richtig und bestätigung gedrückt wurde
 Else
  Toggle Led3
  Waitms 500
  Toggle Led3
  Waitms 500
  End If
 Loop
End Sub

Sub Stelle4
 Do
  If Pina = 224 And Taster = 0 Then
  Gosub Erfolg                                              'Hier kann der Sprung zum entsperren bzw. freigabe oder wie auch immer geschehen
 Else
  Toggle Led4
  Waitms 500
  Toggle Led4
  Waitms 500
  End If
 Loop
End Sub

Sub Erfolg
 Sound Portd.7 , 1000 , 500
End Sub

Die Grundlegende Funktion ist schonmal erfüllt. Die If-Then-Elsif Sache zur Schalterabfrage hat sich als suboptimal herausgestellt. Als das Programm in den Subroutinen werkelte war die Abfrage aus der Hauptschleife wohl nicht verfügbar. Bei der angesprochenen Select-Case Methode ist bei mir noch kein Licht aufgegangen wie das richtig funktioniert.
Manipulationssicher ist das ganze auch noch nicht. Hält man den Taster gedrückt und dreht wild am Codierschalter, springt er natürlich von Stelle zu Stelle. Außerdem wäre dann auch noch ein Zähler notwendig, der die falschen Eingaben festhält und nach Eingabe X alles sperrt.


Gruß 128er