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
Return
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.)
Würde dich nie so dermasen beleidigen!!!!!!!!!
Hier mein Code MIT Kommentar:
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
Hatte doch noch ein paar Fehlerchen korrigiert!
Jetzt versteht man meinen Code besser.
Gruß teslanikola
Lesezeichen