Start Mikrocontroller Grundwissen
06 | 02 | 2012
Grundwissen

Was ist ein Microcontroller?

Bei den PICS handelt es sich um Mikrocontroller, d.h. hier ist im Baustein ein Prozessor und eine Peripherie gleich integriert. Beispielsweise gehören zur Peripherie evtl. ein AD-Wandler , Programmspeicher u.Ä. Der Prozessor besteht aus einem Datenbus und getrennt davon einem Befehlsbus. Der Datenbus bei den Mikrocontrollern mit Flash-Speicher ist 8 Bit breit, der Befehlsbus ist 12 Bit (10F...., 1xF....), 14 Bit (PIC12F675, allgemein 12F..., 16F....), 16 Bit (18F....) und auch die neueren mit 24-Bit breitem Befehlsbus. Mit den Bausteinen mit 24-Bit breitem Befehlsbus wurde auch der Datenbus auf 16 Bit erweitert.

Die getrennten Busse (Harvard -Architektur) führen zu einer schnelleren Programmausführung. Diese Trennung von Daten- und Programmspeicher ist typisch für die Pics. Normale PC-Prozessoren kennen diese Trennung nicht (von Neumann-Architektur). Daten und Programmspeicher dürfen hier in einem Speicherbereich liegen.

Was ist Maschinencode?

Jeder Prozessor verfügt über eine Anzahl von Befehlen (Maschinencode), die er direkt durchführen kann. Die Befehle sind durchnummeriert. Wollen wir ein Programm schreiben, so müssen wir die Befehle mit ihren Nummern in einer linearen Abfolge aufschreiben und durch ein Programmiergerät in den Programmspeicher ablegen. Ist dies geschehen, so werden die Befehle nacheinander abgearbeitet. Die Befehle bestehen aus einer Abfolge von 0-en und 1-en mit einer festen Länge (beim 12F675 sind es 14 Bit). Der PIC 12F675 kennt 35 verschiedene Befehle, dies gilt auch für die anderen „14-Bit-Pics“. Die Unterstützung bestimmter Ausstattungsmerkmale der PICs, beispielsweise serielle Schnittstelle, AD-Wandler u.ä. , geschieht durch die Konfiguration bzw. Auswertung von bestimmten dafür reservierten Spezialregistern im Datenspeicher.

Soll ein Befehl ausgeführt werden, so müssen die 14-Bit (12F675) an den Befehlsbus angelegt werden. 0 entspricht hier dem „Spannungswert 0“ und 1 einer geeigneten positiven. Spannung. In dem Register PC (ProgramCounter) zusammengesetzt aus den unteren 8 Bits (Register PCL) und den oberen 5 Bits (Register PCLATH) des PICs steht die aktuelle Speicheradresse des Befehls. Der ProgramCounter hat also eine Bit-Breite von 13 Bit. Es können also damit 213 = 8kB Programmschritte abgearbeitet werden. Hat der Zähler seine höchstmögliche Zahl erreicht, fängt er wieder von vorne an. Mit jedem Taktzyklus wird die Adresse um 1 erhöht, so dass der nächste Befehl abgearbeitet werden kann. Bei einem RESET wird der ProgrammCounter auf 0 gesetzt. Der Takt wird vorgegeben von einem Taktgeber (auch Oszillator genannt) . Intern hat der PIC12F675 einen Taktgeber von 4Mhz integriert. Er kann aber auch von außen mit einem externen schnelleren Oszillator versehen werden. Auf diese Weise ist eine Taktgeschwindigkeit von bis zu 20MHz möglich.

Was ist bzw. macht ein Assembler?

Ein Assembler ist ein Übersetzungsprogramm. Er übersetzt Assemblercode in Maschinencode. Da Maschinencode nur schwer gelesen werden kann, hat man eine 1:1 Umsetzung von Maschinencode und „umgangssprachlichen“ Elementen gewählt. Hinzu kommen weitere Kontrollanweisungen, die das Programmieren vereinfachen sollen. Will man sehr maschinennah, d.h. effizient programmieren, so wird in der Regel ein Assembler eingesetzt. Will man möglichst schnell Programmlösungen erarbeiten, die aber nicht so hohe Ansprüche an Effizienz stellen, so wird man eine höhere Programmiersprache wie PASCAL, C, C++, FORTH u.A. wählen.

Beispielsweise hat der Befehl mit der Abfolge 00 0000 1xxxxxxx den Namen MOVWF f. x kann hierbei ein beliebiger binärer Wert (0 bzw. 1) sein, MOVWF heißt hier, „bewege den Inhalt vom Arbeitsregister W nach Speicher f“, f ist ein 8-Bit breiter Datenspeicher. So wirklich sinnvoll ist dieser Name nicht, da der Inhalt des Arbeitsregisters W durch den Befehl nur kopiert wird, aber wir können uns den Namen gut merken, die Binärzahl sich zu merken und dazu noch andere Befehle ist hingegen schwerer.

Datenspeicher und Programmspeicher sind klar voneinander getrennt. f besteht aus 7 Bits (also sieben 0-en bzw. 1-en). Der Binärwert 00 0000 1 1011001 würde also bedeuten, bewege den Inhalt von Speicher W ( 8 Bit) nach Speicher 1011001. Mit 7 Bit können wir nur 128 (27=128) verschiedene Zahlen darstellen, das wären also 128 Speicheradressen. Das ist etwas wenig Speicherplatz, wenn man bedenkt, dass hiermit zu den von einem selbst genutzten Speichern auch noch Konfigurationspeicher des PICs angesprochen werden müssen. Die Firma Microchip hat den Speicherraum, auf den der Nutzer zugreifen kann, dadurch erweitert, dass zusätzlich zwei Bits bereitgestellt werden, die im Speicher mit dem Namen STATUS stehen, die Bits haben die Bezeichnungen RP0 und RP1. Diese beiden Bits bestimmen die beiden höchsten Bits der Speicheradresse, also sind hiermit 512 (9 Bits) Speicheradresse zu erreichen. Auf diese Weise erhalten wir also maximal 4 Speicherblöcke, die als Bänke bezeichnet werden. Mehr gibt es nicht bei den PICS mit 14-Bit Befehlslänge. Der PIC 12f675 bietet sogar nur 64 Byte zu freien Nutzung. Dieser Speicherplatz liegt in verteilt auf zwei Bänke, so dass hier nur ein Bit (RP0) verändert werden muss, um auf den entsprechenden Speicher zuzugreifen. Bestimmte Register können bankunabhängig gewählt werden. Der PIC16F877A benutzt beide Bits (RP1 und RP0), so dass hier vier Bänke ansprechbar sind.

  • Verschiedene Microcontroller verfügen in der Regel über unterschiedliche oder zumindest abgewandelte bzw. erweiterte Befehlssätze welche sich den jeweiligen Datenblättern der Controller entnehmen lassen. Für die auf suncol.de vorgestellten Microcontrollern sowie mit denen welchen wir in den einzelnen Lerneinheiten und Beispielen arbeiten, haben wir die jeweiligen Datenblätter (in Bezug auf die Befehlssätze) ins Deutsche übersetzt sowie verschiedene Informationen und Hinweise gegeben welche als Hilfe dienen sollten.
  • Es bestehen bereits Referenzen zu folgenden PIC:
1 Pics, Bits, Bytes und der Aufbau des Befehlssatzes verdeutlicht am PIC12F675 Benno Buhlmann