Unterprogramme

Unterprogramme sind wichtige Hilfsmittel bei der Mikrocontroller Programmierung. So kommen Unterprogramme z.B. bei größeren Anwendungen zum Einsatz. Diese werden nämlich als übersichtliche Module untergliedert, sodass der Überblick über die Gesamtanwendung erhalten bleibt. Zusätzlich erreicht man mit Unterprogrammen eine höhere Effizienz, wenn bestimmte Programmteile häufig verwendet werden müssen.

Ablauf eines Unterprogramm-Aufrufs

  1. Der erste Schritt beim Aufruf eines Unterprogramms ist der Aufruf-Befehl ansich. Beim Mikrocontroller 8051 ruft man beispielsweise ein Unterprogramm mit dem Befehl: „LCALL“ (oder auch nur „CALL) + dem Namen des Unterprogramms auf. Nun wird erst einmal die Adresse für den Rücksprung auf dem Stack gespeichert.
  2. Anschließend wird die Adresse des Unterprogramms ermittelt und angesprungen
  3. Nun folgt die Abarbeitung des Unterprogramms
  4. Aus dem Unterprogramm heraus gesprungen wird dann, wenn ein entsprechender Befehl interpretiert wird. Beim 8051 kann man z.B. durch den Befehl RET aus dem Unterprogramm wieder heraus springen. Dafür wird die Rücksprungadresse aus dem Stack geholt.
  5. Nach dem Rücksprung aus dem Unterprogramm folgt nun die ganz normale weitere Ausführung des Hauptprogramms

Probleme mit Unterprogrammen

Was sich in der Theorie einfach anhört, kann in der Praxis durchaus zu Problemen führen. Ein solches Problem tritt beispielsweise dann auf, wenn im Hauptprogramm und im Unterprogramm die gleichen Register benutzt werden. Hier kann es zu einer Verfälschung der Inhalte in den Registern kommen. Damit dies nicht passiert, sollte man die Register-Inhalte vor einem Unterprogramm-Aufruf auf jeden Fall sichern.

Der Mikrocontroller stellt dafür entsprechende Befehle bereit. Beim 8051 sind das die PUSH und POP-Befehle. Mit dem PUSH-Befehl kann der Inhalt eines Registers in den Stack geschrieben werden, mit dem POP-Befehl kann man diesen wieder aus dem Stack herausholen und so wiederherstellen.