ä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
Lesezeichen