Ich möchte gerne mit einem Taster zwischen 3 verschiedenen Lauflichtern wechseln können blos irgentwie Funktioniert das nicht so ganz. Das problem liegt denke ich daran, dass er jedes Unterprogramm nur einmal durchläuft und dann gleich wieder in die Hauptschleife spingt oder?
Code:
'###################################################
'#Lauflichtsteuerung mit 3 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:
Pr1_3 = 0
If Pr1_3 = 0 Then 'Wenn Pr1_3 = 0 dann...
Gosub Pr_1
End If '...zum Sub PR_1 springen
If Pr1_3 = 1 Then 'Wenn Pr1_3 = 1 dann...
Gosub Pr_2 '...zum sub PR_2 springen
End If
if Pr1_3 = 2 Then
Gosub Pr_3
End If
If Pr1_3 = 3 Then 'Wenn Pr1_3 = 2 dann...
Pr1_3 = 0 '...Pr1_3 = 0
End If
Incr Pr1_3 'Pr1_3 + 1
Return
'----------------
Pr_1:
Lauflicht 1
'---------------
Pr_2:
Lauflicht 2
'---------------
Pr_3:
lauflicht 3
Lesezeichen