ACsenf
02.04.2005, 13:05
Hallo!
Ich habe den folgenden Code nach dem hier vorgestellten Tool zur Frequenzeinstellung versucht. Nur liegt die Frequenz immer daneben, bei geforderten 10kHz ergeben sich 4,3kHz, bei 20 ergeben sich 7,5 und bei 30 ergeben sich 10 kHz. Was kann das sein??? Kann mir das nicht erklären.
Hier der Code:
'Timer0_2.bas
'8-bit Timer als Rechteckgenerator
'mit Voreinstellung
'Achtung: bei kleinen Zeiten ist die Zeit zur Rettung der Register nicht zu vernachlässigen
'Nosave bringt, wenn möglich eine starke Verbesserung
'$sim
$regfile = "8515DEF.DAT"
$crystal = 4000000
'Hier wird der Timer und der Teiler festgelegt
Config Timer1 = Timer, Prescale = 1
'Der Port mit der dritten LED auf RN-Control wird als Ausgang programmiert
Config Pinc.0 = Output
'Hier geben wir der Definition einen schöneren Namen
Led3 Alias Portc.0
'Hier wird das Unterprogramm festgelegt, das
'in dem von ihnen eingestellten Intervall aufgerufen wird
On Timer1 Timer_irq
'Diese Vorgabe wurde berechnet um die genaue Intervallfrequenz zu erreichen
Const Timervorgabe = 65403
'Hier werden die Timer aktiviert
Enable Timer1
Enable Interrupts
'Hier ist die Programmhauptschleife
Do
'Hier könnte Ihr Hauptprogramm stehen
Loop
'Dies ist der Programmteil, der in dem von ihnen gewählten
'Intervall aufgerufen wird
Timer_irq:
Timer1 = Timervorgabe
'Hier könnte nun ihre beliebige IRQ-Routine stehen
'Dabei sollte man darauf achten das diese nicht mehr Zeit
'benötigt, als das Intervall zuläßt
'Der Zustand der LED wir umgekehrt, wodurch sich blinken in der halben Frequenz ergibt
'Hohe Frequenzen sind natürlich nicht mehr sichtbar
Toggle Led3
Return
Ich habe den folgenden Code nach dem hier vorgestellten Tool zur Frequenzeinstellung versucht. Nur liegt die Frequenz immer daneben, bei geforderten 10kHz ergeben sich 4,3kHz, bei 20 ergeben sich 7,5 und bei 30 ergeben sich 10 kHz. Was kann das sein??? Kann mir das nicht erklären.
Hier der Code:
'Timer0_2.bas
'8-bit Timer als Rechteckgenerator
'mit Voreinstellung
'Achtung: bei kleinen Zeiten ist die Zeit zur Rettung der Register nicht zu vernachlässigen
'Nosave bringt, wenn möglich eine starke Verbesserung
'$sim
$regfile = "8515DEF.DAT"
$crystal = 4000000
'Hier wird der Timer und der Teiler festgelegt
Config Timer1 = Timer, Prescale = 1
'Der Port mit der dritten LED auf RN-Control wird als Ausgang programmiert
Config Pinc.0 = Output
'Hier geben wir der Definition einen schöneren Namen
Led3 Alias Portc.0
'Hier wird das Unterprogramm festgelegt, das
'in dem von ihnen eingestellten Intervall aufgerufen wird
On Timer1 Timer_irq
'Diese Vorgabe wurde berechnet um die genaue Intervallfrequenz zu erreichen
Const Timervorgabe = 65403
'Hier werden die Timer aktiviert
Enable Timer1
Enable Interrupts
'Hier ist die Programmhauptschleife
Do
'Hier könnte Ihr Hauptprogramm stehen
Loop
'Dies ist der Programmteil, der in dem von ihnen gewählten
'Intervall aufgerufen wird
Timer_irq:
Timer1 = Timervorgabe
'Hier könnte nun ihre beliebige IRQ-Routine stehen
'Dabei sollte man darauf achten das diese nicht mehr Zeit
'benötigt, als das Intervall zuläßt
'Der Zustand der LED wir umgekehrt, wodurch sich blinken in der halben Frequenz ergibt
'Hohe Frequenzen sind natürlich nicht mehr sichtbar
Toggle Led3
Return