Mikrocomputertechnik


Prof. Jürgen Plate

6 Ausblick: andere Controller

6.1 Atmel-Mikrocontroller

Die Atmel AVR ist eine 8-Bit-Mikrocontroller-Familie des US-amerikanischen Herstellers Atmel. Die Controller dieser Familie sind wegen ihres einfachen Aufbaus und ihrer leichten Programmierbarkeit auch bei Hobby-Anwendern weit verbreitet. Die Typen unterteilen sich in die Gruppen

Beispiel: Blockschaltung des ATTtiny

Die Atmel-Prozessoren besitzen eine RISC-Architektur und zeichen sich unter anderem durch eine relativ große Zahl von Universalregistern aus. Normalerweise wir ein Befehl in einem Taktzyklus ausgeführt. Je nach Typ besitzen sie

Beispiel: Pins des ATtiny

Beispiel: Pins des ATMega8

Um einen AVR-Prozessor zu betreiben ist eigentlich nur die Stromversorgung nötig. Der Chip wird mit einer stabilen Versorgungsspannung (2,7 bis 5 Volt, je nach AVR und Taktfrequenz) versorgt und erhält den üblichen Stützkondensator (100 nF), der möglichst nahe am AVR angebracht wird. Weiterhin ist ein Pull-Up-Widerstand für den Resetpin nötig (man könnte ihn weglassen, aber dadurch würde der Reset-Eingang sehr anfällig für Störungen. Bei den AVR Typen mit Analog-Digital-Wandler muss man die Pins AVCC und AGND anschließen (auch wenn die Analog-Schnittstelle nicht verwendet wird), da es sonst zu Fehlfunktionen der entsprechenden Ports kommen kann. AREF und AVCC werden an die Versorgungsspannung geklemmt, AGND an Masse.

Im Normalfall reicht der interne Oszillator für den Betrieb des AVR aus, lediglich wenn man eine höhere Taktfrequenz als 8 MHz oder eine größere Genauigkeit benötigt, muss ein Quarz angeschlossen werden. Die maximale Quarzfrequenz hängt auch von der Höhe der Versorgungsspannung ab.

Die Harvard-/RISC-Architektur führt auch zu einer Speicheraufteilung, die sich vom bisher behandelten 68HC11 unterscheidet. Die ersten 32 Bytes des Speichers werden von den "General Purpose Working Registers" (GPWR) belegt. Der darauf folgende 64 Byte lange Speicherbereich enthält die Konfiguration der Peripherie und die "General Purpose Input Output Register" (GPIO-Register), was den Portadressen beim 68HC11 entspricht. Ab Adresse 0X0060 beginnt dann der eigentliche Arbeitsspeicher.

Die Programmierung erfolgt in Assembler und C. Außerdem gibt es einen Basic-Dalekt (Bascom). Der Assembler kennt bis zu 120 Instruktionen (Rechnen, Sprünge, Bitmanipulation, Datentransfer, Kontroll-Funktionen).

Die Prozessoren besitzen ein serielles Programmierinterface, wodurch die Programmierung in der Schaltung möglich ist (ISP, In System Programming). Verwendet werden drei Ports (z. B. PB0, PB1 und PB2) sowie der Reset-Pin. Diese Ports und die zwei Betriebsspannungsanschlüsse wechseln beim Programmieren automatisch ihre Funktion und Richtung. Bei etlichen Type besteht die Wahl zwischen zwei Programmiermodi möglich (bei 12V am Reset-Eingang sind besondere Einstellungen zugänglich).

Beim seriellen Programmieren werden die Programmbits nacheinander, gesteuert durch einen von außen angelegten Takt am Pin SCK, über den Pin MOSI in ein internes Schiebregister eingeschoben und von dort in den Flash-Speicher kopiert. Das Beobachten des Programmiervorgangs, ebenso das Verifizieren bzw. Lesen des Flash-Speichers erfolgt über den Datenausgang MISO. Beim Programmieren werden also drei Signalleitungen benötigt: der Takt SCK, die Eingabedaten MOSI und die Ausgabedaten MISO. Wie oben erwähnt, werden für die Programmierung drei Standard-Ports verwendet. Man kann also das Programmieren in der Anwender-Schaltung durchführen. Allerdings ist dabei zu beachten, dass die dafür drei benötigten Pins entweder

Die Atmel Controller besitzen zudem einen reservierten Speicherbereich in welchen ein eigener Bootloader geladen werden kann, der dann automatisch bei einem RESET des Controllers ausgeführt wird. Der Bootloader kann über die Konfigurationsbits des Controllers (Fusebits) eingestellt werden. Mit den beiden Fusebits BOOTSZ0 und BOOTSZ1 (für Bootsize) kann die Grösse des Bootloaderspeichers eingestellt werden und das Fusebit BOOTRST aktivoert die Bootladefunktion. Dementsprechend ändert sich auch der Startpunkt nach einem Reset. Um den Bootloader (und auch den Programmspeicher) vor ungewolltem Überschreiben zu schützen, sind vier Bootloader Lockbits (BLB) vorgesehen, die jeweils einen Speicherbereiche mit einem Schreib-/Leseschutz versehen. Diese Lockbits verhindern aber nicht das Auslesen oder Beschreiben über die ISP-Schnittstelle. Mittels Bootloader kann der AVR-Prozessor beispielsweise auch Programme über eine serielle Schnittstelle laden (fast wie beim 68HC11).

Die Bedeutung der einzelnen Pins erschließt sich vollständig nur durch das Studium des Datenbuchs. An dieser Stelle soll jedoch eine kurze Zusammenfassung versucht werden. Dabei wird nur auf Pins mit speziellen Eigenschaften eingegangen, normale Ein- und Ausgänge werden nicht erwähnt. VCC, GND, AVCC und AREF dienen der Spannungsversorgung von Digital- und Analogteil des Controllers. Das Programmierinterface wird durch die Pins RESET, SS, MOSI, MISO und SCK gebildet. Diese Pins verbindet man mit dem Computer um ein Programm in den Controller zu laden. RXD und TXD betreffen die serielle Schnittstelle (USART). Die XTAL-Pins erlauben den Anschluss eines externen Quarzes oder sonstigen Taktgene-rators. Mit den OC-Pins kann ein pulsweitenmoduliertes Signal erzeugt werden. So kann man mit einem digitalen Pin analoge Signale erzeugen, indem ein Siebglied nachgeschaltet wird. Die ADC-Pins stellen die Eingänge des Analog-Digital-Wandlers dar.

Beispiel ATtiny13, einer der kleinsten AVR-Prozessor

Als Programmierbeispiel sollen hier die aus dem 68HC11-Praktikum bekannten Zeitschleifen dienen. Eine Zeitschleife mit einem 8-Bit-Register sieht in Assembler folgendermaßen aus:

    .equ c1 = 200      ; Anzahl Schleifendurchlaeufe
    ldi R16,c1         ; 1 Takt
Loop:                  ; Schleifenbeginn
    nop                ; 1 Takt
    nop                ; 1 Takt
    dec R16            ; 1 Takt
    brne Loop          ; 2 Takte wenn nicht Null, 1 Takt bei Null
Man sieht auch, dass bei einer RISC-Architektur in der Regel jeder Befehl nur einen Takt lang dauert. Wenn's länger dauern soll, nimmt man eine Zeitschleife mit einem 16-Bit-Doppelregister:
    .equ c1 = 0        ; laengste Dauer 2^16 Durchlaeufe
    ldi R25,HIGH(c1)   ; R25 laden, 1 Takt
    ldi R24,LOW(c1)    ; 1 Takt
Loop:                  ; Schleifenbeginn
    nop                ; 1 Takt
    nop                ; 1 Takt
    sbiw R24           ; 16-Bit-Dekrement, 2 Takte
    brne Loop          ; 2 Takte wenn nicht Null, 1 Takt bei Null
Damit sind wir beim beliebten "Hello World" für kleine Controller: Die im Sekundenrhytmus blinkenden LED an einem Port:
    .inc "tn13def.inc" ; Definitionen fuer einen ATtiny13
    .equ c1 = 60000    ; Bestimmt die Blinkfrequenz
    sbi DDRB,0         ; Portbit als Ausgang programmieren
Loop:
    sbi PORTB,0        ; Portbit auf high
    rcall Delay        ; UP-Aufruf
    cbi PORTB,0        ; Portbit auf low
    rcall Delay        ; UP-Aufruf
    rjmp Loop

Delay:                 ; Unterprogramm fuer Warteschleife
    ldi R25,HIGH(c1)   ; wie oben gezeigt
    ldi R24,LOW(c1)
Delay1:
    nop
    nop
    nop
    nop
    nop
    sbiw R24,1
    brne Delay1

Von Atmel selbst wird eine komplette Entwicklungsplattform angeboten (Assembler, Simulator usw.), die man von der Atmel-Webseite herunterladen kann. Zusätzlich existiert eine komplette C-Entwicklungsplattform auf der Basis des GNU-Compilers (Open Source). Näheres dazu liefert der Link zu "tuxgraphics.org" unten. Des weiteren wird noch ein Compiler für einen Basic-Dialekt namens BASCOM-AVR angeboten, der aber nicht kostenlos ist.

Für Einsteiger in den Bereich der Mikrocontroller und Elektronik ist besonders das Arduino-Projekt interessant, das eine günstige Entwicklungsplattform zur Verfügung stellt. Die Hardware-Seite besteht aus verschiedenen einfachen Controllermodulen, die über USB (Emulation einer seriellen Schnittstelle) mit dem PC kommunizieren. Die Softwareentwicklung erfolgt in einer integrierten Open-Source-Entwicklungumgebung, die bereits viele Bibliotheken für die Ansteuerung der Hardware mitbringt. Außerdem gibt es eine große Community, die dieses System einsetzt und unterstützt.

Literatur

Atmel-Webseite
Günter Schmitt: Mikrocomputertechnik mit Controllern der Atmel-AVR-RISC-Familie, Oldenbourg Verlag
Claus Kühnel: Programmieren der AVR-RISC-Mikrocontroller mit BASCOM-AVR, Skript Verlag Kühnel

Weiterführende Links

http://www.atmel.com/products/avr/
http://shop.avr-praxis.de/index.html
http://tuxgraphics.org/electronics/200904/avr-c-programming.shtml
http://imakeprojects.com/Projects/avr-tutorial/
/http://www.avr-projekte.de/
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial
http://www.mcselec.com (Bascom und Demo)

6.2 PIC-Microcontroller von Microchip

Von Microchip werden inzwischen mehr als 400 unterschiedliche Flash-Controller angeboten, die im Baukastensystem aus einem Prozessorkern, Speicher und einigen Peripheriemodulen zusammengesetzt sind. Anhand des Prozessorkerns kann man fünf Familien unterscheiden:

Die Bit-Angabe hat in diesem Fall ausnahmsweise nichts mit der Datenwortbreite des jeweiligen Controllers zu tun, sondern mit der Breite der Befehlsworte des PIC. Ein größerer Wert deutet also auf einen komplexeren Controller mit leistungsfähigerem Befehlssatz hin. Alle Typen der PIC16XX- und PIC18XX-Familien verfügen über einen sehr kompakten RISC-Befehlssatz, unterschiedlichste On-Chip Peripherie, verschieden ausgeführte Programm- und Datenspeicher sowie über Gehäuseausführungsvarianten. Die CPU dieser Mikrocontrollerfamilien zeichnet sich aus durch eine strikte Trennung von Programm- und Datenspeicher und durch die Möglichkeit, gleichzeitig auf diese Speicher über getrennte Busse zuzugreifen, (Harvard-Architektur). Die folgende Tabelle soll einen knappen Überblick aller PICs vermitteln:

12-Bit-Kernel 14-Bit-Kernel 16-Bit-Kernel
Datenwort 8 Bit
Befehlswort 12 Bit
Programmspeichergröße 256 .. 2k Worte
EEPROM-Größe 0
RAM-Größe 16 .. 134 Byte
Stack-Tiefe 2
Interrupts keine
max. Taktfrequenz 4 MHz .. 20 MHz
verschiedene Befehle ~33
Hardwaremultiplikation nein
Datenwort 8 Bit
Befehlswort 14 Bit
Programmspeichergröße 1 .. 8k Worte - segmentiert
EEPROM-Größe 0 .. 256 Byte
RAM-Größe 64 .. 368 Byte
Stack-Tiefe 8
Interrupts einfach
max. Taktfrequenz 4 MHz .. 20 MHz
verschiedene Befehle ca. 35
Hardwaremultiplikation nein
Datenwort 8 Bit
Befehlswort 16 Bit
Programmspeichergröße 4k .. 128k Byte - linear
EEPROM-Größe 0 .. 1024 Byte
RAM-Größe 256 .. 3936 Byte
Stack-Tiefe 31
Interrupts priorisiert
max. Taktfrequenz 4 MHz .. 40 MHz
verschiedene Befehle ca. 75
Hardwaremultiplikation ja 8 Bit
klein, billig, leistungsschwach - geeignet, um alte PIC-Software (12-Bit-PICs ohne Flash) weiter zu nutzen. Eingeführte Standardtypen, für die viele Anwendungen zur Verfügung stehen. Optimiert für den Einsatz von höheren Programmiersprachen.

Beispiel: Blockschaltung und Pins des PIC16F84



Ähnlich wie bei den Atmel-Prozessoren ist auch bei den PICs die Taktung recht einfach. Der Controller kann seinen Takt von einer externen Quelle erhalten oder mit einem internen Oszillator erzeugen. Letzterer kann entweder extern beschaltet werden (RC-Glied oder Quarz) oder der Takt wird komplett intern erzeugt. Dabei bietet nicht jeder PIC-Typ alle Möglichkeiten.

Wie man aus der Tabelle erkennen kann, gibt es für Assembler-Programmierer zwei Herausforderungen:

Als Beispiel für den Aufbau des Prozessors soll hier der Type 16Fxx dienen, dessen Blockschaltung und Pinbelegung oben abgebildet sind. Die PIC16xx-Mikrocontroller haben einen RISC-Befehlssatz mit nur 35 Befehlen, so dass die maschinennahe Programmierung in Assemblersyntax im Vergleich zu CPUs mit umfangreicheren Befehlssätzen relativ aufwendig ist. Alle Mitglieder der PIC16xx-Familie verfügen über Power-On Reset und Watchdog Timer. Unterschiede liegen vor allem in der verschiedenen Ausstattung mit On-Chip Peripheriekomponenten.

Die Mikrocontroller der PIC16F8x-Gruppe und der PIC16C84 sind nur mit einer geringen Anzahl von On-Chip-Komponenten ausgestattet, die aber für viele typische Mikrocontolleranwendungen völlig ausreichend ist. Er verfügt über zwei Ports mit insgesamt 13 Pins, die jedoch über eine relativ große Treiberfähigkeit verfügen, so dass LEDs problemlos direkt angeschlossen werden können. Ein 8-Bit-Timer mit programmierbarem Vorteiler (1:1, 1:2, 1:4 bis 1:256) kann für Zeitgeber bzw. Zählerfunktionen eingesetzt werden. Auch bei den PIC müssen On-Chip-Funktionen über ein Konfigurationswort definiert werden, welches beim Programmiervorgang des Zielcontrollers auf eine spezielle Speicherstelle geschrieben werden muss.

Bei der Programmierung spielt ein dem Akkumulator ähnliches Arbeitsregister W eine wichtige Rolle, mit dem alle arithmetischen und logischen Operationen durchgeführt werden. Dabei erfolgt die Verarbeitung der Daten prinzipiell in drei Schritten:

  1. Hole ein Byte aus dem RAM in das Arbeitsregister W
  2. Führe die gewünschte Operation aus
  3. Lege das Ergebnis im RAM ab
Neben einer direkten Datenadressierung im RAM und einer besonderen Adressierung von Tabellenelementen im Codespeicher gibt es noch eine indirekte Adressierungsart. Dazu wird in das FSR (File Select Register) die Adresse der entsprechenden RAM-Speicherzelle geschrieben. Über das IND-Register kann nun auf die RAM-Speicherzelle schreibend oder lesend zugegriffen werden. Der PIC 16F84 besitzt einen 13 Bit breiten Programmzähler, der einen Programmspeicher von 8k Worten adressieren könnte. Der Adressbereich 0x0000-0x03FF (1 K Worte) ist physikalisch implementiert. Der Resetvektor liegt auf der Adresse 0; der Interruptvektor auf der Adresse 4. Der Datenspeicher unterteilt sich in das RAM (68 x 8 Bit, Adressbereich von 0x0C–0x4F) und im unteren Speicherbereich (0x00–0x0B) die I/O-Register. Diese Register werden als Special-Function-Register (SFR) bezeichnet.
Das RAM wird auch als General-Purpose-Register (GPR) bezeichnet. Der Speicher ist in zwei Seiten (Bank 0 und Bank 1) unterteilt, die durch das Statusregister auswählbar sind. Bank 1 enthält die gleiche Anzahl von Speicherstellen wie Bank 0, wobei die General-Purpose-Register aus Bank 0 gespiegelt sind, also auf beiden Seiten erreichbar sind. Einige Register sind jedoch nur über eine Speicherbank zu erreichen. Dazu zählen das OPTION- und das TRIS-Register, die auf Bank 1 als normale Register zu erreichen sind.
Der 64 x 8 Bit große EEPROM-Bereich hat die Adressen 0x00–0x3F und ist sowohl lesbar als auch beschreibbar. Es bietet sich an, wenn Daten zu speichern sind, die auch nach dem Abschalten der Betriebsspannung erhalten bleiben müssen (z.B. Kalibrierdaten). Auf das EEPROM kann nicht direkt zugegriffen werden, sondern der Zugriff erfolgt über vier spezielle Register: EECON1, EECON2, EEADR, EEDAT.

Speicherbelegung des PIC16F84 (nach Microchip-Unterlagen)

Wie schon im Atmel-Abschnitt geschildert, verfügen auch die PIC-Prozessoren über die Möglichkeit der ISP-Programmierung. Dazu liefert Microchip eine passende Programmier-Hardware an. Derzeit aktuell ist der MPLAB PICkit 3 (weiterhin erhältlich ist der PICkit 2). Er ermöglicht das Debuggen und die Programmierung der PIC-Mikrocontroller mithilfe des MPLAB Integrated Development Environment (IDE). Der MPLAB PICkit 3 wird per USB-Schnittstelle am PC angeschlossen und verwendet zwei Portleitungen und den Reset-Anschluss zur Programmierung.

Literatur

Günter Schmitt: PIC-Mikrocontroller, Oldenbourg Verlag
http://www.microchip.com/

Weiterführende Links

http://www.microchip.com/
http://www.microchipdirect.com/
http://www.olimex.com/
http://www.sprut.de/electronic/pic/

6.3 MSP-430-Microcontroller von Texas Instruments

Dies ist eine relativ neue 16-Bit Mikrocontrollerfamile, die speziell für Lowpower-Anwendungen entwickelt wurde. Es handelt sich um Controller mit:

Blockschema des MSP430

Texas Instruments erweitert die Familie laufend, was auf einen großen Erfolg dieser Controllerlinie hindeutet. Der MSP430 besitzt eine Von-Neumann-Architektur. Die Größe des adressierbaren Speichers ist bei den meisten Typen auf 64 KByte limitiert. Je nach Modell können die Speichergrößen aber auch bis zu 256 KByte Flash und 16 KByte RAM umfassen. Bei allen Familienmitgliedern sind die untersten 2 KByte für interne Funktionen, z. B. einen Boot-Loader, reserviert. Seit 2007 wird auch eine Fami-lie mit der so genannten MSP430X-CPU angeboten. Deren Speichermodell kann bis zu 1 MByte Speicher adressieren (20 Bit Adressbus). Daher sind hier auch alle Register 20 Bit breit.

Der Hardwaremultiplizierer erlaubt die Multiplikation von 8-Bit- und 16-Bit-Zahlen (mit/ohne Vorzeichen), wobei als Ergebnis eine bis zu 32 Bit große Zahl entsteht. Der jüngste Typ kann 32-Bit-Operanden multiplizieren (64-Bit-Resultat). Er beherrscht weiterhin Multiplizieren und Addieren (MAC) wie ein DSP. In den untersten 16 Bytes sind spezielle Register (SFR, Special Function Register) für die Interrupt- und "Modul"-Steuerung eingeblendet. Die Register der 8-Bit-Peripherie belegen die folgenden Adressen ($010 bis $0FF). Die darauf folgenden 255 Bytes ($100 bis $1FF) sind für 16-Bit-Peripherie reserviert (Speicherzugriff wortweise). Der Mikrocontroller verfügt über 16 Interrupt-Vektoren, welche zum Teil maskierbar sind. Beim MSP430 sind nur die beiden höchsten Prioritäten nicht maskierbar, somit können nur diese beiden nicht in ihrer Funktion beeinflusst werden.

Der Takt kann auf drei Arten erzeugt werden, die je nach Bedarf sehr geringen Stromverbrauch (32,768 kHz in Form eines Uhrenquarz), sehr schnelles Aufwachen nach einem Interrupt (interner RC-Oszillator) oder hohe Frequenz (bis zu 16 MHz) ermöglichen. Je nach Typ gibt es einem oder zwei Eingänge für Quarzoszillatoren sowie einen internen RC-Oszillator, dessen Frequenz in weiten Bereichen eingestellt werden kann. Die MSP430-Serie wurde konsequent für batteriebetriebene Lowpower-Anwendungen konzipiert. Typische Anwendungen sind Geräte mit Langzeitbatterie, wie zum Beispiel Energiezähler, Datenlogger oder auch Blutdruckmessgeräte. Die Peripherieeinheiten der Controller sind recht leistungsfähig und ihre Programmierung relativ einfach. Nachteilig für den Bastler ist lediglich die Tatsache, dass die Controller nur SMD-Bauformen (SO- oder TQFP-Gehäuse) erhältlich sind.

Neben Parallel- und Seriellports sind die Mitglieder der MSP430-Familie (je nach Typ) mit Analogperipherie bestückt. Die Analog-Digital-Wandler haben eine Auflösung von 10, 12, 14 oder 16 Bit, wobei je nach Typ des MSP430 als Wandlungsverfahren suk-zessive Approximation, Rampen- oder Sigma-Delta-Verfahren eingesetzt wird. Die Digital-Analog-Wandler haben eine Auflösung von 8 oder 12 Bit. Als Referenzspan-nung können hier wie bei den Komparatoren und A/D-Wandlern die internen oder externen Referenzen benutzt werden. Der Ausgangsverstärker kann automatisch kalib-riert werden, damit die Ausgangsspannung korrekt den digitalen Werten folgt. Der D/A-Wandler kann mit bis zu 550 kHz getaktet werden.

Der MSP430 besitzt 16 Register, wobei vier von ihnen fest belegt sind. Register 0: Program-Counter, Register 1: Stack-Pointer, Register 2: Status-Register und Register 3: Constant-Generator. Diese vier Register haben spezielle Funktionen, sind aber wie alle anderen zwölf Register auch frei benutzbar. Der MSP430 beherrsch die komplette Palette der Adressierungsarten: Register-Adressierung, indizierte Adressierung, absolu-te Adressierung sowie indirekte Adressierung mit und ohne Autoinkrement. Der Befehlssatz beinhaltet 27 Grundbefehle und 24 "emulierte" Befehle, die aus den Grundbefehlen zusammengesetzt sind. Die Dauer der Befehlsabarbeitung dauert befehlsabhängig zwischen eins und sechs Taktzyklen. Der Prozessor ist in C und Assembler programmierbar. Für die Softwareentwicklung stehen verschiedene Compiler zur Ver-fügung. Auf der Website von TI gibt es eine auf 4 KByte begrenzte Version des IAR-C-Compilers (Kickstart-Version), der neben dem Compiler auch eine vollständige IDE mit Debugger usw. bietet. Seit einiger Zeit stellt TI auch eine vollständige Entwicklungsumgebung für den MSP430 auf Eclipse-Basis unter dem Namen "CCEssentials" zur Verfügung. Diese Entwicklungsumgebung enthält einen C-Compiler, der auf 16 KByte begrenzt ist. Außerdem gibt es für die MSP430-Serie auch eine Version des GCC-Compilers inklusive Debugger für Linux und Windows.

Literatur:

Lutz Bierl: Das große MSP430 Praxisbuch, Franzis-Verlag
Matthias Sturm: Mikrocontrollertechnik am Beispiel der MSP430-Familie, Hanser-Verlag
Chris Nagy: Embedded Systems Design Using the TI MSP430 Series, Nownos

Weiterführende Links

Mikrocontroller-Net
Entwicklungsboard für knapp 5 Euro
University of Colorado
http://www.olimex.com/

6.4 8051-Microcontroller

Bei der 8051-Familie handelt es sich um 8-Bit-Mikrocontroller der ersten Generation (Anfang der 1980er Jahre) von Intel. Trotzdem werden Prozessoren mit 8051-Kern nach wie vor von verschiedenen Herstellern produziert. Eigentlich ist der 8051 für heutige Verhältnisse zu langsam und nicht mehr zeitgemäß. Der große Vorteil der 8051-Familie begründet sich durch die große Auswahl an Controllern mit sehr unterschiedlicher Hardwareausstattung. So gibt es sie mit SPI-, I2C-, CAN-, USB-, RS232-, Profibus-, LIN- oder Ethernetschnittstelle, mit Analog-Digital- und Digital-Analogwandlern, Timern, Capture-and-Compare-Einheiten usw. Softwareseitig sind alle diese Controller kompatibel mit dem Ur-8051, solange die spezielle Erweiterungen der neueren Typen nicht verwendet werden. Aufgrund der unterschiedlichen Befehlslängen von einem bis zu drei Byte sowie den unterschiedlichen Ausführungszeiten für einen Befehl handelt es sich eindeutig um eine CISC-Architektur. Das folgende Bild zeigt die Blockschaltung des Prozessors und einige Erweiterungen.

Blockschema des 8051

Aktuellere Vertreter dieser Familie sind z. B. die MicroConverter von Analog Devices, die AT89-Familie von Atmel, die MSC12-Familie von Texas Instruments oder die DS89C430 von Maxim (Dallas). Allen Modellen ist gemeinsam:

Ein Befehlszyklus entspricht in der ursprünglich von Intel entwickelten Struktur einem bis drei Maschinenzyklen. Ein Maschinenzyklus entspricht 12 Taktzyklen. Heute übliche Varianten des 8051 kommen hingegen meist mit nur zwei Taktzyklen pro Maschinenzyklus aus. Damit ist bei gleicher Taktfrequenz eine deutlich höhere Befehlsabarbeitung möglich. Eine Besonderheit dieses Prozessors ist der Bitprozessor, der eine schnelle und einfache Bitmanipulation erlaubt.

Später wurde sogar eine Version des 8051 mit integriertem EEPROM und BASIC-Interpreter unter der Typenbezeichnung 8052AH angeboten, die es erlaubte über die serielle Schnittstelle zu kommunizieren und Programm einzugeben und diese dann im internen EEPROM abzulegen - fast wie bei den frühen Heimcomputern.

Darüber hinaus gibt es von verschiedenen Firmen erweiterte MCS-51-Mikrocontroller, z. B. die von Infineon in NMOS-Technik produduzierten Modelle 80515 (8192 Bytes ROM, 256 Bytes RAM, drei 16-Bit-Timer, UART, zwei externe Interruptquellen, PWM, 8-fach-A/D-Wandler) oder 80535 (externes ROM/EEPROM, 256 Bytes RAM, drei 16-Bit-Timer, UART, zwei externe Interruptquellen, PWM, 8-fach-A/D-Wandler).

Wegen der großen Verbreitung der 8051-Familie gibt es auch eine Vielzahl von synthetisierbaren MCS-51-Implementierungen. Diese sind als IP-Cores in einer Hard-warebeschreibungssprache wie beispielsweise VHDL verfügbar. Sie eignen sich für den Einsatz in FPGAs und anwendungsspezifischen integrierten Schaltungen (ASICs). Typische Anwendungsbeispiele sind USB-Controller, wie sie in Druckern oder Schnittstellenadaptern eingesetzt werden. In diese sind zur Steuerung der diversen Protokolle MCS-51-Mikrocontroller integriert.

Literatur:

Mikrocomputer SAB 8051 Befehlsliste. Hrsg. von der Siemens AG
Andreas Roth: Das Microcontroller Kochbuch MCS51, mitp Verlag
J. Walter: Mikrocomputertechnik mit der 8051-Controller-Familie, Springer 2008

Weiterführende Links

Wikipedia
8051 Projects
Paul's 8051 Tools, Projects and Free Code
8051 Befehlsliste

Zum vorhergehenden Abschnitt Zum Inhaltsverzeichnis Zum nächsten Abschnitt


Copyright © FH München, FB 04, Prof. Jürgen Plate