Danke , war nenn toller code, aber warum hast du alles geändert , war meins den so sch***. ich glaube, ich hab jetzt verstanden Worum es Kommentare im Quellcode gibt! Damit andere auch verstehen was ich meine. Zugegeben dein Code ist echt kompliziert, geht das echt nicht einfacher?
Code:## Definitionen const Preset_Timer0 = 219 const OvF_Timer0 = 39 [...] Dim Torzeit as Byte Dim Frequenz as long Dim Freq_low_word as word at Frequenz OVERLAY Dim Freq_high_word as word at Frequenz+2 OVERLAY [...] ' ## Initialisierung On Timer0 ... On Timer1 ... enable ... enable ... enable ... Timer0 = Preset_Timer0 ' ## Hauptschleife Do ' ## Messzeit abgelaufen? if Torzeit = OvF_Timer0 Then Freq_low_word = Timer1 ' ## Ausgabe [hier: Ausgabe der Variablen "Frequenz"] ' ## Messung neu initialisieren Torzeit = 0 Freq_low_word = 0 'braucht nicht drin sein, da der Wert oben mit "=" zugewiesen wird Freq_high_word = 0 Timer0 = Preset_Timer0 Timer1 = 0 Start Timer0 Start Timer1 end if ' ## hier kannst Du noch beliebige ander Sachen machen. ' Achtung, sobald Du oben die Messung neu initialisierst, wird der Wert in ' der Variablen Frequenz wieder verändert. ' Wenn Du den Wert hier noch brauchst, z.B. für eine Ausgabe über die ' Serielle Schnittstelle, dann musst Du ihn vorher in eine andere Variable ' sichern. loop ' ## Schlußbemerkung: ' Wenn ich den Code so wie er hier steht 1:1 in Deinem Programm ' wiederfinde, dann hau ich ihn Dir eine halbe Stunde lang um die Ohren. ' (Falls wir uns irgendwann mal persönlich begenen sollten.) ' Nimm ihn als Vorlage, versuch ihn zu verstehen und programmier dann ' Deinen eigenen! Der Code den Du schon mühsam selbst geschrieben hast ' ist dazu eine gute Grundlage. Den Rest, besonders die Funktion der ' OVERLAY Option düfte hiermit soweit klar sein, daß Du es auch selber ' kannst. Wenn nicht, dann FRAGE! End ' ## Interrupt Timer0 Überlauf Timer0_Ueberlauf_int: incr Torzeit if Torzeit = OVF_Timer0 Then Stop Timer1 Stop Timer0 end if return ' ## Interrupt Timer1 Überlauf Timer1_Ueberlauf_int: incr Freq_high_word ReturnWürde dich nie so dermasen beleidigen!!!!!!!!!Wenn ich den Code so wie er hier steht 1:1 in Deinem Programm
' wiederfinde, dann hau ich ihn Dir eine halbe Stunde lang um die Ohren.
' (Falls wir uns irgendwann mal persönlich begenen sollten.)
Hier mein Code MIT Kommentar:
Hatte doch noch ein paar Fehlerchen korrigiert!Code:$regfile = "2313def.dat" Dim Var1 As Byte Dim Var2 As Long Dim Freq As Long Config Portb = Output Config Portd = Output Enable Interrupts Enable Timer0 Enable Timer1 Config Timer0 = Timer , Prescale = 1024 Config Timer1 = Counter , Edge = Rising Config Pinb.5 = Input Portb.5 = 0 On Timer0 Test1 ' Springe zu Test1 wenn Timer0 "voll" On Timer1 Test2 ' Springe zu Test2 wenn Timer1 "voll" Timer0 = 216 ' Constante zum erzeugen einer "Exacten" Sek. Timer1 = 0 Start Timer0 Start Timer1 'Auf die Pins, Fertig, Messen! Do ' Anzeige Schlaufe Loop Test1: ' Wenn Timer0 (Gatetimer) voll, dann Var1 + 1 Incr Var1 If Var1 = 39 Then 'Wenn Timer0 39 überlief (1 Sek) dann: Freq = Timer1 ' Lese Timer1 aus ( Counter ) Freq = Freq + Var2 ' Addiere Timer1 und Anzahl der überlaufe von Timer1*256 Var1 = 0 Var2 = 0 Stop Timer0 ' Starte Messung erneut Stop Timer1 Timer0 = 126 Timer1 = 0 Start Timer0 Start Timer1 Return End If Return Test2: ' Wenn counter (Timer1) überlauft, dann addiere 65536 Var2 = Var2 + 65536 Return
Jetzt versteht man meinen Code besser.
Gruß teslanikola







Zitieren

Lesezeichen