Mikrocontroller - Elektronik - Anwendungen:
Fußgängerampel - Teil 2
Hard- und Software für den 8-Bit-Mikrocontroller ATtiny2313. Für die Fußgängerampel ist die Schaltung mit dem Mikrocontroller zu erweitern.
von Herbert Bernstein
Die Fußgängerampel bleibt für zwölf Sekunden auf Grün. Dann wird mit „ldi acc0, RTRT" die Bedingung gesetzt, dass die Fußgängerampel Rot und die Autoampel auf Rot bleibt. Anschließend kommt mit „rcall wait_3_sec" wieder ein Aufruf, der drei Sekunden dauert. Anschließend wird mit „ldi acc0, RTGERT" die Bedingung gesetzt, dass die Fußgängerampel Rot und die Autoampel auf Rot-Gelb schaltet. Danach kommt mit „rcall wait_3_sec" wieder ein Aufruf, der drei Sekunden dauert. Zum Schluss ist das Programm beendet und es erfolgt ein Rücksprung auf „main". Programmteile, die immer wieder in unveränderter Form benötigt werden (Routinen), wird man zweckmäßigerweise ein einziges Mal erstellen und dann bei Bedarf lediglich in das Arbeitsprogramm des Anwenders einfügen.
Gründe hierfür sind:
Ganzen Artikel lesen...
- Wenn eine Reihe von Befehlen in einem Programm oft mit nur geringen Veränderungen wiederholt wird, verringern Routinen die Programmierarbeit und reduzieren die Fehlerhäufigkeit.
- Kommt ein Fehler in einer solchen Routine vor, muss nur eine einzige Korrektur durchgeführt werden (Verkürzung der Korrektur- und damit der Programmentwicklungszeit!).
- Eine Routine ist auch anderen Anwendern zugänglich.
Prinzipiell stehen zum Einbau solcher „Programmstücke" zwei verschiedene Methoden zur Verfügung:
- Der Anruf eines MAKRO und der eines
- UNTERPROGRAMMS (Subroutine)
Sowohl Makro als auch Unterprogramm sind Programmabschnitte, die über einen Anruf innerhalb des Arbeitsprogramms aktiviert werden können und über deren Definition im letzten Kapitel bereits gesprochen wurde. Die unterschiedliche Behandlung eines Makro und eines Unterprogramms durch den Assembler wie auch die unterschiedliche Abwicklung beider Verfahren kann man beim Ablauf des Arbeitsprogramms beobachten. Man erkennt, dass das Makro schon während der Übersetzung bei jedem Makroaufruf eingesetzt wird. Dadurch wird das ablauffähige Anwenderprogramm natürlich um so länger, je öfter darin ein Makroaufruf vorkommt.
Im Gegensatz dazu tritt ein Unterprogramm (Subroutine) nur ein einziges Mal in Erscheinung. Es bleibt als ein einziger, separater „Programmteil" bestehen, der bei jedem Subroutineaufruf ausgeführt wird, ohne dass seine Befehle in das Hauptprogramm eingefügt worden sind.Man erkennt hieraus, dass die Verwendung von Subroutinen günstiger ist, d. h. dass bei dieser Methode relativ zur Verwendung von Makros weniger Programmspeicherplatz aufgewandt werden muss, sobald der „Programmteil" mehr als einmal aufgerufen wird.
Da andererseits ein Makroaufruf im Allgemeinen weniger Zeit beansprucht als ein Subroutineaufruf, sind Makros günstiger, d.h. Makroaufrufe ermöglichen die Durchführung gleicher Aufgaben in relativ kürzerer Zeit, als dies durch Subroutineaufrufe möglich ist. Subroutinen wird man also einsetzen, wenn Routinen sehr häufig verwendet werden oder minimaler Programmspeicherbedarf wesentlich ist. Makros wird man im umgekehrten Fall einsetzen, wenn maximale Verarbeitungsgeschwindigkeit gefordert ist bzw. der Programmspeicherbedarf nicht ausschlaggebend ist.
Man wird häufig finden, dass spezielle Sequenzen von Befehlen mehrfach in einem Quellprogramm erscheinen. Wiederholte Befehlssequenzen können Forderungen unserer Programmlogik wiedergeben, oder sie können Unvollkommenheiten in dem Befehlssatz unseres Mikrocontrollers ausgleichen. Man kann das wiederholte Schreiben der gleichen Befehlssequenz vermeiden, wenn man ein Makro verwendet.
Makros gestatten die Zuweisung eines Namens zu einer Befehlssequenz.
Man kann dann den Makronamen im Quellprogramm verwenden, anstatt die wiederholte Befehlssequenz. Der Assembler wird den Makronamen durch die entsprechende Sequenz von Befehlen ersetzen. Dies wird in der Tabelle dargestellt. Makros sind nicht dasselbe wie Unterprogramme.
Ein Unterprogramm tritt nur einmal in einem Programm auf, und die Programmausführung verzweigt zu diesem Unterprogramm. Ein Makro wird zu einer tatsächlichen Befehlssequenz erweitert, jedes Mal wenn das Makro auftritt. Daher bewirkt das Makro keine Verzweigung.
Makros besitzen folgende Vorteile:
- Kürzere Quellprogramme.
- Bessere Programm-Dokumentation.
- Verwendung von fehlerfreien Befehlssequenzen. Sobald das Makro fehlerfrei gemacht wurde, ist man sicher, dass man eine einwandfreie Befehlssequenz bei jeder Verwendung des Makros zur Verfügung hat.
- Einfacher Austausch. Man ändert die Makrodefinition und der Assembler führt die Änderung aus, jedesmal wenn das Makro verwendet wird.
- Einschließen von Kommandos, Schlüsselworten oder anderen Computerbefehlen in den grundlegenden Befehlssatz. Man verwendet Makros zur Erweiterung oder Erläuterung des Befehlssatzes.
Die Nachteile von Makros sind:
- Wiederholung der gleichen Befehlssequenzen.
- Ein einzelnes Makro kann eine Vielzahl von Befehlen bilden.
- Mangel an Standardisierung.
- Mögliche Einflüsse auf Register und Flags, die vielleicht nicht deutlich festgelegt sind.
Ein Problem liegt darin, dass die in einem Makro verwendeten Variablen nur innerhalb dessen bekannt sind (d. h. sie sind eher „lokal" anstatt „global"). Dies kann häufig zu einer Verwirrung führen, ohne dass entsprechende Vorteile vorhanden sind. Man soll sich dieses Problem ständig bei der Verwendung von Makros vor Augen halten.
Die passende Ergänzung zu diesem Artikel:
| |  | Mikrocontroller in der Elektronik Buch, 236 Seiten, Softcover ISBN 978-3-645-65014-4 Versandkostenfrei* direkt beim Verlag bestellen
29,95 € 
|

Lernen Sie die ganze Vielfalt vom Franzis Buch- und Softwareverlag kennen