Forum: Mikrocontroller und Digitale Elektronik Keil: Geschwindigkeit bei Timern


von Markus (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich muss ein Projekt für den 80535 realisieren unter Verwendung des
Timer 2. Vorerst möchte ich nur R0 alle 3 Sekunden inkrementieren, was
ich über die 16-Bit Auto-Reload-Funktion des Timer 2 realisieren
möchte.

Leider zählt R0 aber extrem schnell hoch. Kann es sein, dass Keil im
Debug-Mode nicht mit 12 Mhz sondern viel schneller arbeitet? Oder
liegts doch an meinem Code (siehe Anhang)?

Falls es an Keil liegt: Welche Möglichkeiten gibt es, das Programm mit
12 MHz Oszillatorfrequenz zu testen?

Vielen Dank für eure Hilfe!

Gruß
Markus

von Peter D. (peda)


Lesenswert?

Hast Du denn überhaupt keine Kenntnisse über den grundsätzlichen
Programmaufbau ?

- Main-Schleife fehlt
- zu Anfang sollte man hinter die Interruptvektoren springen


Peter

von Markus (Gast)


Angehängte Dateien:

Lesenswert?

Hab den Code nur auf das Wesentliche gekürzt...
Aber jetzt nochmal mit mehr Code :)

Markus

von peter dannegger (Gast)


Lesenswert?

Ich kenne den 535 nicht, aber beim AT89C52 komme ich auf:

12MHz  2  50000 / 60 = 2Hz


Peter

von Markus (Gast)


Lesenswert?

Erstmal vielen Dank für deine Antwort!

Könntest du die Rechnung bitte kurz erklären? Unser Dozent hat uns das
folgendermaßen erklärt:
Wenn man als Autoreloadwert 15.536 festlegt, zählt der 16-Bit-Timer
noch 50.000 Schritte ms hoch (da er ja bis 65.536 zählt). Bei 12 MHz
benötigt er für 50.000 Schritte 50 ms (pro Schritt 1 us).

Stimmt das so nicht?

Jedenfalls zählt das Register trotzdem sehr viel schneller hoch.. 1 kHz
käme da eher hin :/

von Peter D. (peda)


Lesenswert?

" 1 kHz käme da eher hin"

Achso, hätste doch gleich sagen können.

Du must noch das Interruptflag zurücksetzen.
Nur bei T0 und T1 wird es automatisch gelöscht, nicht aber bei T2.


Peter

von Markus (Gast)


Lesenswert?

1000 Dank!

Jetzt funktioniert's wunderbar :)

von Carsten (Gast)


Lesenswert?

Kann mir vielleicht noch mal jemand erklären / resp. bestätigen, dass
ich das mit den Interrupt-Zeiten richtig verstanden habe ?

Bei einem 4 MHz-Takt und einer Vorteilung von 256 komme ich auf einen
Takt von 15,625kHz.
Das ist die Frequenz, mit der das Register von 255 bis 0 runtergezählt
wird.
Bei 0 erfolgt dann erst der Interrupt ?
d.h. Der Interrupttakt läge dann bei 61,27 Hz (15625/255) oder ist das
dann 15625/256 ?

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.