32
Hochschule Karlsruhe Fakultät Elektro- und Informationstechnik Studiengang Energie- und Automatisierungstechnik Dr. J. Hülsemann Inhalt: 4 Architektur eines Mikrocontrollers, Beispiel: C517 ................................... 2 4.1 Funktionselemente des Mikrocontrollers C517 .............................................. 5 4.2 Aufbau eines Mikrocomputersystems mit dem 80535.................................... 6 4.3 Programmiermodell des C517......................................................................... 9 4.4 Adressierung der Operanden ......................................................................... 13 5 Hilfsmittel zur Erstellung und zum Test von Assemblerprogrammen...... 26 5.1 Programmentwicklung .................................................................................. 26 5.2 Test von Assembler-Programmen ................................................................. 28 Skriptum „Mikrocontroller-Systeme“ Kapitel 4: Architektur eines Mikrocontrollers am Beispiel C517 Kapitel 5: Hilfsmittel zur Erstellung und zum Test von Assemblerprogrammen

Skriptum „Mikrocontroller-Systeme“ Kapitel 4geju0001/Mikrocontroller-Skript/4_5... · Mikrocontroller 4.1 Funktionselemente des Mikrocontrollers C517 Seite 2 von 32 HS Karlsruhe,

  • Upload
    others

  • View
    6

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Skriptum „Mikrocontroller-Systeme“ Kapitel 4geju0001/Mikrocontroller-Skript/4_5... · Mikrocontroller 4.1 Funktionselemente des Mikrocontrollers C517 Seite 2 von 32 HS Karlsruhe,

Hochschule Karlsruhe Fakultät Elektro- und Informationstechnik Studiengang Energie- und Automatisierungstechnik Dr. J. Hülsemann

Inhalt:

4 Architektur eines Mikrocontrollers, Beispiel: C517 ...................................2

4.1 Funktionselemente des Mikrocontrollers C517 ..............................................5 4.2 Aufbau eines Mikrocomputersystems mit dem 80535....................................6 4.3 Programmiermodell des C517.........................................................................9 4.4 Adressierung der Operanden.........................................................................13

5 Hilfsmittel zur Erstellung und zum Test von Assemblerprogrammen......26 5.1 Programmentwicklung ..................................................................................26 5.2 Test von Assembler-Programmen.................................................................28

Skriptum „Mikrocontroller-Systeme“

Kapitel 4: Architektur eines Mikrocontrollers

am Beispiel C517

Kapitel 5: Hilfsmittel zur Erstellung und zum Test von

Assemblerprogrammen

Page 2: Skriptum „Mikrocontroller-Systeme“ Kapitel 4geju0001/Mikrocontroller-Skript/4_5... · Mikrocontroller 4.1 Funktionselemente des Mikrocontrollers C517 Seite 2 von 32 HS Karlsruhe,

Mikrocontroller 4.1 Funktionselemente des Mikrocontrollers C517 Seite 2 von 32

HS Karlsruhe, Studiengang Energie- und Automatisierungstechnik Dr. J. Hülsemann

V 1.00

4 Architektur eines Mikrocontrollers, Beispiel: C517 • Abbildung 4-1 zeigt - auf dem Stand von 1982 - die "Stammbäume" der Intel-

Prozessoren. der im vorigen Kapitel betrachtete 8086 ist hier in die Reihe der Standard-Mikroprozessoren eingereiht. Dieser Stammbaum begann mit dem ersten 8-Bit-Prozessor von Intel, dem 8080. Dieser wurde aufwärtskompatibel weiterentwickelt, bis mit dem 8086 eine neue Familie begründet wurde, deren Maschinenbefehlssatz noch heute in den sog. 80x86-Prozessorarchitekturen zu finden ist. Der Erfolg dieser Familie ist zum einen in dieser Kompatibilität, zum anderen in der Steigerung der Leistungsfähigkeit zu suchen.

• Die Abzweigung des 8080/8085-Stammbaumes in Richtung geringerer Leistung und noch dazu inkompatibel im Jahr 1976/77 markiert das Auftreten des ersten "Single Chip Mikrocomputers", dem 8048: Ein Mikroprozessor wird zusammen mit weiteren Peripheriebausteinen auf einem Chip integriert.

Abbildung 4-1: Intel-Produktübersicht (1982)

• Eine der am weitesten verbreitete Mikrocontroller-Familie basiert auf dem 8051 (ca. 250 Varianten werden derzeit hergestellt, z.B. von Infineon, Analog Devices, Atmel, Philips usw.).

• Alle "Familienmitglieder" besitzen denselben Befehlssatz!

Single Chip Mikro-computer: Mikro-controller 8048 / 8051 8051-Familie

Page 3: Skriptum „Mikrocontroller-Systeme“ Kapitel 4geju0001/Mikrocontroller-Skript/4_5... · Mikrocontroller 4.1 Funktionselemente des Mikrocontrollers C517 Seite 2 von 32 HS Karlsruhe,

Mikrocontroller 4.1 Funktionselemente des Mikrocontrollers C517 Seite 3 von 32

HS Karlsruhe, Studiengang Energie- und Automatisierungstechnik Dr. J. Hülsemann

V 1.00

• Mit den Mikrocontrollern war der Rechnereinsatz auf extrem kleinem Platz möglich: Es war kein externes BUS-System mit externen Bausteinen mehr nötig; digitale und analoge Signale konnten direkt an den Mikrocontroller angeschlossen werden, da Portbausteine auf dem Chip vorhanden waren, RAM- und ROM-Speicher wurden ebenfalls integriert- lediglich die Stromversorgung und gegebenenfalls ein externer Quarz wurde benötigt.

• Einsatzbereiche für Mikrocontroller:

Auto-Elektronik (ABS, ESP, Airbag, Motorsteuerung..) Datenverarbeitung (Laserdrucker, Festplattensteuerung,

Netzwerkkarten, Kopier- und Faxgeräte,...) Konsumgüter (Waschmaschine, Trockner, Mikrowellengeräte,

Videorecorder, Schnurlose Telefone, Mobiltelefon, Walkman, PDA,...)

Industrielle Steuerung / Regelung (Roboter, Elektromotoren, Umrichter....)

Zusammengefasst als "Embedded Control"

• Anforderungen an Mikrocontroller:

Günstiges Preis-/Leistungsverhältnis (Stückzahlen!) Geringe Systemgröße Modulares "Baukastensystem" der Controller-Familie Umfangreiche I/O-Funktionalität Echtzeitverhalten teilweise hohe Rechenleistung möglichst einfache Bitverarbeitung geringer Entwicklungsaufwand

• Ein Beispiel für die"8051"-Mikrocontroller-Familie zeigt die folgende Abbildung:

Abbildung 4-2: 8051-Familie (Siemens, Stand ca. 1990)

• Die beiden folgenden Abbildungen zeigen die Architekturen von zwei Beispielen aus dem Mikrocontroller-Stammbaum der "8051". Ein Beispiel stammt vom unteren Ende, das andere vom oberen Ende des Stammbaumes.

Embedded Control: Einsatz-bereiche Anforderungen

Page 4: Skriptum „Mikrocontroller-Systeme“ Kapitel 4geju0001/Mikrocontroller-Skript/4_5... · Mikrocontroller 4.1 Funktionselemente des Mikrocontrollers C517 Seite 2 von 32 HS Karlsruhe,

Mikrocontroller 4.1 Funktionselemente des Mikrocontrollers C517 Seite 4 von 32

HS Karlsruhe, Studiengang Energie- und Automatisierungstechnik Dr. J. Hülsemann

V 1.00

Abbildung 4-3: Aufbau des 8051

Abbildung 4-4: Aufbau des 80537

• Deutlich sichtbar: Eine Mikrocontrollerfamilie besteht aus einem immer gleichen Prozessorkern ("Core"), der von mehr oder weniger, oft sehr speziellen Peripheriebausteinen umgeben ist.

• Der Anwender sucht aus diesem "Baukasten" den Mikrocontrollertyp mit der jeweils am besten passenden Architektur aus; wächst die Aufgabenstellung, so kann er Befehlskompatibel zum nächstgößeren Typen wechseln.

Mikro-controller-varianten

Page 5: Skriptum „Mikrocontroller-Systeme“ Kapitel 4geju0001/Mikrocontroller-Skript/4_5... · Mikrocontroller 4.1 Funktionselemente des Mikrocontrollers C517 Seite 2 von 32 HS Karlsruhe,

Mikrocontroller 4.1 Funktionselemente des Mikrocontrollers C517 Seite 5 von 32

HS Karlsruhe, Studiengang Energie- und Automatisierungstechnik Dr. J. Hülsemann

V 1.00

4.1 Funktionselemente des Mikrocontrollers C517

• Der im Mikrocontroller-Labor eingesetzte Prozessortyp ist im folgenden Blockschaltbild dargestellt:

Abbildung 4-5: Blockschaltbild 80C517

• Wie in Kapitel 3 für den 8086, werden im Folgenden die Funktionselemente des 80C517 (inzwischen als "C517" bezeichnet) kurz vorgestellt.

Kurze Übersicht über die Funktionselemente: CPU: 8051

80C517 = C517

Page 6: Skriptum „Mikrocontroller-Systeme“ Kapitel 4geju0001/Mikrocontroller-Skript/4_5... · Mikrocontroller 4.1 Funktionselemente des Mikrocontrollers C517 Seite 2 von 32 HS Karlsruhe,

Mikrocontroller 4.2 Aufbau eines Mikrocomputersystems mit dem Seite 6 von 32

HS Karlsruhe, Studiengang Energie- und Automatisierungstechnik Dr. J. Hülsemann

V 1.00

Ports: 9 x 8 Digitale Ein- bzw. Ausgänge (parametrierbar), davon 12 Bit als Analogeingänge verwendbar (im Multiplex-Betrieb) Timer 3 Zähler-/Zeitgeberbausteine Watchdog Timer zur Überwachung des Programmablaufes Interrupt Controller zur Verwaltung der Interrupts (siehe Kapitel 8) Serial Channel Zwei Serielle Schnittstellen-Controller ("UART", siehe Kapitel 9) Div./Mul.-Unit Zusätzliche Recheneinheit für schnelle 32-Bit Multipl./Division Capture/ Compare Unit Wird in Verbindung mit einem freilaufenden Timer z.B. zur genauen Ermittlung bzw. Bildung von Zeiten ohne CPU- Belastung verwendet. Nutzung auch für PWM möglich. OSC&Timing Oszillator für Takte RAM Nur 256 Byte auf dem Chip! ROM 32 kByte auf dem Chip möglich (versionsabhängig)

• Die sichtbare Einschränkung von ROM- und RAM-Speicher auf dem Chip hat in der 8051-Familie zu einer Besonderheit geführt: Diese Controller bieten die Möglichkeit, einen externen Daten- und Adressbus anzuschließen. Damit kann der Speicher auf dem Chip extern ergänzt werden und somit natürlich auch ein komplettes Mikrocomputersystem aufgebaut werden..

4.2 Aufbau eines Mikrocomputersystems mit dem 80535

• Die folgende Abbildung zeigt ein Mikrocomputersystem, das aus einem 80535 mit zusätzlichem externen EPROM und RAM als Experimentierplatine aufgebaut wurde (Quelle: Prof. Jürgen Walter, FH Karlsruhe). Darin arbeitet der 80535 wie ein "normaler" Mikroprozessor (kein interner Programmspeicher), an den ein Datenbus (dunkler Pfeil) und ein Adressbus (heller Pfeil) angeschlossen werden. Die Portsignale sind teilweise an Taster und LEDs der Experimentierplatine angeschlossen, teilweise werden sie über eine Steckerleiste zur weiteren Anschaltung anderer Platinen geführt.

• Für den externen Datenbus (8 Bit) wird das Port 0 verwendet.

• Für den externen Adressbus (16 Bit) werden Port 0 (Low Byte ADB) und Port 2 (High Byte ADB) verwendet. Da Port 0 gleichzeitig als Datenbusanschluss dient, muss Port 0 zwischen DB- und ADB-Verwendung zeitlich nacheinander umgeschaltet werden, dies nennt man "Zeitmultiplexverfahren".

Externer ADB/DB ADB und DB über Port 0 und Port 2

Page 7: Skriptum „Mikrocontroller-Systeme“ Kapitel 4geju0001/Mikrocontroller-Skript/4_5... · Mikrocontroller 4.1 Funktionselemente des Mikrocontrollers C517 Seite 2 von 32 HS Karlsruhe,

Mikrocontroller 4.2 Aufbau eines Mikrocomputersystems mit dem Seite 7 von 32

HS Karlsruhe, Studiengang Energie- und Automatisierungstechnik Dr. J. Hülsemann

V 1.00

• Da angeschlossene Speicher (oder andere Busteilnehmer) zur Dekodierung der Adressen natürlich ein stationäres Adress-Signal erwarten, muss das Low Byte des ADB zwischengespeichert werden: dazu dient das "Adress-Latch". Das Zeitmultipexverfahren ist in Abbildung 4-7 dargestellt.

• Grund für diese Besonderheit: Einsparung der PINs für den kompletten Adressbus und damit Reduktion von Gehäusekosten und -Größe des Prozessors. Damit ist der 8051 sowohl für echte "Single Chip"-Anwendungen, wie auch für Mikrocomputersysteme geeignet.

Abbildung 4-6: Blockschaltbild Mikrocomputer "EURO535" (/J.Walter/)

Page 8: Skriptum „Mikrocontroller-Systeme“ Kapitel 4geju0001/Mikrocontroller-Skript/4_5... · Mikrocontroller 4.1 Funktionselemente des Mikrocontrollers C517 Seite 2 von 32 HS Karlsruhe,

Mikrocontroller 4.2 Aufbau eines Mikrocomputersystems mit dem Seite 8 von 32

HS Karlsruhe, Studiengang Energie- und Automatisierungstechnik Dr. J. Hülsemann

V 1.00

Port 0 Adress-

latch

t 1 1010 0101

ALE 1

1010 0101 1010 0101

1010 0101

Port 0 Adress-

latch

t 2 xxxx xxxx

ALE 0

1010 0101 1010 0101

xxxx xxxx

Port 0 Adress-

latch

t 3 1011 1101

ALE 0

1010 0101 1010 0101

1011 1101

Abbildung 4-7: Zeitmultiplexverfahren (Beispiel: Write)(/J.Walter/)

Erklärung: Zum Zeitpunkt t1 gibt der Prozessor eine Adresse an Port 0 und Port 2 aus (Port2 ist hier nicht dargestellt). Das Low Byte dieser Adresse wird mit dem Signal "Adress Latch Enable" (ALE=1) in das Adress-Latch übernommen und von hier aus dauerhaft gehalten: siehe Zeitpunkt t2 . Zum Zeitpunkt t3 gibt der Prozessor ein Datum am Port 0 aus, dieses Port bildet jetzt den Datenbusanschluss, über den dann das Datum vom adressierten Teilnehmer übernommen werden kann.

• Eine weitere Besonderheit dieses Prozessors ist das Signal "Program Store Enable" (PSEN), das in Abbildung 4-6 vom Prozessor zu einer externen Adress-Logik führt. Diese bildet Signale zur Freigabe des externen EPROM- und RAM-Speicherchips (/CE (Chip Enable) und /CS (Chip Select)-Signale). (Weitere Details: siehe /J. Walter/).

• Das PSEN-Signal wird immer dann aktiviert, wenn der Prozessor auf den Programmspeicher im externen Adressraum zugreift, nicht jedoch, wenn auf den Datenspeicher im externen Adressraum zugegriffen wird.

• Die 8051-Prozessorarchitektur unterscheidet also mit einem eigenen Steuersignal zwischen Daten- und Programmspeicherzugriffen; beide Speicher sind aber an dem gemeinsamen Daten-/Adressbus angeschlossen. Dies wird gelegentlich als "Harvard-Architektur" bezeichnet, ist aber genaugenommen eine "modifizierte Harvard-Architektur" (zu den Architekturmerkmalen Harvard /von Neumann: siehe Kapitel 9.5).

Zeitmultiplex für den Adressbus

PSEN-Signal

Page 9: Skriptum „Mikrocontroller-Systeme“ Kapitel 4geju0001/Mikrocontroller-Skript/4_5... · Mikrocontroller 4.1 Funktionselemente des Mikrocontrollers C517 Seite 2 von 32 HS Karlsruhe,

Mikrocontroller 4.3 Programmiermodell des C517 Seite 9 von 32

HS Karlsruhe, Studiengang Energie- und Automatisierungstechnik Dr. J. Hülsemann

V 1.00

4.3 Programmiermodell des C517 • Im Folgenden wird aus Abbildung 4-8 durch weitere Abstraktion ein Modell des

C517 für den Programmierer entworfen. Es zeigt am Beispiel des Befehlstyps

MOV Ziel, Quelle

in Übersichtsform, welche Operandenbereiche als Ziel bzw. Quelle adressiert werden können..

Hinweis: In den folgenden Befehlsbeispielen werden Quell- und Zieloperanden als absolute Speicheradressen angegeben. Dies soll das Verständnis der Befehlsfunktion erleichtern. In der Praxis wird man beim Programmieren "in Assembler" dann wann immer möglich die symbolische Adressierung verwenden. Diese wird in Kapitel 7.1 vorgestellt.

• Abbildung 4-8 zeigt die logische Sicht auf ein Mikrocomputersystem (C517 mit externem ADB/DB und externem Speicher).

Abbildung 4-8: Interner und externer Adressraum des C517

Erklärung:

Externer Adressraum : 64 KByte für Programmspeicher 64 KByte für Datenspeicher Beide Adressräume werden über PSEN unterschieden (nur schematisch dargestellt) Interner Adressraum: 256 Byte

Adressraum extern: 128 KB

Page 10: Skriptum „Mikrocontroller-Systeme“ Kapitel 4geju0001/Mikrocontroller-Skript/4_5... · Mikrocontroller 4.1 Funktionselemente des Mikrocontrollers C517 Seite 2 von 32 HS Karlsruhe,

Mikrocontroller 4.3 Programmiermodell des C517 Seite 10 von 32

HS Karlsruhe, Studiengang Energie- und Automatisierungstechnik Dr. J. Hülsemann

V 1.00

Abbildung 4-9: Programmiermodell, Übersicht

• Die bei der Programmierung möglichen Datenspeicher für Operanden sind streng getrennt nach externen und internen Bereichen. Alle Operandenbereiche sind 8 Bit breit.

• Der externer Operandenbereich kann maximal (je nach Speichergröße) 64 kB RAM-Speicher umfassen, er wird als "externes Datensegment XSEG" bezeichnet.

• Der externe Programmspeicher dient zur Ablage des Maschinencode. Er ist ebenfalls maximal 64 kB groß und wird als "Codesegment CSEG" bezeichnet. Ein schreibender Zugriff wird durch das PSEN-Signal verhindert, damit können Operanden hier nicht abgelegt werden. Lediglich Konstante, die im Befehl unmittelbar integriert sind (siehe Kapitel 4.4, "immediate adress") sowie Tabellen, auf die lesend zugegriffen wird, stellen Operanden des CSEG dar. Typischerweise wird er als ROM-Speicher realisiert.

• Der interne, also auf dem C517-Chip integrierte RAM-Datenspeicher ist 256 Byte groß. Er wird als "Datensegment DSEG" bezeichnet. Als Operandenbereich betrachtet, besteht er aus mehreren Bereichen mit völlig unterschiedlichen Funktionen, die im Folgenden kurz vorgestellt werden.

Operanden und Operandenbereiche im DSEG:

A: Akku, (1 Byte; bitweise adressierbar, Sonderfunktion bei einigen Befehlen).

B: Allgemeines Register (1 Byte; Sonderfunktion bei Multiplikation

und Division).

XSEG CSEG DSEG, besteht aus: A, B,

Page 11: Skriptum „Mikrocontroller-Systeme“ Kapitel 4geju0001/Mikrocontroller-Skript/4_5... · Mikrocontroller 4.1 Funktionselemente des Mikrocontrollers C517 Seite 2 von 32 HS Karlsruhe,

Mikrocontroller 4.3 Programmiermodell des C517 Seite 11 von 32

HS Karlsruhe, Studiengang Energie- und Automatisierungstechnik Dr. J. Hülsemann

V 1.00

Operanden und Operandenbereiche im DSEG (Forts.):

C: 1-Bit-Register, ist für Bit-adressierende Befehle der "Bit-Akku". Bei Arithmetikbefehlen stellt dieses Bit das Flag "Carry" (auch als "CY" bezeichnet) dar

Allgemeines RAM: byteorganisiert, für beliebige Ablage von

Programmvariablen.

BSEG: RAM-Bereich, der Byte- und Bit-weise adressiert werden kann (siehe dazu Details in Abbildung 4-12).

R0 bis R7: Allgemein verwendbare Register (je 1 Byte). Da diese

Register sehr häufig benötigt werden, sind sie zusammengefasst als "Bank" mehrfach vorhanden.

4 Registerbänke: Jede Registerbank hat 8 Register (R0 bis R7).

Diese Bänke (Bank 0 bis Bank 3) müssen vor der Nutzung der Register "umgeschaltet" werden (siehe PSW). Nach dem RESET des Prozessors ist die Bank 0 aktiv.

PSW: Programm-Status-Wort (ist allerdings nur ein Byte groß),

enthält 8 Flags. Davon sind vier Flags mit anzeigender Wirkung (Parity, Overflow, Auxiliary Carry und Carry), zwei Flags mit steuernder Wirkung (RS0 und RS1) und zwei Flags können vom Benutzer beliebig verwendet werden (F0, F1, "general purpose flags").

Abbildung 4-10: Programm Status Wort (aus /SIEMENS User's Manual/)

In dieser Darstellung zeigt sich bereits die grundsätzliche Doppeladressierung der internen Operanden:

Adressierung über eine Mnemonik (hier rechts aussen: "PSW")

Adressierung über die absolute Byte-Adresse im DSEG (hier links aussen: D0 H).

P: Parity-Flag, wird gesetzt (d.h. =1) immer dann, wenn in den

Akku ein Bitmuster mit ungerader Anzahl von "1" geladen wird.

OV, CY: Overflow- und Carry-Flag: werden bei

Arithmetikbefehlen beeinflusst (siehe dazu Kapitel 2.2)

DSEG-Inhalte: (Forts.) C, CY, Allgem. RAM BSEG R0 bis R7 Registerbänke

PSW-Inhalte: F0, F1 P, Parity CY, OV

Page 12: Skriptum „Mikrocontroller-Systeme“ Kapitel 4geju0001/Mikrocontroller-Skript/4_5... · Mikrocontroller 4.1 Funktionselemente des Mikrocontrollers C517 Seite 2 von 32 HS Karlsruhe,

Mikrocontroller 4.3 Programmiermodell des C517 Seite 12 von 32

HS Karlsruhe, Studiengang Energie- und Automatisierungstechnik Dr. J. Hülsemann

V 1.00

AC: Auxiliary Carry: Übertrag von Stelle 23 nach 24 (BCD-Arithmetik)

RS0, RS1: Register Select Bits, mit diesen wird die aktuell gültige Registerbank eingestellt. Da jede Registerbank lediglich aus 8 Bytes im DSEG besteht (die Adressen sind in Abbildung 4-11 angegeben), wird bei einem Registerbank-Wechsel der Inhalt der vorigen Bank natürlich erhalten bleiben.

Abbildung 4-11: Registerbank-Umschaltung (/Siemens/)

Beispiele für Zugriffe auf die Operandenbereiche (MOV-Befehle): MOV R0 , R2 Kopiert den Inhalt von Register R2 in

dasRegister R0 MOV 031H , R0 Kopiert den Inhalt von Register R0 in die

RAM-Speicherzelle mit der Byte-Adresse 31H

MOV C , ACC.3 Kopiert das Bit mit der Bitadresse 3 aus

dem AKKU in das Carry-Flag. Weitere Details zu den Bitadressen: siehe Abbildung 4-12.

MOV 021H , C Kopiert das Bit aus dem Carry-Flag in ein

Bit, im BSEG, seine Bitadresse ist 021H. MOVX @DPTR , A Kopiert den AKKU-Inhalt über den

Datapointer (siehe Kap. 4.4) in den externen RAM-Speicher (XSEG)

MOVC A , @A+DPTR Kopiert den Inhalt einer Konstanten aus

dem CSEG in den AKKU. Die Adresse der Konstanten ergibt sich aus der Summe vom vorherigen AKKU-Inhalt und dem Datapointer (siehe Kap. 4.4).

PSW: AC, RS0, RS1 Registerbank-Umschaltung

Page 13: Skriptum „Mikrocontroller-Systeme“ Kapitel 4geju0001/Mikrocontroller-Skript/4_5... · Mikrocontroller 4.1 Funktionselemente des Mikrocontrollers C517 Seite 2 von 32 HS Karlsruhe,

Mikrocontroller 4.4 Adressierung der Operanden Seite 13 von 32

HS Karlsruhe, Studiengang Energie- und Automatisierungstechnik Dr. J. Hülsemann

V 1.00

• Eine weitere, doppelt vorhandene Möglichkeit, Adressen anzugeben, zeigt sich im Bit-adressierbaren Bereich. Die 16 x 8 Bit, die einzeln adressiert werden können, kann man entweder ansprechen mit:

Byteadresse H . Bitadresse oder mit: Bitadresse (von 00 H bis 7F H)

Registerbänke

Allgemeines RAM

Special Function Register

FFH

80H

20H

2FH.7

20H.0

30H

00H

20H

00 21H22H23H24H25H26H27H28H29H2AH2BH2CH2DH2EH2FH

01 020708 09 0F

7F

1F10 17

BIT - ADRESSRAUM

Abbildung 4-12: Bitweise adressierbares, internes RAM

• Die Befehls-Beispiele auf der vorigen Seite zeigen, dass der relativ komplizierte Gesamtadressraum der C517-Architektur sich niederschlägt in entsprechend vielfältigen Möglichkeiten, im Befehl den Operanden anzugeben diesen also zu adressieren. Dies ist das Thema des folgenden Kapitels.

4.4 Adressierung der Operanden

• Bei der Programmierung in Assembler muss man - wie die Beispiele im Kapitel 3 für den 80x86 bereits gezeigt haben - sich ständig damit beschäftigen, wo die Operanden im Speicher (Extern, Intern usw.) untergebracht sind. Knappe Resourcen im internen RAM und langsame Zugriffe auf das externe RAM müssen dabei sorgfältig gegeneinander abgewogen werden: hier ist auch heute noch die Möglichkeit groß, Laufzeit und Speicherbedarf durch geschicktes Programmieren zu optimieren.

Bit-Adressraum

Page 14: Skriptum „Mikrocontroller-Systeme“ Kapitel 4geju0001/Mikrocontroller-Skript/4_5... · Mikrocontroller 4.1 Funktionselemente des Mikrocontrollers C517 Seite 2 von 32 HS Karlsruhe,

Mikrocontroller 4.4 Adressierung der Operanden Seite 14 von 32

HS Karlsruhe, Studiengang Energie- und Automatisierungstechnik Dr. J. Hülsemann

V 1.00

• Im folgenden werden die grundsätzlichen Adressierungsarten von Mikroprozessoren vorgestellt (in Klammer: die Begriffe, die im Manual für den C517 verwendet werden):

Implizite Adressierung ("register") Unmittelbare Adressierung ("immediate") Direkte Adressierung ("direct") Indirekte Adressierung über Register ("register indirect") Indirekte Adressierung über Speicher (gibt es nicht für den C517) Indirekte Adressierung über zwei Register ("base register plus

index-register indirect")

• Als Beispiel wird dabei wieder der bereits bekannte MOV-Befehl verwendet. Zum besseren Verständnis werden zu den Beispielen die OPCODES aus der Befehlsliste mitangegeben.

Implizite Adressierung ("register"): Im Befehlscode sind Bits für den/die Operanden eingeschlossen.

Diese Adressierungsart ist für die Realisierung in der Hardware des Prozessors die einfachste, die Bearbeitungszeit ist die kürzeste und die Länge des Opcodes ist die kleinstmögliche. Allerdings ist diese Adressierungsartst damit natürlich auf einige, wenige Operanden - eben die internen Register - beschränkt.

Beispiele: MOV A , R1 MOV R2, A Die allgemeine Darstellung (Rn ist der Überbegriff für die Register R0 bis R7) dieses Opcode in Abb. 4-13 zeigt, dass es sich um einen 1-Byte-Befehl handelt, indem für die Register-Nr. 0 bis 7 die mit "r" gekennzeichneten Bits dienen. Vergleicht man die zwei Befehlscodes, zeigt sich, dass es sich aus Prozessorsicht um zwei völlig verschiedene Befehle handelt, auch wenn lediglich Quell-Operand und Ziel-Operand miteinander vertauscht sind.

MOV A , Rn

MOV Rn , A

Abbildung 4-13: Opcodes für Implizite Adressierung

Adressierungs-arten

Implizite Adressierung (register)

Page 15: Skriptum „Mikrocontroller-Systeme“ Kapitel 4geju0001/Mikrocontroller-Skript/4_5... · Mikrocontroller 4.1 Funktionselemente des Mikrocontrollers C517 Seite 2 von 32 HS Karlsruhe,

Mikrocontroller 4.4 Adressierung der Operanden Seite 15 von 32

HS Karlsruhe, Studiengang Energie- und Automatisierungstechnik Dr. J. Hülsemann

V 1.00

Unmittelbare Adressierung ("immediate"):

Der Operand ist eine Konstante (im Beispiel: 50 H), die unmittelbar mit dem Befehlscode zusammen im CSEG abgelegt wird. Damit benötigt dieser Befehl zwei Byte: eines für den eigentlichen Opcode und ein zusätzliches für die Konstante ("immediate date")

Beispiele: MOV A , #050H MOV R2, #0A7H Hinweis: In der Assemblersprache ist "#" das Kennzeichen für eine Konstante; wird diese Konstante im hexadezimalen Format angegeben, und fängt sie mit einem Buchstaben an (z.B. A7H), dann muss vor dem Buchstaben eine "0" eingefügt werden!

MOV A , #data

MOV Rn , #data

Abbildung 4-14: Opcodes für unmittelbare Adressierung Direkte Adressierung ("direct"):

Die direkte Adresse ist eine 8-Bit-Adresse. Damit kann ausschließlich der interne Adressraum (DSEG) adressiert werden. Die obere Hälfte des internen Adressraums (oberhalb 80H) - hier liegen die "Special Function Register" - lässt sich nur mit direkter Adressierung erreichen. Die Befehle sind mindestens 2 Byte lang: Befehlscode+interne Adresse. In der Assembler-Syntax wird die interne Adresse als Zahl angegeben (im Beispiel: 50H und 51H).

Unmittelbare Adressierung (immediate) Direkte Adressierung (direct)

Page 16: Skriptum „Mikrocontroller-Systeme“ Kapitel 4geju0001/Mikrocontroller-Skript/4_5... · Mikrocontroller 4.1 Funktionselemente des Mikrocontrollers C517 Seite 2 von 32 HS Karlsruhe,

Mikrocontroller 4.4 Adressierung der Operanden Seite 16 von 32

HS Karlsruhe, Studiengang Energie- und Automatisierungstechnik Dr. J. Hülsemann

V 1.00

Beispiele: MOV R1 , 50H MOV 50H , 51H MOV 51H , #053H Da die Operanden dieses Befehlstyps im Prozessorchip bereits vorhanden sind, kann man hier von internem Speicher zu internem Speicher direkt kopieren (2. Zeile des Beispiels). Im extenen RAM ist dies nicht möglich - auch nicht bei Standardprozessoren wie dem 80x86. Wird in eine interne RAM-Zelle eine Konstante geladen (im Beispiel: 3.Zeile), wird diese Konstante die Länge des Gesamtbefehls auf drei Byte vergößern (siehe Abb. 4-15, 3.Zeile). Achtung Syntax: # 50H: Konstante 50H: Interne Adresse

MOV Rn , direct

MOV direct , direct

MOV direct , #data Abbildung 4-15: Opcodes für direkte Adressierung

Indirekte Adressierung über Register("register indirect"):

• Das Prinzip der indirekten Adressierung ist aus der Sprache "C" bereits bekannt: eine Pointervariable "zeigt" auf eine Speicherstelle, d.h. der Inhalt des Pointers ist gleich der Adresse dieser Speicherstelle. Man kann nun über diesen Pointer auf die adressierte Speicherstelle lesend oder schreibend zugreifen.

• Vorteil dieses Verfahrens: die Stelle im Speicher, auf die der Pointer zeigt, kann durch z.B. Iinkrementieren des Pointerinhaltes geändert werden - man "verschiebt" dabei den Pointer am Speicher entlang. Man kann damit auf Speicherstellen zugreifen, deren Adressen durch das Programm selbst, also zur Laufzeit des Programms, berechnet werden.

• Ersetzt man jetzt den Begriff "Pointervariable" durch "Register", wird die Realisierung im Bereich der Mikrocontroller sichtbar.

• Genauso wie in "C", muss vor dem indirekten Zugriff über ein Register, dieses mit der Adresse desjenigen Speichers geladen werden, auf den dann zugegriffen werden soll

Forts. Direkte Adressierung

Register-indirekte Adressierung

Page 17: Skriptum „Mikrocontroller-Systeme“ Kapitel 4geju0001/Mikrocontroller-Skript/4_5... · Mikrocontroller 4.1 Funktionselemente des Mikrocontrollers C517 Seite 2 von 32 HS Karlsruhe,

Mikrocontroller 4.4 Adressierung der Operanden Seite 17 von 32

HS Karlsruhe, Studiengang Energie- und Automatisierungstechnik Dr. J. Hülsemann

V 1.00

• Der C517 kennt drei Register, die man zur indirekten Adressierung verwenden kann:

Register R0 und Register R1 (beide zusammen als "Ri" bezeichnet)

Datapointer-Register (bezeichnet als "DPTR")

Registerindirekte Adressierung über Ri: Da R0 und R1 (immer aus der gerade aktuellen Registerbank!) jeweils nur 8 Bit breit sind, kann dieses Register - jetzt als Pointer verwendet - natürlich nur einen Adressraum von 28 also 256 Speicherzellen adressieren. Von diesem möglichen Adressraum sind im internen RAM jedoch nur die untere Hälfte (00H bis 7FH) zugelassen. Dieser Bereich wird als indirekt adressierbares Segment ISEG bezeichnet (siehe Abbildung 4-16). R0 und R1 können beide in gleicher Weise in diesem Bereich als Pointerregister verwendet werde.

Beispiele: MOV R0 , #050H ; Pointer-Register einstellen auf 50H MOV A , @R0 ; Zugriff über Pointer R0 MOV R1 , #022H MOV @R1 , A ; Zugriff über Pointer R1 Hinweis: Hier zeigt sich wieder die "Akkumaschine": Registerindirekte Zugriffe erfordern immer den Akku als Quelle bzw. Ziel! Zusätzlich können die Register Ri im externen Daten-RAM als Pointerregister verwendet werden, allerdings nur für die unteren 256 Adressen von 0000 H bis 00FFH (siehe Abbildung 4-16).

Register zur indirekten Adressierung über Ri: ( @R0, @R1 ) im ISEG im XSEG

Page 18: Skriptum „Mikrocontroller-Systeme“ Kapitel 4geju0001/Mikrocontroller-Skript/4_5... · Mikrocontroller 4.1 Funktionselemente des Mikrocontrollers C517 Seite 2 von 32 HS Karlsruhe,

Mikrocontroller 4.4 Adressierung der Operanden Seite 18 von 32

HS Karlsruhe, Studiengang Energie- und Automatisierungstechnik Dr. J. Hülsemann

V 1.00

Registerindirekte Adressierung über den Datapointer DPTR: Das Register DPTR ist das einzige Register in der Architektur des C517, das 16 Bit breit ist und infolgedessen einen Adressraum von 64 kByte umfasst. Damit kann über diesen Datapointer der volle externe RAM-Adressraum XSEG angesprochen werden. Vor dem Register-indirekten Zugriff muss der DPTR mit der Adresse im XSEG geladen werden: diese muss als 16-Bit-Konstante im Befehl erscheinen. Als MOV-Befehl ist für das XSEG der "MOVX"-Befehl zu verwenden.

Indirekt adressierbarer Bereich ISEG

FFFF H

@DPTR

0000 H

Indirekt adressierbar

über @R0, @R1

Externes RAM XSEG

00H Registerbänke

Allgemeines RAM

Special Function Register

FFH

80H

30H

20H BIT - ADRESSRAUM

@R0

@R1

Internes RAM DSEG

@R1@R0

00FFH

Abbildung 4-16: Übersicht Pointerverwendung

Beispiele: MOV DPTR , #0AE72H ; DPTR-Register einstellen MOVX A , @DPTR ; Zugriff über Pointer DPTR MOV DPTR , #0022H MOV @DPTR , A ; Zugriff über Pointer DPTR Hinweise: 1.) Auch diese Register-indirekten Zugriffe benötigen den Akku! 2.) Der DPTR kann auch in zwei Hälften aufgeteilt werden: "DPH"- und "DPL"-Register. Nur in dieser Form kann er mit Adresswerten geladen werden, die z.B. in anderen Registern oder in externen Speicherbytes abgelegt sind. Auch das Kopieren des DPTR in den Stack (siehe Kapitel 7.3) ist nur in der Byte-Größe möglich. 3.) Auch die Register Ri können mit MOVX A,@Ri verwendet werden.

Register-indirekte Adressierung über den DPTR: im XSEG

Page 19: Skriptum „Mikrocontroller-Systeme“ Kapitel 4geju0001/Mikrocontroller-Skript/4_5... · Mikrocontroller 4.1 Funktionselemente des Mikrocontrollers C517 Seite 2 von 32 HS Karlsruhe,

Mikrocontroller 4.4 Adressierung der Operanden Seite 19 von 32

HS Karlsruhe, Studiengang Energie- und Automatisierungstechnik Dr. J. Hülsemann

V 1.00

Indirekte Adressierung über zwei Register ("base register plus index-register indirect Das Register DPTR kann auch für die Adressierung im Codesegment CSEG verwendet werden. Allerdings ist dieser Zugriff - wegen PSEN - nur lesend möglich. Wegen der 16-Bit-Größe des DPTR ist das gesamte CSEG adressierbar. Zur Adressierung stehen lediglich zwei Befehle zur Verfügung: MOVC A , @A+DPTR MOVC A , @A+PC Beide bilden die Adresse des Quelloperanden Register-indirekt, jedoch aus der Summe von zwei Registern. Dabei ist das eine Register jeweils ein 16-Bit-Register (DPTR oder Program Counter, PC) und damit gedacht als Anfangsadresse z.B. einer Tabelle. Das andere Register ist ein 8-Bit-Register und damit als Hilfszeiger (Offset) geeignet, um z.B. vom Tabellenanfang aus die Tabellen-Elemente dynamisch zu adressieren. Die Funktion des Akku ist hier also entsprechend einem "Index-Register". Solche Tabellen im Codesegment werden auch als "Look-up Table" bezeichnet.

Beispiele: MOV DPTR , #0AE72H ; DPTR-Register einstellen auf ; Tabellenanfang MOV A , #02H ; Offset = 2 MOVC A , @A+DPTR ; Zugriff über Summe der Pointer auf die ; Adresse AE74H Hinweise: 1.) Die Tabellen können natürlich nur konstante Größen enthalten (CSEG!) 2.) Auf diese Weise lassen sich z.B. Kennlinienfelder auch mehrfach im CSEG verwalten: der Wechsel von einem Kennlinienfeld zum anderen bedeutet lediglich, den DPTR als Basiszeiger umzustellen. 3.) Die Befehlsform MOVC A , @A+PC verwendet als Basiszeiger statts des DPTR den momentanen Stand des Program Counters, setzt also voraus, dass der zu adressierende Konstanten-Bereich direkt anschließend an diesen Befehl im CSEG abgelegt ist.

Register-indirekte Adressierung über DPTR im CSEG look-up table

Page 20: Skriptum „Mikrocontroller-Systeme“ Kapitel 4geju0001/Mikrocontroller-Skript/4_5... · Mikrocontroller 4.1 Funktionselemente des Mikrocontrollers C517 Seite 2 von 32 HS Karlsruhe,

Mikrocontroller 4.4 Adressierung der Operanden Seite 20 von 32

HS Karlsruhe, Studiengang Energie- und Automatisierungstechnik Dr. J. Hülsemann

V 1.00

• In den folgenden beiden Abbildungen ist die gesamte Sequenz für den indirekten Zugriff über DPTR im Opcode-Bild dargestellt.

MOV DPTR ,#data16

Abbildung 4-17: Opcode für das Laden des DPTR mit 16-Bit-Konstante

MOVX A , @DPTR

Abbildung 4-18: Opcode für Register-indirekten Zugriff

Beispiel: Die Aufgabe aus Kapitel 3.1 soll diesmal für den C517 in Assembler gelöst werden: CAESAR = ANNA + BERTA Die 8-Bit-Variablen sollen im XSEG angelegt sein: ANNA sei die absolute XSEG-Adresse: 0000H BERTA " " " 0001H CAESAR " " " 0002H Lösung: ; Variable ANNA aus dem externen RAM einlesen in Register R0:

MOV DPTR , #0000H MOVX A , @DPTR MOV R0 , A ; Variable BERTA aus dem externen RAM einlesen in Akku:

MOV DPTR , #0001H MOVX A , @DPTR ; ANNA und BERTA addieren (Ergebnis in Akku):

ADD A , R0 ; Ergebnis in CAESAR im externen RAM speichern:

MOV DPTR , #0002H MOVX @DPTR , A

• Wie dieses Beispiel zeigt, entwickelt sich der Datapointer DPTR, wenn die Variablen überwiegend im externen RAM liegen, zum Flaschenhals bei der Programmierung: für jeden einzelnen Zugriff muss der DPTR neu geladen werden.

DPTR als Flaschenhals

Page 21: Skriptum „Mikrocontroller-Systeme“ Kapitel 4geju0001/Mikrocontroller-Skript/4_5... · Mikrocontroller 4.1 Funktionselemente des Mikrocontrollers C517 Seite 2 von 32 HS Karlsruhe,

Mikrocontroller 4.4 Adressierung der Operanden Seite 21 von 32

HS Karlsruhe, Studiengang Energie- und Automatisierungstechnik Dr. J. Hülsemann

V 1.00

• Die Lösung für das DPTR-Problem in Form einer Weiterentwicklung ist typisch für die Mikrocontrollerwelt:

Keine Änderung im Befehlssatz Keine Änderung in der Architektur des Mikrocontrollers Damit: volle Aufwärtskompatibilität: bisherige Programme müssen

auf Maschinencode-Ebene in einem weiterentwickelten Prozessortyp ohne jede Änderung lauffähig sein.

• Die Lösung, die im C517 realisiert ist, besteht in einer Vervielfachung des Datapointers: anstelle von einem gibt es 8 DPTR.

• Ähnlich wie bei der Registerbank-Umschaltung muss der jeweils aktive DPTR über Steuerbits im SFR-Bereich (siehe dazu die folgende Seite) eingeschaltet werden. Da die acht DPTR ebenfalls im SFR-Bereich als Register vorhanden sind, kann man sie auf acht verschiedene Adressen eingestellt lassen; zur Verwendung muss lediglich umgeschaltet werden.

Abbildung 4-19: Datapointer-Selektion des C517 ( / SIEMENS Manual / )

Erklärung: Das Datapointer-Select-Register DPSEL an der Adresse 92H im SFR-Bereich aktiviert - je nach der Stellung der Bits 0, 1, 2 eines der 8 DPTR-Register Hinweis: Unabhängig davon, welches der acht DPTR-Register aktiviert ist, erscheint das aktuell aktivierte immer unter der Adresse 82H und 83H (für DPL und DPH) im SFR-Bereich. Die acht Register werden also aus Kompatibilitätsgründen in die ursprünglich dafür vorgesehene Stelle eingespiegelt.

• So elegant diese Lösung erscheint, bringt sie die Unsicherheit mit sich, dass an der jeweiligen Stelle im Assemblercode nicht direkt ersichtlich ist, über welchen DPTR gerade zugegriffen wird. Der eigentliche Flaschenhals, der ja darin besteht, keine direkte Adressiermöglichkeit im externen RAM zur Verfügung zu haben, wird dadurch nicht beseitigt.

Datapointer mehrfach vorhanden

Page 22: Skriptum „Mikrocontroller-Systeme“ Kapitel 4geju0001/Mikrocontroller-Skript/4_5... · Mikrocontroller 4.1 Funktionselemente des Mikrocontrollers C517 Seite 2 von 32 HS Karlsruhe,

Mikrocontroller 4.4 Adressierung der Operanden Seite 22 von 32

HS Karlsruhe, Studiengang Energie- und Automatisierungstechnik Dr. J. Hülsemann

V 1.00

• Die Abbildung 4-20 zeigt in einer Übersicht die im Programmiermodell des C517 zur Verfügung stehenden Adressräume mit den Segment-Bezeichnungen (CSEG, XSEG, BSEG, ISEG, DSEG). Hier wird deutlich, dass das Bit-adressierbare Segment BSEG eine Untermenge des indirekt adressierbaren Segmentes ISEG ist und beide zusammen im internen Datensegment DSEG liegen.

Abbildung 4-20: Adressraum des C517 und Segmente

• Der bisher noch nicht näher betrachtete, interne Daten-Adressraum von 80H bis FFH ist für die "Sonderfunktionsregister" (special function register SFR) vorgesehen und meist nur direkt adressierbar und zur Ablage von Variablen des Benutzers gesperrt - auch wenn in der jeweils benützten C517-Variante hier noch freie RAM-Speicherzellen verfügbar wären.

• Diese SFR sind eine für Mikrocontroller typische Eigenschaft: das Prinzip des Program Status Word PSW wird hier ausgedehnt auf Anzeigen und Steuer-Informationen für die auf dem Chip integrierten Peripherie-Bausteine.

• In der folgenden Abbildung ist ein kleiner Teil dieses SFR-Bereiches dargestellt.

• Alle Register wie Akku, B-Register, Ports usw. liegen im SFR-Bereich - nicht jedoch der Program Counter und die Register R0 bis R7.

• Viele, jedoch nicht alle Register sind hier byte- und bitadressierbar.

• Alle SFR sind les- und beschreibbar, da sie jedoch teilweise vom Prozessor eigenständig verwendet werden (wie z.B. das Carry) ist ein beschreiben nicht immer sinnvoll.

• Auch die Steuer- und Anzeigeregister der integrierten Peripheriebausteine (z.B. die Ports) sind hier byte- und teilweise auch bitadressierbar. Die detaillierte Beschreibung der Anzeige- und Steuerbits z.B. für den Interruptcontroller oder die serielle Schnittstelle ist dem Manual zu entnehmen.

Segmen-tierung des Adressraumes

Special Function Register SFR

Page 23: Skriptum „Mikrocontroller-Systeme“ Kapitel 4geju0001/Mikrocontroller-Skript/4_5... · Mikrocontroller 4.1 Funktionselemente des Mikrocontrollers C517 Seite 2 von 32 HS Karlsruhe,

Mikrocontroller 4.4 Adressierung der Operanden Seite 23 von 32

HS Karlsruhe, Studiengang Energie- und Automatisierungstechnik Dr. J. Hülsemann

V 1.00

Abbildung 4-21: Einige Special Function Register des C517

Erklärung:

Links aussen ist die Byte-Adresse im DSEG angegeben, rechts aussen die zugehörige Mnemonik, unter der dieses Byte in seiner speziellen Funktion im Befehl verwendet wird. Für die Bit-Adresse gilt wieder das vom BSEG bereits bekannte Verfahren: entweder kann z.B. das Carry-Flag über seine absolute Bitadresse D7H oder über seine symbolische Bitadresse CY angesprochen werden. Der Datapointer liegt -als 16-Bit-Register verteilt auf DPH und DPL - bei den Adressen 82H und 83H; er ist nicht bitadressierbar.

• Alle SFR haben nach dem RESET des C517 einen, vom Hersteller definierten Anfangswert. Diese Anfangswerte sind in der ausführlichen Liste im "User's Manual" (siehe Unterlagen zum Mikrocontrollerlabor) enthalten. Einen Auszug daraus zeigt die folgende Abbildung.

• Der Anfangswert des Program Counter (PC, nicht in den SFR enthalten) ist nach dem RESET: "0000H"; d.h. im Programmspeicher wird der erste Befehl nach dem Einschalten bei der Adresse 0000H erwartet.

Abbildung 4-22: SRF-Auszug mit Reset-Werten (/ Siemens User's Manual /)

SFR-Auszug

Anfangswerte nach RESET PC hat "0000H" als RESET-Wert

Page 24: Skriptum „Mikrocontroller-Systeme“ Kapitel 4geju0001/Mikrocontroller-Skript/4_5... · Mikrocontroller 4.1 Funktionselemente des Mikrocontrollers C517 Seite 2 von 32 HS Karlsruhe,

Mikrocontroller 4.4 Adressierung der Operanden Seite 24 von 32

HS Karlsruhe, Studiengang Energie- und Automatisierungstechnik Dr. J. Hülsemann

V 1.00

Hinweis: Wird der Akku nicht innerhalb eines Befehls verwendet (MOV A,...) sondern als "normaler" internes Byte (z.B. bei PUSH-Befehlen, siehe Kapitel 7.3), muss er als "ACC" bezeichnet werden (z.B. PUSH ACC). Beispiele:

mov C, ACC.0 ; Akku-Bit 0 mit symbol. Bitadresse mov C, 0E0H ; Akku-Bit 0 mit abs. Bitadresse mov A, B ; Register B, adressiert mit symbol. Byte-Adr. mov A, 0F0H ; Register B, adressiert mit abs. Byte- ; Adresse F0H, Kontext: Byte-Ladebefehl mov C, 0F0H ; Reg.-B, Bit0 mit abs. Bitadresse F0H, ; Kontext: Bit-Ladebefehl in Carry ; aus dem Kontext unterscheidet der ; Prozessor das jeweilige Ziel-Register!

Beispiele (Forts):

mov P4, A ; Port 4, symbol. Byte-Adresse mov 0E8H, A ; Port 4, abs. Byteadresse mov P4.6, C ; Portbit 4.6, symbol. Bit-Adr. mov 0EEH, C ; Portbit 4.6, abs. Bitadresse

Page 25: Skriptum „Mikrocontroller-Systeme“ Kapitel 4geju0001/Mikrocontroller-Skript/4_5... · Mikrocontroller 4.1 Funktionselemente des Mikrocontrollers C517 Seite 2 von 32 HS Karlsruhe,

Mikrocontroller 4.4 Adressierung der Operanden Seite 25 von 32

HS Karlsruhe, Studiengang Energie- und Automatisierungstechnik Dr. J. Hülsemann

V 1.00

• Die folgende Abbildung zeigt - leicht abweichend von den bisherigen Darstellungen - das tatsächlich im C517A implementierte Speichermodell mit den Ergänzungen gegenüber der ursprünglichen 8051-Architektur

• Zunächst ist hier die Einstellmöglichkeit zwischen internem (auf dem Chip implementierten) Code-Speicher und externem Code-Speicher erkennbar. Die Umschaltung erfolgt durch externe Beschaltung des EA-Eingangs am Prozessor.

• Bemerkenswert ist zunächst, dass ein Engpass der "alten" Architektur, nämlich der zu kleine interne RAM-Bereich von nur 128 Byte, hier ergänzt wurde um weitere 128 Byte (Adressbereich 80 H bis FF H). Diese liegen adressmäßig parallel zu den SFR. Die Unterscheidung erfolgt durch die Adressierung: direkte Adressierung wird in den SFR-Bereich gelenkt, indirekte Adressierung (auch der Stackpointer, siehe Kapitel 7.2, gehört dazu) wird in diesen zusätzlichen RAM-Bereich umgeleitet.

• Darüber hinaus wurde hier ein weiterer Engpass der "alten" Architektur, nämlich der immer noch zu kleine interne RAM-Speicher von 256 Byte, ergänzt durch einen weiteren, XRAM genannten, internen RAM-Speicher von 2 kB (Adressbereich F800H bis FFFFH). Dieser liegt nun allerdings adressmäßig parallel zu dem äußeren 64-kB-RAM-Bereich. Die Nutzung ist daher nur möglich, wenn über das Steuerbit XMAP0 (im SYSCON-Register) die Lese- und Schreibzugriffe umgelenkt werden.

• Zugriffe auf dieses XRAM sind - wie auf das gesamte XSEG - nur Register-indirekt möglich (über DPTR oder R0/R1)

• Vorteil des XRAM: Ohne externen Speicherchip kostengünstige RAM-Erweiterung

Abbildung 4-23: C517-Memory Map mit XRAM (/Siemens User's Manual /)

Ergänzungen gegenüber dem 8051: Interner-/ Externer Speicher zusätzliche 128 Byte RAM XRAM XRAM nur Register-indirekt adressierbar

Page 26: Skriptum „Mikrocontroller-Systeme“ Kapitel 4geju0001/Mikrocontroller-Skript/4_5... · Mikrocontroller 4.1 Funktionselemente des Mikrocontrollers C517 Seite 2 von 32 HS Karlsruhe,

Mikrocontroller 5.1 Programmentwicklung Seite 26 von 32

HS Karlsruhe, Studiengang Energie- und Automatisierungstechnik Dr. J. Hülsemann

V 1.00

5 Hilfsmittel zur Erstellung und zum Test von Assemblerprogrammen

5.1 Programmentwicklung Hinweise: Wie immer, wenn die Lösung für eine Aufgabenstellung darin besteht, einen Rechner zu programmieren, besteht auch im Bereich "Embedded Control" der erste Schritt darin, das Programm zu entwerfen. Für diesen Entwurf stehen alle die Mittel, die aus der Vorlesung "Grundlagen der Informatik" bekannt sind, zur Verfügung (Flussdiagramm, Struktogramme nach Nassi-Shneidermann usw.); auf diese wird hier nicht weiter eingegangen. Ein Hinweis aber in Hinblick auf das Mikrocontrollerlabor: Gerade im Bereich der Hardware-nahen Programmierung in Assembler ist ein Entwurf des Programms unbedingt notwendig! Wer einmal versucht hat, ein Programm, das ohne Entwurf, dafür aber mit vielen Sprungbefehlen (siehe Kapitel 7) "freihändig" entstanden ist, zum Laufen zu bringen, wird feststellen müssen, dass die Zeit, die man durch Weglassen einer Entwurfs-Skizze einspart, doppelt und dreifach für den Test bzw. für die Fehlerbeseitigung notwendig sein wird.

• Die Abbildung auf der nächsten Seite zeigt zunächst den Weg bis zum lauffähigen Maschinencode.

• Im Texteditor wird das Assemblerprogramm Befehl für Befehl eingegeben. Ein Texteditor unterscheidet sich von einem Standard-Textverarbeitungsprogramm (Word etc.) dadurch, dass er keine Steuerzeichen zur Textformatierung in die entstehende Textdatei einstreut. Zusätzlich zu den Befehlen können auch Steueranweisungen für den Übersetzer (Assembler) oder für Linker/Locator eingegeben werden.

• Die entstandene "Quelldatei" (Source code) wird vom Assembler übersetzt. Dabei werden Syntaxfehler festgestellt, die zu den entsprechenden Fehlermeldungen am Ende des Übersetzungsvorgangs führen. Der Assembler erzeugt eine "List-Datei" (auch kurz "Listing" genannt, die ausgedruckt sowohl den Quellcode mit Zeilen-Nummern als auch die in den Zeilen festgestellten Syntaxfehler beinhaltet. Oft werden auch die hexadezimalen Maschinencodes der Befehle in den Zeilen mit angegeben.

Editor Assembler Listing

Page 27: Skriptum „Mikrocontroller-Systeme“ Kapitel 4geju0001/Mikrocontroller-Skript/4_5... · Mikrocontroller 4.1 Funktionselemente des Mikrocontrollers C517 Seite 2 von 32 HS Karlsruhe,

Mikrocontroller 5.1 Programmentwicklung Seite 27 von 32

HS Karlsruhe, Studiengang Energie- und Automatisierungstechnik Dr. J. Hülsemann

V 1.00

• Nur eine fehlerfrei übersetzte Quelldatei führt zu einer Objectcode-Datei. Hier sind bereits die Maschinenbefehle enthalten (d.h. Kommentare, Mnemonics nicht mehr), allerdings sind die Adressen der Befehlszeilen und auch der Variablen noch nicht absolut, fest zugeordnet, sondern "relokatibel". In größeren Projekten können solche relokatiblen Code-Module von verschiedenen Entwicklern oder auch aus Bibliotheken stammen.

• Der Linker (Bindeprogramm) fügt die einzelnen, vorübersetzten Objectcode-Module zusammen.

• Der Locater legt dann die absoluten Adressen für die Befehlszeilen und Variablen fest. Dieser Vorgang muss vom Programmierer natürlich gesteuert werden, denn nur er kennt den Adressraum seines Embedded Control-Systems und kann damit festlegen, an welcher Speicheradresse z.B. das Programm beginnen soll. Erst dann ist ein übersetztes Programm "executable" (*.exe). Eine Übersicht über die vergebenen Code- und Datenadresse wird oft vom Linker/Locater in einer *.MAP-Datei abgelegt.

* . LST

ASSEMBLEREditor Linker Locater

Source Code: MOV R1,variable; Kommentar MOV A,#wert ; Kommentar .....

* . A51

Objectcode, relokatibel

* . OBJ

* . OBJ * . OBJ

Absoluter Objectcode: 0100 1011 1110 0110 .....

* . exe

z.B. "CSEG at 0000H"

Abbildung 5-1: Werkzeugkette für Assembler-Programmierung

• Der so erzeugte Objectcode ist zwar syntaktisch korrekt und vom Mikrocontroller ausführbar, ob das Programm aber auch etwas sinnvolles tut, also semantisch korrekt ist, muss noch getestet werden. Dabei können in der Embedded Control-Anwendung neben Fehlern, wie sie aus der Vorlesung "Einführung in die Informatik" bekannt sind (falscher Algorithmus, falsche Datenstrukturen usw.), weitere Fehler durch falsches Zeitverhalten des Programms beim Ansteuern der umgebenden Hardware entstehen (siehe nächstes Kapitel).

Object code, relokatibel Linker Locater MAP-Datei

Ergebnis: Syntax ohne Fehler Verbleibende Fehlerquellen: Entwurf Datenstruktur Laufzeit Hardware

Page 28: Skriptum „Mikrocontroller-Systeme“ Kapitel 4geju0001/Mikrocontroller-Skript/4_5... · Mikrocontroller 4.1 Funktionselemente des Mikrocontrollers C517 Seite 2 von 32 HS Karlsruhe,

Mikrocontroller 5.2 Test von Assembler-Programmen Seite 28 von 32

HS Karlsruhe, Studiengang Energie- und Automatisierungstechnik Dr. J. Hülsemann

V 1.00

5.2 Test von Assembler-Programmen

• Der Vorgang des Testens wird oft als "Debuggen" (engl. Bug: die Wanze) bezeichnet. Für den Hardware-nahen Test sollte ein Testsystem die folgenden Funktionen bieten:

Register- und Speicherinhalte beobachten Register- und Speicherinhalte verändern Programm in das Zielsystem laden / nachladen Programm starten / anhalten Programm starten und ablaufen lassen, bis eine vorher gewählte Stelle

("Breakpoint") erreicht ist; dann soll die Programmbearbeitung anhalten.

Mehrere Breakpoints im Programm definieren Wenn das Programm an einem Breakpoint steht: Rückverfolgen

derjenigen Programmteile, die bis zu diesem Breakpoint bearbeitet wurden ("Tracen")

Programm im Einzelschritt-Modus bearbeiten Programm im Endlos-Modus starten Programm im Zielsystem ändern (Fehlerbeseitigung) Testfunktionen auch über Ausschalt-/Einschaltvorgänge ermöglichen Echtzeit-Test Source-Level-Debugging: beim Testen wird nicht nur der nackte

Maschienencode sichtbar, sondern auch der Quellcode (also symbolische Namen von Adressen und Sprungmarken, Kommentare usw.). Bei Programmen, die ganz oder teilweise in einer Hochsprache erstellt wurden, ist dann z.B. Source-Level z.B. die C-Zeile.

• Im Folgenden werden Testverfahren vorgestellt, die die oben genannten Testfunktionen mehr oder weniger beinhalten.

Hinweis: Die Qualität eines Testsystems beeinflusst entscheidend die Entwicklungsdauer und Entwicklungqualität!

wünschens-werte Test-funktionen

Page 29: Skriptum „Mikrocontroller-Systeme“ Kapitel 4geju0001/Mikrocontroller-Skript/4_5... · Mikrocontroller 4.1 Funktionselemente des Mikrocontrollers C517 Seite 2 von 32 HS Karlsruhe,

Mikrocontroller 5.2 Test von Assembler-Programmen Seite 29 von 32

HS Karlsruhe, Studiengang Energie- und Automatisierungstechnik Dr. J. Hülsemann

V 1.00

Test mit Simulator:

• Die preiswerteste und bequemste Art, ein Assemblerprogramm zu testen, ist die Simulation (siehe folgende Abbildung). Das zu testende Assemblerprogramm wird am Entwicklungsrechner (normalerweise ein PC) unter Verwendung der Werkzeugkette aus Kap. 5-1 eingegeben und in den Maschinencode übersetzt. Am selben Rechner wird dann das Programm zum Testen gestartet; allerdings kann dieser Maschinencode vom "Host" nicht direkt bearbeitet werden. Er muss zuvor von einem "Cross-Assembler" in den Maschinencode des Host übersetzt werden. Dabei wird für jeden Befehl des Original-Maschinencode eine ganze Befehlssequenz im Host-Maschinencode erforderlich. Diese Befehlssequenzen stellen Unterprogramme dar, die immer wieder aufgerufen werden; der Host "interpretiert" die Befehle des zu testenden Programmes. Der Mikroprozessor des Host simuliert dabei also den Prozessor des Zielsystems.

Programm in Assembler

Host-Computer (z.B. PC )

Betriebssystem +

Cross-Assembler +

Cross-Simulator

Ausgetestetes Programm im

Objectcode

MOV AX, BX MOV CX, DX .....

"MOV AX, BX" Interpretation durch Maschinencode-Sequenz des Host

"MOV CX, DX" Interpretation durch Maschinencode-Sequenz des Host

Abbildung 5-2: Simulation, Software-Debugger

• Vorteile der Simulation:

billig (oft sogar kostenlos), lediglich Software-Kosten fallen an

Editieren, Assemblieren und Testen: alles an einem Rechner

• Nachteile der Simulation:

keine echte Hardware-Umgebung; Zustände von Signalen, die den Ablauf des zu testenden Programms beeinflussen, müssen vor dem Start des Programms als Variable vorbesetzt werden bzw. das Programm muss angehalten werden, um die Signalzustände zu ändern.

keine Echtzeit; die Ablaufgeschwindigkeit des zu testenden Programms ist durch die Interpretation und die völlig andere Arbeitsgeschwindigkeit des Host anders als im Zielsystem.

Simulator Interpreter

Page 30: Skriptum „Mikrocontroller-Systeme“ Kapitel 4geju0001/Mikrocontroller-Skript/4_5... · Mikrocontroller 4.1 Funktionselemente des Mikrocontrollers C517 Seite 2 von 32 HS Karlsruhe,

Mikrocontroller 5.2 Test von Assembler-Programmen Seite 30 von 32

HS Karlsruhe, Studiengang Energie- und Automatisierungstechnik Dr. J. Hülsemann

V 1.00

Test mit dem In-Circuit-Emulator (ICE):

• Der Entwicklungsrechner (meist ein PC) dient nur noch zum Editieren und Bedienen der Testfunktionen. Er ist über seine serielle Schnittstelle mit einem Gerät, dem "In-Circuit-Emulator (ICE)" verbunden.

• Ein ICE ersetzt den Prozessor im Zielsystem ("Target"), indem es alle Signale an den Anschlüssen des Prozessors während der Programmbearbeitung erzeugt.

• Dazu wird der Prozessor der Zielhardware durch einen Adapter ersetzt. Eine spezielle, schnelle Prozessorversion im ICE bearbeitet das Programm mit der vollen Arbeitsgeschwindigkeit und zeichnet nebenbei bestimmte Informationen, wie z.B. Sprungziele, in schnellen RAM-Speichern auf.

• Der Ablauf des Tests wird vom PC aus gesteuert und beobachtet..

Zielsystem (z.B. Board mit Prozessor und E/A)

Entwicklungs-rechner

Serielle Schnittstelle

ICE-Software Assembler-Programm

E/A

PROM

RAM

Mikro-

prozessor

Serielle Schnitt-stelle

ICE

Adapter

Abbildung 5-3: In-Circuit-Emulator ICE

• Vorteile des ICE:

Erlaubt Test in der originalen Hardware-Umgebung Programmbearbeitung in Echtzeit alle Testfunktionen (siehe Vorseite) sind möglich,

insbesondere die Trace-Funktion und das Testen über Aus-/Einschalten ist möglich

• Nachteile des ICE:

Sehr teuer Nur für einen Prozessortyp geeignet

In-Circuit-Emulator ICE

Page 31: Skriptum „Mikrocontroller-Systeme“ Kapitel 4geju0001/Mikrocontroller-Skript/4_5... · Mikrocontroller 4.1 Funktionselemente des Mikrocontrollers C517 Seite 2 von 32 HS Karlsruhe,

Mikrocontroller 5.2 Test von Assembler-Programmen Seite 31 von 32

HS Karlsruhe, Studiengang Energie- und Automatisierungstechnik Dr. J. Hülsemann

V 1.00

Test mit dem ROM-Debugger (Remote-Debugger):

• Auf dem Zielrechner muss eine serielle Schnittstelle vorhanden sein sowie ein Programm, das in der Lage ist, die serielle Schnittstelle zu bearbeiten. Dieses Programm ("Monitor-Programm") wird vom Hersteller eines solchen Debuggersystems geliefert und muss auf der Zielhardware in Form eines PROM-Speichers eingesteckt werden.

• Das Monitor-Programm bearbeitet Aufträge, die vom Entwicklungsrechner über die serielle Schnittstelle kommen, wie z.B. "Laden des zu testenden Programms", "Starten des Programms", "Anhalten des Programms und Übertragen von Registerinhalten zum Entwicklungsrechner" usw.

• Das zu testenden Programms wird nach dem Start durch das Monitorprogramm mit der vollen Arbeitsgeschwindigkeit bearbeitet - das Monitorprogramm ist währenddessen inaktiv und wartet auf ein Signale von der Schnittstelle. Kommt ein Kommando über die Schnittstelle, muss natürlich die Bearbeitung des Testprogramms unterbrochen werden, da der Prozessor jetzt zum Monitorprogramm wechselt.

• Monitorprogramm und zu testendes Programm teilen sich den Adressraum des Prozessors und mindestens ein Schnittstellensignal (Interrupt; siehe Kap. 8.2).

Zielsystem (z.B. Board mit Prozessor und E/A)

Entwicklungs-rechner

Serielle Schnittstelle

Debug-Software Assembler-Programm

E/A

Monitor- PROM

RAM

Mikro-

prozessor

Serielle Schnitt-stelle

Abbildung 5-4: ROM-Debugger

• Vorteile des ROM-Debuggers:

preiswert Erlaubt Test in der originalen Hardware-Umgebung Programmbearbeitung in Echtzeit beinahe alle Testfunktionen (siehe Vorseite) sind möglich,

• Nachteile des ROM-Debuggers:

Ressourcenteilung zwischen Testprogramm und Monitor keine Trace-Funktion kein Testen über Aus-/Einschalten Breakpoints werden oft über Software realisiert (Befehle, die

in das zu testende Programm eingestreut werden) Der Zielrechner muss prinzipiell bereits funktionieren

ROM-Debugger Monitor-PROM

Page 32: Skriptum „Mikrocontroller-Systeme“ Kapitel 4geju0001/Mikrocontroller-Skript/4_5... · Mikrocontroller 4.1 Funktionselemente des Mikrocontrollers C517 Seite 2 von 32 HS Karlsruhe,

Mikrocontroller 5.2 Test von Assembler-Programmen Seite 32 von 32

HS Karlsruhe, Studiengang Energie- und Automatisierungstechnik Dr. J. Hülsemann

V 1.00

Test mit Background-Debugging:

• Bei dieser Variante des Remote-Debuggings wird die Funktion von Serieller Schnittstelle und Monitorprogramm auf dem Prozessorchip integriert

• Dadurch entfällt die Ressourcenteilung zwischen dem zu testenden Programm und dem Monitorprogramm; auch sind hier "echte" Breakpoints (Realisierung über eingebaute Adressvergleicher) möglich.

• Die eingebaute Debug-Einheit kann auch durch spezielle Signale (z.B. Reset-Signal für bestimmte Zeitdauer) aktiviert werden und dient dann lediglich als Lader für ein zu testendes Programm ("Bootstrap").

• Vorteile des Background-Debuggings:

keine Ressourcenkonflikte setzt nur funktionierenden Chip voraus Erlaubt Test in der originalen Hardware-Umgebung Programmbearbeitung in Echtzeit beinahe alle Testfunktionen (siehe Vorseite) sind möglich Breakpoints in Hardware realisierbar

• Nachteile des ROM-Debuggers:

Keine Tracefunktion nur bei relativ neuen, teuren Chips erhältlich kein Testen über Aus-/Einschalten

Test mit einem Evaluation Board (EVA-Board):

• Eva-Boards werden vom Hersteller des Prozessors angeboten; sie stellen ein universell nutzbares Mikrocontrollerboard dar, das in einen Standard-PC (Entwicklungsrechner) eingesteckt wird.

• Damit kann ein zu testendes Programm zwar getestet werden, jedoch nur in der universellen Hardware-Umgebung.

• EVA-Boards sind damit eher ein Schulungsmittel als ein echtes Testwerkzeug

Programmentwicklung und Test zusammengefasst unter einer Oberfläche: die "Integrated Development Environment IDE"

• Die ideale Voraussetzung für kurze Entwicklungszyklen stellt die IDE dar. Sie fasst den gesamten Prozess der Hardware-nahen Software-Entwicklung unter einem gemeinsamen Rahmenprogramm zusammen:

Ein Editor, der bereits die Assembler-Syntax kennt und durch farbige Markierung anzeigt

Ein Assembler Debug-Werkzeuge

Hinweis: In den Übungen zu "Grundlagen der Informatik" wurde bereits ein Beispiel für eine IDE zur C-Entwicklung verwendet: Visual Studio.

Background-Debugging EVA-Board