Ok dann wollen wir mal rechnen.
Der Timer ist ja nur eine Speicherstelle des uC, den man mit dem Takt verbinden kann
und dann um 1 erhöht wird. Beim Wechseln von 255 auf 0 ( 256) kann ein Interrupt
ausgelöst werden.
Daraus ergibt sich.
Takt / Vorteiler = Zeit pro Erhöhung Beispiel: 8 MHZ / 1 = 125 ns
oder 8MHZ / 1024 = 128 us. Damit kann Timer0 minimal in 125 ns oder maximal in 128 us
um 1 erhöht werden.
Wenn man den Timer0 auf 0 einstellt dauert das dann 256 mal so lange, bis ein Interrupt auftritt.
Beispiel :
Timer0 = 100 Vorteiler 1024 Takt 8 MHZ
8MHZ / 1024 = 128 us pro Erhöhung. Der Timer braucht jetzt noch 256 - 100 = 156 Erhöhungen
bis zum Interrupt ---> 156 * 128 us = 19,98 ms bis zum Interrupt.
Wenn du jetzt in der Interrupt Routine eine Variable deiner Wahl um 1 erhöhst, hast
du doch eine Erhöhung alle ca 20 ms. Wenn deine Variable damit den Wert 50 erreicht,
so sind ungefähr 1 Sekunde vergangen. ( 0,9984 Sekunden )
Code:
dim zeit as byte
On Timer0 Ontimer0
Config Timer0 = Timer , Prescale = 1024
Enable Timer0
do
nop
loop
Ontimer0:
Timer0 = 100 'Neue einstellen für 20 ms INT.
incr zeit 'Interrupts zählen
if zeit >= 50 then '1 Sekunde vorbei
Toggle Portc.2
zeit = 0 'Zeit löschen
endif
Return
MFG
Dieter
Lesezeichen