Kostenloser Elektrotechnik VIDEO-Kurs


mit VIDEO-Reihen zu den Themen:
Grundlagen der Elektrotechnik
Gleichstromnetze und Berechnungsverfahren
Wechselstrom und Drehstromnetze
Elektrische Maschinen
Regelungstechnik
Digitaltechnik
Mikrocontrollertechnik und C-Programmierung


Programmieren des Timer Interrupts


Heute geht es wieder ans Eingemachte. Mit einer schönen Aufgabe zum Schluss.
Wann wird ein Timer Interrupt denn nun aufgerufen, bzw. wie stellst Du ein, dass der Timer Interrupt genau dann ausgelöst wird, wann Du es möchtest?

Um diese Fragen geht es heute.

Die Zeit, bis ein Time raubgelaufen ist, ist zunächst einmal abhängig von der Taktfrequenz, mit der der Mikrocontroller betrieben wird. Von dieser Taktfrequenz ist abhängig, wie lange ein Maschinenzyklus dauert und die Dauer eines Maschinenzyklus bestimmt, wie schnell die Register TH0 und TL0 inkrementiert werden.
Ein Machinenzyklus dauert 12 Taktzyklen und nach jedem Maschinenzyklus wird der Zähler um 1 inkrementiert.

Ein Beispiel:

Wir der Mikrocontroller mit 12 MHz getaktet, beträgt die Frequenz für die Maschinenzyklen
12 Mhz : 12 = 1 MHz. Es gibt dann also 1 Million Maschinenzyklen pro Sekunde.
Ein Maschinenzyklus dauert also 1 µs. Jede µs wird das Registerpaar TH0/TL0 also inkrementiert.

Im Video lasse ich den Initialwert von TH0 und TL0 auf 0. Wir benötigen also 2 hoch 16 = 65536 Inkrementierungen bis zum Überlauf.
Die Interrupt Service Routine des Timers wird also jede 65536 x 1µs = 0,065536s aufgerufen.

Die Programmierung dieses Timers im Video


Deine Aufgabe

Durch die Wahl der Werte von TH0 und TL0 kann man bestimmen, wie lange es vom Start des Timers bis zum Aufruf der Interrupt Service Routine dauert.
Es soll nun ein Timer programmiert werden , der alle 10 ms aufgerufen wird und dann bei jedem 1000. Mal den Port P1 inkrementiert. Der Port P1 wird dann also genau alle 10s inkrementiert.

Hinweis

Berechne also zunächst einmal die Werte für TH0 und TL0, um einen Überlauf nach 10ms zu erreichen. Diese Werte musst Du in die Register TH0 und TL0 schreiben, bevor Du den Timer startest.
Zudem musst Du die Werte in der Interrupt Service Routine wieder in die Register TH0 und TL0 schreiben, weil Du ja möchtest, dass der Zähler genau bei diesen Werten weiterzählt,um nach 10 ms den nächsten Überlauf zu erhalten.

Viel Spaß!

Dieser Artikel ist Teil des Mikrocontrollerkurs auf ET-Tutorials.de.
Hier geht es zurück zur Übersichtsseite des Mikrocontroller-Kurses .


Hat Dir der Artikel geholfen? - Dann hilf dem Artikel ;-)

Programmieren des Timer Interrupts:
1 Star2 Stars3 Stars4 Stars5 Stars
4,00 von 5 Punkten, basieren auf 3 abgegebenen Stimmen.
Stimme jetzt ab ! (auf die Sternchen klicken)
Loading ... Loading ...




Ähnliche Artikel

Folgende Artikel aus der gleichen Kategorie könnten Dich ebenfalls interessieren:

Timer Interrupt Lösung der Aufgabe Am Ende der vergangen Folge, in der es um die Programmierung eines Timer Interrupts ging, hatte ich ...

Timer Interrupt des 8051 Mikrocontrollers Zu den wichtigsten Aufgaben eines Mikrocontrollers gehören Steuerungs-, Regelungs- und Messaufgaben....

Timer Interrupts 8 bit auto reload In dieser Folge geht es um den Mode 2 des Timer Interrupts, dem 8 bit auto-reload Modus. Im Gegensat...

Ein Programmablaufplan für die Pulsweitenmodulation Im heutigen Artikel soll die Pulsweitenmodulation mit Hilfe eines Programmablaufplans realisiert wer...

Externe Interrupts beim 8051 Heute geht es nun um die Programmierung eines externen Interrupts. Die Programmierung eines externen...

{ 4 Kommentare… sie unten lesen oder einen hinzufügen }

Christos

Hallo,

warum dauert ein Machinenzyklus 12 Taktzyklen?

Gruß
Christos

Wolfgang Bengfort

Beim 8051 dauert die Umsetzung eines Maschinenbefehls 12 Taktzyklen.
Pro Maschinenbefehl müssen mehrere Dinge gemacht werden. Theoretisch könnten einige Befehle auch schneller abgearbeitet werden, bei modernen 8051-Derivaten ist das auch so realisiert, bei dem von uns verwendeten 8051-Derivat dauert ein Maschinenbefehl 12 Taktzyklen.

Rudolf

Könnten Sie netterweise erklären wie genau man beim TMOD das Bitmuster schreiben soll wenn man beispielsweise nur den Timer 0 Mode 1 benutzen möchte?
Ist mit 0×21 (binär 0010 0001) die Lösung dafür? wieso muss hier der H-Nibble 0010 sein und nicht 0000?

Wolfgang Bengfort

@Rudolf,
wenn Du das erste Nibble so belsassen sollst, wie es vroher war, darfst Du auch leine 2 hineinschreiben.

Hier findest Du ein Video, in dem ich zeige, wie man nur einzelne Bits beschreibt:

http://et-tutorials.de/1908/bitweise-manipulation/

Einen Kommentar hinterlassen