Forum: Mikrocontroller und Digitale Elektronik Erklärung zu Benutzung von Timer und DO/Loop


von LJay (Gast)


Lesenswert?

Hi.

Das ist vielleicht ne sehr dumme Frage, aber fragen kostet nichts. ;)

Ich habe vor in einem Bascom code einen Timer (zählz millisekunden)
zu verwenden.
Wer kann mir aber erklären wie das mit dem Code innerhalb der DO/LOOP
Anweisung zusammenspielt?

Also wenn ich eine Timerfunktion habe, wird darin ja immer gezählt.
Z.B. in millisekunden. Nun will ich, wenn bestimmte Zeit erreicht ist
z.B. eine LED ansteuern.
Wie ist aber der zeitliche Ablauf in der DO/Loop ?
Wie oft geht das Programm die DO/LOOP durch in der gleichen zeit die
Timerfunktion?

Aus meiner erfahrung her mit anderen Programmiersprachen (keine hohen),
wird der code komplett von oben nach unten gelesen.
Also würde nach meiner Annahme der code in DO/LOOP immer zu ungenauen,
nicht bestimmbaren zeiten ausgeführt wobei ich den code in der Timer-
funktion zeitlich genau steuern kann.

Muss ich also alles was zeitkrittisch ist in der Timer-Funktion
ausführen lassen?

(Mit Referenz zu
http://www.mikrocontroller.net/forum/read-1-91014.html#96346   und
http://www.ravers-home.de/pk1/ )

von harry (Gast)


Lesenswert?

hi,

der timer tickt los, nachdem er deklariert und enabled wurde.
wenn du jetzt noch interrupts enablest wird der timer0-int bei jedem
überlauf ausgeführt:

'config timer0 = timer, prescale = 1'
'enable timer0'
der timer läuft bei 1MHz clock ca. 3920x/sec über,
d.h. er erreicht 255, dann zählt er wieder bei 0 los.

der prescaler teilt die sysclock (z.B. 1MHz) /prescale.
'config timer0 = timer, prescale = 8'
der timer kreigt jetzt nur noch 125000 pulse/sec., läuft also ca.
490x/sec. über.

'x=timer0' würde jetzt völlig wirre ergebnisse zwischen 0 und 255
bringen, da ja x immer zum zeitpunkt der zuweisung beladen wird.
nur als zufallsgenerator zu gebrauchen.

'enable interrupts : enable int0 : on timer0 timer0_isr
jetzt wird der code in der timer0_isr routine ca. 490x/sec. ausgeführt.

hier könnte ein zähler stehen
'incr zahl'
oder eine variable geändert werden
'led = 1'
oder eine led geschaltet werden
'toggle pind.1'

das mal als anregung, fröhliches probieren noch, harry

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.