Mit Taster von einem Loop zum nächsten springen
Ich hab gesucht, wurde aber nicht fündig. Das Thema wurde bestimmt schon einmal besprochen. Ich hoffe jemand kann meine Frage beantworten.
Ich habe in Bascom verschiedene Lauflichter programmiert (LED Blinklichter). Eigentlich ne recht einfache Sache, sie gehen mit einem Schalter an und aus.
Jetzt möchte ich gerne einen Taster einsetzen mit dem ich die verschiedenen Loops ansteuern kann.
Leider weis ich nicht welchen Befehl ich dafür benutzen kann um aus einer Loop heraus zu kommen und in die nächste springen kann.
Und natürlich wie dann zum Schluss der befehl des ausbleibends kommen kann.
Gruß Glenn
Liste der Anhänge anzeigen (Anzahl: 1)
Anhang 29093
Diese Fehlermeldung, ich hoffe es hilft.
Liste der Anhänge anzeigen (Anzahl: 1)
Anhang 29098
Ne leider auch nicht.
Und nur ohne "1" ebenfalls nicht.
Liste der Anhänge anzeigen (Anzahl: 1)
Danke für den Code...
Code:
$regfile = "attiny13.dat"
$crystal = 1200000
$hwstack = 34 '### hwstack vergrößern. Wichtig bei Verwendung von Interrupts
$swstack = 10
$framesize = 10
Config Portb.1 = Output
Config Portb.2 = Output
Config Portb.3 = Output
Config Portb.4 = Output
Config Pinb.0 = Input
Dim Anzahlmodi As Integer
Dim Modus As Byte
Modus = 1
Anzahlmodi = 3
'### Alle Variablen können als Byte deklariert werden (spart Speicher im kleinen Tiny13)
'### Der Timer0 wird für die Blink- bzw. Schaltfrequenz konfiguriert
Compare0a = 116 '99,84ms Interruptperiode bei 1,2MHz µC-Takt
Config Timer0 = Timer , Prescale = 1024 , Clear_timer = 1 'Timer0 im Clear Timer on Comparematch
On Compare0a Isr_blink 'ISR wird bei Compare Match A aufgerufen
'### In der Haupschleife steht nur die Tastenabfrage inclusive Tastenentprellung
Do 'Beginn Hauptschleife
Debounce Pinb.0 , 1 , Changemodus , Sub 'Führt Unterprogramm aus, wenn Pinb.0 auf 1 wechselt
Loop 'Ende Hauptschleife
'### Nach Tastendruck wird dieses Unterprogramm ausgeführt, daß den Lichteffekt weiterschaltet und
'### die nötigen Parameter für die Interruptserviceroutine setzt.
Changemodus: 'Unterprogramm setzt Werte für Lichteffekt nach Tastendruck
Disable Compare0a 'Vermeidet Inkonsistenzen in der ISR
If Modus < Anzahlmodi Then Incr Modus Else Modus = 1
Select Case Modus
Case 1 : Anzahlphasen = 0 'Muß Anzahl der Daten in den DATA-Zeilen entsprechen
Case 2 : Anzahlphasen = 5 'Wert von 0 = ein Eintrag, 5 = sechs Einträge bei DATA
Case 3 : Anzahlphasen = 1 '.
End Select
Phase = 0
Enable Compare0a
Return
'### In der Interruptserviceroutine wird alle 100ms das neue Schaltmuster für die LEDs gelesen und
'### die LEDs geschaltet.
Isr_blink: 'wird alle ca. 100ms aufgerufen und schaltet die LEDs
If Phase < Anzahlphasen Then Incr Phase Else Phase = 0 'setzt die nächste Effektphase
Select Case Modus 'entsprechend dem Modus wird das Bitmuster für LEDs geholt
Case 1 : Pattern = Lookup(phase , Lichteffekt1)
Case 2 : Pattern = Lookup(phase , Lichteffekt2)
Case 3 : Pattern = Lookup(phase , Lichteffekt3)
End Select
Portb.1 = Pattern.3 'LED wird geschaltet
Portb.2 = Pattern.2 'LED wird geschaltet
Portb.3 = Pattern.1 'LED wird geschaltet
Portb.4 = Pattern.0 'LED wird geschaltet
Return
End 'end program
'### Hier sind die Schaltmuster abgelegt.
Lichteffekt1:
Data &B0000
Lichteffekt2:
Data &B1010 , &B1001 , &B1010 , &B0101 , &B0110 , &B0101
Lichteffekt3:
Data &B1111 , &B0000
Hab ich da was falsch kopiert? Folgende Fehlermeldung kommt. Anhang 29136
Code:
Compare0a = 116 '99,84ms Interruptperiode bei 1,2MHz µC-Takt
Config Timer0 = Timer , Prescale = 1024 , Clear_timer = 1 'Timer0 im Clear Timer on Comparematch
On Compare0a Isr_blink 'ISR wird bei Compare Match A aufgerufen
Und könntest du mir diesen Bereich etwas genauer erklären?
Gruß Glenn