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
Lesezeichen