Ohne Ontimer1: geht gar nichts, da dieses doch ein Unterprogramm oder so etwas ist.Ontimer1 ist noch unnötig, aber lass mal drin. Eigentlich sollte es so funktionieren.
Ontimer1: Incr Timer1 If Key = 0 Then Timer1 = Timer1 + 1 End If ReturnJetzt ab Zeile 66
' Compiler konfiguration $regfile = "m8def.dat" $crystal = 8000000 $hwstack = 40 $swstack = 16 $framesize = 32 $baud = 19200 ' Globale Variablen Dim Zeichen As Byte Dim Count As Byte ' Aliase Rot Alias Portd.7 Gruen Alias Portc.3 Blau Alias Portd.6 Key Alias Pinb.0 ' Initialisiere Hardware Init: ' Hardware konfiguration Ddrb = &B1111_1110 Portb = &B0000_0001 Ddrc = &B__11_1111 Portc = &B__00_0000 Ddrd = &B1111_0111 Portd = &B0000_1000 ' Konfiguration UART On Urxc Onuartrx Enable Urxc ' Konfiguration Timer 2 (CTC, 8MHz/256/249 = 8ms) Config Timer2 = Ctc , Prescale = 256 , Clear_timer = 1 Ocr2 = 249 ' Setze Maximalwert für Timer 2 (CTC) On Oc2 Onoc2 ' Setze ISR für Timer 2 Overflow Compare Enable Oc2 ' Aktiviere Timer 2 Overflow Compare Int. ' Konfiguration Timer 1 (Counter) Config Timer1 = Counter , Edge = Rising On Timer1 Ontimer1 ' Setze ISR für Timer 1 Overflow Enable Timer1 ' Aktiviere Timer 1 Overflow Interrupt ' Konfiguration Watchdog Config Watchdog = 2048 ' Setze Watchdog Timeout auf ~2sec Start Watchdog ' Aktiviere den Wachhund ' On Tick_1s ' -- ääähm... wtf??? ' Aktiviere Interrupts (global) Enable Interrupts ' Goto Main ' -- nicht benötigt, Routine kommt eh als nächstes ' Haupt Anwendungsschleife Main: ' Den Wachhund zurücksetzen Reset Watchdog ' Einschlafen (bis zum nächsten Interrupt) Config Powermode = Idle Goto Main ' und zurück ' ISR wenn ein Byte empfangen wurde Onuartrx: 'If Ischarwaiting() = 1 Then ' -- nicht benötigt. Klar dass ein Zeichen da ist wenn der Interrupt gefeuert wird ' Das Byte abholen (Zeichen) Zeichen = Inkey() ' Eingabe auswerten If Zeichen = "1" Then Rot = 1 Elseif Zeichen = "0" Then Rot = 0 End If 'End If Return ' ISR wenn Timer 2 compare event eintritt (alle 8ms, bei aktueller Konfiguration) Isr_oc2: ' Erhohe internen Zähler Incr Count ' Wenn Zähler einen gewissen Wert erreicht hat, auf 0 setzen und abzweigen If Count = 125 Then Count = 0 Gosub Tick_1s End If Return ' ISR wenn Timer 1 überläuft Ontimer1: ' -- kommt später Return ' Diese Routine wird jede Sekunde ausgeführt Tick_1s: ' Den aktuellen Wert vom Timer1 ausgeben Print Timer1 ; " Hz" ' Die Grüne LED (Debug) toggeln Toggle Gruen Return
Habe ich hier gefunden.Zum Schaltplan: ARef
Ich weiß jetzt nicht, was du damit meinst (im Code). Wie gesagt, habe ich Zeile 38 in Isr_Oc2 umgeschrieben und Taster an Pind.5 gehängt.Das Label (=Sprungmarke)
Das macht mir zu schaffen, weil ich immer etwas mit If… lösen will. Ich muss doch den Timer1 sagen, wann er auf "0 " zurück gehen soll, mit einer Zeile.Ist nur eine Zeile