ähm, dass ist leider nicht verständlich für mich

ich habe nun mal am ende von jedem unterprogramm folgendes eingefügt, damit er so lange im unterprogramm bleibt bis ein anderes Programm angewählt wird.

pr_1:

lauflicht

If Pr1_3 = 0 Then
Gosub Pr_1
Else
Return
End If

pr_2:

lauflicht

If Pr1_3 = 1 Then
Gosub Pr_2
Else
Return
End If


pr_3:

If Pr1_3 = 2 Then
Gosub Pr_3
Else
Return
End If



Funktioniert aber trotzdem irgentwie nicht.


EDIT: Hier mal der Code wie er immoment aussieht:

Code:
'###################################################
'#Lauflichtsteuerung mit 2 Verschiedenen Programmen#
'###################################################


$regfile = M8def.dat
$crystal = 3686400

Ddrd = &B11100000                                           'PD7, PD6, PD5 als Ausgänge festlegen, rest Eingang
Portd = &B00001100                                          'PullUps von PD2, PD3 Aktivieren

Dim Zler As Byte
Dim Pr1_3 As Byte


On Timer1 Ontimer1
Config Timer1 = Timer , Prescale = 64                       'Timertakt = Crystal / 64
Enable Timer1                                               'Timer1 einschalten
Enable Interrupts                                           'Interrupts Global einschalten
Const Timervorgabe = 36736                                  'Hat mir rnAVR so berechnet


'###Deklarationen###

Led_gr Alias Portd.7                                        'LED Grün
Led_ge Alias Portd.6                                        'LED Gelb
Led_ro Alias Portd.5                                        'LED Rot
Prwata Alias Pind.3                                         'Programmwahltaster

Declare Sub Pr_1
Declare Sub Pr_2
Declare Sub Pr_3


'###Hauptschleife###

Do
Debounce Prwata , 0 , Pr_wechsel , Sub                      'Programmwahltaster entprellen und zu Pr_wechsel springen
Loop

'###OnTimer1###

Ontimer1:
Timer1 = Timervorgabe
If Zler = 10 Then                                           'Wenn Zler = 9 dann...
Zler = 1                                                    '...Zler = 0
End If
Incr Zler                                                   'Zler + 1

Return





'###Unterprogramme###

Pr_wechsel:

Incr Pr1_3                                                  'Pr1_3 um einen erhöhen


If Pr1_3 = 0 Then                                           'Wenn Pr1_3 = 0 dann...
 Gosub Pr_1                                                 '...zum sub PR_1 springen
End If

If Pr1_3 = 1 Then                                           'Wenn Pr1_3 = 0 dann...
 Gosub Pr_2                                                 '...zum sub PR_1 springen
End If

If Pr1_3 = 2 Then                                           'Wenn Pr1_3 = 0 dann...
 Gosub Pr_3                                                 '...zum sub PR_1 springen

If Pr1_3 >= 3 Then                                          'Wenn pr1_3 = 3 dann..
 Pr1_3 = 0                                                  'pr1_3 = 0
End If


Return


'----------------

Pr_1:

If Zler = 1 Then
 Led_ro = 1
 Led_gr = 1
 Led_ge = 0
End If

If Zler = 2 Then
 Led_ro = 0
 Led_gr = 0
 Led_ge = 1
End If

If Zler = 3 Then
 Led_ro = 1
 Led_gr = 1
 Led_ge = 0
End If

If Zler = 4 Then
 Led_ro = 0
 Led_gr = 0
 Led_ge = 1
End If

If Zler = 5 Then
 Led_ro = 1
 Led_gr = 1
 Led_ge = 0
End If

If Zler = 6 Then
 Led_ro = 0
 Led_gr = 0
 Led_ge = 1
End If

If Zler = 7 Then
 Led_ro = 1
 Led_gr = 1
 Led_ge = 0
End If

If Zler = 8 Then
 Led_ro = 0
 Led_gr = 0
 Led_ge = 1
End If

If Pr1_3 = 0 Then                                           'Wenn Pr1_3 = 0 dann...
Gosub Pr_1                                                  '...zum Sub PR_1 gehen...
Else                                                        '...sonst...
Return                                                      '...return
End If





'---------------

Pr_2:


If Zler = 1 Then
 Led_ro = 1
 Led_gr = 0
 Led_ge = 0
End If

If Zler = 2 Then
 Led_ro = 0
 Led_gr = 1
 Led_ge = 0
End If

If Zler = 3 Then
 Led_ro = 0
 Led_gr = 0
 Led_ge = 1
End If

If Zler = 4 Then
 Led_ro = 1
 Led_gr = 0
 Led_ge = 0
End If

If Zler = 5 Then
 Led_ro = 0
 Led_gr = 1
 Led_ge = 0
End If

If Zler = 6 Then
 Led_ro = 0
 Led_gr = 0
 Led_ge = 1
End If

If Zler = 7 Then
 Led_ro = 1
 Led_gr = 0
 Led_ge = 0
End If

If Zler = 8 Then
 Led_ro = 0
 Led_gr = 1
 Led_ge = 0
End If

If Pr1_3 = 1 Then                                           'Wenn Pr1_3 = 0 dann...
Gosub Pr_2                                                  '...zum Sub PR_2 gehen...
Else                                                        '...sonst...
Return                                                      '...return


End If