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