Mikrocomputertechnik mit der 8051-Controller-Familie: Hardware, Assembler, C [3 ed.] 354066758X, 978-3-540-66758-2, 978-3-540-69465-6 [PDF]

Der 8051-Controller ist aufgrund seiner weiten Verbreitung besonders als Modellsystem für die Mikrocomputertechnik geeig

129 45 6MB

German Pages 311 [323] Year 2008

Report DMCA / Copyright

DOWNLOAD PDF FILE

Table of contents :
Front Matter....Pages I-XIII
Einführung....Pages 1-10
Die Peripherie des μ-Controllers....Pages 11-29
Aufbau von μ-Controllern der 8051-Familie....Pages 30-60
Assembler für die 8051-Controller-Familie....Pages 61-107
Projekte mit Assembler gelöst....Pages 108-174
C für die 8051-Familie....Pages 175-185
Projekte in C gelöst....Pages 186-199
Prozessorarchitekturen im Überblick....Pages 200-216
Entwicklung von μ-Computer-Hardware....Pages 217-235
Übungsaufgaben....Pages 236-283
Anhang....Pages 284-303
Back Matter....Pages 304-311
Papiere empfehlen

Mikrocomputertechnik mit der 8051-Controller-Familie: Hardware, Assembler, C [3 ed.]
 354066758X, 978-3-540-66758-2, 978-3-540-69465-6 [PDF]

  • 0 0 0
  • Gefällt Ihnen dieses papier und der download? Sie können Ihre eigene PDF-Datei in wenigen Minuten kostenlos online veröffentlichen! Anmelden
Datei wird geladen, bitte warten...
Zitiervorschau

Mikrocomputertechnik mit der 8051-Controller Familie 3. neu bearbeitete Auflage

Jürgen Walter

Mikrocomputertechnik mit der 8051-Controller Familie Hardware, Assembler, C 3. neu bearbeitete Auflage

123

Prof. Dipl.-Ing. Jürgen Walter HS Karlsruhe Fachgebiet Mechatronik Moltkestr. 30 76133 Karlsruhe [email protected]

ISBN 978-3-540-66758-2

e-ISBN 978-3-540-69465-6

DOI 10.1007/978-3-540-69465-6 Bibliografische Information der Deutschen Nationalbibliothek Die Deutsche Bibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über http://dnb.d-nb.de abrufbar. © 2008, 1996, 1994 Springer-Verlag Berlin Heidelberg Dieses Werk ist urheberrechtlich geschützt. Die dadurch begründeten Rechte, insbesondere die der Übersetzung, des Nachdrucks, des Vortrags, der Entnahme von Abbildungen und Tabellen, der Funksendung, der Mikroverfilmung oder der Vervielfältigung auf anderen Wegen und der Speicherung in Datenverarbeitungsanlagen, bleiben, auch bei nur auszugsweiser Verwertung, vorbehalten. Eine Vervielfältigung dieses Werkes oder von Teilen dieses Werkes ist auch im Einzelfall nur in den Grenzen der gesetzlichen Bestimmungen des Urheberrechtsgesetzes der Bundesrepublik Deutschland vom 9. September 1965 in der jeweils geltenden Fassung zulässig. Sie ist grundsätzlich vergütungspflichtig. Zuwiderhandlungen unterliegen den Strafbestimmungen des Urheberrechtsgesetzes. Die Wiedergabe von Gebrauchsnamen, Handelsnamen, Warenbezeichnungen usw. in diesem Werk berechtigt auch ohne besondere Kennzeichnung nicht zu der Annahme, dass solche Namen im Sinne der Warenzeichen- und Markenschutz-Gesetzgebung als frei zu betrachten wären und daher von jedermann benutzt werden dürften. Satz: Digitale Druckvorlage des Autors Herstellung: le-tex publishing services oHG, Leipzig Einbandgestaltung: eStudioCalamar S.L., F. Steinen-Broo, Girona, Spanien Gedruckt auf säurefreiem Papier 987654321 springer.com

Vorwort zur dritten Auflage Der 8051-Controller ist aufgrund seiner weiten Verbreitung besonders als Modellsystem für die Mikrocomputertechnik geeignet. Dieses Buch führt in die technischen Grundlagen dieses Prozessorsystems, die Assembler- und C-Programmierung mit Anwendungen, sowie die Hardwareentwicklung ein. Die beiliegende CD-ROM enthält ein voll funktionales Entwicklungspaket mit Simulator, Assembler und C-Compiler. Für die zweite Auflage wurde das Softwarepaket um ein Lehrprogramm erweitert, mit dem die Grundlagen der Digitaltechnik repetiert und dynamische Abläufe anschaulich dargestellt werden können. Mit seinem didaktischen Aufbau, den verständlichen Erklärungen, den Übungsaufgaben, den mitgelieferten Übungs- und Entwicklungsprogrammen wendet sich dieses Lernpaket vor allem an die praxisorientierten Ingenieure und Studenten. Für die dritte Auflage wurde die CD-ROM durch Programme für die wichtige praktische Anwendung erweitert. Karlsruhe 8. Oktober 2007 Jürgen Walter

Vorwort zur zweiten Auflage Als Autor bin ich erfreut über die Resonanz, die dieses Buch mit CD gefunden hat. Das Lehrangebot wurde auf der CD zusätzlich durch ein CBT (Computer Based Training) ergänzt. Insbesondere können Sie hier interaktiv mit Hilfe des Rechners in Ihrer eigenen Lerngeschwindigkeit arbeiten. Die Software zum Debuggen von Programmen wurde auf die WindowsOberfläche umgestellt. Ein Programm zur Pulsweitenmodulation ergänzt die verschiedenen Programmbeispiele. Durch die Einrichtung eines FTP-Servers an der FH Karlsruhe können Sie die aktuellsten Programme über Internet abrufen. Die Adresse ist: http://WWW.FH-Karlsruhe.de/ . Auf der ersten Seite befindet sich eine Volltextsuche an der Sie als Stichwort „8051“ eingeben sollten. Karlsruhe 2. März 1996 Jürgen Walter

Vorwort zur ersten Auflage Es ist mir eine große Freude, als Hochschuldidaktiker das Vorwort zu dieser gelungenen Einführung in die µ-Computertechnik zu schreiben. Um die Vorzüge dieses Buches zu illustrieren, ist eine kurze Betrachtung des Lernprozesses erforderlich. Traditionelles Lernen besteht in dem Versuch, eine komplexe Informationsfülle - etwa in einer Vorlesung oder aus einem Buch - aufzunehmen. Je passiver dies geschieht, desto geringer sind die Aussichten für einen nachhaltigen Lernerfolg. Nach Möglichkeit sollte das "Schlucken" der Inhalte bereits mit einem "Kauvorgang" (z.B. in Form einer strukturierten Mitschrift oder eigenen Markierungen bzw. Kommentaren im Buchtext verbunden werden. Nach der Aufnahme der Information muss diese in einem zweiten Schritt "verdaut" werden. Hiermit ist der Prozess gemeint, in welchem eine Vernetzung der neuen Begriffe, Theorieelemente und Sachverhalte mit dem Vorwissen des Studenten erfolgt. Da jeder Studierende andere Vorkenntnisse und Vorerfahrungen sowie einen anderen Lernstil hat, gestaltet sich dieser Arbeitsvorgang sehr individuell. In jedem Fall aber ist er ein aktiver Prozess, in dessen Verlauf die alte Wissensstruktur so umgebildet werden muss, dass sich die neuen Wissenselemente einfügen. Jede Frage und jeder kognitive Konflikt, der in dieser Phase auftaucht, kann als Brückenkopf zu der gewünschten Vernetzung beitragen. Jede abgeblockte oder verdrängte Frage aber ist eine vertane Chance zu einer solchen Brückenbildung, zur Vernetzung zwischen erschlossenen und noch unerschlossenen Wissenselementen. Hier liegt die große Bedeutung von Diskussionen fachlicher Inhalte in kleinen Gruppen. Unvernetztes Wissen "haftet nicht", bleibt "oberflächlicher Wissenslack", der vielleicht noch in der Prüfung "glänzen" mag, aber schon bei geringen Herausforderungen "abblättert" und nicht von Dauer ist. Ein geeigneter Test auf die Vernetzungstiefe hingegen ist die Fähigkeit, einem Mitstudierenden auch komplexe Sachverhalte in einfacher, alltagsnaher Sprache darzustellen. Vor der eigentlichen Bewährungsprobe steht das erworbene Wissen dann im dritten Schritt, der Anwendung auf einen neuen Aufgabentyp mit unbekannter Lösung. Hier muss der Student selbständig unter verschiedenen Strategien auswählen und bekannte Wissenselemente praxisbezogen

VII

kombinieren. Wie wir essen und verdauen, um mit der in körperliche Energie verwandelten Nahrung konkret Arbeit zu verrichten, so eignen wir uns Wissen an, um mit seiner Hilfe auch neuartige Probleme in den Griff zu bekommen. Dabei muss sich die neue Wissensstruktur in Aktion bewähren und erst in dieser Funktion hat Wissen sein Ziel erreicht. Wozu dieser Exkurs? Das vorliegende Buch trägt den Anforderungen aktiven Lernens, die hier formuliert wurden, in besonderer Weise Rechnung. Es macht nicht nur in systematischer Weise mit den wichtigsten Grundtatsachen der µ-Computertechnik vertraut, es tut dies auch in einer sehr alltagsnahen Sprache und so ausführlich, dass der Leser stets folgen kann und ihm berüchtigte Phrasen der Art "wie man leicht sieht ..." erspart bleiben. Er wird terminologisch und inhaltlich dort "abgeholt", wo er als Neuling in seinem Wissen steht. Der Clou des Buches jedoch ist die Tatsache, das es mittels der dem Buch beigefügten CD konsequent von den Möglichkeiten moderner Datentechnik zur Unterstützung aktiven Lernens Gebrauch macht. Die Idee, Assembler, C-Compiler und Simulator für einen 8051/80535-Controller auf einem modernen Datenträger mitzuliefern, macht aus der Kombination von Buch und CD ein komplettes µ-Computer-Labor. Ausführliche Beispiele und zahlreiche praktische Hinweise befähigen den Leser, selbständig und aktiv in die faszinierenden Anwendungsmöglichkeiten des µ-Controllers einzusteigen. Didaktisch besonders hervorzuheben ist, dass sich am Bildschirm die Programmstruktur gleichzeitig auf zwei Ebenen (Quellcode, Assembler) verfolgen und zugleich die Auswirkung jedes einzelnen Befehls beobachten lässt. Damit wird das Programmieren eines µ-Controllers in vorbildlicher Weise transparent. Beeindruckt hat mich, mit welchem Engagement und welcher hohen Sachkompetenz Studierende, die in die Technik der µ-Computer nach dem hier realisierten Konzept eingeführt wurden, komplizierte Steuerungsaufgaben in Studienprojekten bewältigt haben. Die für eine profunde Wissensverarbeitung erforderlichen Diskussionen und der Transfer des Wissens auf neuartige Problemstellungen haben die Arbeit der Teams in hohem Maße beflügelt und die individuellen Lernerfolge durch selbständig gewonnene Erfahrung nachhaltig abgestützt. Ich möchte das Buch Studenten und Dozenten wärmstens empfehlen. Den letztgenannten bietet es den zusätzlichen Vorteil, dass der Dozent die

VIII

Grafiken und Programme auf der mitgelieferten CD als Quelle und Ausgangsbasis für die Erstellung eigener Unterlagen verwenden kann. Karlsruhe 27. Oktober 1994

Hans-Peter Voss Leiter der Geschäftsstelle für Hochschuldidaktik

Danksagung Das vorliegende Buch konnte nur durch die tatkräftige Mithilfe der Studenten und Kollegen entstehen. Besonders möchte ich die Anregungen von Herrn W. Müller und Herrn W. Marx hervorheben. Prof. O. Onnen sowie Herrn Prof. D. Girke unterstützten durch ihre Anregungen das Vorhaben. Prof. G. Danner ermöglichte als Leiter des Labors für Automatisierungstechnik den Aufbau des Labors zur Einführung in die µ-Computertechnik mit den µ-Controllern der 8051-Familie. Herr B. Beck hatte maßgeblichen Anteil an der Entwicklung der EURO_535-Karte. Die Firmen Siemens, Intel, Hitex und Keil ermöglichten erst durch Ihre großzügige Unterstützung in Form von Datenbüchern, Assembler zur Evaluation, Kommunikationssoftware, Simulator und C-Compiler zur Evaluation das Gelingen des kombinierten Studiums. Die Studienkommission für Hochschuldidaktik an Fachhochschulen in Baden-Württemberg unterstützte durch ihr Wirken dieses Konzept an verschiedenen Hochschulen und Fachbereichen. Prof. Dr.-Ing. W. Fischer sei als Vorsitzendem dieser Kommission und als Rektor für das angenehme Hochschulklima gedankt. Frau A. Scholl M.A. möchte ich recht herzlich für die unermüdlichen Korrekturarbeiten danken. Die Zusammenarbeit mit Personen aus anderen Fachgebieten, wie beispielsweise der Germanistik habe ich sehr genossen und kann diese nur weiterempfehlen. Herrn Dr. D. Merkle und Herrn B. Huhn vom Springer-Verlag gilt hier ebenfalls mein Dank. Diese Arbeit wurde in hervorragender Weise von Frau Eva Hestermann-Beyerle in der dritten Auflage fortgesetzt. Anregungen und Hinweise aus dem Leserkreis zur Weiterentwicklung der Lehre nehme ich gerne entgegen. Karlsruhe 11. November 2007 Jürgen Walter

Inhaltsverzeichnis 1 1.1 1.2 1.3 1.4 1.5

Einführung Zielsetzung und Methode Einführung in die µ-Computertechnik Erläuterungen zum Sprachgebrauch: Englisch - Deutsch Begriffsbestimmung µ-Computer und µ-Controller Turingmaschine

1 1 2 4 5 6

2 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8

Die Peripherie des µ-Controllers Das D-Kippglied - D-Flip-Flop Tri-State-Ausgang Register Latch Empfehlungen für digitale Schaltungen Adress-Decoder Bus Schaltplan EURO_535 Karte

11 11 16 17 18 19 21 23 27

3 3.1 3.2 3.2.1 3.2.2 3.2.3 3.2.4 3.3 3.4 3.5 3.6 3.7 3.7.1 3.7.2 3.7.3

Aufbau von µ-Controllern der 8051-Familie Pin-Definitionen und Funktionstabelle Prinzipieller Aufbau eines 8051-Ports. Port 0 Port 1 Port 2 Port 3 Blockdiagramm 8051 - 8051A Aufbau des klassischen Digitalrechners Blockdiagramm 80C515/C535 Adressbereiche 8051 Timingberechnungen für 80535-Speicher 16K-EPROM an 80535 Timingberechnung 32K-RAM am 80C535 RAM-Berechnung für die EURO_535-Karte

30 31 32 35 37 37 38 39 42 45 46 47 50 57 58

4 4.1 4.2 4.3

Assembler für die 8051-Controller-Familie Erstellen eines einfachen Assemblerprogramms Debuggen – Test und Fehlerbeseitigung Test des EIN_AUS-Programms mit dem Simulator

61 67 71 72

XI

4.4 4.5 4.6 4.7 4.8 4.9 4.9.1 4.9.2 4.9.3 4.9.4 4.9.5 4.9.6 4.9.7 4.10 4.10.1 4.10.2 4.10.3 4.10.4 4.11 4.12 4.13 4.14 4.15 4.16 4.17 4.18

Test des EIN_AUS-Programms mit EURO_535 Entwicklungsprozess für ein µ-Controller-Programm Prototyp Software Design Die Speicherbereiche des 8051 / 80535 ASM 51 Macro Assembler Die Assembler-Anweisungen im Detail Vereinbarungen für Symbole und Syntax Speicherbereich Initialisierung und Reservierung Die Registerbänke 0 bis 3 Der Programmspeicherbereich Der interne Datenspeicher Der externe Datenspeicher Die Bit-Adressen Segmente Relative Segmente Absolute Segmente Assembler-Anweisungen ORG - END Quellcode-Anweisungen für den Linker Assembler-Steueranweisungen (Assembler Controls ) Stack Special Function Register Program Status Word Die Befehle für die 8051 µ-Controller-Familie Der System Reset Der Stromsparmodus Watchdog Timer

74 79 81 82 83 85 85 85 86 87 88 89 90 90 91 92 92 92 93 95 96 96 99 105 106 107

5 5.1 5.2 5.2.1 5.2.2 5.3 5.3.1 5.4 5.4.1 5.4.2 5.5 5.5.1 5.5.2 5.5.3 5.5.4

Projekte mit Assembler gelöst Standardkopf für Assemblerprogramme Blinklicht mit vorgegebener Blinkfrequenz Timer / Counter - Zeitgeber / Zähler des 8051 Interrupt-System des 8051 / 80535 Projekt A/D-Wandlung Wesentliche Daten des A/D-Wandlers im 80535 Projekt Serielle Schnittstelle Die serielle Schnittstelle im Detail Die Baudrate Projekt Effektivwertmesser Erweiterungen - Wiederverwendung der Software Modularisierung Vereinfachung der Aufgabenstellung Timer 2

108 110 111 111 114 126 126 133 138 139 141 142 142 144 145

XII

5.6 5.7

Der Linker Projekt Effektivwertmesser mit dem Linker erzeugt

161 161

6 6.1 6.1.1 6.1.2 6.1.3 6.2 6.2.1 6.2.2

C für die 8051-Familie Einführung in den C-Compiler Das Programm EIN_AUS Test des EIN_AUS Programms in C mit dem Simulator Test des EIN_AUS Programmes in C in Hardware-Umgebung Die Eigenschaften des C-51-Compilers Die Datentypen des C-51-Compilers Speichertypen und Speichermodelle

175 176 176 179 182 182 183 184

7 7.1 7.2 7.3 7.4 7.5

Projekte in C gelöst Standardkopf für Programme in C Blinklicht mit vorgegebener Blinkfrequenz Projekt A/D-Wandlung Die serielle Schnittstelle in C Das Programm Effektivwert in C

186 187 188 193 196 198

8 8.1 8.1.1 8.1.2 8.2 8.2.1 8.2.2

Prozessorarchitekturen im Überblick Grundstrukturen und Einteilung von µ-Prozessoren 80x86-Prozessoren Signalprozessoren Derivate der 8051-Controller-Familie C515C-Controller 8051-Derivat C8051F340

200 200 203 207 212 213 214

9 9.1 9.2 9.3 9.4 9.5 9.6 9.7 9.8 9.9 9.10 9.11 9.12 9.13

Entwicklung von µ-Computer-Hardware Klärung der Anforderungen Abschätzung der CPU-Belastung - Datenflüsse Wahl der CPU Blockschaltbild der Karte Schaltplan Stückliste - Bezugsquellen Schnittstellen Layout - Bestückungsplan Fertigungsunterlagen Fehlerfindung, Diagnose Lieferumfang Software - Liste verfügbarer Software Weiterentwicklungswünsche , Verbesserungen

217 218 221 223 224 225 226 228 230 231 232 232 233 234

XIII

10 10.1 10.2 10.3 10.4

Übungsaufgaben Übungsklausur 1 Übungsklausur 2 Übungsklausur 3 Übungsklausur 4

236 236 247 259 271

11 11.1 11.1.1 11.1.2 11.1.3 11.1.4 11.2 11.3 11.4

Anhang Zusammenstellung der Register von 8051/80535 REG8051.PDF REG535.PDF Datei REGISTER DECLARATIONS FOR 80535 mit Erklärungen EURO_535.h Installation der Software Hilfreiche Bücher zum Aufarbeiten der Grundlagen Vortragsfolien

284 284 284 287 291 298 301 303 303

Literaturverzeichnis

304

Bildverzeichnis

305

Tabellenverzeichnis

308

Stichwortverzeichnis

310

1 Einführung

1.1

Zielsetzung und Methode

Wie lernen Sie, schnell und effektiv, Aufgaben mit Hilfe von µControllern zu lösen? Diese und viele weitere Fragen beantwortet das vorliegende Buch. Wissen „auf Vorrat“, welches nicht zur Anwendung kommt, wird dabei auf das Notwendigste beschränkt. Hier wird auf ähnliche Art und Weise vorgegangen wie beim Erlernen eines Musikinstruments. Klavier spielen lernen Sie ausschließlich am Klavier. Den Assembler, C-Compiler und Simulator für einen 8051/80535-Controller - nämlich das "Klavier" - erhalten Sie gemeinsam mit diesem Buch in Form einer CD (Compact Disc). Damit können Sie sich umfassend und vollständig in die µ-Computertechnik einarbeiten. Durch die Verwendung von professionellen "Light-Versionen" können Sie die gesamte Entwicklungsumgebung beherrschen. Alle Wege der Entwicklung von µ-Computer-Systemen stehen Ihnen somit offen, auch ohne neue Bedienungsanleitungen erarbeiten zu müssen. Anhand der EURO_535-Karte, ein erweiterbares µ-Controller-Grundsystem, wird ein weiterer, in Laborversuchen getesteter und bewährter Weg aufgezeigt. Alle Bilder des vorliegenden Buches sind auf der beigelegten CD verfügbar. Dozenten können diese Bilder in Form von Folien benutzen. Falls Sie bestimmte Sachverhalte hervorheben wollen, können Sie die Bilder in Powerpoint bearbeiten. Kapitel 1 gibt eine allgemeine Einführung in das Themengebiet. Die wesentlichen Grundlagen der Digitaltechnik für µ-Controller werden in Kapitel 2 gelegt. Von der Peripherie kommend, steigen Sie immer tiefer in die „Geheimnisse“ der µ-Computertechnik ein. Dieser Weg wird in Kapitel 3 fortgesetzt, in dem der µ-Controllerbaustein zunächst von außen und dann immer detaillierter betrachtet wird. Das erste Programm und dessen Test erfolgt in Kapitel 4. Anhand der Projekte des Kapitels 5 studieren Sie die Befehle und die Verwendung der in den µ-Controller eingebauten Einheiten. Die Mächtigkeit einer Hochsprache und die vereinfachte Softwareentwicklung wird durch die Bearbeitung der gleichen Projekte mit der Sprache C in den Kapiteln 6 und 7 aufgezeigt. Das anschließende Kapitel 8

2

zeigt verschiedene Prozessorarchitekturen auf. Die enorme Vielfalt der 8051-Derivate ermöglicht Ihnen, immer den richtigen Controller für Ihre Aufgabenstellung auszuwählen. Das methodische Vorgehen bei der Entwicklung von µ-ControllerHardware beschreibt Kapitel 9. Die Vorbereitungen für die Entwicklung in Form einer Anforderungsliste werden in diesem Kapitel besonders hervorgehoben. Mit Hilfe der Übungsaufgaben in Kapitel 10 können Sie Ihr erworbenes Wissen zuverlässig überprüfen. Ich wünsche Ihnen viel Spaß mit dem µ-Controller. 1.2

Einführung in die µ-Computertechnik

Die µ-Computertechnik erscheint vielen Einsteigern als eine Trödelbude von Detailwissen ohne Struktur. Verstärkt wird dieser Eindruck durch die Schwierigkeiten im Umgang mit den unterschiedlichen Ebenen in Hardware und Software. Genaue Kenntnisse über diese Ebenen sind daher für das Verstehen der µ-Computertechnik von zentraler Bedeutung. Die nachfolgende Tabelle zeigt diese Ebenen auf. In den anschließenden Kapiteln werden die einzelnen Ebenen studiert, erläutert und die einzelnen Fachgebiete gegeneinander abgegrenzt. Tabelle 1.1 Die Ebenen in vereinfachter Darstellung Ebene Intelligente Programme, Maschinen

Beispiel PDA, Schrift-, Spracherkennung, Turing Test Anwenderprogramme Word, Excel, Maple Programmieren mit Objekten Visual Basic, Toolbook Objektorientierte Hochsprachen C++, Small-Talk, C# Compiler, Interpreter, Linker MSC, C, Pascal, Basic, Lisp... Betriebssystem DOS, Unix, XP, Vista, Mac OS X Maschineninstruktionen - Assembler MOV A,@R0 µ-Controller, DSP 80535, DSP 21020 Zähler, Timer, FIFOs, Input-Output, 8253, 7202, 8251, 8255 µ-Prozessor, Arithmetik-Prozessor... 8085, 80486, 68000, 80387 µ-Programm Steuerwerk Register, Adress- und Datenwege 74F374, A0...A31, D0....D15 Gatter, Flip-Flops Nand, Nor, D-Flip-Flop Transistoren, Widerstände, Kondensatoren BC107, 1kY, 20 µF

Lassen Sie sich von der Vielzahl der Ebenen nicht erschrecken. Nach dem Studium dieses Buches und der darin aufgeführten Software sollten Sie diese Tabelle erneut betrachten. Die aufeinander aufbauenden Gebiete erscheinen dann für Sie logisch, ja sogar zwangsläufig. Sie werden dann

1 Einführung

3

schnell entdecken, dass die Ebenen nicht nur aufeinander aufbauen, sondern sind auch miteinander verzahnt sind. Eine weitere interessante Fragestellung ist: "In welcher Ebene ist der Zugang am leichtesten?" Während vieler Diskussionen mit Studierenden ergaben sich verschiedene Antworten auf diese Frage. Ein möglicher Weg ist, das Buch nicht linear zu lesen. Lineares Lesen heißt, dass eine Ebene auf der anderen aufbaut. Bei einem nicht linearen Studium können Sie beispielsweise sofort mit Kapitel 3 beginnen. Schon bei dem Versuch, die einzelnen Ebenen in einer Tabelle darzustellen wird deutlich, dass bestimmte Sachverhalte auf diese Weise nicht berücksichtigt werden. Dagegen bietet sich folgende Darstellung an: Intelligente Programme

EXCEL, Winword, AUTOCAD, Maple

Anwenderprogramme

.NET, Visual Basic, Toolbook, Hypercard

Programmieren mit Objekten Objektorientierte Hochsprachen

C++

Compiler, Interpreter, Linker

TPW

Turbo C

Maschineninstruktionen, Assembler µ-Controller

PDA, Schriften-, Spracherkennung

MSC

MOV A,@I0

INT 21

8051, 80535

Zähler, Timer, FIFOs, Input Output

8253

SMALL TALK

PASCAL

IF NOT MV MR=MR+MX0*MY0(UU)

Signalprozessoren

8251

7202

µ-Programm

LINK

8085

21020, 96002

80486 68030

1101 0011 0011 1111

Register, Adress-, Daten- und Controlwege Gatter, Flip-Flops

&

>1

Transistoren, Widerstände, Kondensatoren

Abb. 1.1 Ebenen-Problematik

Die µ-Computertechnik befasst sich mit 7 verschiedenen Ebenen v "Gatter, Flip-Flop" bis "Compiler, Linker, Interpreter". Gleichzeitig erklären die verschiedenen Ebenen die Problematik des Einstiegs in das Gebiet der µ-Computertechnik. Auf welcher Ebene ist der Einstieg am sinnvollsten? Wie werden Aufgabenstellungen mit µ-Controllern am besten gelöst? Zunächst erfolgt eine Abstimmung bezüglich der Sprache zwischen dem Autor und dem Leser. Infolge des Mediums "Buch", man könnte auch "Read-Only-Paper" sagen, ist eine einseitige Kommunikation vorgegeben.

4

Es stört das Buch sehr wenig, wenn Sie ihm freche Antworten geben. Machen Sie sich deshalb beim Studium Notizen. Hierdurch wandeln Sie das "Read-Only-Paper" in ein "Read-Write-Paper". Nach einigen Erklärungen zum Sprachgebrauch werden wir sehr abstrakt auf der höchsten Ebene der µ-Computertechnik einsteigen. Die gesamte µ-Computertechnik wird zunächst theoretisch erklärt. Leider ist jedoch das Beherrschen der Theorie in der µ-Computertechnik genauso „wirkungsvoll“ wie beim Klavier spielen. Theorie des Klavierspiels: Sie müssen bestimmte Tasten zum richtigen Zeitpunkt mit der gewünschten Stärke und der angegebenen Dauer anschlagen. Sie müssen also nur vier Dinge beherzigen. Diese Theorie können Sie verstanden haben und in einer Prüfung wiedergeben. Trotzdem können Sie als Einsteiger noch nicht einmal "Hänschen Klein" spielen. Sie müssen üben, üben, üben..... 1.3

Erläuterungen zum Sprachgebrauch: Englisch - Deutsch

In diesem Buch werden sowohl englische als auch deutsche Fachausdrücke verwendet. Für das Verständnis der jeweiligen Ausdrücke ist es sehr wichtig, die Übersetzung in die jeweilige Sprache zu kennen. Eine "normale" Übersetzung kann in den meisten Fällen nicht vorgenommen werden. Durch das Verwenden von englischen Ausdrücken wird unmittelbar klar, dass es sich um einen Fachausdruck handelt. Es werden deshalb nicht alle Fachausdrücke zwanghaft übersetzt, sondern die für das Verständnis notwendigen Formulierungen und Bedeutungen dem Studierenden näher gebracht. Als Beispiel dient der Ausdruck Stack. Dieser wird häufig mit "Stapelspeicher" übersetzt. Ein Stapel ist - nach dem deutschen Wörterbuch Wahrig - ein aufgeschichteter Haufen. Ein Speicher ist auch Lagerhaus, Raum, Behälter. Folglich handelt es sich um ein Lagerhaus mit aufgeschichteten Haufen. Für das Verständnis sind solche Übersetzungen irreführend, da weder die Struktur noch die Zugriffsart für einen Stack aus dieser Übersetzung hervorgeht. Ich werde deshalb von einem Stack reden und lieber diesen Fachausdruck erklären. Eine sinnvolle Übersetzung für den englischen Ausdruck File ist dagegen das deutsche Kurzwort Datei, entstanden aus den beiden Worten Daten und Kartei. Es handelt sich demnach um eine Sammlung sachlich zusammengehöriger Daten. Anstatt zwanghaft "einzudeutschen", sollten Sie das technische Englisch als Vorteil für die sprachliche Eindeutigkeit nutzen.

1 Einführung

1.4

5

Begriffsbestimmung µ-Computer und µ-Controller

Der Begriff Mikrocomputer ist ein Kompositum: µ ~ Mikro = 1 Millionstel, von griechisch mikros = klein - Computer - engl., von lat. computare = berechnen. Die folgenden Ausdrücke sind mit dem Wort µ-Computer verbunden: ‚ kleiner leistungsfähiger Computer ‚ PC, Laptop, Notebook, Palm, iTouch, PDA, µ-Controller ‚ urspr. menschlicher oder maschineller Rechner ‚ heute Synonym für programmgesteuerte Rechenautomaten Computer lassen sich in drei Klassen unterteilen: ‚ Analogcomputer ‚ Digitalcomputer ‚ Hybridrechner Die wesensbestimmenden Charakteristiken für den µ-Computer sind: ‚ austauschbares Programm ‚ Universalität ‚ kann beliebig wohldefinierten Automaten simulieren ‚ Selbstbezüglichkeit - auf dem µ-Computer können Programme entwickelt werden, die wiederum auf demselben µ-Computer lauffähig sind. ‚ Approximation einer Turingmaschine Als µ-Computer wird im üblichen Sprachgebrauch ein µ-Prozessor mit verschiedenen Chips auf einer Platine sowie einer Ein- und Ausgabeeinheit bezeichnet. Chip

µ-Prozessor

µ-Prozessor

Chip

µ-Controller

Timer µ-Prozessor

Interrupt Schnittstellen Ausgabeeinheit c:>

Platine Chips

µ-Computer

Chip µ-Prozessor

Timer Interrupt Schnittstellen

Eingabeeinheit Tastatur

Abb. 1.2 µ-Prozessor, µ-Controller, µ-Computer

6

Beim µ-Controller sind die verschiedenen peripheren Einheiten und der µ-Prozessor auf einem gemeinsamen Chip integriert. Die Fertigungstechnik ermöglicht inzwischen, ganze µ-Computer in Form eines PCs in Checkkartengröße zu realisieren. Die Bezeichnung PC (Personal Computer) möchte ich in diesem Zusammenhang ebenfalls klären. Die Vision des PCs von Steve Jobs war, dass jede Person einen ihr zugeordneten PC besitzt. Die Bezeichnung Personal Computer beschreibt daher vor allem die individuelle Zuordnung eines Computers zu einer Person. Ein PC mehreren Personen zuzuordnen, zieht einen nicht vertretbaren Wartungsaufwand nach sich. Fazit: Kein Pool, sondern jedem Studierenden sein Laptop inklusive Software. 1.5

Turingmaschine

Der britische Mathematiker Alan Turing (1912-1954) schrieb 1950 seine Überlegungen zum "Turing Test" in seinem Aufsatz "Maschinelle Rechner und Intelligenz" nieder [Hofstadter; Gödel, Escher, Bach]. Darin geht es um die Frage, ob es denkende Maschinen gibt. Aus mathematischer Sicht gehören solche Fragestellungen in die Automatentheorie und die Theorie der Berechenbarkeit. Sie brauchen keine Befürchtungen zu haben, dass ich diese abstrakte Theorie erklären möchte, aber gerade Alan Turing beweist, dass solche Theorien nicht allein durch Nachdenken entstehen, sondern durch jahrelange praktische Beschäftigung, der daraus gewonnenen Erfahrung und den Umgang mit daraus resultierenden verwandten Fragestellungen. Alan Turing knackte während des zweiten Weltkrieges den Code der Verschlüsselungsmaschine "Enigma". Da dort zwei Codierungsschichten verwendet und Änderungen an der Maschine vorgenommen wurden, musste die Codierung immer wieder neu entschlüsselt werden. Durch diese Arbeit wurde Turing angeregt, zu untersuchen, wie Maschinen Denkvorgänge imitieren könnten. Seine Theorie entstand folglich aus den konkret zu lösenden Problemen und nicht aufgrund abstrakter Ideen. Eine sehr aktuelle Fragestellung: Unterhalten Sie sich am Telefon mit einem Automaten oder einem Menschen? Die theoretische Maschine von Turing besitzt alle wesentlichen Teile, die einen Computer charakterisieren. Turingberechenbare Funktionen Eine Funktion heißt turingberechenbar, wenn man eine Turingmaschine angeben kann, die aus dem Argument x in endlich vielen Schritten den Funktionswert f(x) berechnet. Die Verarbeitung der Werte erfolgt durch eine extrem lange Folge, wird aber durch einfache Rechenoperationen durchgeführt. Der gegensätzliche Fall wäre die Verarbeitung der Werte in einem Schritt.

1 Einführung

7

Die Turingmaschine ist eine theoretische Maschine mit folgenden Charakteristiken: ‚ ‚ ‚ ‚

Speichermedium Band unendlich langes Band Beliebig viele Zustände Z Zeichen E1....En ( E>=2) Ei ,Z j E k,Z l

Übergangstabelle Maschinentafel SchreibLeseKopf

* hgfedcba

hgfedcba 76543210 743210

76543210

E

Abb. 1.3 Turingmaschine

Operationen Schreib-Lese-Kopf Schreiben Lesen Sonderoperationen als Pseudozeichen ‚ E0 » Löschen » identisch mit ‚ * » Rechenschritte beenden ‚ L » Linksverschiebung des Bandes um ein Zeichen ‚ R » Rechtsverschiebung des Bandes um ein Zeichen ‚ ‚

Zwei wesentliche Realisationsmöglichkeiten von Rechenmaschinen beziehungsweise Rechenautomaten möchte ich Ihnen im nachfolgenden vorstellen: Schaltwerk und Schaltnetz. Schaltwerk Durch eine zeitliche Aufeinanderfolge von einfachen Rechenschritten werden komplizierte Operationen durchgeführt. Daraus ergeben sich folgende Konsequenzen: ‚ Das Zeitproblem digitaler Informationsverarbeitung ‚ Notwendigkeit von Speicherplatz?

8

Schaltnetz Durch gleichzeitige Eingabe des Befehls und der Daten erhält man unmittelbar am Ausgang das Ergebnis. Schaltwerk

+

2

5

5 7

Schaltnetz

2

7

+

Abb. 1.4 Schaltnetz - Schaltwerk

Aufgabe Funktioniert ein Taschenrechner ähnlich einem Schaltnetz oder ähnlich einem Schaltwerk? Lösung Da die Tasten "5" und "2" nicht gleichzeitig betätigt werden können, muss es sich um ein Schaltwerk handeln. Diese sehr abstrakte Beschreibung eines Rechenautomaten verlasse ich gerne und gehe zu einer anschaulicheren Darstellung der µComputertechnik über. Hierzu die Fotografie eines µ-Controllers und seine technische Darstellung:

Abb. 1.5 µ-Controller als Fotografie und als technische Darstellung

1 Einführung

9

Die einzelnen Anschlüsse des µ-Controllers sind bei dieser Bauform an den vier Kanten des Chips herausgeführt. In der technischen Darstellung werden die einzelnen Anschlüsse nummeriert und bezeichnet. Eine Einkerbung markiert den Anschluss mit der Nummer 1. Der Herstellername und die Bausteinbezeichnung befinden sich in der Mitte des Chips. Aus den weiteren Bezeichnungen gehen die verwendete Technik und die Gehäuseform hervor. Je nach Einsatzgebiet verändern sich die Umgebungsbedingungen wie z. B. Temperatur oder Feuchtigkeit und damit die jeweiligen Anforderungen an den Baustein. Zu jeder Bauform eines µ-Controllers gibt es das dazugehörige Datenblatt, auf dem die Spezifikationen genau festgelegt sind. Erinnern Sie sich an die Theorie des Klavierspiels? Sie müssen bestimmte Tasten zum richtigen Zeitpunkt mit der gewünschten Stärke und der angegebenen Dauer anschlagen. Ähnlich verhält es sich bei dem gezeigten Baustein mit seiner Vielzahl von Anschlüssen, auch Pins genannt. Die Theorie des µ-Controller Chips Sie müssen bestimmte Pins zum richtigen Zeitpunkt mit der angegebenen Dauer auf "1"- oder "0"-Pegel legen. Es ist also einfacher als beim Klavier spielen, da in der Digitaltechnik die Kategorie "Stärke" entfällt. Der Spannung zwischen 0V und 0,8V ist bei der TTL-Technik (Transistor-Transistor-Logik) der logische Pegel "0" zugeordnet. Der Spannung zwischen 2,4 und 5 V ist der Pegel "1" zugeordnet. Zwischen 0,8V und 2,4V liegt eine „verbotene Zone“. Bei Messungen in TTL-Schaltungen sind Ausgang und Eingang von Bausteinen in den meisten Fällen zusammengeschaltet. Die Zuordnung von Pegel zu logischem Zustand entspricht dann den vorher genannten Werten. Durch die unterschiedlichen Pegel an Ausgang und Eingang eines ICs entsteht eine zusätzliche Sicherheit bei TTL-Technik von 0,4 V. Bei CMOS-Technik beträgt dieser Störspannungsabstand 1 V. Zur Erklärung dieses Sachverhaltes bei der TTL-Technik, auch im Vergleich zur C-MOS-Technik, dient das nachfolgende Bild:

10 U/V TTL

TTL

CMOS

5 4,5V

4

H

CMOS

H

H

H 3,5 V

3 2,4V 2

2,0 V 1,5 V

1

0,8 V

0,4V L Ausgang

L Eingang

0,5V

L Ausgang

L Eingang

Abb. 1.6 TTL Pegel am Eingang und Ausgang

Beachten Sie bitte den Ebenenwechsel, der mit den eben vorgenommenen Schritten erfolgte. Sie bewegen sich jetzt auf der untersten Ebene den Transistoren bzw. der Elektrotechnik mit dem Teilgebiet der Halbleitertechnik. Ordnen Sie also bestimmten Spannungspegeln einen logischen Wert zu, bewegen Sie sich automatisch in der Gatter - Flip-Flop - Ebene. Wiederholen Sie bitte noch einmal die "Theorie des µ-ControllerChips". Auffällig bei dieser Theorie ist die doppelte Betonung der Zeit. Bei der Erklärung des Schaltwerks wurde bereits das Zeitproblem der digitalen Informationsverarbeitung erläutert. Um dieses Zeitproblem zu studieren, verändert man die Perspektive aus der der µ-Prozessors betrachtet wird und bewegt sich gewissermaßen in den µ-Prozessor hinein. Hierdurch wechselt man von der µ-Prozessor-Ebene auf die Flip-Flop-Ebene. Der letzte Teil in der "Theorie des µ-Controller-Chips" - "1"- oder "0"Pegel - besagt, dass dann das Ziel erreicht ist, wenn ein Bit, d.h. die kleinste Informationseinheit zu einem beliebigen Zeitpunkt gesetzt und zurückgesetzt werden kann. Ist ein Bit mit 1 oder 0 in einen Baustein zu schreiben und kann dieses Bit auch gelesen werden, muss der Baustein einen Speicher für den Zustand dieses Bits haben. Gesucht wird also ein Baustein, in den man ein Bit einschreiben und ein Bit herauslesen kann. Weiterhin soll der Baustein beim Einschalten einen definierten Zustand einnehmen. Sind alle beschriebenen Operationen mit diesem Bit durchführbar, können beliebige Systeme durch Erweiterung auf 8 Bit » 1 Byte, 16 Bit » 1 Word, 32 Bit » Double Word und 64 Bit entwickelt werden.

2 Die Peripherie des µ-Controllers

Die beschriebene Zeitproblematik der digitalen Informationsverarbeitung hat wichtigste Konsequenzen für die Entwicklung von digitaler µ-ComputerHardware. Um dies zu unterstreichen, sei die Frage gestellt: "Was sind die drei wichtigsten Dinge bei der Entwicklung von digitaler µ-Computerhardware?“ Die Antwort: "1. Timing; 2. Timing; 3. Timing.“ 2.1

Das D-Kippglied - D-Flip-Flop Pin 14 = Vcc /S 4 D

2

C

3

5

Q Kenn-

74F74

zeichnung 6 1

Q

/R

Pin 1

Pin 7 = GND

Abb. 2.1 Logisches Symbol für D-Kippglied und Fotografie

S Set Setzen R C Clock Takt D Q Out Ausgang / oder Querstrich über Zeichen = Verneinung

Reset Date

Rücksetzen Daten

Normalerweise ist bei allen TTL-Bausteinen - von oben gesehen - der Pin unterhalb der Kennzeichnung der Pin mit der Nummer 1. Am rechten Rand unten befindet sich GND (Ground = Masse) und am linken Rand oben Vcc = Versorgungsspannung + 5V. In einem Baustein befinden sich zwei D-Kippglieder. Wahrheitstabelle für D-Kippglied Synonyme: Funktionstabelle, Wahrheitstafel, Truth Table, Function Table Die Wahrheitstabelle beschreibt die rein logischen Zusammenhänge. Sie zeigt keinerlei zeitliche Zusammenhänge auf.

12 Tabelle 2.1 Wahrheitstabelle D-Flip-Flop (Motorola) /Set L H L H H H H H

Eingänge /Reset H L L H H H H H

Clock X X X

L H

Daten X X X H L X X X

Ausgänge Q H L H* H L

/Q L H H* L H

kein Wechsel kein Wechsel kein Wechsel

kein Wechsel kein Wechsel kein Wechsel

L Low-Pegel »0V H High-Pegel »5V Rising Edge » steigende Flanke x undefined - don´t care » nicht definierter Zustand * Vorsicht, bei jeder Bausteinfamilie anders Impulsdiagramm für D-Kippglied Synonyme: Zeitdiagramm, Timing, Signal-Zeit-Plan ‚ Das Impulsdiagramm ist eine Darstellungsform, in der alle kritischen Vorgänge optimal dargestellt werden können. ‚ Es handelt sich um die zeichnerische Darstellung des zeitabhängigen Zusammenhangs zwischen Eingangsvariablen und Ausgangsvariablen. ‚ Exakt diese Darstellung erhalten Sie bei der Verwendung eines Logikanalysators. 1 µs

T=C D /Set

/Reset

Q * * Falls /Set und /Reset gleichzeitig auf H gehen ( Einschalten ), ist der Zustand für Q nicht definiert !

Abb. 2.2 Impulsdiagramm für D-Flip-Flop (Funktion)

t

2 Die Peripherie des µ-Controllers

13

In diesem Zeitdiagramm ist auf der x-Achse die Zeit und auf der y-Achse der Pegel eingetragen. In digitalen Systemen ohne Peripherie werden alle weiteren Signale vom Takt angeregt. Dieser Systemtakt stellt gewissermaßen das Herz des Systems dar. Vom Takt leiten sich alle weiteren Signale ab. Deshalb wird im Bild 2.7 für die Funktion das Set-Signal vom Clock abgeleitet und daher nach dem Clock-Signal anliegen. Weiterhin ist eine Zeitbedingung für den Clock vorhanden, wenn /Set von LOW nach HIGH geschaltet wird. Diese Zeit wird als Recovery Time (Aufdeck-Zeit) bezeichnet. Aufgabe Um eine Vorstellung von der Zeit „1 µs“ zu erhalten, berechnen Sie bitte den Weg, den ein elektrisches Signal in dieser Zeit zurücklegen kann. Die elektrische Signal-Geschwindigkeit beträgt auf Leiterplatten infolge des Dielektrikums näherungsweise 200 000 000 m/s und beträgt somit 2/3 der Lichtgeschwindigkeit. Lösung s = v * t = 2*108 m/s * 1*10-6s = 200 m Innerhalb der Zeit, in der ein einfacher µ-Prozessor eine Operation durchführt, kann der schnellste physikalische Vorgang, die Ausbreitung von Licht, nur 300 m zurücklegen. Das elektrische Signal kann sich über 200 m ausbreiten. Machen Sie sich diese Tatsache immer wieder bewusst. Kehren wir nach diesem Exkurs über die Zeit zurück zur Erklärung des Impulsdiagramms. An der ersten gestrichelten Linie befindet sich eine kritische Stelle. Befindet sich /Set vor dem Clock C auf "H", müsste aufgrund der auf "L" liegenden Datenleitung das Ausgangssignal auf "L" gehen. Bei dieser zeitlichen Auflösung reicht das einfache Impulsdiagramm für das Funktionsverständnis nicht aus. Eine bessere Zeitauflösung ergibt das verfeinerte Impulsdiagramm mit Schaltzeiten. Zunächst werden hierfür das Clock-Signal und die Reaktion des Ausgangs genauer untersucht. tr

Clock

tf V CC

90% 50% 10% t

GND w 1/ f

t

PLH

max t

PHL

Q oder /Q t

t TLH

THL

Abb. 2.3 verfeinertes Impulsdiagramm -Timing- für Clock von D-Flip-Flop

14 Tabelle 2.2 Erklärung der Abkürzungen für Timing D-Flip-Flop Abkürz- Erklärung ung englisch tw time width tPLH tPHL fmax tr tTLH tTHL

Bedeutung Impulsbreite des Clocks, bei symmetrischem Signal ist die Clockperiodendauer doppelt so lang wie die Impulsbreite Ausbreitungszeit des Signals bzw.Signallaufzeit bis der Ausgang aufgrund einer Änderung des Clocks und des D-Eingangs wirksam wird

time propagation low - high high - low max frequency rise time Output rise time low - high Output fall time high - low

Maximale Frequenz Anstiegszeit Anstiegsgeschwindigkeit des Ausgangs Abfallgeschwindigkeit des Ausgangs

t

/Set oder /Reset

V CC

w

50% t

Q oder /Q

50%

Q oder /Q

50% t

PHL

t PLH

rec V

Clock

50% GND

Abb. 2.4 Verfeinertes Impulsdiagramm für Setzen - Rücksetzen - Ausgang Q

Aufgrund der von Bausteinfamilie zu Bausteinfamilie unterschiedlichen Zeit trec kann sich im Bild "Impulsdiagramm für die Funktion" der Datenausgang Q bei gleichzeitigem Anliegen der steigenden Flanke von Clock und /Set ändern. Diese Zeit ist abhängig von der verwendeten TTL-Familie. Geläufige Familien sind HCT, FACT, TTL, LS. Wichtige Unterschiede liegen im gewählten Fertigungsverfahren und im Material. Das wichtigste, verfeinerte Impulsdiagramm, das auch bei µ-Computern für den Speicherzugriff eine entscheidende Rolle spielt, ist das Impulsdiagramm für die Datenleitung. Dieses gibt Auskunft über die Zeit, die Daten vor und nach der Übernahme-Flanke anstehen müssen.

2 Die Peripherie des µ-Controllers

15

gültig

Daten t

t

h

su

V CC

Clock

50% GND

Abb. 2.5 Verfeinertes Impulsdiagramm für Daten - Clock

Diese Zeitberechnung für die minimalen und maximalen Werte der Zeiten, die für die Datenleitung gelten, spielt eine zentrale Rolle bei der Auswahl der Speicherbausteine für ein µ-Prozessorsystem. Die minimalen und maximalen Werte entstehen aufgrund der Exemplarstreuungen. Wichtigste Zeit-Werte für FACT-Familie (Fast Advanced CMOS TTLkompatibel) sind: Tabelle 2.3 FACT Logikbausteine (aus Datenbuch für FACT-Bausteine) Symbol Vcc GND tr, tf tw fmax tPLH tPHL tsu th trec

Parameter Min Versorgungsspannung 4,5 Gleichspannungsein/-ausgang 0 Typische Eingangsanstieg und -abfallzeit (4,5 V) Kleinste Impulsweite für Takt - Clock 3 Größte Taktfrequenz 145 Propagation Delay Verzögerungszeit für L zu 3 H Propagation Delay Verzögerung für H zu L 3 Setup time, Daten für Clock 1 Hold time, Clock zu Daten -0,5 Recovery Time, Set oder Reset Inactive -2,5 Clock

Typ 5

Max 5,5 Vcc

Unit V V ns/V

5 9,5

ns MHz ns

10 3 1,0 0

ns ns ns ns

40 200 5,5 6 0

Um den Pegel am D-Eingang sicher zu übernehmen, muss der Pegel mindestens 3ns vorher anliegen und mindestens 1ns nach der steigenden Flanke des Clocks gehalten werden. Aufgabe Führen Sie die Berechnung für die Wegstrecke, die Licht innerhalb einer Nanosekunde zurücklegen kann, durch. (Hinweis: Das Ergebnis liegt im cm-Bereich.)

16

Aufgabe Zeichnen Sie das Timing für ein rückgekoppeltes D-Flip-Flop. Der /QAusgang (Das Zeichen "/" bedeutet die Verneinung) führt auf den D-Eingang. Am Clock-Eingang liegt ein Rechtecksignal mit der Frequenz von 10 MHz an. 2.2

Tri-State-Ausgang

Ein Ausgang, der drei Zustände L (low), H (high) und Z (hochohmig) aufweist, wird als Tri-State-Ausgang bezeichnet. Diese drei Zustände eines Ausgangs benötigt man beim Zusammenführen von mehreren Ausgängen auf eine gemeinsame Leitung. Eine Logik bewirkt, dass immer nur ein Ausgang auf die gemeinsame Leitung geschaltet wird. Die anderen Ausgänge müssen sich dann im hochohmigen Zustand befinden. Die auf der Leitung liegende Information in Form des High- oder Low-Pegels gelangt an die entsprechenden Eingänge anderer Bausteine. Auf einem Chip befinden sich vier 3-State Buffers. /OE 1 D

2

3

Y

Abb. 2.6 Logisches Diagramm für 3-State-Ausgang und Fotografie Tabelle 2.4 und 2.5 Wahrheitstabelle für 3-State-Register 74125 / 74126 Eingänge D 0 1 x

74125 Ausgang /OE Y 0 0 0 1 1 Z

Eingänge D 0 1 x

74126 OE 1 1 0

Ausgang Y 0 1 Z

Für den Aufbau von Schaltungen mit diesen Bausteinen 74125 müssen natürlich auch die Werte des Signal-Zeit-Planes eingehalten werden. Diese Durchlaufzeiten betragen bei LS-Bausteinen und HC-Bausteinen bei Temperaturen, die geringer als 85° C sind ca. 20ns. Der Ausgang kann bei diesen Bausteinen durch 15 LS-Bausteine belastet werden. In HC-Technik können auch nicht invertierende 3-State-Buffer bezogen werden. Die Wahrheitstafel kehrt sich damit für den /OE-Steuereingang um.

2 Die Peripherie des µ-Controllers

2.3

17

Register

Ein Register besteht aus acht flankengetriggerten D-Flip-Flops. Die Steuerung von /Set und /Reset ist nicht möglich. Die Ausgänge sind 3-StateAusgänge mit den Zuständen: H, L, Hochohmig. Diese Bausteine werden sehr häufig in µ-Controller-Schaltungen eingesetzt. D0 CP

CP

D

Q

/Q

/OE

O0

Abb. 2.7 Logisches Diagramm 3-State-Register

Bei einer steigenden Flanke am CP - Clock Pin wird die am D0-Eingang stehende Information im Flip-Flop gespeichert. Am Ausgang beeinflusst der Zustand des /OE Pins die Umschaltung des Ausgangs von hochohmig in niederohmig. Der Baustein speichert und ändert eine Bitkombination auf Anforderung. Die Information liegt am Ausgang an. D0

D2

D1

D3

D4

D5

D6

D7

CP

CP Q

D /Q

CP Q

D

CP

D

CP

D

CP

D

CP

D

CP

D

CP

D

/Q

Q

/Q

Q

/Q

Q

/Q

Q

/Q

Q

/Q

Q

/Q

/OE O0

O1

O2

O3

O4

O5

O6

O7

Abb. 2.8 Interner Aufbau des 3-State-Register 74F374

Innerhalb eines Schaltplanes wird normalerweise das logische Symbol verwendet. Das logische Symbol wurde aus der Bibliothek des CAD-Programms "Eagle" kopiert. CAD-Programme (Computer Aided Design) unterstützen die Erstellung des Schaltplans und entflechten die Leiterbahnführung von Platinen.

18

Abb. 2.9 Logisches Symbol für das 3-State-Register und Fotografie

Für acht Dateneingänge und acht Datenausgänge sowie einen Pin für die Datenübernahme und Freigabe des Ausgangs ergeben sich 18 Pins. Mit der Versorgungsspannung und Masse gibt es somit 20 Anschlüsse am Chip. Tabelle 2.6 Wahrheitstafel für Register

/OE L L H

2.4

Eingänge Clock

X

Daten Dn H L X

Ausgänge Qn H L Z

H » hoher Spannungspegel L » niederer Spannungspegel X » beliebig- don't care Z » hochohmiger Ausgang » L zu H Flanke

Latch

Im Gegensatz zum Register speichert das Latch nicht mit der steigenden Flanke, sondern die Übernahme der am Dateneingang stehenden Daten erfolgt mit H-Pegel am LE-Signal (Latch enable). Ist der Ausgang auf /OE = L (Output Enable = niedriger Spannungspegel) und LE = H, werden die anstehenden Daten unmittelbar durchgeschaltet. Ist LE = L werden die bisher angestandenen Daten im Latch zwischengespeichert.

Abb. 2.10 Logisches Symbol für das 3-State-Register und Fotografie

2 Die Peripherie des µ-Controllers

19

Tabelle 2.7 Wahrheitstafel Latch /OE L L L H

Eingänge LE H H L X

Daten Dn H L X X

Ausgänge Qn H L NO CHANGE Z

H = hoher Spannungspegel L = niederer Spgs.- pegel X = beliebig - don't care Z = hochohmiger Ausgang NO CHANGE = keine Änderung

Das Latch 74573 und das Latch 74373 sind funktionell identisch, lediglich die Pin-Belegung unterscheidet sich. Der Unterschied zwischen Latch und Register liegt in der Datenübernahme: ‚ Beim Latch erfolgt eine pegelabhängige Datenübernahme ‚ Beim Register erfolgt eine flankenabhängige Datenübernahme 2.5

Empfehlungen für digitale Schaltungen

0. Timing, Timing, Timing 1. Gleiche Familie Beim Aufbau von µ-Computer Hardware wird dringend angeraten, innerhalb eines Systems immer die gleiche Familie - Bausteinsorte (F, TTL, CMOS) - zu verwenden. 2. FAN-Out Der FAN-Out, d.h. die Anzahl der steuerbaren Eingänge pro Ausgang, ist zu beachten. 3. Kein unbeschalteter Eingang Es darf kein offener Eingang in der Schaltung vorhanden sein. 4. Diagnose Für die Überwachung sollten einfache Diagnosepunkte vorhanden sein, z.B. Ausgänge von Flip-Flops, LED für Versorgung. Mit diesen Empfehlungen und den wenigen Bausteinen, die bisher aufgeführt wurden, können wir bereits eine kleine Hardware aufbauen, mit der Daten von System 1 zu System 2 übergeben werden.

20

Vcc

System 1 1010 0101

Schreibe1

/OE

Vcc /OE_L1

Register

CP_L1

Vcc /OE_S2

Register

CP_S2

Vcc Lese2

/RD

xxxx xxxx

System 2

Abb. 2.11 Blockbild für einfache Datenübergabe von System 1 zu System 2

Die Beschreibung des Ablaufs der Datenübergabe erfolgt in einer SchrittTabelle. Hierin bedeutet: ein = Schalter betätigt aus = Schalter nicht betätigt Tabelle 2.8 Datenübergabe Schritt Nr. 1 2 3 4 5 6 7 8 9 10 11 12

Schreibe1 aus ein ein ein aus aus aus aus aus aus aus aus

CP_L1 aus aus ein aus aus aus aus aus aus aus aus aus

/OE_L1 aus aus aus aus aus ein ein ein aus aus aus aus

CP_S2 aus aus aus aus aus aus ein aus aus aus aus aus

/OE_S2 aus aus aus aus aus aus aus aus aus ein ein aus

Lese2 aus aus aus aus aus aus aus aus aus aus ein aus

Daten-Ort System 1 vor Register 1 vor Register 1 Übernahme in Register 1 auf Bus vor Register 2 Übernahme vor System2 vor System2 in System 2

2 Die Peripherie des µ-Controllers

21

Natürlich muss die Datenübergabe auch in die andere Richtung funktionieren. Das System wird auf ein bidirektionales System erweitert (= Datenflüsse in beide Richtungen möglich). Vcc

System 1 Lese1

/RD

Schreibe1

1010 0101

/WR

Vcc

Vcc

/OE_L1

Register

CP_L1

/OE_S1

Register

CP_S1

Vcc

Vcc

/OE_L2

Register

CP_L2

/OE_S2

Register

CP_S2

Vcc

Lese2 Schreibe2

/RD 0011 1100 /WR

System 2

Abb. 2.12 Blockbild für bidirektionale Datenübergabe von System 1 zu System 2

Die Schritte in der Tabelle für die Datenübergabe von Register 1 nach Register 2 vollzieht später das Steuerwerk im µ-Prozessor nach, so dass der Programmierer diese einzelnen Schritte nicht immer wieder selbst programmieren muss. Aufgabe Erstellen Sie die Tabelle bei Übergabe von System 2 nach System 1. 2.6

Adress-Decoder

Die Bestimmung, welcher Systemteil angesprochen wird, kann natürlich nicht mit einem Schalter erfolgen. Um verschiedenste Bausteine anzusprechen, werden die einzelnen Signale mit einem Schaltnetz, dem Decoder, erzeugt.

22

Abb. 2.13 Logisches Symbol eines 1 aus 4 Decoders und Fotografie Tabelle 2.9 Pin Namen Pin A0,A1 /E /O0,/O1,/O2,/O3

Bedeutung Adress Inputs Enable Inputs Outputs

Die Bezeichnungen im Bild und die Pin-Namen in der Tabelle stimmen nicht überein. Falls Sie praktisch arbeiten, verwenden Sie Datenbücher verschiedener Hersteller und verschiedene Computerprogramme für das Layout, mit unterschiedlichen Pin-Bezeichnungen. In dem vorliegenden Fall wurde das logische Symbol dem CAD-Programm "Eagle" entnommen und die PinNamen einem Datenbuch von Motorola. Sie erkennen, dass die Eingänge A, B des logischen Symbols den Pin-Namen A0, A1, der Steuereingang G dem PinNamen /E Enable Inputs und die Ausgänge Y0, Y1, Y2, Y3 den Ausgängen A0, A1, A2, A3 zuzuordnen sind. Tabelle 2.10 Wahrheitstabelle für einen Adressdecoder (Baustein 74LS139) /E H L L L L

Inputs A1 X L L H H

A0 X L H L H

/O0 H L H H H

Outputs /O1 H H L H H

/O2 H H H L H

/O3 H H H H L

Wichtig ist die gegenseitige Verriegelung der Ausgänge, um zu gewährleisten, dass verschiedene Treiberbausteine nicht zeitgleich Daten auf den Datenbus legen. Dies würde dann einen Kurzschluss verursachen, wenn die Ausgänge der beiden Treiber unterschiedliches Potential hätten. Für eine Adressdecodierung können auch andere Bausteine programmiert werden. Beispielsweise ein PROM (Programmable Read Only Memory/Nur-LeseSpeicher), ein PAL (Program Array Logic) oder GAL (Wiederbeschreibbare Array Logic).

2 Die Peripherie des µ-Controllers

23

Ein Adressdecoder hat die Aufgabe, aus der anliegenden Bitkombination der Adressleitungen den entsprechenden Baustein zu wählen. Liegen vier Adressleitungen vor, können 16 Bausteine ausgewählt werden. Sind 10 Adressleitungen dekodiert, können folglich 1024 Bausteine angewählt werden. Dies ist beispielsweise beim alten AT-Bus im I/O-Bereich ~ Input-Output-Bereich der Fall. 2.7

Bus

In den bisherigen Ausführungen wurden die acht Datenleitungen zu einem dicken Pfeil zusammengefasst dargestellt. Dies ist der Datenbus. Bei einem 8Bit-Rechner handelt es sich um einen Datenbus mit 8 Leitungen entsprechend bei einem 16-Bit-Rechner um 16 Leitungen usw. Bei unserem einfachen System haben wir nur eine Speicheradresse pro System. Haben wir aber mehrere Speicheradressen, müssen wir diese ebenfalls adressieren. Dazu dienen die Adressleitungen. Die Anzahl der Adressleitungen ergibt den Adressbus. Ein 8Bit-Rechner kann beispielsweise 16 Adressleitungen haben. Hiermit lassen sich 216 = 65 536 Bytes ansprechen. Mit den Schaltern werden in unserem einfachen System zur Datenübergabe zwei Aufgaben realisiert: 1. Betätigen des Schalters gibt den Befehl zum Schreiben oder Lesen. 2. Bei Drücken des entsprechenden Schalters wird der Schalter selbst "adressiert", d.h. ausgewählt. Man kann auch sagen, der Ort bzw. die Adresse wählt den Schalter aus, bzw. die Betätigung des Schalters führt zu der entsprechenden Funktion. Trennen wir diese beiden Aufgaben in zwei Leitungen auf, so erhalten wir eine Adressleitung und eine Steuerleitung. Die Adressleitungen werden zu einem Adressbus zusammengefasst. Entsprechend fassen wir die Steuerleitungen Read/Write zu einem Steuerbus bzw. Controlbus zusammen. Zusätzlich kann ein solches System über den Speicher hinaus auch noch I/O-Leitungen, den I/O-Bus zum Ansprechen von Peripherie haben. Prinzipiell funktioniert die Adressierung wie bei den Speichern. Der Unterschied, ob ein Speicherzugriff oder ein I/O-Zugriff erfolgt, ist am Zustand der I/O-Leitung erkennbar. Das Wort Bus bedeutet im weitesten Sinne eine beliebige Anzahl von Leitungen. Aufgrund der Datenart auf dieser Leitung gibt es weitere Unterscheidungen zwischen Adressbus, Datenbus, Controlbus, I/O-Bus. Zusätzlich können die Leitungen zu unterschiedlicher Zeit durch verschiedene Datenarten belegt sein. Dann spricht man von einem Bus mit MultiplexVerfahren oder einem multiplexten Bus.

24

Warum diese unübersichtliche Doppelverwendung von Leitungen? Ein Grund besteht in der Ersparnis von Leitungen und Pins an den Chips. Diese Technik reduziert die Anzahl der Beinchen und ermöglicht so eine einfachere Produktion der Chips. Im nachfolgenden Blockschaltbild sehen Sie die verschiedenen Busse eines µ-Controllersystems. Es handelt sich dabei um die Euro_535-Karte. Diese Karte umfasst ein sehr flexibles Grundsystem auf Basis eines Controllers aus der 8051-Familie.

Port 0

Low-Byte-Adresse / Datum

AdressLatch

Low-Byte-Adresse

Eprom

ALE

80535

Port 2

J2 J3,8

High-Byte-Adresse

Microcontroller CE

OE

VAGND VAREF

Port 1

AN Port 6

PSEN

RAM Port 5

Port 4

Port 3

J1 WR / P3.6

WE

CS OE

A15 RD / P3.7

AdressLogik J4,5,6,7

RxD / P3.0

Steckerleiste

TxD / P3.1

V24Treiber

PC

V24Treiber

PC

P1.1 P1.3 P3.3 P1.2 P3.2 P3.4 R2OUT / P1.4 T1 T2 T3

L1 L2 L3

Tasten / Leuchten

T2IN / P4.7

Abb. 2.14 Blockschaltbild - Bussysteme für 80535-System

Der hier vorgestellte Baustein 80535 ist ein Derivat (= Erweiterung) eines 8051-Controllers. Auf den 80535-Controller wird in den nachfolgenden Ausführungen immer wieder verwiesen. Am µ-Controllerbaustein sind die verschiedenen Busse, bestehend aus Leitungen, angeschlossen. An den Ports 1,3,4,5 sind allgemeine I/O-Datenbusse angeschlossen. Es handelt sich um bidirektionale Ports. An Port 2 können die oberen 8 Bit des Adressbusses angeschlossen werden. Ist kein externer Speicher am µ-Controller angeschlossen, können diese Leitungen als allgemeine I/O-Ports verwendet werden.

2 Die Peripherie des µ-Controllers VG-Leiste Quarz

Prozessor

Latch

RAM

DIP-Switches

ROM

Taster

25

+5V Anschluß

RESET Serielle Schnittstelle

Abb. 2.15 Aufbau der EURO_535-Platine

Sie erkennen an Port 0 den gemultiplexten Adress-Datenbus. Dieser AdressDatenbus ist 8 Bit breit und führt zu den Einheiten: ‚ Speicher: EPROM (Erasable Programmable Read Only Memory) = Löschbarer Nur-Lese-Speicher. RAM (Random Access Memory) = Speicher mit wahlfreiem Zugriff, d.h. Lesen und Beschreiben des Speichers ist möglich. ‚ Steckerleiste ‚ Adresslatch Das Adresslatch hat die Adressen während der Zeit, in der Daten auf dem gemeinsamen Bus liegen, zwischenzuspeichern. Dieser Vorgang ist im nächsten Bild nochmals veranschaulicht. Zum Zeitpunkt t1 legt der Prozessor beispielsweise die Bitkombination 1010 0101 an Port 0 auf den Datenbus. Gleichzeitig erscheint an ALE ein HighPegel. Zum Zeitpunkt t2 nimmt ALE den Zustand Low an und speichert somit die Adresse im Latch. Anschließend legt der Prozessor zum Zeitpunkt t3 die Daten auf den Bus.

26

1010 0101 Adress-

t1

Port 0

1010 0101

1010 0101 1010 0101

ALE

1

latch

xxxx xxxx Adress-

t2

Port 0

xxxx xxxx

1010 0101 1010 0101

ALE

0

latch

1011 1101 Adress-

t3

Port 0

1011 1101

1010 0101 1010 0101

ALE

0

latch

Abb. 2.16 Ablauf der zeitgemultiplexten Adress-Daten-Zustände

Der Unterschied zwischen Multiplexen und zeitlichem Demultiplexen mit einem Latch wird deutlich, wenn man einen 2 x 4 Multiplexer mit 3-StateAusgang untersucht. Als Beispiel sei der Baustein 74HCT257 gewählt. Nibble A Nibble B

Select

A A A A 0 1 2 3

B B B B 0 1 2 3 74F257

OE

Y Y Y Y 0 1 2 3

Abb. 2.17 2x4 Multiplexer und Fotografie

Bei diesem Baustein können die Eingangsdaten gleichzeitig anliegen. Jeweils ein Nibble (1 Nibble = 4Bit = 1/2 Byte) wird auf den Ausgang durchgeschaltet. Ein in der Funktion des Multiplexers identischer Teil muss folglich im µ-Controller vorhanden sein.

2 Die Peripherie des µ-Controllers

27

Tabelle 2.11 Wahrheitstabelle Multiplexer Eingänge /OE H L L

Select X L H

Ausgänge Qn Z A0-A3 B0-B3

Im µ-Controller muss für das Umschalten zwischen Adressen und Daten ein 2x8 Multiplexer enthalten sein. Der Ausgang des Multiplexers wird an Port 0 anliegen. Bei der EURO_535-Karte ist ein Teil des Adressbusses auf eine besondere Adresslogik geführt. Diese Logik wird im Kapitel 3.7. "Timingberechnungen für 80535-Speicher" im Detail besprochen. 2.8

Schaltplan EURO_535 Karte

Falls Sie zum ersten Mal einen solchen Schaltplan sehen, mag dieser sehr unübersichtlich erscheinen. Sie erkennen aber sicherlich den Controller 80C535, den Latch 74573, das EPROM 27256, das RAM 56256, den Baustein für die seriellen Schnittstellen MAX232 und die drei Steckerleisten ST3A, ST3B, ST3C. Die kleineren Kästchen in der Bildmitte 7402, 7474, 7486 und 7402 gehören alle zur Adresslogik. Im zweiten Teil des Schaltplanes sind die Taster und die Leuchtdioden aufgeführt. Eine zweite serielle Schnittstelle kann mit den zwei Signalen R2OUT und T2IN, angeschlossen an Port 1.4 und Port 4.7, erzeugt werden. Alle Zusatzbeschaltungen der Ports auf der Platine können durch die DIPSwitches (Dual Inline Packages Switches) abgeschaltet werden. Hierdurch können auf der Steckerleiste alle Portanschlüsse für beliebige Schaltungen zugänglich gemacht werden. Beachten Sie deshalb beim Anschluss von Zusatzkarten an der Steckerleiste immer die Einstellungen der DIP-Switches. Die Schalter in einem Gehäuse werden lustiger weise auch oft "Mäuseklavier" genannt. Die Verwendung solcher Schalter sollte möglichst vermieden werden, um Fehlbedienungen zu vermeiden.

28

2 Die Peripherie des µ-Controllers

29

3 Aufbau von µ-Controllern der 8051-Familie

In den nachfolgenden Ausführungen tasten Sie sich von außen an die „Geheimnisse“ der Bausteine heran. Sie laufen gewissermaßen um den Baustein herum und studieren jeden Anschluss. Danach gehen Sie eine Schicht tiefer in den Baustein hinein und befassen sich mit der Funktionsweise des Anschlusses. Die nachfolgende Architekturbetrachtung ist sicherlich der interessanteste Teil. Hier werden wieder die einzelnen Teile von außen studiert, um danach wiederum eine Schicht tiefer vorzudringen. Diese Vorgehensweise lässt sich mit der Reise in eine Stadt vergleichen. Zuerst wählen Sie eine der verschiedenen Anreisemöglichkeiten wie Bahn, Bus, Auto, Schiff oder Flugzeug aus. In einem Übersichtsbild finden Sie die "Eingänge" und "Ausgänge" der Stadt . Reisen Sie mit dem Flugzeug an, müssen Sie sich zuerst im Flughafen zurechtfinden. Haben Sie dort Ihr Gepäck und den Ausgang gefunden, schauen Sie sich den Übersichtsplan an, um den groben Aufbau der Stadt genauer kennenzulernen. Das Blockbild entspricht also dem Übersichtsplan. V SS

V CC

XTAL1 XTAL2

RST/V

Port 0

Adress- und Datenbus

PD

/EA

8051 /PSEN

Port 1

ALE

RxD TxD /INT0 /INT1 T0 T1 /WR /RD

Port 3

Abb. 3.1 Logisches Symbol des 8051

Port 2

Adressbus

3 Aufbau von µ-Controllern der 8051-Familie

31

Für die Anschlüsse ist die Darstellung in Form des logischen Symbols vorteilhaft. Es gibt zwei Arten von Anschlussleitungen, erkennbar an der zweiten, aus Pfeilen bestehenden Reihe. An Port 0 sehen Sie zusätzlich einen Adress- und einen Datenbus. Diese Darstellung zeigt bereits die Flexibilität der Bausteine. Je nach Einsatzgebiet können diese Leitungen als einfache I/O-Leitungen oder als Adress- und Datenbus verwendet werden. Das "oder" ist als Exklusiv-Oder zu verstehen. Die Signalbeschreibung erfolgt nach dem logischen Symbol in Gruppen. Es wird eine allgemeine Beschreibung der Pin-Anschlüsse gegeben und in Form einer Tabelle dargestellt. Die genaue Bezeichnung und die Anschlussbelegung der DIL-Version sind ebenfalls in der Tabelle enthalten. 3.1

Pin-Definitionen und Funktionstabelle

Tabelle 3.1 Pin-Definitionen und Funktionen der 8051 DIL-Version Symbol Vss Vcc XTAL1

Pin In Out 20 40 19

XTAL2

18

RST/VPD 9

I

/EA

31

I

/PSEN

29

O

ALE

30

O

P0.0-P0.7 3932 P1.0-P1.7 1-8 P2.0-P2.7 2128 P3.0-P3.7 1017

I/O I/O I/O I/O

Funktionen - Beschreibung 0-Potential - Digitale Masse +5V Spannungsversorgung Eingang zum Oszillatorverstärker. Wird gebraucht, wenn ein Quarz benutzt wird. Wird mit Vss verbunden, wenn eine externe Quelle an XTAL2 benutzt wird. Ausgang vom Oszillatorverstärker. Eingang zum internen TimingTeil. Ein Quarz oder eine externe Quelle kann benutzt werden. Reset - Ein 1-Pegel setzt den Baustein zurück. Ein kleiner, interner Pull down-Widerstand erlaubt beim Einschalten ein Reset nur durch Zuschalten eines einfachen Kondensators. Weiterhin kann der VVPD zum Steuern von Stand-by-Power verwendet werden. Bei 0-Pegel holt der 8051 alle Instruktionen vom externen Programmspeicher. Bei 1-Pegel bis zu den Adressen 4096, d.h. die unteren 2KByte vom internen Speicher. Program Storage Enable. Ist ein zum Controlbus gehöriges Signal für den externen Programmspeicherzugriff. Es wird alle 6 Oszillatorperioden aktiviert. Es bleibt auf 1-Pegel, wenn interner Programmspeicherzugriff erfolgt. Dient zur Steuerung des externen Adresslatch für das zeitliche Demultiplexen der Daten und Adressen. Es wird alle 6 Oszillatorperioden bei externem Speicherzugriff aktiviert. Port 0 ist ein bidirektionaler open drain I/O Port. Wird auch für die Adressen und Daten verwendet bei der zweiten Betriebsart. Ist ein 8-Bit quasibidirektionaler Ein-, Ausgangsport. Ist ein 8-Bit quasibidirektionaler Ein-, Ausgangsport. In der zweiten Betriebsart stellt er die oberen acht Bit der Adressen zur Verfügung. Ist ein 8-Bit quasibidirektionaler Ein-, Ausgangsport. In der zweiten Betriebsart stellt er wichtige alternative Funktionen zur Verfügung.

32

3.2

Prinzipieller Aufbau eines 8051-Ports.

Gehen Sie vom Port-Pin eine Schicht tiefer in den Baustein hinein, erkennen Sie die Portstruktur. Port 0 wird nach den anderen Ports betrachtet. Der Grundaufbau der Ports 1 bis 3 ist im Bild dargestellt. Read Latch

gesperrt

interner Bus Write Latch

Q

D CLK

Port Latch

Port /Q

Read Pin freigegeben

Treiber

im Baustein

Port Pin

außerhalb

Abb. 3.2 Prinzipieller Aufbau eines 8051-Ports

Die Basis-Struktur des Anschlusses erfüllt folgende Aufgaben: ‚ Zustand des Pins lesen ‚ Pin beschreiben und Speichern des Zustandes ‚ Zustand des Port-Latches lesen Alle Aufgaben der Ports veranschaulichen die hervorgehobenen Datenpfade in den folgenden Bildern. Port lesen Wird der Read-Pin freigegeben, gelangt der Zustand des Port-Pins auf den internen Bus. Die graue Linie zeigt den Datenweg über das durchgeschaltete Tri-State-Gatter, angesteuert mit Hilfe des Read-Pin-Signals. Die gestrichelte Linie deutet die Bausteingrenzen an. Der Zustand des ReadLatches ist gesperrt, da sonst zwei Ausgänge gegeneinander geschaltet wären. Read Latch

gesperrt

interner Bus Write Latch

Read Pin

D Port CLK Latch

Q Port

/Q

freigegeben

Abb. 3.3 Datenweg: Zustand des Port-Pins lesen

Treiber

im Baustein

Port Pin

außerhalb

3 Aufbau von µ-Controllern der 8051-Familie

33

Port schreiben Wird der Port-Pin mit Daten vom internen Bus beschrieben, muss das Datum am D-Eingang des Port-Latches anliegen und gleichzeitig eine steigende Flanke am Signal Write-Latch erfolgen. In vielen Dokumentationen wird immer von einem Latch gesprochen, dann aber ein Clock eingezeichnet. Es geht aus keiner Dokumentation hervor, ob es sich um ein Latch oder ein D-Flip-Flop handelt. Read Latch

gesperrt

interner Bus

D Port CLK Latch

Write Latch

Read Pin

Q

Port /Q

gesperrt

Treiber

im Baustein

Port Pin

außerhalb

Abb. 3.4 Datenweg: Pin beschreiben mit Speichern

Port-Latch lesen Will man den Zustand des Port-Latches herausfinden, kann dieser durch Freigabe des Datenpfades vom Ausgang des Latches auf den internen Bus gelegt werden. Deshalb muss der Latch-Treiber durchgeschaltet werden. Infolge des allgemeinen Aufbaus der Ports mit einem D-Flip-Flop und den Tri-State-Gattern können alle Grundfunktionen realisiert werden. Dieser allgemeine Aufbau der Ports ergibt die große Anzahl von Nutzungsmöglichkeiten des µ-Controllers. Bei µ-Prozessoren gibt es keine solchen allgemein verwendbaren Ports. Für die Anbindung von Prozessoren an den Systembus müssen normalerweise zusätzliche Treiberbausteine mit entsprechend hohen Ausgangsströmen verwendet werden. Read Latch

freigegeben

interner Bus

D Port CLK Latch

Write Latch

Read Pin

gesperrt

Abb. 3.5 Zustand des Port-Latches lesen

Q Port /Q

Treiber

im Baustein

Port Pin

außerhalb

34

Port-Treiber Ports sind sowohl Eingänge als auch Ausgänge. Diese beiden Funktionen können hervorragend mit einem FET gelöst werden. Der Port-Pin liegt einerseits am FET und andererseits über einem Tri-State-Gatter - Read-Pin - am internen Bus. Die Steuerung des FET's erfolgt durch den /Q Ausgang des Port-Latches. Der eingezeichnete Widerstand von ca. 50kY ist als FET realisiert und variiert sehr stark. Je nach Zustand des Ports schwankt der Wert erheblich. Je nach verwendetem µ-Controller-Typ, beispielsweise NMOS oder C-MOS, unterscheiden sich die Werte ebenfalls. Ein exaktes Vorgehen setzt den Blick ins Datenblatt voraus. V CC

Read Latch

ca. 50kY interner Bus

Q

D Port

Write Latch

CLK

Latch

Port Pin

/Q

n

1

VDD Read Pin

außerhalb

im Baustein

Abb. 3.6 Aufbau des Treiberbausteins Port 1 bis 5

Die Funktion der FET's im Controller FET ist die Abkürzung für Feldeffekttransistor. Wie der Name sagt, wird dieser Transistor mit dem elektrischen Feld, d.h. leistungslos gesteuert. Das Gate (= Gatter) ist die Steuerelektrode. Mit ihm lässt sich der Widerstand zwischen Drain (= Senke) und Source (= Quelle) steuern (Fall A). Liegt am Gate ein HIGH=1 (Transistor leitend, Widerstand klein), so erhält der Ausgang ein LOW=0 (Fall B). Entsprechend umgekehrt im Fall C. +5V

0

Ausgang Eingang

D

G

S 0V

A

+5V

+5V

1 0

1 0V

0V

B

C

Abb. 3.7 Funktionsweise der FET's im Controller

3 Aufbau von µ-Controllern der 8051-Familie

3.2.1

35

Port 0

Fan-Out bedeutet, dass der Baustein bis zu 8 LS-Eingänge ansteuert. Port O ist ein bidirektionaler 8-Bit Open-Drain-Ein-, Ausgang. 1. Fall: Datum 0 am Adressenausgang MUX ist auf die Address-Data-Leitung geschaltet. Es liegt als AdressDatum ein 0 vor. Control liegt auf 1. Am Ausgang des Und-Gliedes liegt daher eine 0. Der obere FET sperrt und die 5V-Spannung wird nicht durchgeschaltet. Infolge der Verneinung vor dem MUX erscheint eine 1 am unteren FET. Dieser leitet und schaltet den 0-Pegel auf den Ausgang. Address Data

VCC

Control

0

Read Latch

1 0 sperrt

&

interner Bus Write Latch

Q

D

1

Port CLK

1

Latch /Q

P0.x Pin

0

leitend n 1

MUX

V DD

Read Pin

im Baustein

außerhalb

Abb. 3.8 Port 0 als Adressausgang mit 0-Pegel am Ausgang

2. Fall: Datum 1 am Adressenausgang MUX ist auf die Address-Data-Leitung geschaltet. Als Adress-Datum liegt eine 1 vor. Control liegt auf 1. Am Ausgang des Und-Gliedes liegt daher eine 1. Folglich leitet der obere FET und die 5V-Spannung wird durchgeschaltet. Infolge der Verneinung vor dem MUX erscheint eine 0 am unteren FET. Hierdurch wird dieser sperren. Der Pegel 1 erscheint am Ausgang. Das "x" bei P0.x Pin steht für die Zahlen 0 bis 7. VCC

Address Data Control

1

Read Latch

interner Bus Write Latch

1 &

Q

D

Port CLK

1 leitend

0

0 sperrt

Latch /Q MUX

P0.x Pin

1

n 1 V DD

Read Pin

im Baustein

Abb. 3.9 Port 0 als Adressausgang mit 1-Pegel am Ausgang

außerhalb

36

3. Fall: Datum 0 am Datenausgang MUX ist auf den Ausgang des Port- Latches geschaltet. Es liege auf dem internen Bus eine 0 vor. Control liegt auf 0. Am Ausgang des UndGliedes liegt daher eine 0. Somit sperrt der obere FET. Die 0 vom internen Bus gelangt über den /Q-Ausgang als 1 zum Gate des unteren FET's. Dieser wird leitend. Der 0-Pegel erscheint am Ausgang des P0.x Pins. Address Data

V CC

Control

X

Read Latch

interner Bus

0 &

0

0

Q

D

X

Port

Write Latch

CLK

0 sperrt

Latch

1

/Q

P0.x Pin

0

leitend n1

MUX

VDD

Read Pin

im Baustein

außerhalb

Abb. 3.10 Port 0 als Datenausgang mit 0-Pegel

4. Fall: Datum 1 am Datenausgang MUX ist auf den Ausgang des Port- Latches geschaltet. Es liegt auf dem internen Bus eine 1 vor. Control liegt auf 0. Am Ausgang des Und-Gliedes liegt daher eine 0. Folglich sperrt der obere FET. Die 1 vom internen Bus gelangt über den /Q-Ausgang des Port Latch als 0 zum Gate des unteren FET. Dieser sperrt ebenfalls. Hierdurch floatet das Ausgangssignal an Port 0. Also muss man zwei Betriebsarten unterscheiden. Wird der Port nicht als generelles I/O-Port verwendet, reicht infolge der internen Pull-upWiderstände das "Float“-Signal für den Anschluss von 8 LS TTLBausteinen aus. Für den Betrieb als allgemeiner I/O Ausgang müssen externe Pull-upWiderstände verwendet werden. VCC

Address Data Control

x

Read Latch

interner Bus Write Latch

0 &

1

1

D Port CLK Latch

0 sperrt

Q

x

0 sperrt

/Q MUX

P0.x Pin n1

1

float

V DD

Read Pin

im Baustein

Abb. 3.11 Port 0 als Datenausgang mit 1-Pegel am Ausgang

außerhalb

3 Aufbau von µ-Controllern der 8051-Familie

3.2.2 ‚

37

Port 1 Fan-Out 4 LS TTL

Port 1 ist ein bidirektionaler 8-Bit Ein-, Ausgangsport mit internem Pull-up-Widerstand. Dieser Port ist allgemein verwendbar zum Ansteuern oder Einlesen von Schaltern bzw. anderen Baugruppen. VCC

Read Latch

ca. 50 K Y interner Bus Write Latch

Q

D Port CLK

Latch

P1.x Pin

/Q

n

1

V DD Read Pin im Baustein

außerhalb

Abb. 3.12 Port 1 als bidirektionaler Port mit internem Pull-up Widerstand

3.2.3

Port 2

Fan-Out 4 LS TTL Port 2 ist ein bidirektionaler 8-Bit Ein-, Ausgangsport mit internem Pull-up-Widerstand. In der anderen Betriebsart werden die oberen 8-Bit für die Adressierung von externen Speicherbausteinen ausgegeben. VCC Address Data Control

Read Latch

MUX interner Bus Write Latch

Q

D

P2.x Pin

Port CLK

Latch /Q

n1 V DD

Read Pin

im Baustein

außerhalb

Abb. 3.13 Port 2 als bidirektionaler Port mit internem Pull-up-Widerstand

38

3.2.4 ‚

Port 3 Fan-Out 4 LS TTL Alternate Output Function

Read Latch

VCC Control

1

MUX

interner Bus Write Latch

D

Port CLK Latch

P3.x Pin

Q &

/Q VDD

Read Pin

im Baustein

Alternate Input Function

außerhalb

Abb. 3.14 Port 3 als bidirektionaler Port mit Alternate Functions

Port 3 ist ein bidirektionaler 8-Bit Ein-, Ausgangsport mit internem Pull-up Widerstand. In der zweiten Betriebsart können verschiedene spezielle Funktionen mit den Ausgängen realisiert werden. Diese werden auch als Alternate Functions bezeichnet. Hierzu können Sie nochmals Bild 3.1 ansehen. Dort erkennen Sie die zusätzlichen Funktionen. Diese werden in der Tabelle für alternative Funktionen an Port 3 aufgeführt. Tabelle 3.2 Alternative Funktionen an Port 3 Port Pin P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7

Bezeichnung RxD TxD /INT0 /INT1 T0 T1 /WR /RD

Ein-, Ausgang Eingang Ausgang Eingang Eingang Eingang Eingang Ausgang Ausgang

Alternative Funktionen serieller Empfang serielles Senden Interrupt 0 Interrupt 1 Timer 0 Timer 1 externes Schreibsignal externes Lesesignal

Der interne Aufbau von Port 3 unterscheidet sich vom prinzipiellen Aufbau der anderen Ports durch seine zusätzlichen alternativen Funktionen. Um die alternative Funktion zu aktivieren, muss das Gate zwischen dem Latch und dem Treiberteil geöffnet sein. Dies bedeutet, dass das korrespondierende Bit im SFR Special Function Register eine 1 enthalten muss. Ist Alternate Function = 0, können auch die Daten vom Port-Latch nicht durchgeschaltet werden. Nach dem verfeinerten Blockschaltbild kommt das Signal über den Alternate Function-Anschluss.

3 Aufbau von µ-Controllern der 8051-Familie

3.3

39

Blockdiagramm 8051 - 8051A Counters

Frequency Reference

Oscillator & Timing

4096 Byte Program Memory 8051A only

128 Byte Data Memory

Two 16-Bit Timer/Event Counters

8051 CPU

64 KByte Bus Expander

Programmable I/O

Control

Programmable Serial port Full duplex UART Synchronous Shifter

Interrupts

Interrupts

Parallel Ports Adress Data Bus

Serial IN

Serial OUT

and I/O Pins

Abb. 3.15 Blockdiagramm des 8051 - 8051 A

Oscillator & Timing In diesem Teil wird der Grundtakt, von dem alle anderen Signale abgeleitet werden, erzeugt. Die interne Clock-Frequenz beträgt die Hälfte der Oszillatorfrequenz. Diese internen Signale definieren die Phasen, die internen Zustände und die Maschinenzyklen. 4096 Byte Program Memory 8051A only 4096 Byte Programmspeicher sind nur im 8051A enthalten. Die Programmierung dieser Speicher erfolgt beim Hersteller. 128 Byte Data Memory 128 Byte Datenspeicher sind im 8051 enthalten. Dieser Speicher wird durch den internen Datenbus angesprochen. Two 16-Bit Timer/Event Counters Zwei 16-Bit breite Zeitzähler oder Ereigniszähler sind in diesem Teil realisiert. Die beiden Zähler werden durch die Eingänge T0 und T1 angesteuert.

40

Programmable Serial Port Full Duplex UART Synchronous Shifter Dieser Teil ist ein programmierbarer, serieller Port mit vollduplex Universal Asynchronous Receiver Transmitter. Der universelle, vollduplex asynchron arbeitende Empfänger und Sender hat auch einen synchron arbeitenden Shifter. Programmable I/O - Parallel Ports - Adress Data Bus and I/O Pins Die programmierbaren, parallelen Ports stellen die bereits besprochenen Schnittstellen zur Umgebung des Bausteins dar. 64 KByte Bus Expander Control Dieser Teil erzeugt die für das Ansprechen von externem Speicher notwendigen Kontrollsignale. 8051 CPU Der wichtigste Teil des Controllers ist die CPU Central Processing Unit, die Zentraleinheit. Hier werden die Instruktionen ausgeführt. Die Interrupts (= Unterbrechungen) in der Programmabarbeitung können von internen Systemteilen oder von externer Peripherie erzeugt werden. Bestandteil der CPU ist in dieser Darstellung auch das Leitwerk, wie es im klassischen Digitalrechner bezeichnet wird. Das Leitwerk übernimmt die Schaltabfolge, wie sie im Blockbild für einfache Datenübergabe von System 1 zu System 2 in Kapitel 2 gezeigt wurde. Befehle werden im Befehlsdecoder interpretiert. Weitere wichtige Bestandteile der CPU sind der Akkumulator, die arithmetische logische Einheit, das Programm Statuswort und die zusätzlichen Hilfsregister. Das verfeinerte Blockschaltbild für den 8051-Kern zeigt Abbildung 3.16. Die im Bild verwendeten Abkürzungen finden Sie in der Tabelle 3.3. Drei zusätzliche periphere Einheiten - Unterbrechungs-Steuerung, Serielles Port, Zähler/Zeitgebersteuerung - sind im Kern des 8051-Controllers integriert. Die einzelnen Register dieser Einheiten sind jeweils 8 Bit breit. Bei einer Breite von 16 Bit in der Timer-Einheit werden jeweils zwei 8-BitRegister zusammengefasst. Hervorgehoben mit etwas dickeren Strichen ist rechts oben im verfeinerten Blockdiagramm des 8051 - 8051A der Adressbus. Die oberen 8 Bit des Adressbusses gehen zu Port 2 und die unteren 8 Bit zu Port 0. An beiden Ports ist gleichzeitig der Datenbus angeschlossen. Zwischen diesen beiden Bussen muss multiplext werden. Wie dies realisiert wird, ist bereits in Bild 3.11 und 3.13 gezeigt, wo der innere Teil der Ports untersucht wird.

3 Aufbau von µ-Controllern der 8051-Familie

41

4Kx8 RAM Adressen Dekodierer

Akkumulator

128x8

RAM-Adressen Dekodierer

ROM

RAM

Temporäres

Programm

Register

Statuswort

PCH

DPH

PCL

DPL

Befehlsdecoder

B-Register

Stack Pointer

Port 2

IE IP Unterbrechungs-

Port 0

Steuerung Arithmetisch SCON

logische

SBUF(Senden) Temporäres

Einheit

SBUF(Empfang)

Register

Serielles Port Port 1 Steuersignale TCON TMOD TL0 Steuerlogik

Oszillator

TH0 TL1 TH1

XTAL1

XTAL2

/EA

ALE

/PSEN

RST

Zähler/Zeitgeb.

VPD

Steuerung Statuswort

Port 3

Abb. 3.16 Verfeinertes Blockdiagramm des 8051 - 8051 A Tabelle 3.3 Verwendete Abkürzungen im verfeinerten Blockbild des 8051 Abkürzung Bedeutung engl. RAM Random Access Memory ROM Read Only Memory PCH Program Counter High Byte PCL Program Counter Low Byte DPH Data Pointer High Byte DPL

Data Pointer Low Byte

IE IP SCON

Interrupt Enable Interrupt Priority Serial Control

SBUF SBUF TCON TMOD TL0, TH0

Serial Buffer Serial Buffer Timer Control Timer Mode Timer 0 Low Byte, Timer 0 High Byte TL1, TH1 Timer 1 Low Byte, Timer 1 High Byte

Erklärung Schreib- und Lesespeicher Nur-Lesespeicher Programmzähler höherwertiges Byte Programmzähler niederwertiges Byte Adresszeiger auf externen Datenspeicher höherwertiges Byte Adresszeiger auf externen Datenspeicher niederwertiges Byte Register für Unterbrechungsfreigabe Register für Unterbrechungspriorität Register für Einstellungen des seriellen Interface Speicher für Senden Speicher für Empfangen Zeitgeber Kontrolle Register für Zeitgebereinstellungen Low Byte, High Byte von Zeitgeber 0 Low Byte, High Byte von Zeitgeber 1

42 Abkürzung Bedeutung engl. /EA External Address ALE

Address Latch Enable

/PSEN Program Storage Enable RST / VPD Reset / Stand By Power

Erklärung Bei Low-Pegel wird auf die externen Adressen zugegriffen Übernahme der zeitgemultiplexten Adressen Zugriff auf externen Programmspeicher Rücksetzen des Prozessors / Sparbetrieb

An Port 3 sind der interne Datenbus und 4 x 2 Leitungen der internen Zusatzeinheiten mit alternativen Funktionen angeschlossen. Es ist nicht ganz korrekt, bei dem internen Bus nur vom Datenbus zu sprechen, da in diesem Bus auch Kontrollsignale wie Schreiben und Lesen in die Ports vorhanden sind. Wir können daher auch vom Systembus sprechen. Zum Systembus gehören aber ebenso die Adressleitungen, die in diesem Blockbild extra gezeichnet sind. Am Port 3 befinden sich die Leitungen für die alternativen Funktionen. Jede Leitung stellt eigentlich zwei Leitungen dar. Die Tabelle der alternativen Anschlüsse an Port 3 sei nochmals aufgeführt. Von Port 3 führen zwei Leitungen RxD und TxD zum seriellen Port. Zwei Leitungen /INT0 und /INT1 führen zur Unterbrechungssteuerung. Zwei Leitungen T0 und T1 sind mit den beiden Zeitgebern verbunden, und die beiden Low-aktiven Lese- und Schreibsignale /RD, /WR sind mit der Steuerlogik verbunden. Tabelle 3.4 Port 3 Alternative Funktionen Pin RxD TxD /INT0 /INT1

Bedeutung serieller Empfang serielles Senden Interrupt 0 Interrupt 1

Pin T0 T1 /WR /RD

Bedeutung Timer 0 Timer 1 externes Schreibsignal externes Lesesignal

3.4

Aufbau des klassischen Digitalrechners

Ein Digitalrechner lässt sich in die folgenden Blöcke unterteilen: Speicher Für die Speicherung von Daten und Befehlen bzw. Befehlsfolgen. Leitwerk Die Steuerung des Datenverkehrs zwischen Registern und Speichern. Rechenwerk Für die Ausführung von logischen und arithmetischen Operationen. Eingabeeinheit Für die Eingabe von externen Daten und auch Befehlen. Ausgabeeinheit

3 Aufbau von µ-Controllern der 8051-Familie

Für die Ausgabe von Daten und Befehlen. Eingabeeinheit

-

-

-

-

-

-

43

-

Ausgabeeinheit

Rechenwerk

Leitwerk

Speicher

Abb. 3.17 Klassischer Aufbau eines Digitalrechners

4Kx8 RAM Adressen Dekodierer

Akkumulator

Temporäres Register

128x8 RAM

ROM

RAM-Adres. Dekodierer PCH DPH PCL DPL

Programm Statuswort

B-Register

Befehlsdecoder

Stack Pointer

Port 2

IE IP Unterbrech.Steuerung

Port 0

Arithmet. SCON

logische

SBUF(Senden)

Temporäres Register

Einheit

SBUF(Empfang)

Serielles Port

Port 1 Steuersignale TCON TMOD TL0 TH0

Steuerlogik

Oszillator

TL1 TH1 XTAL1

XTAL2

Leitwerk

/EA

ALE

/PSEN RST VPD

Eingabeeinheit /

Zähler/ Zeitgeber Statuswort

Port 3

Ausgabeeinheit

Rechenwerk Speicher

Peripherie

Abb. 3.18 Verfeinertes Blockdiagramm des 8051 mit Zuordnungen zu den Einheiten eines Digitalrechners

44

Die Ports sind als Eingabe- und Ausgabeeinheiten realisiert. Die Peripherieeinheiten sind bei µ-Prozessoren nicht Bestandteil des Chips. Genau hier liegt der Unterschied zwischen einem µ-Prozessor und einem µController. Bestimmte periphere Bausteine wie Interruptcontroller, serielle Schnittstelle und Zähler/Zeitgeber sind bereits im Chip des µ-Controllers integriert. Beim klassischen IBM-AT Rechner mit 80x86 µ-Prozessoren sind diese Bausteine jeweils als einzelner Chip aufgebaut. Diese Integration von Peripherie in einen Chip wird aber in Zukunft nicht nur bei µ-Controllern vorkommen, sondern ist in der gesamten Chipentwicklung zu beobachten. So gibt es bereits vollständige IBM-ATRechner auf einem Chip. Lediglich die Speichereinheiten sind noch als einzelne Chips realisiert. Mehrere Speicherbausteine werden auch auf einem SIMM-Modul (Single Inline Memory Modul) zusammengefasst. Das Modul besteht meistens aus acht oder neun Speicherbausteinen auf einer kleinen Platine. Diese Platine hat auf der einen Seite Anschlüsse, die bei der Montage in einem Schnappverschluss mit Stiften kontaktiert werden. Übliche Speichergrößen sind als sogenannte Streifen in den Größen 1,2,4,8,16 bis zu 8 GByte erhältlich. Einen weiteren Unterschied zwischen µ-Prozessor und µ-Controller bilden die Ports. Die flexible Struktur der Ports, nämlich die Nutzung sowohl als Ausgänge als auch als Eingänge, ist nur beim µ-Controller vorhanden. Beim Vergleich mit dem klassischen Aufbau eines Digitalrechners könnte man die Ports als Bestandteil des Chips ansehen und damit nicht zu den Eingabe- und Ausgabeeinheiten zählen. Diese Zuordnung ist abhängig davon, wo die Systemgrenzen definiert werden. Beim klassischen Digitalrechner waren die Eingabeeinheiten meist Lochkartenleser oder auch Lochstreifenleser. Die Ausgabeeinheit war ähnlich einer elektrischen Schreibmaschine oder wie ein Terminal aufgebaut. Die Zeit des klassischen Digitalrechners dauerte bis 1974. Zu dieser Zeit kamen die ersten µComputer auf den Markt. Die 8080 µ-Prozessoren wurden im Dezember 1973 erstmalig bemustert. Die ersten 8051 µ-Controller kamen als Nachfolger des 8048 (1976) 1980 auf den Markt. Dieser µ-Controller besteht also in seiner Grundstruktur vierzehn Jahre. Die weite Verbreitung und die in neuerer Zeit hinzugekommenen Anwendungen bieten somit die Sicherheit, durch Auswahl dieses Controllers eine solide Grundlagenausbildung zu gewährleisten. Die hierbei aufgezeigten Grundprinzipien werden bei allen zukünftigen µ-Computern ebenfalls zutreffen. Die Beschränkung auf einen 8-Bit-Controller gewährleistet eine bessere Übersicht und geringere Komplexität des Stoffes im Vergleich zu 16-Bit- oder 32-Bit-Prozessoren mit der entsprechenden Peripherie. Alle Grundprinzipien der µComputertechnik lassen sich ohne zu starke Vereinfachung anhand der µController studieren.

3 Aufbau von µ-Controllern der 8051-Familie

3.5

45

Blockdiagramm 80C515/C535

Der 80C515 enthält einen 8-KByte großen, programmierbaren ROMSpeicher. Die Version ohne internen ROM-Speicher wurde mit dem 80C535 µ-Controller realisiert. Der Kern der beiden Controller entspricht dem 8051 µ-Controller. Die wesentlichen Erweiterungen sind: Interrupt System

ROM RAM 80C51 Kern

Sieben Ports

Watchdog Timer

Timer 2 mit PWM A/D Wandler

Abb. 3.19 80C515 Erweiterungen

‚ ‚ ‚ ‚ ‚

8 KByte On-Chip ROM (nur 80C515) und 256 Byte On-Chip RAM 16-Bit Timer 2 mit PWM (Pulsweitenmodulation) 8-Bit A/D-Wandler 16-Bit Watchdog Timer Interrupts 7 externe / 5 interne mit 4 Prioritätsebenen Die Oszillatorfrequenz kann von 0,5 bis 16 MHz variieren. Alle Befehle des 8051- Kerns werden im 80515 µ-Controller ausgeführt. 64 von 111 Befehlen benötigen lediglich einen Zyklus. Ein auf dem Chip integrierter A/D-Wandler. Ein Multiplexer für 8 Kanäle und ein Sample & Hold (Abtast-, Halteglied) ermöglichen Abtastraten von 15 µs. Die unterschiedlichen Interruptebenen ermöglichen eine große Flexibilität.

Bild 3.20 80C515 / 80C535 Blockdiagramm (weis – 8051)

46

3.6

Adressbereiche 8051

Nachdem die wesentlichen Blöcke des 8051 und 80535 behandelt wurden, können Sie jetzt zu der Platine EURO_535 zurückkehren. Lassen Sie sich nicht verwirren, wenn ein Derivat des 8051 auf dieser Platine zum Einsatz kommt. Alle Bestandteile des 8051 sind in diesem Derivat enthalten. Bisher wurde der interne Adressbereich des 8051 studiert. Da Programm und Datenumfang von der Anwendung abhängig sind, kann der Speicherbedarf für µ-Controller sehr groß werden. Deshalb hat die Firma Intel einen externen Speicher vorgesehen. Der gesamte, einem 8051 Prozessor zur Verfügung stehende Adressbereich, kann in folgende Adressbereiche aufgeteilt werden: Adressbereiche

Datenspeicher

Programmspeicher

intern /EA=1 und Adresse tACC TLLIV > tCE TPLIV > tOE TPXIZ > tDF

Speicherzugriffszeit Chipauswahl Daten auf Datenbus Datenbus freigeben

Die erste Bedingung legt fest, dass die Speicherzugriffszeit tACC ( time access ) kleiner sein muss als die Zeit, die zwischen Adressausgabe vom Prozessor und Einlesen der Instruktion vom Prozessor TAVIV (Adress valid to instruction in) vergeht. Bei einem 16K-Eprom werden 14 Adressleitungen benötigt. Durch die gemultiplexten Adress- und Datenleitungen wird ein zusätzlicher Baustein für zeitliches Demultiplexen benötigt. Dieser geht dann in die Timingberechnung ein. Die Durchlaufzeit bei Baustein 74HCT573 muss also noch von der TAVIV-Zeit subtrahiert werden. Verwendet man den Motorola-Baustein 74HC573 beträgt die maximale Zeit bei 8000H

Am /PSEN-Signal wird durch den Prozessor ein 0-Pegel bei externem Programmspeicherzugriff erzeugt. Damit entsteht eine steigende Flanke am NOR-Glied. Da am Dateneingang des Flip-Flops eine "1" ansteht, wird Q auf "1" geschaltet. Der 1-Pegel erscheint somit auch am Eingang des NOR-Gatters und bewirkt am Ausgang einen 0-Pegel. Deshalb entsteht ein Impuls am Clock-Eingang des Flip-Flops und verriegelt damit das /PSENSignal am NOR-Eingang. Die Breite des Impulses errechnet sich aus den Durchlaufzeiten des Flip-Flops und des NOR-Gatters. Am /CE des EPROMs liegt wiederum ein 0-Pegel an. Dies ist eine sehr umständliche Beschreibungsform. Am Timing erkennen Sie den Vorgang besser. D=A15 /PSEN Q=NORE CLK=NORA /Q /CE ROM /CE RAM

Abb. 3.35 Funktionsweise - Timing für Adressumschaltung (nicht zeitgetreu)

Was ist das Ergebnis dieser Adress-Spiegelung? Beim Einschalten des Prozessorboards wird das EPROM im unteren Adressbereich 0h-7FFFh angesprochen. Nach dem Umschalten wird das EPROM im oberen Adressbereich 8000h-FFFFh angesprochen. Der RAM-

56

Speicher liegt danach von 0000H bis 7FFFH. Programme und Daten können in diesen Speicherbereich der EURO_535 vom PC geladen werden. Jetzt muss das Timing für den Fall der Adressumschaltung überprüft werden. Daraus ergeben sich die Werte für das EPROM. Die kritische Zeit ist sicherlich das /CE ( Chip enable ) für das EPROM. Das /PSEN-Signal gelangt durch das NOR-Gatter U5A, das Flip-Flop U4A und das ExklusivOder an den /CE-Eingang des EPROMs. Es gilt:

TPLIV / TNOR / TCLKQ / TEXCL @ TCE 150ns / 10ns / 10ns / 10ns @ 250ns

Bemerkung: Die Durchlaufzeiten durch die Gatter müssen unbedingt für den eingesetzten Baustein im Datenbuch überprüft werden. Ebenso müssen die Einsatzbedingungen, z.B. der Temperaturbereich, geklärt sein. Bei einem Prozessortakt von 12 MHz wird die Schaltung, mit einer Zugriffszeit von tACC=250ns auf das EPROM, nicht zuverlässig funktionieren. Im Datenbuch zum 80C535-Prozessor ist für TPLIV bei variablem Takt noch die Angabe TPLIV=3*tCLCL-100 ns gegeben. Hierbei beträgt der Prozessortakt 1/tCLCL. Sie können also den Takt bei der Schaltung entsprechend herabsetzen, um trotzdem das EPROM verwenden zu können. Es gilt die Gleichung:

TPLIV / TNOR / TCLKQ / TEXCL @ TCE

(3 * tCLCL / 100ns) / 10ns / 10ns / 10ns @ 250ns 3 * tCLCL @ 380ns 380ns tCLCL @ 3 7,8MHz @ Takt Dies ist ein sehr unbefriedigendes Ergebnis, das aber aus Kostengründen in Kauf genommen wird. Das /PSEN Signal wird bei der Schaltung auch auf den /OE-Eingang des EPROMs geführt. Damit gilt bei 12 MHz Takt und somit auch bei 7,8 MHz Takt:

TPLIV @ TOE

150ns @ 100ns Die letzte Bedingung lautet: Die Datenleitungen für die Instruktion müssen nach einer maximalen Zeitdauer in undefinierten Zustand DF (Data float) übergehen.

TPXIZ @ tDF 63ns @ 30ns

3 Aufbau von µ-Controllern der 8051-Familie

3.7.2

57

Timingberechnung 32K-RAM am 80C535 Port 0

74HCT573

Low-Byte-Adresse / Datum

ALE

AdressLatch

Low-Byte-Adresse

RAM

LE 50

11

Port 2 High-Byte-Adresse

62256A-10L 20

80535

27 22

Port 3 /WR /RD

/CS /WE /OE

27 28

Abb. 3.36 Blockbild für Timingberechnungen am RAM

Die Signalbezeichnung /WE (Write Enable) am RAM-Baustein ist gleichbedeutend mit R/W (Read/Write). Das Write-Signal spricht bei LowPegel an. Bei einem 32K-RAM werden 15 Adressleitungen benötigt. Durch die gemultiplexten Adress- und Datenleitungen wird ein zusätzlicher Baustein zum Demultiplexen gebraucht. Dieser geht dann in die Timingberechnung mit ein. t WHLH ALE

PSEN t t LLWL

LLDV t

RLRH

RD t RLDV t

AVLL

t RHDZ

t

LLAX2

t RHDX

t RLAZ Port 0

A0-A7 from Ri or DPL t

Data IN

A0-A7 from PCL

Instr. IN

AVWL AVDV

Port2

P2.0-P2.7 or A8-A15 from DPH

A8 - A15 from PCH

Abb. 3.37 Signal-Zeit Diagramm für Datenspeicher lesen am 80C535

Die wichtigsten Zeiten für den Controller hierbei sind in Tabelle 3.7.

58 Tabelle 3.7 Wichtigste Timing-Werte für Controller 80C535 externer Datenspeicher lesen (Datenbuch Siemens 80C535) Symbol

Parameter

TAVDV TLLDV TRLDV TRHDZ

Adress to valid data in ALE to valid data in /RD to valid data in DATA float after /RD

min 12MHz

max 12MHz 585 517 252 97

Einheit ns ns ns ns

Die wichtigsten Zeiten für den RAM-Speicher hierbei sind: Tabelle 3.8 Wichtigste Timing-Werte für den RAM-Speicher 55257 AFL-10 (Baugleich mit 62256A-10L) sind (Datenbuch Toshiba MOS Memory) Symbol

Parameter

(tACC) (tCE) (tOE) (tOD)

Access time RAM /CE to Output Valid /OE To Output Valid Output in High-Z

min

max 62256A 100 100 50 50

Einheit ns ns ns ns

TAVDV - TPROP > tACC Speicherzugriffszeit TLLDV > tCE >tOE Chipauswahl Daten auf Datenbus TRLDV > tCE >tOE Datenbus freigeben´ TRHDZ > tDF Die jeweils längste Zeit der beiden Signale zur Chipauswahl und Freigabe des Ausgangs vom Speicher muss in diesem Fall angesetzt werden: 585ns - 44ns > 100ns Speicherzugriffszeit 517ns > 100ns >50ns Chipauswahl Daten auf Datenbus 252ns > 100ns>50ns 97 > 50ns Datenbus freigeben Die verwendeten Speicherbausteine sind beim Lesevorgang völlig unkritisch im Timing. 3.7.3

RAM-Berechnung für die EURO_535-Karte

Bei den folgenden Berechnungen wird von einer bereits erfolgten Adress-Spiegelung ausgegangen, da nach dem Einschalten der Karte als erstes ein Sprung auf eine Adresse oberhalb von 8000H durchgeführt wird. Eine Von-Neumann-Architektur wird, wie bereits gezeigt, durch ein logisches Und der beiden Signale /PSEN und /RD erzeugt. Das logische Und lässt sich mit drei NOR-Gattern realisieren.

3 Aufbau von µ-Controllern der 8051-Familie

59

Vcc J4 PSEN

3 > =

2

1

1 > = RD

> =

1

OE RAM

1

Abb. 3.38 Schaltungsteil zur Erzeugung der Von-Neumann-Architektur

Die Schaltung arbeitet wie folgt: Der µ-Controller kann mit beiden Signalen auf das RAM zugreifen. Wenn das PSEN-Signal low wird, so werden gleichzeitig das RAM und das ROM angesprochen. Das höchste Bit A15 der Speicheradresse entscheidet, welcher Baustein angesprochen wird; es wird das Chip-SelectSignal verwendet. RD PSEN OE RAM Fall 1

Fall 2

Abb. 3.39 Zustand bei Zugriff auf Adresse > 8000h

Für die Timingberechnung müssen wir die Durchlaufzeiten für /OE des RAM-Speichers durch die beiden Oder-Bausteine des 74LS02 Chips beachten. Weiterhin muss für das /CS des RAM-Speichers die Durchlaufzeit für A15 durch das Exklusiv-Oder berücksichtigt werden.

Aufgabe Führen Sie die Timingberechnungen zum Lesen und Schreiben auf den RAM-Speicher der EURO_535 zur Übung durch. Das Timing für den Lesezugriff auf den Datenspeicher sieht folgendermaßen aus:

60 t WHLH ALE

PSEN t t LLWL

LLDV t

RLRH

RD t RLDV t

AVLL

t RHDZ

t

LLAX2

t RHDX

t RLAZ Port 0

A0-A7 from Ri or DPL t

A0-A7 from PCL

Data IN

Instr. IN

AVWL AVDV

Port2

A8 - A15 from PCH

P2.0-P2.7 or A8-A15 from DPH

Abb. 3.40 Signal-Zeit-Diagramm für Datenspeicher lesen am 80C535 Tabelle 3.9 Wichtigste Timing-Werte für Controller 80C535 externer Datenspeicher schreiben ( Datenbuch Siemens 80C535 ) Symbol

Parameter

TAVWL TLLWL TQVWH TWHQX

Adress valid to /WR ALE to /WR or /RD Data setup before /WR Data hold after /WR

min 12MHz 200 288 13

max 12MHz 203 300

Einheit ns ns

Die wichtigsten Zeiten für den RAM-Speicher bei dieser Schaltung sind: Tabelle 3.10 Wichtigste Timing-Werte für den RAM-Speicher 55257 AFL-10 schreiben (Baugleich mit 62256A-10L) sind (Datenbuch Toshiba MOS Memory): Symbol

Parameter

min

(Tbc) (tCW) (tDS) (tDH)

Write Cycle Time Chip Selection to End of Write Data Set up Time Data Hold Time

100 90 40 0

max

Einheit

0

ns ns ns ns

6 C für die 8051-Familie

Warum überhaupt C ? Gibt es nicht modernere Sprachen wie ADA oder C#? Sicherlich haben alle Kritiker der Sprache C gute Gründe für diese Aussagen. Ein Ingenieur oder ein Techniker kann aber nicht immer jede technisch neuere und bessere Sprache benutzen. Insbesondere dann nicht, wenn es nicht für jeden Prozessor den Compiler in der moderneren und besseren Sprache gibt. Deshalb hat sich C als allgemeine Sprache für Embedded Systems durchgesetzt. In C können Programme für jeden Prozessor geschrieben werden. Der Erfolg von C hängt angeblich vom Erfolg des Betriebssystems UNIX ab. Das ist nur teilweise richtig, da auf Signalprozessoren und Controllern UNIX nicht sinnvoll ist, sondern kleinere Betriebssysteme. Diese Bevorzugung von C lässt sich durch Aussagen der VDI/VDE 2422 "Entwicklungsmethodik für Geräte mit Steuerung durch Mikroelektronik" untermauern. Diese Richtlinie enthält auf Seite 22 folgende Tabelle: Tabelle 6.1 Hinweise zur Auswahl der Programmiersprache Verwendung für einfache SteueProgrammierspracherung ASSEMBLER x BASIC x FORTRAN x C x PL/M x PASCAL x

komplexe Steuerung

zeitkritische Teilfunktion x

x x x

x

Interessanterweise erfüllt nur C die Anforderungen für alle Gerätesysteme. Die Informationsmenge und deren Komplexität nimmt infolge der µ-Computertechnik immer mehr zu. Ich vermeide es deshalb, den Studierenden mehrere Assemblersprachen für allgemeine Prozessoren, RISCProzessoren, Signalprozessoren, Transputer, ALPHA-Prozessoren, PowerProzessoren und Grafikprozessoren beizubringen, sondern empfehle den Studierenden die Sprache C. Einen weit verbreiteten Compiler für die 8051-Familie entwickelte die Firma Keil. Diese stellt eine frei kopierbare "Evaluationsversion" zur

176

Verfügung. Mit Hilfe dieser Version sind Sie in der Lage, die nachfolgenden Programmbeispiele zu compilieren und zu testen. Kleinere Programmbeispiele können Sie ebenfalls bearbeiten. Bei größeren Programmen oder kommerziellem Einsatz müssen Sie die Vollversion kaufen. 6.1

Einführung in den C-Compiler

In den folgenden Abschnitten lernen Sie das Programm EIN_AUS in C zu erstellen und mit dem Simulator oder dem Remote-Debug-System auszutesten. Verschiedene Hinweise, wie beispielsweise, dass das Codesegment auf die Adresse 100H zu legen ist, vermeiden von vornherein Fehler in der Entwicklungsumgebung. Für eine vollständige Einführung in C empfehle ich das Original: The C Programming Language von Brian W. Kerninghan und Dennis M. Ritchie. Mit den vorliegenden Beispielen werden zunächst die Lösungen vorgestellt. Aus diesen Programmen können Sie, ähnlich wie bei einer Variantenkonstruktion, neue Programme entwickeln. 6.1.1

Das Programm EIN_AUS

Voraussetzung für das Erstellen des Programmes EIN_AUS in C ist die Installation der C51 Evaluations-Software von www.keil.com oder vom beiliegenden Datenträger. Beim beiliegenden Datenträger haben Sie die Gewissheit, dass kein Versionskonflikt mit den Erklärungen im Buch auftritt. Bei der Installation über www.keil.com haben Sie immer die aktuellste Version verfügbar. Bei Fragen zum Compiler C51 empfehle ich die Internetseite von Keil. Insbesondere die Suche funktioniert hervorragend. Beispielsweise möchten Sie wissen, was eine *.plg-Datei ist? Sie geben in das Suchfenster „*.plg“ ein und betätigen die Schaltfläche GO. Es erscheint: µVision® User's Guide: B. File Types

Hier sind alle Dateiendungen inkl. *.plg erklärt. Die Datei EIN_AUS.C ist das „Hello World“-Programm für Mikrocontroller. Die Funktionalität ist die gleiche wie beim Assembler-Programm EIN_AUS.A51. Ein Taster T1 schaltet eine LED ein. Ein Taster T2 schaltet die LED aus.

6 C für die 8051-Familie

177

/*********************************************************** ** ** ** Datei:EIN_AUS.C ** ** Das Programm bewirkt: ** ** Taster 1 schaltet Leuchte 1 ein ** ** Taster 2 schaltet Leuchte 1 aus ** ** ** ** Eingangsparameter: KEINE! (void) ** ** ** ** Ausgangsparameter: KEINE! (void) ** ** ** ** Rückgabewert: KEINER! (void) ** ** ** *********************************************************************** ** ** ** Autor: Prof. J. Walter ** ** Datum: 29.6.1994 WS 1993/94 ** ** ** **********************************************************************/ #pragma OBJECTEXTEND #pragma CODE DEBUG #pragma SYMBOLS #include

/* typengerechtes Programm Debug */ /* Symbolisches Debuggen */ /* Symbolliste wird erzeugt */ /* Definitionen fuer EURO_535-Karte */

/*********************************************************************/ void lichtein(void) { Leuchte_1 = 0; }

/* L1 leuchtet */

void lichtaus(void) { Leuchte_1 = 1; /* L1 aus */ } /*********************************************************************/ void main (void) { while (1) { if (!Taster_1) lichtein(); if (!Taster_2) lichtaus(); } }

/* Hauptfunktion

*/

/* Endlosschleife */ /* /* /* /*

Wenn Taster Leuchte ein Wenn Taster Leuchte aus

1 betätigt */ */ 1 betätigt */ */

Die Datei STARTUP.A51 ist eine von Keil zur Verfügung gestellte Datei, die nach dem Reset den Controller in einen definierten Zustand bringt. Im Einzelnen werden folgende Schritte durchgeführt: ‚ ‚ ‚ ‚ ‚

Löscht den internen Datenspeicher Löscht den externen Datenspeicher Löscht den erweiterten externen Datenspeicher Initialisiert den Stack und den Zeiger für small model Initialisiert den Stack und den Zeiger für large model

178

‚ Initialisiert den Stack und den Zeiger für compact model ‚ Initialisiert den 8051 Stackpointer - Hardware ‚ Setzt Steuerungszeichen in Programm um und initialisiert die globalen Variablen und die C Hauptfunktion – main, wenn es nicht bereits initialisierte Hauptvariablen gibt. Das Programm EIN_AUS.C und STARTUP.A51 kann nach dem Compilieren im Debugger ausgeführt werden. Die Dateien im Verzeichnis EIN_AUS nach dem Entwicklungsvorgang sind: EIN_AUS.C COMPILE.BAT LINK.BAT EURO_535.H EIN_AUS. EIN_AUS.M51 EIN_AUS.HTX EIN_AUS.SYM EIN_AUS.OBJ EIN_AUS.LST EIN_AUS.lnp EIN_AUS.Opt EIN_AUS.plg EIN_AUS.Uv2 EIN_AUS_Opt.Bak EIN_AUS_Uv2.Bak STARTUP.A51 STARTUP.LST STARTUP.OBJ

Editiertes C-Programm Compiler-Batch Link-Batch Register-Definitionen Durch Linker erzeugt Was der Linker machte Objekt-Datei für Debugger von Hitex Symbolinformationen Objektdatei für Linker List-Datei von Compiler Linker Input Datei generiert von Projekt-Optionen, Debugger-Einstellungen etc. Protokoll für den Build-Prozess uVision Projekt-Datei Sicherung Sicherung Assembler Datei von STARTUP Listing Datei von STARTUP Objektdatei von STARTUP für Linker

Einige der aufgeführten Dateien werden in der modernen Oberfläche von Keil µVision nicht mehr benötigt. Aufgrund der Kompatibilität sind diese jedoch nach wie vor in den Verzeichnissen enthalten. Auf diese Weise können solche Programme auch unter den Entwicklungs-Versionen ausgeführt werden, die in der ersten Auflage enthalten waren. Diese Forderung nach maximaler Kompatibilität bei Prozessoren hat die Firma Intel, wie bereits erwähnt, hervorragend umgesetzt. Diese Kompatibilität ist jedoch bei vielen weiteren technischen Entwicklungen ebenfalls gefordert. So müssen beispielsweise neue HDTV-Fernseher auch die alten Fernsehprogramme wiedergeben können. Insbesondere sollen auch der alte Bildaufbau 4:3 noch darstellbar sein. Und noch weitergehend: Die neuen Formate sollen auch auf alten TV-Modellen laufen. Eine ganz andere Auswirkung der Kompatibilität wird mit dem Aufbau dieses Buches deutlich. So wurden trotz neuer Entwicklungsumgebung die Seitenzahlen als solche beibehalten. Hierdurch können auch ältere Auflagen aus Bibliotheken in der Vorlesung verwendet werden. Ein Seitenverweis wird immer korrekt sein. Die prinzipiellen Abläufe beim Compilieren sind in der folgenden Abbildung dargestellt:

6 C für die 8051-Familie

*. Object File *.OBJ Objekt File *.C SOURCE C-Program File

L51

File

DateiKonverter *.M51 Listing File

Compiler

*.HTX

sp8051kl

Link & Locate

C-51

179

*.SYM Symbol Info

*.LST Listing File

Abb. 6.1 Compilieren des C-Programmes

Die Keil Entwicklungsumgebung erzeugt alle Dateien, die zur Ausführung des Programmes und zum Debuggen notwendig sind. Die Dateikonverter sind nur bei der älteren HITEX Entwicklungsumgebung notwendig. 6.1.2 Test von EIN_AUS.C mit dem Simulator Öffnen Sie die Datei: EIN_AUS.Uv2 im Verzeichnis Laufwerk: \8051\ENTW_C\EIN_AUS. Im Project Workspace – Projekt Arbeitsbereich erscheinen die Ordner: Target 1 und als Unterordner Source Group 1. Darin enthalten sind die Dateien STARTUP.A51 und EIN_AUS.C. Diese Dateien werden mit der Schaltfläche compiliert. Und es sollte folgende Meldung im „Output Window“ erscheinen: Build target 'Target 1' assembling STARTUP.A51... compiling EIN_AUS.C... linking... Program Size: data=9.0 xdata=0 code=35 "EIN_AUS" - 0 Error(s), 0 Warning(s).

Sollten jedoch Fehler vorhanden sein, erscheint bei einem Doppelklick auf die Fehlermeldung ein blauer Pfeil. Dieser Pfeil zeigt auf die wahrscheinlichste Fehlerursache für die Fehlermeldung. Auf diese Weise können Sie sehr komfortabel und schnell entwickeln. Vergewissern Sie sich auch nach dem Compilieren, ob im „Zauberstab" die richtigen Einstellungen durchgeführt sind. Insbesondere sollte im Register Debug der Simulator ausgewählt sein.

180

Abb. 6.2 Das Programm EIN_AUS.C und STARTUP.A51 in der Entwicklungsumgebung

In Abb. 6.3 sehen Sie im oberen Fenster den C-Code und im Fenster unterhalb den disassemblierten Code. Dieser Code ist Assembler! Führen Sie die Schritte mit F11 im Einzelschrittbetrieb aus. Öffnen Sie zusätzlich die beiden Fenster für Port 1 und Port 3. Mit Veränderungen im Port 1.1 und Einzelschrittausführung des Programmes können Sie die Veränderungen im Port 3.2 nachvollziehen. Mit RESET und F11 lässt sich das Programm STARTUP.A51 von Keil nachvollziehen. MOV R0,#7F CLR A @R0,A DJNZ R0,118

6 C für die 8051-Familie MOV LJMP

181

SP,#7 main

Dieser Code wird unmittelbar nach einem RESET ausgeführt. Er löscht den gesamten internen Datenspeicher von 00h bis 7Fh. Diese Erkenntnis hilft Ihnen beim Debuggen. Aber eben nur dann, wenn Sie auch Assembler verstehen.

Abb. 6.3 Das Programm EIN_AUS.C und STARTUP.A51 in der DebugUmgebung

182

6.1.3 Test des EIN_AUS.C in Hardware-Umgebung Voraussetzung bildet die Hardware EURO_535. Bevor das Programm gestartet wird, sollten Sie im „Zauberstift“ in der Registerkarte DEBUG das Feld: „Run to main()“ aktivieren. Jetzt kann das Programm EIN_AUS.C sehr komfortabel im Einzelschritt getestet werden. Mit F11 lösen Sie die einzelnen Schritte aus. Durch gleichzeitiges Betätigen der Taster T1 oder T2 auf der EURO_535-Karte und der Funktionstaste F11 können die einzelnen Programmteile ausgeführt werde. Sollten Sie keine Kommunikation zwischen EURO_535 und dem PC herstellen können, schauen Sie in der Gerätesteuerung nach, ob unter Hardware der richtige COM-Port auf PC-Seite gewählt wurde. Durch den Umgang mit dem Debugger, durch verschiedene Tests und Öffnen der Online-Hilfen erlernen Sie den Umgang mit einer solchen Testumgebung. Gleichzeitig erlernen Sie den Umgang mit einem Emulator, da die Umgebung bzw. Bedienoberfläche völlig gleichartig ist. 6.2 Die Eigenschaften des C-51-Compilers Außer den bereits genannten Vorteilen bei der Verwendung von C ergeben sich weitere Vorteile gegenüber der Assembler-Sprache. Sie müssen den Befehlssatz des Prozessors nicht vollständig beherrschen. Die Architektur des Controllers und dessen Umgebung müssen Sie jedoch genau kennen. Die Verwaltung der Register sowie der einzelnen Speicherbereiche übernimmt der Compiler. Die zweite „goldene Regel“ bei der Assemblerentwicklung (Kapitel 5: Projekte) muss also nicht mehr beachtet werden. Gleichzeitig erreichen Sie durch Verwendung von C eine bessere Programmstruktur. Dies erkennen Sie bereits im einfachen Beispiel EIN_AUS. Das vom Compiler erzeugte Programm EIN_AUS ist nicht länger als das in Assembler geschriebene. Der Aufbau mit Unterprogrammen ist aber programmiertechnisch eleganter. Ebenso ist die Lesbarkeit des C-Source-Codes besser als im Assembler. Für eine Projektübergabe oder bei der Wartung von Programmen ergeben sich daraus auch ökonomische Vorteile, da die Übergabe, Pflegbarkeit und Wiederverwendung der Programme in C wesentlich effektiver ist. Insbesondere bei Verwendung von mathematischen Routinen aus der mitgelieferten FloatingArithmetik ergibt sich eine erhebliche Verkürzung der Programmentwicklungszeit. Sehr schön können Sie dies am Programm "Effektivwert" erkennen. Das Programm in C ist ein Genuss gegenüber dem Programm in As-

6 C für die 8051-Familie

183

sembler. Sollten Sie gezwungen sein, den Controller zu wechseln um zur Bearbeitung von schnelleren Vorgängen einen Signalprozessor zu verwenden, so kann das Programm einfach portiert werden. Außer den Special Function Registern stimmen die verwendeten Datentypen überein. 6.2.1 Die Datentypen des C-51-Compilers Tabelle 6.2 Datentypen des C-51-Compilers Datentyp bit signed char unsigned char signed int unsigned int signed long unsigned long float pointer

Größe 1 Bit 1 Byte 1 Byte 2 Byte 2 Byte 4 Byte 4 Byte 4 Byte 1-3 Byte

Wertebereich 0 oder 1 -128 bis +127 0 bis 255 -32768 bis + 32767 0 bis 65535 -2147483648 bis +2147483647 0 bis 4294967295 ‒1,176E-38 bis ‒3,40E+38 Adresse einer Variablen

Datentyp Datentypen zum Zugriff auf SFR sbit sfr sfr 16

Größe

Wertebereich

1 Bit 1 Byte 2 Byte

0 oder 1 0 bis 255 0 bis 65535

Um beispielsweise den Port 0 anzusprechen, muss vorher die Variable P0 definiert werden. Dies geschieht mit der Anweisung sfr P0 = 0x80; oder durch Definition in der Datei *.h. In der Datei EURO_535.h, welche in das eigentliche Programm eingebunden wird, geschah dies für den Datentyp sbit mit den Anweisungen: /* sbit sbit sbit

Leuchtdioden */ Leuchte_3 = 0xB4; Leuchte_2 = 0xB3; Leuchte_1 = 0xB2;

/* sbit sbit sbit

Taster */ Taster_3 = 0x93; Taster_2 = 0x92; Taster_1 = 0x91;

Muss das Resultat in einen bestimmten Datentyp konvertiert werden, geschieht dies automatisch.

184

6.2.2 Speichertypen und Speichermodelle Der gesamte 8051-Speicher, bzw. der Speicher der Derivate, wird durch den C-51- Compiler genutzt. Durch die Unterscheidung zwischen internem und externem Speicherbereich können die Vorteile des jeweiligen Speichersegmentes genutzt werden. Schnelle Zugriffe, sowohl direkte als auch indirekte, können im internen Speicher des 8051-Controllers durchgeführt werden. Bei großen Datenmengen kommt der externe Speicherbereich zum Einsatz. Tabelle 6.3 Speichertypen bei C-51 (nach C-51-Bedienungsanleitung) Speichertyp Beschreibung data direkt adressierbarer interner Datenspeicher; ermöglicht schnellste Zugriffe auf Variablen (128 Byte) von 00h - 7Fh bdata bitadressierbarer, interner Datenspeicher, ermöglicht gemischten Bit und Byte-Zugriff von 20h - 2Fh. idata indirekt adressierbarer interner Datenspeicher; ermöglicht den Zugriff auf den vollen, internen Adressbereich bei beispielsweise 80535 von 00h - 0FFh. pdata ´paged´ (256 Byte) externer Datenspeicher, Zugriff mit dem Befehl movx @Ri. xdata externer Datenspeicher ( 64 KByte); Zugriff mit dem Befehl movx @dptr. code Programmspeicher (64Kbyte); Zugriff mit dem Befehl movc @A+DPTR.

Bei Variablen-Deklarationen ohne Angabe des Speichertyps werden in Abhängigkeit vom Speichermodell, SMALL, COMPACT, LARGE die voreingestellten Speichertypen verwendet. Beispiele für Variablen-Deklarationen: char data var1; char code text[]="PARAMETER EINGEBEN:"; unsigned long xdata array[100]; float idata x,y,z; unsigned int pdata dimension; unsigned char xdata vektor [10][4][4]; sfr P0 = 0x80; sbit RI = 0x98; char bdata flags; sbit flag0 = flags^0;

6 C für die 8051-Familie

185

Tabelle 6.4 Speichermodelle bei C-51 (nach C-51 Bedienungsanleitungen) Speichermodell Beschreibung SMALL Parameter und lokale Variablen werden im direkt adressierbaren, internen Datenspeicher platziert (max. 128 Byte; default Speichertyp: data) COMPACT Parameter und lokale Variablen werden im ´paged´ externen Datenspeicher plaziert (max. 256 Byte; default Speichertyp: pdata) LARGE Parameter und lokale Variablen werden im externen Datenspeicher platziert (max. 64 KByte; default Speichertyp: xdata)

Auch jetzt soll der Weg nicht verlassen werden, am Beispiel zu lernen und nur dann Wissen aufzunehmen, wenn es für die Lösung eines Problems gebraucht wird. Hervorragend geeignet für ein solches Vorgehen sind die bereits mit Assembler bearbeiteten Projekte. Die Architektur des Prozessors und die peripheren On-Chip-Einheiten verändern sich nicht. Der Controller kann bei Interrupt-Prozeduren oder bei Verwendung der Timer direkt in C programmiert werden.

Interrupt-Funktionen in C-51 Die Interrupt-Vektoren können mit Interrupt-Nummern von n= 0 bis n=31 erzeugt werden. Die Interrupt-Vektor-Adresse berechnet sich mit: Interrupt-Vektor-Adresse = 8*n + 3 Beispielsweise berechnet sich n für den Timer_2-Interrupt mit der Interrupt-Vektor-Adresse 2BH:

n?

TIMER2 / 3 ?5 8

Wobei TIMER2 = 2BH = 43 ist.

7

Projekte in C gelöst

Höhere Programmiersprachen bieten den Vorteil einer Entlastung bezüglich der Dokumentation im Sourcecode, denn sie sind leichter lesbar. Nach wie vor besteht aber die unbedingte Dokumentationspflicht bezüglich der Modularisierung und der Strukturierung. Ergänzt durch das Methodenwissen zur optimalen Implementierung sollte ein leicht lesbarer und wartbarer Programmcode entstehen. Es werden also zwei wesentliche Dinge vom Programmierer gefordert: Das Struktogramm und/oder ein leicht lesbarer und wartbarer Programmcode. Um Aufgaben zu lösen, sind jedoch weitere Aspekte zu berücksichtigen. Als wichtigste Forderung ist hierbei das Erstellen einer Anforderungsliste zu sehen. Diese Anforderungsliste wird bei den vorgestellten Projekten nicht ausgeführt, weil der Umfang dieser Aufgaben sehr klein ist. Sobald aber eine umfangreichere Aufgabe zu lösen ist, muss eine solche Anforderungsliste erstellt werden. Auch hier lassen sich wieder Grundregeln erstellen: Regel 1 Nur dokumentierte Hardware und Software ist existent. Regel 2 Funktionen werden im Zusammenhang dokumentiert. Nur in einzelnen Fällen erfolgt eine Dokumentation der Programmzeile. Regel 3 Beschränken Sie sich auf eine Anweisung pro Zeile. Regel 4 Verwenden Sie eine öffnende und eine schließende geschweifte Klammer jeweils in einer eigenen Zeile für jede einzelne Funktion. Regel 5 Rücken Sie die Anweisungen in einer Funktion bezüglich der geschweiften Klammern ein. Regel 6 Verwenden Sie keine Abkürzungen, sondern schreiben Sie die Bezeichnung aus.

7 Projekte in C gelöst

187

Diese Regeln können je nach Projektumfang sinnvoll ergänzt oder gekürzt werden. Die Programmierkonventionen sollten unbedingt vor jedem Projekt vereinbart und bekanntgegeben werden. Für Einsteiger in ein Projekt ist es vorteilhaft, wenn solche Konventionen innerhalb des Projektteams in einer dokumentierten Form vorliegen. 7.1 Standardkopf für Programme in C Der hier verwendete Standardkopf mit dem Dateinamen KOPF.C sieht folgendermaßen aus: /********************************************************************** ** ** ** Datei:?.C ** ** Das Programm bewirkt: ** ** ** ** ** ** Eingangsparameter: KEINE! (void) ** ** ** ** Ausgangsparameter: KEINE! (void) ** ** ** ** Rückgabewert: KEINER! (void) ** ** ** *********************************************************************** ** ** ** Autor: J. Walter ** ** Datum: 29.6.1994 SS 94 ** ** ** **********************************************************************/ /****************** Steueranweisungen für den Compiler ***************/ #pragma OBJECTEXTEND #pragma CODE DEBUG #pragma SYMBOLS

/* typengerechtes Programm Debug */ /* Symbolisches Debuggen ein */ /* alle Symbole werden aufgelistet */

/******************* Text im Quelltext einbinden *********************/ #include

/* Definitionen für EURO_535-Karte */

/*************************** Konstanten ******************************/ /*********************** globale Variablen ***************************/ /************************ Hauptprogramm ******************************/ void main(void) {

Falls keine Konstanten oder globalen Variablen verwendet werden, kann dieser Teil selbstverständlich gestrichen werden. Weitere ausführliche Beispiele finden Sie auf dem beiliegenden Datenträger.

188

7

Projekte in C gelöst

7.2 Blinklicht mit vorgegebener Blinkfrequenz Zur Vereinfachung werden sowohl die Aufgabe als auch das dazugehörige Struktogramm erneut aufgeführt. Aufgabe Ein einfaches Blinklicht mit vorgegebener Blinkfrequenz soll programmiert werden. Programmbeschreibung Initialisierung TIMER_0 Welche Taste wurde betätigt ? ja Taster 1 TR0 aus Port 3.2 löschen Licht ein

Taster 2 TR0 aus Port 3.2 setzen Licht aus

Zaehler = 0 ?

nein

Taster 3 Blinken TR0 an TIMER_0

P 3.2 Komplement

ret

Abb. 7.1 Struktogramm des Programmes BLIN_INT.C

Sie können die Aufgabe in C nur lösen, wenn Sie sowohl den Aufbau und die Funktionsweise der Timereinheit als auch der Interrupteinheit des 8051-Controllers verstanden haben. An diesem Punkt wird zudem die Einschränkungen der Portierbarkeit von C-Programmen deutlich. Selbst wenn die Sprache als optimal bezüglich der Portierbarkeit bezeichnet wird, ergeben sich oft Aufgaben, die die Peripherie eines µ-Computersystems betreffen. Es entsteht somit zusätzlicher Arbeitsaufwand. Je nach System beträgt dieser zusätzlicher Portierungsaufwand bis zu 10%. Zuerst möchte ich das Programm vorstellen und anschließend einige Erklärungen dazu geben. /********************************************************************** ** ** ** Datei:BLIN_INT.C ** ** Das Programm bewirkt: ** ** Taster 1: Licht einschalten ** ** Taster 2: Licht ausschalten ** ** Taster 3: Licht blinkt ** ** ** ** Eingangsparameter: KEINE! (void) ** ** ** ** Ausgangsparameter: KEINE! (void) ** ** ** ** Rueckgabewert: KEINER! (void) ** ** **

7 Projekte in C gelöst

189

*********************************************************************** ** ** ** ** ** Autor: W. Marx / J. Walter ** ** Datum: 29.6.1994 SS 1994 ** ** Aenderungen: ** ** ** ** ** **********************************************************************/

/***************** Steueranweisungen fuer den #pragma OBJECTEXTEND #pragma CODE DEBUG #pragma SYMBOLS

Compiler **************/

/* typengerechtes Programm Debug */ /* Symbolisches Debuggen */ /* Symbolliste wird erzeugt */

/****************** Text im Quelltext einbinden *********************/ #include

/* Definitionen fuer EURO_535-Karte */

/************************* Konstanten *******************************/ #define V_BLINK 10

/* Dauer des Blinkintervalls */

/*********************** Hauptprogramm ******************************/ void main(void); void Timer_0_ISR(void);

/* Funktions-Prototypen */

unsigned char zaehler = V_BLINK; void main(void) { Leuchte_1 = 1; IEN0 = 0x92;

/* main-Programm */ /* Lampe ausschalten */ /* generelle Interrupt */ /* Freigabe */ /* Modus 1, 16 bit Zaehler */

TMOD = 0x1; TCON = 0x0; while(1) {

/* Endlosschleife */ if(!Taster_1) { TR0 = 0; Leuchte_1 = 0; } if(!Taster_2) { TR0 = 0; Leuchte_1 = 1; } if(!Taster_3) { TL0 = 0; TH0 = 0; TR0 = 1; }

} return; }

/* Abfrage Schalter 1 ? */ /* Timer ausschalten */ /* Lampe an */ /* Abfrage Schalter 2 ? */ /* Timer ausschalten */ /* Lampe aus */ /* Abfrage Schalter 3 ? */ /* Zaehler auf 0 setzen */ /* Timer einschalten */

190

7

Projekte in C gelöst

void Timer_0_ISR(void) interrupt 1 /* { zaehler--; if (!zaehler) { Leuchte_1 = ~Leuchte_1; zaehler = V_BLINK; } return; }

ISR-Routine */ /* /* /* /*

bei jedem Einsprung */ wird Zaehler um 1 */ bis 0 gezaehlt */ Invertierung des Bit */

Der Programmkopf ähnelt dem bekannten EIN_AUS-Programm. Im Gegensatz zum EIN_AUS-Programm wurden keine Funktionen für das Ein- und Ausschalten der Leuchten verwendet. Die Anweisungen wurden stattdessen direkt an die Abfrage der Taster angehängt. Jetzt setzt der Compiler die Befehle anders um: Im Programm EIN_AUS entstanden aufgrund der Funktionsstruktur lcall-Befehle im Assembler. Im Programm BLIN_INT erzeugte der Compiler die bedingten Befehle jb (jump Bit). Bei der Initialisierung müssen für den Timer - wie im Assembler - das Modusregister TMOD und das Controlregister TCON, sowie für das Interruptsystem das Interruptregister IEN0 programmiert werden. Vorsichtshalber wurde die Leuchte 1 (L1) zuerst ausgeschaltet. In der anschließenden Endlosschleife fragt das Programm den Zustand von Taster_1 bis Taster_3 ab. Die Verwendung dieser Schreibweise mit Unter-strich wurde gewählt, um den unmittelbaren Zusammenhang zwischen Programm und Text zu veranschaulichen. Aufgrund des Anschlusses von Port und Taster über einen Widerstand, ergibt sich bei betätigtem Taster ein 0-Pegel am Eingang. Deshalb verwende ich die Verneinung mittels des Zeichens "!". Eine weiterer, schöner Operator, die ~ Tilde, wird bei der Invertierung der Leuchte_1 benutzt. Nach dem Editieren, der Kompilierung und dem Linken des Programmes kann dieses mit dem Simulator oder dem Remote-Debug-System getestet werden. In diesem Falle sei nur der erste Weg vorgestellt. Nach Aufruf des Simulators kompilieren Sie das Programm BLINT_INT.C und starten Sie den Debugger. Vergessen Sie jedoch nicht, im „Zauberstab“ unter der Registerkarte DEBUG den Kasten „Limit Speed to Real-Time“ zu aktivieren -der Grund: Bei den immer schneller werdenden Rechnern wird das 8051-Programm zu schnell simuliert. Sie können das Programm unmittelbar starten oder einen Breakpoint auf "main" setzen. Öffnen Sie sowohl Port 1 als auch Port 3 und testen Sie die Funktionen mit Taste1 und T2. Mit T3 können Sie den Blinkbetrieb starten. Sie müssen aber auf jeden Fall den Port P1.3 wieder auf „1“ setzen. Um das Ergebnis bei Port 3.2 zu sehen, muss im

7 Projekte in C gelöst

191

Abb. 7.2 Editier-Oberfläche beim Programm BLIN_INT.C

Fenster „VIEW“ der Punkt „Periodic Window Update“ aktiviert sein. Bei den vorliegenden Grundeinstellungen können Sie nunmehr sehr schnell den Parameter der Blinkfrequenz ändern. Gehen Sie hierzu wieder in den Editiermodus und ändern Sie die Blinkfrequenz beispielsweise auf 2. Kompilieren und starten Sie noch einmal den Debug-Mode. Jetzt sollten

192

7

Projekte in C gelöst

alle Fenster erneut erscheinen und Sie können das Programm sehr komfortabel testen. In der folgenden Abbildung sind Port 1 und Port 3 unterhalb des Disassembly-Fensters angeordnet. Port 3.2 ist auf „0“ gesetzt. Das Programm läuft und kann jederzeit angehalten werden. Am unteren Rand ist die abgelaufene Zeit t1 angezeigt.

Abb. 7.3 Debug-Oberfläche beim Programm BLIN_INT.C

7 Projekte in C gelöst

193

7.3 Projekt A/D-Wandlung Auch dieses Projekt setzt das entsprechende Wissen über den HardwareAufbau des Prozessors voraus. Die gleiche Aufgabe wurde bereits in Assembler gelöst. Das Struktogramm zeigt den prinzipiellen Aufbau des Programmes: Programmbeschreibung

Initialisierung A/D-Wandlung auslösen Wert CRCH = 0FCH und CRCL = 18H. Nach dem Reset beinhalten die Timer 2 Register TH2 und TL2 null. Timer 2 Control Register T2CON:

148

0C8H

T2PS 0

I3FR x

I2FR x

T2R1 1

T2R0 0

T2CM 0

T2I1 0

T2I0 1

T2CON

Nach einem Reset beinhaltet T2CON den Wert 00H. Es genügt folglich, Bit T2I0, T2R1 zu setzen. T2I0 wird zuletzt gesetzt, da dies den Zeitgeber startet. Für die Lösung der Aufgabe, 40 A/D-Werte mit einer Abtastfrequenz von 1kHz einzulesen, können Timer 2, A/D-Wandler und Interrupt verwendet werden. Der Interrupt für Timer 2 (ET2 im IEN0-Register) und derjenige für den A/D-Wandler (EADC in Register IEN1) müssen hierzu freigegeben werden. Die Software bestätigt das Auftreten eines Interrupts durch Rücksetzen des entsprechenden Kennungsbits / Flags. Beim A/DWandler ist dies das IADC-Bit, beim Timer 2 das TF2-Bit. Dieser Sachverhalt wird in der folgenden Tabelle dargestellt: Tabelle 5.20 Lösung der Aufgabe mit Interrupts Aktion Interruptfreigabe Timer 2 Interruptfreigabe A/D-Wandler Interruptbestätigung Timer 2 Interruptbestätigung A/D-Wandler

Bit ET2 EADC TF2 IADC

Bit Erklärung Interrupt Timer 2 Enable Interrupt A/D-Converter Timer Flag 2 Interrupt A/D-Converter

Assembler Anweisungen Programmbeschreibung Initialisierung Interrupt A/D Timer2 Interrupt-Unterprogramm Wert von ADDAT in ext. Speicher

Sind 40 Werte eingelesen ? Timer 2 sperren Leuchte 2 ausschalten

Abb. 5.23 Struktogramm für AD_40T2

Im Struktogramm für die A/D-Wandlung mit 1ms sind die wesentlichen Blöcke dargestellt. Das Interrupt-Unterprogramm ist hierbei sehr kurz aufgeführt. In einem verfeinerten Struktogramm wäre das Hochzählen des Datenpointers für die einzelnen Speicherzellen dargestellt. Die Detaillie-

5 Projekte mit Assembler gelöst

149

rung des Struktogrammes ist abhängig von der Programmiererfahrung. Sie sollten jedoch unbedingt immer die wesentliche Struktur des Programms darstellen. Das Programm AD_40T2.ASM im Sourcecode: $nomod51 ;der Modus fuer 8051 wird abgeschaltet $debug $nolist ;es wird kein Listing fuer reg535 erstellt $include(reg535.pdf) ;die 80535-spezifischen Daten $list ;es wird ein Listing erstellt $ title (AD_40T2) ;-----------------------------------------------------------------------;Programmbeschreibung ;-----------------------------------------------------------------------; ;Programm: Wandelt im A/D-Wandler 40 Werte mit Periodendauer von 1ms unter ;Verwendung von Timer 2 mit Interrupt unter Verwendung des Überlaufbits ;AD_40T2 AD_Wandler 40_ Werte T_imer2 ; ;T1=Wandlung starten L1=an L2=aus ;T3=Programm beenden L2=aus L1=aus ; ;Programmiert: J. Walter 11.12.93 ; ;Verwendete Einspruenge: keine ; ;Verwendete Unterprogramme: keine ; ; ;Verwendete Register und Variable: ;Registerbank(0) ;R2 Zaehlvariable für Anzahl der A/D-Werte ; ;Kommentar: ; ;Aenderungen: ; ; ;-----------------------------------------------------------------------;Initialisierungsteil für allgemeine Konstanten ;-----------------------------------------------------------------------; MONITOR EQU 8000H ;Monitoreinsprung CSEG AT 0H ;Legt absolute Codesegmentadresse auf 0h jmp ABFRAGE ;zur Abfrage springen ; ;-----------------------------------------------------------------------;Interrupt-Vektoren ;-----------------------------------------------------------------------Org 2BH ;Timer 2 Interrupt TIMER2_INT: mov DAPR,#0H ;Wandlung ausloesen, Bereich 0-5V clr TF2 ;Timer 2 Überlaufflag loeschen reti Org 43H ;A/D-Wandler Interrupt AD_INT: clr IADC ;Wandlungsbit löschen call AD_WERT_ISR reti

150 ;-----------------------------------------------------------------------;Initialisierungsteil für On-Chip Peripherie ;-----------------------------------------------------------------------ORG 100H ;Programmstart bei 100H INIT: ;Initialisierung für Abtastung setb P3.3 ;Wandlung läuft clr P3.2 ;L1 an setb EAL ;Allgemeine Interruptfreigabe setb EADC ;A/D-Wandler-Interrupt Freigabe setb ET2 ;Timer 2 Überlauf freigeben mov R2,#40 mov DPTR,#2000h

;40 Werte werden eingelesen ;Anfangsadresse für Daten

mov CRCH,#0FCh ;Timer 2 Hohes Byte laden mov CRCL,#18h ;Timer 2 Niederes Byte laden setb T2R1 ;Timer 2 Wiederladen bei Überlauf setb T2I0 ;Timer 2 Start mit Zeitgeberbetrieb ;-----------------------------------------------------------------------;Programmschleife ;-----------------------------------------------------------------------ABFRAGE: setb P3.2 ;L1 aus clr P3.3 ;L2 an Wandlung beendet jnb P1.1,INIT ;Start der Wandlung WANDLUNG_AN: jnb P1.3,ENDE ;Ende des Programms jmp ABFRAGE ;-----------------------------------------------------------------------;A/D-Wandler Interrupt Service Routine ;-----------------------------------------------------------------------AD_WERT_ISR: mov A,ADDAT ;der A/D-Kanal wird durch Reset init. movx @DPTR,A ;Wert in externen Speicher inc DPTR ;Adresse um eins erhoehen djnz R2, NICHT_FERTIG ; clr T2I0 ;nach 40 Werten Timerueberlauf sperren setb P3.2 ;L1 aus nach Wandlung NICHT_FERTIG: ret ENDE: setb P3.2 setb P3.3 ljmp MONITOR end

;L1 aus = Wandlung beendet ;L2 aus ;Sprung in Monitor

Das Abtasten von 40 Werten mit 1kHz Abtastfrequenz ist auch ohne Verwendung von Interrupts programmierbar. Der Timer 2 setzt bei einem Überlauf das TF2-Bit, welches durch die Software zurückgesetzt werden muss. Das TF2-Bit löst die Wandlung aus. Ist die Wandlung abgeschlossen, wird das BUSY-Bit zurückgesetzt.

5 Projekte mit Assembler gelöst

151

Assembler-Anweisungen Programmbeschreibung Timer 2 Initialisieren Warten auf TF2 Warten auf BSY Wert von ADDAT in ext. Speicher

Sind 40 Werte eingelesen ? Neue Wandlung / Ende ?

Abb. 5.24 Struktogramm für AD_40T2O A/D-Wandlung ohne Interrupts.

Das Programm AD_40T2O.ASM; A/D-Wandlung ohne Interrupts im Sourcecode: $nomod51 ;der Modus fuer 8051 wird abgeschaltet $debug $nolist ;es wird kein Listing fuer reg535 erstellt $include(reg535.pdf) ;die 80535-spezifischen Daten $list ;es wird ein Listing erstellt $ title (AD_40T2O) ;-----------------------------------------------------------------------;Programmbeschreibung ;-----------------------------------------------------------------------;Programm: Wandelt im A/D-Wandler 40 Werte mit Periodendauer: 1ms unter ;Verwendung von Timer 2 ohne Interrupt unter Verwendung des Überlaufbits ; ;AD_40T2O AD_Wandler 40_ Werte T_imer2_ O_hne Interrupt ; ;T1=Wandlung starten L1=an L2=aus ;T3=Programm beenden L2=aus L1=aus ;Programmiert: J. Walter 11.12.93 ; ;Verwendete Einspruenge: keine ; ;Verwendete Unterprogramme: keine ; ; ;Verwendete Register und Variable: ;Registerbank(0) ;R2 Zaehlvariable für Anzahl der A/D-Werte ; ;Kommentar: ; ;Aenderungen: ; ;-----------------------------------------------------------------------;Initialisierungsteil für allgemeine Konstanten ;-----------------------------------------------------------------------;

152 MONITOR EQU 8000H ;Monitoreinsprung CSEG AT 0H ;Legt absolute Codesegmentadresse auf 0h jmp ABFRAGE ;zur Abfrage springen ; ;-----------------------------------------------------------------------;Interrupt-Vektoren ;-----------------------------------------------------------------------;-----------------------------------------------------------------------;Initialisierungsteil für On-Chip Peripherie ;-----------------------------------------------------------------------ORG 100H ;Programmstart bei 100H INIT: ;Initialisierung für Abtastung setb P3.3 ;L2 aus Wandlung läuft clr P3.2 ;L1 an Wandlung läuft mov CRCH,#0FCh ;Timer 2 Hohes Byte laden mov CRCL,#18h ;Timer 2 Niederes Byte laden setb T2R1 ;Timer 2 Wiederladen bei Überlauf setb T2I0 ;Timer 2 Start mit Zeitgeberbetrieb mov R2,#40 mov DPTR,#2000h AD_40_WERTE: jnb TF2,AD_40_WERTE clr TF2 mov DAPR,#0H AD_WERT_DA: jb BSY,AD_WERT_DA mov A,ADDAT movx @DPTR,A inc DPTR djnz R2, AD_40_WERTE clr T2I0 setb P3.2

;40 Werte werden eingelesen ;Anfangsadresse für Daten ;warten bis Timer 2 Überlauf ;Timer 2 Überlaufbit löschen ;Wandlung auslösen ;Warten bis Wandlung fertig ;Wert in externen Speicher ;Adresse um eins erhoehen ; ;nach 40 Werten Timer stop ;L1 aus nach Wandlung

;-----------------------------------------------------------------------;Programmschleife ;-----------------------------------------------------------------------ABFRAGE: setb P3.2 clr P3.3 jnb P1.1,INIT jnb P1.3,ENDE jmp ABFRAGE

;L1 Wandlung läuft nicht ;L2 an Wandlung läuft nicht ;Start der Wandlung ;Ende des Programms

;-----------------------------------------------------------------------;Programmende ;-----------------------------------------------------------------------ENDE: setb P3.2 setb P3.3 ljmp MONITOR end

;L1 aus = Wandlung beendet ;L2 aus = Programm beendet ;Sprung in Monitor

5 Projekte mit Assembler gelöst

153

Subtraktion Offset; AD_40_OO.ASM Aufgrund der Eigenschaften des A/D-Wandlers im 80535 können nur positive Spannungswerte gewandelt werden. Deshalb muss der zu messenden Spannung ein Offset addiert werden. Dieses Offset muss für die Berechnung wieder eliminiert werden. Abgetasteter Sinus mit Offset

abgetasteter Sinus mit Offset Sinus - Offset

3

Sinus-Offset quadriert 2,5

Spannung u / [V]

2

1,5

1

0,5

0 0

0,005

0,01

0,015

0,02

0,025

0,03

0,035

0,04

-0,5

-1 Zeit T / [s]

Abb. 5.25 Abgetastete Sinus mit Offset

Wird der Offset subtrahiert, entstehen negative Zahlen. Dies ist für die Darstellung der Zahlen und deren Berechnung ungünstig, da im µController am einfachsten mit positiven Hexadezimalzahlen zu rechnen ist. Leiten Sie einfach sofort die Betragsbildung ein, noch bevor Sie die Quadrierung durchführen. Der prinzipielle Programmablauf ist damit: Struktur des Programms: Wert aus externem Speicher holen Offset subtrahieren Wenn negatives Ergebnis Betragsbildung mit Zweierkomplement Wert zurückschreiben Und das 40 mal

Das Programm AD_40_OO.ASM

154

$NOMOD51 $debug $INCLUDE(reg535.pdf) $title (AD_40_OO) ;40 Werte von A/D-Wandler ohne Offset ;Einfaches Programm zur Subtraktion des Offsets von 40 Zahlen ; ;Eingang: 40 A/D-Wandler Werte vom Speicher 2000H-2027H ;Ausgang: 40 Werte ohne Offset im Speicher 2000H-2027H ; ;Register: ;R7 Zählregister ;R6 Offset vom A/D-Wandler ; ;Initialisierungsteil AD_DAT_ANF EQU 2000H ;A/D-Daten Adressbeginn AD_DAT_END EQU 2027H ;A/D-Daten Adressende OFFSET EQU 66H ;DEZ. 102 entspricht 2 V ORG 0H jmp 100h ORG 100H ; ;Programmteil ; START: mov dptr,#AD_DAT_ANF mov R7,#28h mov R6,#OFFSET OFFSET_SCHLEIFE: movx a,@dptr clr C subb A,R6 jnc POS_ERG cpl A add A,#1 POS_ERG: movx @dptr,a inc dptr djnz R7,OFFSET_SCHLEIFE ljmp 8000H end

;Für Trace-Betrieb ;Programmanfang auf 100H ;Setzt Adresszähler auf 100H

;Adresse der A/D-Daten in DPTR ;Zählregister R7 mit 40 laden ;R6=Offsetregister ;n-ten A/D-Wert holen ;Carry löschen ;Akku - OFFSET ;falls Ergebnis positiv keine Betragsbildung ;Komplement von Akku ;Zweierkomplement ;Wert ohne Offset als Betrag zurück in ;externen Speicher ;DPTR Adresszähler + 1 ;Zählregister 0 ?, sonst Offset Schleife ;Monitoreinsprung

Die Betragsbildung wird durchgeführt, wenn ein Wert nach der Subtraktion negativ wird. ‚ Einer-Komplement ‚ Zweier-Komplement = Einer-Komplement+1 Was geschieht bei der Betragsbildung ? Angenommen im Speicher stehe der Wert 2H. Von diesem wird ein Offset von 4H abgezogen. 02H -04H -2H

5 Projekte mit Assembler gelöst

155

Wie sieht dies in binärer Darstellung aus?

Ergebnis SUBB wird gesetzt Komplement +1 Betrag:

10B -100B 1 1111 1110B

2 -4 -2

0000 0001B 0000 0001B 0000 0010B

Betrag ?

Carry-Bit

2

Zur Hilfe sei noch folgende Tabelle für Byte-Werte gegeben: Tabelle 5.21 Zahlendarstellung: Die vorderste "Eins" bedeutet "Negativ" Dezimal

Binär

0 1 2 3 4 .. .. .. 127 128 129 .. .. .. 254 255

0000 0000B 0000 0001B 0000 0010B 0000 0011B 0000 0100B .. .. .. 0111 1111B 1000 0000B 1000 0001B .. .. .. 1111 1110B 1111 1111B

Hexadezimal ohne Vorzeichen 00H 01H 02H 03H 04H .. .. .. 7FH 80H 81H .. .. .. FEH FFH

Dezimal mit Vorzeichen 0 1 2 3 4 .. .. .. 127 -128 -127 .. .. .. -2 -1

Subtrahiert wurde 102 =66H; dies entspricht einem Wert von ca. 2 V. Multiplizieren - Quadrieren; MUL_40.ASM Die Werte im Speicher müssen nunmehr quadriert werden. Dies hat zur Folge, dass aus 8-Bit-Werten 16-Bit-Werte entstehen. Die Werte legen wir wiederum im Speicher von 2028H bis 2077H, dies entspricht 80 Werten, ab.

156

Dieses Programm kopiert zuerst die Werte in den internen Speicherbereich ab 30H. Dadurch werden die Registerbänke und die einzeln adressierbaren Bits nicht überschrieben. Das Register R0 enthält die Adresse auf den Wert im internen Speicher. Nach der Multiplikation werden die 16-Bit-Werte wieder in den Speicher geschrieben. Sehr vorteilhaft wirkt sich hierbei der Befehl "mul ab" aus. Dieser führt eine Multiplikation in nur 4 µs bei 12 MHz Taktfrequenz durch. Das Programm MUL_40.ASM $NOMOD51 $debug $INCLUDE(reg535.pdf) $title (MUL_40) ;Einfaches Programm zur Multiplikation von 40 Zahlen ; ;Eingang: 40 A/D-Wandler Werte vom Speicher 2000H-2027H ;Ausgang: 80 Ergebnis-Werte vom Speicher 2028H-2077H ; ;Register ;R0 Adressierungsregister interner RAM ;R7 Zählregister Schleife ; ;Initialisierungsteil AD_DAT_ANF EQU 2000H ;A/D-Daten Adressbeginn AD_DAT_END EQU 2027H ;A/D-Daten Adressende ERGEB_DAT EQU 2028H ;Adresse für Ergebnisdaten ORG 0H ;Für Trace-Betrieb jmp 100h ;Programmanfang auf 100H ORG 100H ;Setzt Adresszähler auf 100H ; ;Programmteil ;A/D-Werte werden in internes RAM an Adresse 30H - 57H kopiert Start: mov dptr,#AD_DAT_ANF ;Adresse der A/D-Daten in DPTR mov R7,#28h ;Zählregister R7 mit 40 laden mov R0,#30h ;R0=Adressierungsregister: Register 0 ;enthält Adresse für internen RAM KOPIER_SCHLEIFE: movx a,@dptr ;n-ten A/D-Wert holen mov @R0,A ;Speichere Wert von Akku in Adresse die in ;R6 steht inc R0 ;Adresse+1 inc dptr ;DPTR+1 djnz R7,KOPIER_SCHLEIFE ;Zählregister 0 ?, sonst springen mov dptr,#ERGEB_DAT mov R7,#28h mov R0,#30h

;Vorbereitung für Multiplikation ;DPTR laden ;Zählregister R7 mit 40 laden ;R0 Adressregister

MUL_SCHLEIFE: mov a,@R0

;A/D-Wert holen

mov b,a mul ab movx @dptr,a

;Hilfsregister B mit Wert laden ;Multiplizieren LB Erg. A, HB in B ;Ergebnis LB in Adresse von DPTR

5 Projekte mit Assembler gelöst inc dptr mov a,b movx @dptr,a inc dptr inc R0 djnz R7,MUL_SCHLEIFE ljmp 8000H end

157

;dptr+1 ;HB in Akku ;Ergebnis HB in Adresse von DPTR ;dptr+1 ;interne Adresse +1 ;0 ?, sonst MUL_SCHLEIFE ;Monitoreinsprung

Addition der Werte; ADD_40.ASM Die Addition der Werte ergibt maximal eine 24-Bit-Zahl. Normalerweise befindet sich in Bibliotheken eine 32-Bit-Addition. Die aufgeführte 24Bit-Addition kann einfach auf 32 erweitert werden. Führen Sie dies einmal zur Übung durch. Die bisherigen Schritte waren zum größten Teil ein Hin- und Herschieben zwischen den Registern. Ein paar Rechenoperationen werden natürlich auch durchgeführt. Man erkennt aber, wie wichtig es ist, sich zunächst Gedanken über die Datenflüsse zu machen. Wie sahen die bisherigen Datenflüsse aus? Speicher 80535 Signalgenerator

2000H 2001H 2002H

1. Wert 2. Wert

2027H

40. Wert

A/D

Abb. 5.26 Speicherinhalt nach A/D-Wandlung von 40 Werten, AD_40

Nach der A/D-Wandlung wurden die Werte in den internen Speicherbereich des Prozessors kopiert und der Offset subtrahiert.

158 externer Speicher 80535 30H

2000H 2001H 2002H

1. Wert 2. Wert

2027H 2028H 2029H

40. Wert 1. Wert LB 1. Wert HB

2077H

40. Wert HB

interner Speicher 57H

CPU Quadrieren

Abb. 5.27 Speicherinhalt nach Quadrieren externer Speicher 80535

2000H 2001H 2002H

1. Wert 2. Wert

2027H 2028H 2029H

40. Wert 1. Wert LB 1. Wert HB

2077H 2078H 2079H 207AH 207BH

40. Wert HB 1. Wert Addition 2. Wert Addition 3. Wert Addition 4. Wert Addition

CPU Addition

LB+0 LB+1 LB+2 LB+3

Abb. 5.28 Speicherinhalt nach Addition

Sehr zu empfehlen ist eine Überprüfung der Programme auf ihre rechnerische Richtigkeit. Hierzu lässt sich folgendes, einfaches Verfahren anwenden: Eine Gleichspannung wird an den A/D-Wandler angelegt. Die eingelesenen Werte kann man im externen Speicher ansehen. Angenommen der Wert 3E stehe im Speicher. Dann würde sich das Ergebnis folgendermaßen berechnen lassen:

5 Projekte mit Assembler gelöst

externer Speicher

2077H 2078H 2079H 207AH 207BH

0F A0 58 02 bel.

LB+0 LB+1 LB+2 LB+3

Abb. 5.29 Speicherinhalt nach Addition

Additionsergebnis = 40 * 62 * 62 = 153760 In Hexadezimal ist dies 258A0H Der externe Speicher muss dann wie im Bild 5.29 aussehen: Das Programm ADD_40.ASM: $NOMOD51 $debug $INCLUDE(reg535.pdf) $title (ADD_40) ;Einfaches Programm zur 32 Bit-Addition von 40 16-Bit-Daten ; im externen Speicher ;Ergebnis der Addition im externen Speicher ab Adresse 2078 ;R3,R4,R5,R6 Additionsregister ;R7 Zählregister ;Initialisierungsteil MUL_DAT EQU 2028H ;Adressanfang ERG_ADD EQU 2078H ;Adresse Low-Byte 32-Additionsergebnis ORG 0H jmp 100h ORG 100H ; ;Programmteil ;MUL_Wert holen - addieren ;Register 0 setzen mov R3,#0 mov R4,#0 mov R5,#0 mov R6,#0 mov R7,#40 mov dptr,#MUL_DAT

;Für Trace-Betrieb ;Programmanfang auf 100H ;Setzt Adresszähler auf 100H

;Register null setzen ;Register null setzen ;Register null setzen ;Register null setzen ;Zählregister setzen ;Adresse der LB-MUL-Daten in DPTR

ADD_SCHLEIFE: CLR C movx a,@dptr addc a,R3 mov R3,a

;Carry null setzen ;Akku mit LB-MUL-Datum laden ;Addition von R3 und a ;Ergebnis in R3

159

160 inc dptr movx a,@dptr addc a,R4 mov R4,a mov a,#0 addc a,R5 mov R5,a inc dptr djnz R7,ADD_SCHLEIFE mov a,R3 mov dptr,#ERG_ADD movx @dptr,a inc dptr mov a,R4 movx @dptr,a inc dptr mov a,R5 movx @dptr,a ljmp 8000H end

;Datenpointer +1 ;Akku mit HB-MUL-Datum laden ;Addition von R4 und HB_MUL-Datum + carry ;Ergebnis 2.Byte in R4 ;kein 3. Byte vorhanden aber evtl. Carry ;Akku + R5 + Carry ;falls mehr als 256 Additionen muß ;Register 6 auch verwendet werden ;Datenpointer +1 ;Zählregister 0 ?, sonst springen ;LB in Akku ;Adresse LB-Ergebnis von Addition ;LB in externen Speicher ;Datenpointer + 1 ;LB+1 in Akku ;LB+1 in externen Speicher ;Datenpointer + 1 ;LB+2 in Akku ;LB+2 in externen Speicher ;u.s.w. falls 32 Bit Addition, LB+3 ;Monitoreinsprung

Division; DIV_40.ASM Für die Bildung des Effektivwertes muss noch durch die Abtastperiodendauer dividiert werden. Hierzu nochmals die Berechnung des Effektivwertes: n ? 39 1 T/ 2 2 Ueff ? Ð u ( t )dt für den µ-Controller Ueff ? 1* Ft un 2 T / T/ 2

T

 n?0

Mit den vorgegebenen Werten für die Abtastzeit = 40 ms und den Abtastintervallen von 1 ms ergibt sich: Ueff ?

1*1ms n ?39 2 Â un 40ms n ? 0

Es ist also die errechnete Summe durch 40 zu dividieren. Der maximale Wert für das Summenzeichen ist 24 Bit = 3 Byte groß. Der Wert 40 kann in einem Byte dargestellt werde. Deshalb ist eine 24/8-Bit-Division ausreichend. Diese Division wird auf eine Subtraktion zurückgeführt. Dividend ? Quotient Divisor

Wurzel_40 Die Ermittlung der Wurzel kann im µ-Controller erfolgen. Die Ermittlung der Wurzel kann aber auch auf der PC-Seite erfolgen. Dieser Weg ist der einfachere und wird daher bevorzugt.

5 Projekte mit Assembler gelöst

161

Übergabe über Serielle Schnittstelle SER_40 Das Ergebnis der Division ist eine maximal 3 Byte große Zahl. Aufgrund der üblichen Vorgehensweise wird eine 4-Byte-Zahl, dies entspricht einem Double Word (Doppelwort), an den PC übergeben. 5.6

Der Linker

Der Linker / Locater verfügt verschiedene Programmmodule zu einem einzigen, ausführbaren Programmzusammen. Im deutschsprachigen Raum werden auch die beiden Ausdrücke Binder / Lader verwendet. Der Linker kann absolute, adressierte Segmente nicht zusammenbinden, da dann beim Laden dieser Segmente in den Speicher Überlappungen entstehen würden. Es müssen also relative Segmente erzeugt werden. Die verschiedenen Namen in den einzelnen Modulen für die Variablen müssen auch den anderen Modulen bekannt gemacht werden. Dies geschieht mit dem Befehl PUBLIC. Dieser Befehl kann in der Evaluation-Version nicht verwendet werden. Als Beispiel, wie einzelne Module zu einem Gesamtprogramm mit dem Linker zusammengefügt werden können, dient das Effektivwertprogramm. Es sei jedoch gleich darauf verwiesen, dass sich dieses Programm sehr viel einfacher in C erstellen lässt. 5.7

Projekt Effektivwertmesser mit dem Linker erzeugt

HP_EW

Hauptprogramm für Effektivwert

$NOMOD51 $title(hp_ew) $xref $debug $nolist $include(reg535.pdf) $list ; ;Programm: Effektivwertberechnung ;Programmiert: B. Beck ; ;Eingang: Werte von A/D-Wandler ; ;Ausgang: Effektivwert über serielle Schnittstelle ; ;Verwendete Einspruenge: ; ;Verwendete Unterprogramme: ; ;Verwendete Register und Variable: ;Registerbank(0)

162 ;Kommentar: ;Aenderungen: ;;Initialisierungsteil ; EXTRN code(ad_40,ad_40_oo,add_40,mul_40,div_40,dat_send,monitor) ; eff_wert_code SEGMENT CODE ; RSEG eff_wert_code ; hp_ew: ljmp start_ew ;Sprung auf Programmbeginn org 100H start_ew: jb P1.1, Start_ew lcall ad_40 ;Messwerte einlesen lcall ad_40_oo ;Offset subtrahieren lcall mul_40 ;Messwerte quadrieren lcall add_40 ;quadrierte Messwerte aufaddieren lcall div_40 ;Ergebnis durch 40 dividieren lcall dat_send ;Ergebnis seriell senden ljmp monitor end LINK.BAT c:\8051\rl51 &= R1/R0 ;Carry out of R7 shift means R7/R6 > R1/R0 ;subtract R1 from R7 to see if R1 < R7 ;A = R7-R1, carry set if R7 < R1 ;at this point R7>R1 or R7=R1 ;jump if R7>R1 ;if R7=R1, test for R6>=R0 ;A = R6-R0, carry set if R6 < R0

can_sub: ;subtract the divisor from the partial ;remainder clr C mov A,R6 subb A,R0 mov R6,A mov A,R7 subb A,R1 mov R7,A setb C ljmp quot cant_sub:

;A = R6-R0 ;A = R7-R1-Borrow ;shift a 1 into the quotient ;shift a 0 into the quotient

clr C quot: ;shift the Carry-bit into the quotient lcall shift_q ;Test for competion

170 djnz R5,div_loop ;Now we are all done, mov the TMP values ;back into OP mov mov mov mov ;

OP_0,TMP_0 OP_1,TMP_1 OP_2,TMP_2 OP_3,TMP_3 ;Ergebnis nach ERG_DIV speichern

mov DPTR,#ERG_DIV ; mov A,OP_0 movx @DPTR,A inc DPTR mov A,OP_1 movx @DPTR,A inc DPTR mov A,OP_2 movx @DPTR,A inc DPTR mov A,OP_3 movx @DPTR,A inc DPTR ; ret ; shift_d: ;shift the dividend one bit to the ;left and return the MSB in C clr C mov A,OP_0 rlc A mov OP_0,A mov A,OP_1 rlc A mov OP_1,A mov A,OP_2 rlc A mov OP_2,A mov A,OP_3 rlc A mov OP_3,A ret ; shift_q: ;shift the quotient one bit to the left ;and return the MSB in C mov rlc mov mov rlc mov mov rlc mov mov rlc mov ret

A,TMP_0 A TMP_0,A A,TMP_1 A TMP_1,A A,TMP_2 A TMP_2,A A,TMP_3 A TMP_3,A

5 Projekte mit Assembler gelöst

171

; end

Modul EFF_INIT.asm $NOMOD51 $title(EFF_INIT) $xref $debug $nolist $include(reg535.pdf) $list ; ;Programm: Initialisierungsdateien fuer Effektivwertprogramm ;Programmiert: B. Beck, Juli 1993 ; ;Eingang: ; ;Ausgang:Typvereinbarungen ; ;Verwendete Einspruenge: ; ;Verwendete Unterprogramme: ; ;Verwendete Register und Variable: ;Registerbank(0) ; ;Kommentar: ; ;Aenderungen: ; ; eff_wert_code SEGMENT CODE eff_wert_xdata SEGMENT XDATA eff_wert_data SEGMENT DATA RSEG eff_wert_code ANZAHL_ad_werte EQU 40 OFFSET EQU 66H monitor EQU 8000H RSEG

;Anzahl der gewandelten Werte ;DEZ. 102 entspricht 2 V ;Einsprungadresse Monitior

eff_wert_xdata

ad_werte: ds anzahl_ad_werte

;Speicherplatz fuer die gewandelten Werte

ERGEB_DAT: ds 2*anzahl_ad_werte

ERG_ADD: ds 4 ERG_DIV: ds 4

;Adressanfang der Werte nach der ;Multiplikation ;Adresse Low-Byte 32-Additionsergebnis ;Adresse fuer die Ergebnisdatender Division

RSEG eff_wert_data TMP_0: TMP_1: TMP_2: TMP_3: OP_0: OP_1:

ds ds ds ds ds ds

1 1 1 1 1 1

;temporaerer Speicher fuer die Division ; " ; " ; " ;low Byte des Dividend bzw. des Ergebnisses ;

172 OP_2: OP_3:

ds 1 ds 1

; ;high

"

temp_intern:ds anzahl_ad_werte ;temporaerer Speicher im internen RAM PUBLIC TMP_0,TMP_1,TMP_2,TMP_3,OP_0,OP_1,OP_2,OP_3,temp_intern PUBLIC ANZAHL_AD_WERTE,OFFSET,MONITOR PUBLIC AD_WERTE,ERGEB_DAT,ERG_ADD,ERG_DIV end

Modul DAT_SEND.asm $NOMOD51 $title(Programm zum A/D Wandler des 80535) $xref $debug $nolist $include(reg535.pdf) $list ; ;Programm: Serielle Uebertragung der Ergebnisses ;Programmiert: B. Beck ; ;Eingang: Ergebnis der Division im externen Speicher ; ;Ausgang: Serielle Daten ; ;Verwendete Einsprnnge: ; ;Verwendete Unterprogramme: ; ;Verwendete Register und Variable: ;Registerbank(0) ;R0, R1,R5,R6 ;Kommentar: ; ;Aenderungen: ; eff_wert_code SEGMENT CODE eff_wert_xdata SEGMENT XDATA ; ;Initialisierungsteil ; PUBLIC dat_send ; EXTRN XDATA(erg_div) ; RSEG eff_wert_code ; dat_send: clr ES mov PCON,#80H mov SCON,#50H setb BD mov DPTR,#erg_div movx A,@DPTR mov R6,A inc DPTR

;seriellen Interrupt sperren ;Baudrate 9600 ;8 Bit, serieller Empfang ;interner Baudratengenerator ;Adresse des Ergebnisses (low-Byte)im DPTR ;Ergebnis im Akku ;Wert zwischenspeichern ;Adresse des Ergebnisses (high-Byte) im DPTR

5 Projekte mit Assembler gelöst movx A,@DPTR mov R5,A mov A,R5 lcall bytesend mov A,R6 lcall bytesend ; ret

;Ergebnis im Akku ;high-Byte in Accu ;Ergebnis als ASCII seriell senden ;low-Byte in Accu ;Ergebnis als Ascii seriell senden

; ; Tabelle zur HEX -> ASCII-Wandlung ; h_a_tab: db '0123456789ABCDEF' ; ; Tabelle zur ASCII -> HEX-Wandlung ; a_h_tab: db 0,1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0dh,0eh,0fh ; ;UP bytesend: wandelt das Zeichen aus ;dem ACCU in ASCII und sendet es ;ueber die serielle Schnittstelle ; bytesend: mov DPTR,#h_a_tab mov R0,A ; anl A,#0f0h swap A movc A,@A+DPTR lcall SERSEND

;high-nibble nach ASCII ;adresse der Tabelle in DPTR ;ACCU zwischenspeichern ;Offset berechnen ;Zeichen senden ;low-nibble nach ASCII

mov A,R0 anl A,#0fH movc A,@A+DPTR lcall SERSEND ret ;UP ASCII ->HEX: Adresse ASCII-Wert in R0 ;Adresse hex-Wert in R1 asc_hex: mov @R1,#0 mov DPTR,#a_h_tab mov A,@R0 jnb ACC.6,asc_hex1 add A,#9 asc_hex1: anl A,#0fH movc A,@A+DPTR swap A orl A,@R1 mov @R1,A inc R0 mov A,@R0 jnb ACC.6,asc_hex2 add A,#9 asc_hex2:

;Hex-Wert loeschen ;Adresse der Umwandlungstabelle ;ascii -> hex im DPTR ;ascii-wert im Accu ;springe wenn kein Buchstabe ;9 addieren (wegen Tabelle a_h_tab)

;high-nibble hex-Wert speichern ;naechster ascii-Wert ;ascii-wert im Accu ;springe wenn kein Buchstabe ;9 addieren (wegen Tabelle a_h_tab)

173

174 anl A,#0fH movc A,@A+DPTR orl A,@R1 mov @R1,A ret

;low-nibble hex_wert speichern ; UP sersend: sendet ein Zeichen aus dem ACCU

SERSEND: mov SBUF,A jnb TI,$ clr TI ret end

;Zeichen senden ;warten bis serielle Daten gesendet ;Ende-Kennung der Uebertragung loeschen

Sie erkennen sicherlich die großen Anstrengungen, die bei einem derartigen solchen Lösungsweg auf Sie zukommen. Es gibt zum Glück auch einen einfacheren Weg, zum Ziel zu kommen, nämlich über die Verwendung von Hochsprachen. Selbstverständlich können kleine Assemblerprogramme mit dem Linker / Locator in die Hochsprache eingebunden werden. Die Eleganz und Schnelligkeit, mit der Sie Programme in Hochsprache entwickeln können, zeigt das nächste Kapitel auf. Die Notwendigkeit, Assembler zu lernen, erscheint bei der Verwendung Hochsprache auf den ersten Blick überflüssig. Spätestens beim Debuggen, und Austesten von Hardware müssen Sie Assembler jedoch verstehen. Der Compiler macht nämlich nichts anderes, als die Befehle in Assembler umzusetzen. Die Firmen Silicon Laboratories und Infineon stellen weitere Hilfsmittel zur schnellen Programmierung in Assembler zu Verfügung. Hierdurch können Assembler-Programme und die Einstellungen der Hardware sehr komfortabel durchgeführt werden. Aber sobald ein Fehler im Zusammenspiel zwischen Hardware und Software auftritt, müssen Sie verstehen, wie das Programm entstanden ist und der Assembler arbeitet.

4

Assembler für die 8051-Controller-Familie

Für die Ausführung eines Programms auf einem µ-Controller der 8051Familie muss das Programm in einer für den Prozessor ausführbaren Form vorliegen. Diese Form besteht aus einer Kombination von "1" und "0", welche mit dem Zustand "EIN" und "AUS" oder "HIGH" und "LOW" gleichgesetzt werden kann. Als gut handhabbar hat sich die Darstellung in Bytes gleichbedeutend mit 8 Bit herausgestellt. Diese 8 Bit lassen sich als Hexadezimalzahl mit je zwei Nibble darstellen.

Abb. 4.1 Zahlendarstellung Der Mensch denkt aber selten in Hexadezimalzahlen. Hier prallen also zwei Sprachen aufeinander. Eine Ausdrucksweise wie "Lade das Register mit dem Namen Akkumulator mit der Zahl 89" fördert das Verständnis für die Aktionen, die im µ-Controller durchgeführt werden. Würde man eine solche Ausdrucksweise wählen, ergäben sich sehr umfangreiche und damit unübersichtliche Programme. Deshalb haben die Ingenieure bei Intel einen leicht zu merkenden mnemotechnischen Code entwickelt. "Lade das Register mit dem Namen Akkumulator mit der Zahl 89" heißt verkürzt: mov A,#89

Abb. 4.2 Befehl für 8051

62

Mit ein bisschen Übung und der nebenstehenden Erklärung im Bild lässt sich dieser Befehl einfach anwenden und schnell schreiben. Der Prozessor im µ-Controller kann diesen Befehl jedoch noch nicht bearbeiten, da dieser nur eine 1-0-Kombination als Befehl ausführen kann. Folglich muss der erwähnte Befehl in eine 1-0-Kombination übersetzt werden. Bei der 8051Familie stehen hierfür die beiden Bitkombinationen in der Tabelle: Tabelle 4.1 Übersetzung des Codes in eine Hexadezimal

Bitkombination 0111 0100B 0101 1001B

Als Hexadezimalzahl 74H 59H

Mnemotechnischer Code mov A, #89

Die erste Bitkombination übersetzt den Befehl mov A. Die zweite Bitkombination - dezimal geschrieben "89" - ergibt in hexadezimaler Darstellung 59H. Genau diese Übersetzungsarbeit - vom mnemotechnischen Code in die hexadezimale Darstellungsart - leistet der Assembler. Andererseits bezeichnet man die einfach zu merkende Kurzschreibweise ebenfalls als Assembler. "To assemble" heißt übersetzt "zusammenfügen". Sie fügen ein Programm in Kurzschreibweise zusammen und übersetzen diese Kurzschreibweise mit Hilfe eines Programms in 1-0-Kombinationen. Sowohl die Kurzschreibweise der Befehle als auch das Programm zum Übersetzen bezeichnet man als Assembler. Für das Übersetzen können Sie den beiliegenden Intel Evaluation Assembler verwenden. Für die Erstellung von 8051-Software verwenden Sie am besten einen PC mit dem Betriebssystem MS-DOS 5.0 oder höher. Die beiliegende Software HISIM51 erlaubt das Austesten der Programme mit dem Simulator. Falls Sie die Hardware in Form der EURO_535 V2.0 erstanden haben, empfiehlt sich die Ausführung der Programme direkt auf der Hardware. Die nachfolgenden Ausführungen beziehen sich auf den 8051Prozessor. Wie bereits erwähnt, gibt es von diesem Prozessor bereits mehr als tausend Derivate. Werden Besonderheiten dieser Derivate programmiert, so wird dies ausdrücklich erwähnt. Aufgabe Eine Leuchtdiode soll mit einem Taster eingeschaltet und mit einem anderen Taster ausgeschaltet werden.

4 Assembler für die 8051-Controller-Familie 63

Lösung Für das erste, einfache Programm sind die Portausgänge P1.1, P1.2, P1.3, P3.2, P3.3 und P3.4 der EURO_535 V2.0 wie folgt beschaltet. Sind die DIP-Schalter, aufgrund ihrer Größe auch "Mäuseklavier" genannt, S2.1-S2.6 auf ON geschaltet, werden die Leuchtdioden und Taster mit den entsprechenden Ports verbunden. An Port 1.1, 1.2, 1.3 liegen die Taster 1 bis 3. An Port 3.2, 3.3, 3.4 sind Leuchtdioden angeschlossen. Alle Ports sind zusätzlich auf die VG-Leiste - eine 96-polige Anschlussleiste - geführt.

+5V 1,8k Y

1,8k Y

1,8k Y

L1

L2

L3

VGC19

S2.1

VGA19

P3.2 P1.1 VGC13

S2.2

P3.3

VGC18

S2.3

P3.4

Prozessoranschlüsse P1.2 P1.3

S2.4 VGA14

S2.5

T1

T2

VGC14

S2.6

T3

Abb. 4.3 Beschaltung der Ports

Die gesamte Beschaltung der Ports mit Leuchtdioden und Schalter kann auf der Karte durch die DIP-Switches S2.1 - S2.6 abgeschaltet werden. Hierdurch stehen für Ihre eigenen Entwicklungen alle Ports zur Verfügung. Der Unterschied zur üblichen Softwareerstellung wird hier sehr deutlich. Eine Softwareerstellung für µ-Controller setzt ein intensives Studium der entsprechenden Hardware voraus. Andererseits ist von der Hardware eine entsprechende Dokumentation zu liefern.

64 Tabelle 4. 2 Dokumentation der Beschaltung

Port

Anschluss

Bemerkung

P1.1 P1.2

T1 T2

Taster 1 Taster 2

P1.3

T3

Taster 3

P3.2

L1

Leuchtdiode 1

P3.3

L2

Leuchtdiode 2

P3.4

L3

Leuchtdiode 3

Wenn Sie selbst Hardware und Software für eine Aufgabenstellung entwickeln, sollten Sie eine künstliche Schnittstelle zwischen Hardware und Software mit Hilfe der Dokumentation erzeugen. Sie arbeiten also in einem Fall für die Hardwareabteilung und im anderen Fall für die Softwareabteilung. Die Beschaltung kann für die Softwareabteilung beispielsweise von der Hardwareabteilung in Form einer Tabelle dokumentiert sein. Das Struktogramm, auch Ablaufdiagramm genannt, ist zu erstellen. Hiermit setzen Sie die formulierte Aufgabenstellung in eine für die Software geeignete Beschreibungsform um. Dieser Schritt ist besonders wichtig. Er entspricht beim Klavier spielen dem Eintrag des Fingersatzes in das Notensystem. Einfache Stücke können Sie ohne Fingersatzeintrag spielen, aber spätestens beim „Hummelflug“ von Rimski Korssakow haben Sie Knoten in den Fingern. Bitte nehmen Sie diesen Tipp sehr ernst. Insbesondere wenn Sie größere Softwareprojekte bearbeiten müssen, sollten Sie die Dokumentation der wesentlichen Programmteile und damit die Struktur für andere Nutzer verständlich machen. Das bedeutet in der Konsequenz, dass Sie für die Dokumentation eine allgemein anerkannte Form wählen. Diese Form kann beispielsweise das Struktogramm nach DIN 66261 sein. Für objektorientierte Programmkonzepte sind Struktogramme dagegen ungeeignet. Eine Form der Programm-Entwicklung und Programm-Dokumentation ist die PDL – Program Design Language. In Worten beschreiben Sie zunächst: „WAS wird gemacht“. Dies entspricht praktisch den Kommentaren in den nachfolgenden Assembler-Programmen. Darauf folgt die Umsetzung in einer beliebigen Sprache. So können Sie beispielsweise als Ziel-

4 Assembler für die 8051-Controller-Familie 65

sprache Assembler oder auch C verwenden. Für ein erstes Programm wählen wir zur Veranschaulichung das Struktogramm. Falls Sie die Symbole für Programmablaufpläne nicht parat haben, finden Sie diese auf der nächsten Seite.

Abb. 4.4 Struktogramm für das erste, einfache Programm EIN_AUS.ASM

Nachfolgend sehen Sie das Programm. Es ist ausführlich dokumentiert. Die Wichtigkeit der Kommentare erkennen Sie leider erst, wenn Sie ein von Ihnen selbst geschriebenes Programm nach einem Jahr hervorholen und Änderungen durchführen sollen. Ersparen Sie sich diese Bloßstellung vor sich selbst! $ title (EIN_AUS) $debug ;Einfaches Programm zum Ein- Ausschalten einer Leuchte ;Taster 1 Einschalten, Taster 2 Ausschalten ;Taster 3 Programm beenden CSEG AT 0H ljmp ANFANG ORG 100H

;Legt absolute Codesegmentadresse auf 0h ;Sprung auf Programmanfang ;Programmstart bei 100H

ANFANG: jnb P1.1,LICHT_EIN jnb P1.2,LICHT_AUS jnb P1.3,PROGRAMM_ENDE ajmp ANFANG

;Schalter 1 betaetigt ? ;Schalter 2 betaetigt ? ;Programmende ;Springe zur Adresse Anfang

LICHT_EIN: clr P3.2 ajmp Anfang

;Licht einschalten ;Springe zur Adresse Anfang

LICHT_AUS: setb P3.2 ajmp ANFANG

;Licht ausschalten ;Springe zur Adresse Anfang

PROGRAMM_ENDE: ljmp 8000H end

;Monitoreinsprung

66

Symbole für Programm-Ablaufpläne Strukturelement

Klassische Darstellung

Struktogramme

Anfang

Ende

Schnittstelle



Sequenz

ja

?

nein

?

ja

nein

Verzweigung b1

?

? b2





bn



für ?



ja

?

nein

Schleife für

Wiederholung

ja

?

nein

ja

?



Abb. 4.5 Symbole für Programm-Ablaufpläne

Schleife

nein

Sprung aus Schleife

4 Assembler für die 8051-Controller-Familie 67

4.1

Erstellen eines einfachen Assemblerprogramms

Die Entwicklung des Programmes Ein_aus.asm wird in den nachfolgenden Schritten beschrieben. 1. Installieren Sie die Keil Entwicklungsumgebung durch Starten der beiliegenden CD. Wählen Sie die Evaluationssoftware „Install Evaluation Software“ und anschließend im Inhaltverzeichnis den Punkt „ C51 Compiler“ (Eval Tools). Folgen Sie den Anweisungen der CD. 2. Rufen Sie den Dateimanager auf. 3. Kopieren Sie von der 8051-CD das Verzeichnis 8051 auf Ihre Festplatte. Bei einer neueren Umgebung spielt es keine Rolle, welchen Laufwerksbuchstaben Sie wählen. 4. Entfernen Sie den Schreibschutz für alle Dateien im 8051Verzeichnis. Rufen Sie den Dateimanager auf und suchen Sie in Verzeichnis 8051 nach allen Dateien mit *.*. Danach klicken Sie mit der rechten Maustaste auf die markierten Dateien. Im erscheinenden Fenster können Sie den Schreibschutz für alle aktivierten Dateien entfernen. 5. Das Programm „µVision“ rufen Sie unter Start\Programme\µVision auf. 6. Unter dem Menüpunkt: Project -> New Project legen Sie ein neues Projekt an. Bemerkung: Nach Abschluss vieler Projekte in den unterschiedlichsten Medien ziehe ich es inzwischen vor, für jedes Projekt einen separaten Ordner anzulegen und alle für das Projekt benötigten Dateien in diesem Ordner oder dessen Unterordner abzulegen. Das führt oft zu mehrfachem Ablegen derselben Dateien. Wird aber ein Projekt verschoben oder an einen anderen Mitarbeiter weitergegeben, so ist dadurch gewährleistet, dass alle notwendigen Dateien im Projektordner vorhanden sind. Besonders hilfreich ist dabei, eine Versionsnummer zusätzlich zur Projektnummer zu vergeben. Eine Sicherung des Projektstandes inklusive der Versionsnummer erweist sich ebenfalls als sehr vorteilhaft.

68

Abb. 4.6 Erstellen eines neuen Projektes

Damit Sie alle bisherigen Beispielprogramme für die 8051-Familie von den älteren Auflagen verwenden können, müssen Sie ein neues Projekt im Ordner: 8051\entw_asm\Ein_aus anlegen.

Abb. 4.7 Speichern der Projektdatei: Ein_aus.uv2

Legen Sie einen Ordner EIN_AUS und darin das Projekt Ein_aus.Uv3 an.Danach erscheint ein neues Fenster mit der Überschrift: Select Device for Target 'Target 1'. Hier wählen Sie das Zielsystem, also den Mikrocontroller aus.

4 Assembler für die 8051-Controller-Familie 69

Abb. 4.8 Auswahl des Controllers

Im vorliegenden Beispiel befindet sich der 80C535-Chip im Verzeichnis von Infineon unter der Bezeichnung SAB80C535. Dieser Controller wird inzwischen nicht mehr gefertigt. Stattdessen können Sie den 80C515 einsetzen, dessen zusätzlicher ROM durch die Hardware ausgeblendet wird.

Abb. 4.9 Auswahl des Derivates SAB 80C535 für die EURO-535-Karte

Die Zielumgebung ist die EURO_535-Karte. Die wesentlichen Eckdaten dieser Umgebung müssen zuerst dem Assembler und Linker unter dem Menüpunkt: Project/Options for Target 'Target1' bekannt gegeben wer-

70

den. Legen Sie den Takt auf 12.0 MHz fest und tragen Sie die Startadresse: 0x0000 und die Größe: 0x8000 für das EPROM und den RAM ein. Bedenken Sie, dass das Remote-Debugsystem der EURO_535 nur in einer von-Neumann-Architektur funktionsfähig ist. Verwenden Sie eine andere Hardware können völlig andere Techniken zum Einsatz kommen.

Abb. 4.10 Einstellungen für die gewählte Hardwareumgebung

Zur Konfiguration der Entwicklungsumgebung müssen die Programme für das Zielsystem bekannt gemacht werden. Im linken Fenster befindet sich unter dem Ordner: Target ein weiterer Ordner mit dem Namen: Source Group 1. Klicken Sie auf diesen Ordner mit der rechten Maustaste und es öffnet sich der folgende Dialog:

Abb. 4.11 Hinzufügen der Datei

Klicken Sie auf: Add Files to Group 'Source Group1' und es öffnet sich ein Datei-Dialog. Damit Sie das Programm nicht neu editieren müssen, öffnen Sie das Verzeichnis: 8051\entw_asm\Ein_aus\Ein_aus.asm. Der

4 Assembler für die 8051-Controller-Familie 71

Datei-Suffix ist normalerweise auf *.C eingestellt und sollte auf *.asm umgestellt werden.

Abb. 4.12 Das editierte Programm EIN_AUS.asm

Das hier vorgestellte Programm Ein_aus.asm wurde auf die wesentlichen Teile begrenzt. Insbesondere wurden alle üblichen Informationen zugunsten der Übersichtlichkeit weggelassen. Die Anweisungen von der bisher verwendeten Umgebung -Intel Assembler- wurden für den Assembler beibehalten. 4.2

Debuggen – Test und Fehlerbeseitigung

Mit Hilfe von Software wird der Controller auf dem PC simuliert. Die Leistungsfähigkeit eines PCs liegt oftmals weit über der Leistungsfähigkeit eines Controllers. Deshalb kann die Simulation schneller ablaufen als auf dem Zielsystem. Eine weitere sehr gute Testmöglichkeit ist der Test auf der Zielhardware. Hierfür muss die Zielhardware bestimmte Voraussetzungen erfüllen.

72

4.3

Test des EIN_AUS-Programms mit dem Simulator

Unter µVision2 können Sie auf zwei Arten das Programm testen. Als reine Simulation per Software oder in der realen Hardwareumgebung mit Hilfe des frei verfügbaren Monitorprogramms MON51 für die EURO_535-Karte.Durch einen Klick auf das "Lupensymbol mit rotem d" lösen Sie den Debug-Vorgang aus.

Abb. 4.13 Das editierte Programm Ein_aus.asm mit Start/Stop Debug Session

Ein neues Fenster mit den einzelnen Registern des 8051-Controllers erscheint. Mit dem Button Disassembly Window können Sie zwischen den verschiedenen Darstellungsarten umschalten. Im Menüpunkt Debug sind sämtliche Möglichkeiten für den Test des Programms aufgeführt. Durchlaufen Sie einmal das Programm in Einzelschritten mit dem Befehl Step oder mit der Funktionstaste F11.

4 Assembler für die 8051-Controller-Familie 73

Abb. 4.14 Das editierte Programm Ein_aus.asm im Debug-Modus

Unter dem Menüpunkt Peripherals können Sie die einzelnen Bits des Port 1 setzen und zurücksetzen. Somit lassen sich die Taster auf der EURO_535 per Software simulieren. Beachten Sie, dass Sie, um im Einzelschritt fortzufahren, das Fenster mit dem Sourcecode wieder aktivieren müssen.

74

Abb. 4.15 Das editierte Programm Ein_aus.asm mit abgearbeiteten Befehlen

4.4

Test des EIN_AUS-Programms mit EURO_535

Mit Remote-Debug testen Sie Ihre Software in der Hardwareumgebung. Durch die reale Umgebung sind die Testbedingungen besser als bei SoftDebug. Die Voraussetzungen für einen solchen Test gestalten sich jedoch umfangreicher: Euro-535 Hardware mit MON51 Eprom Verbindung der beiden Systeme über V24-Schnittstelle (RS232) Einstellungen in µVision2 In der integrierten Entwicklungsumgebung µVision2 rufen Sie im Menüpunkt Project/Options for 'Target1' die Registerkarte Debug auf. Wählen Sie die Check Box Use: Keil Monitor-51 Driver und Load Application at Startup. Dies bewirkt, dass beim Start des Debuggers die Datei Ein_aus sofort in die EURO-535-Karte geladen wird.

4 Assembler für die 8051-Controller-Familie 75

Abb. 4.16 Einstellungen in der Registerkarte Debug

Sehr vorteilhaft ist es, sämtliche Check-Boxen im Feld „Restore Debug Session Settings“ zu aktivieren. Hierdurch werden alle geöffneten Fenster im Debugbetrieb wieder aktiviert. Im Schalter „Settings“ können Sie die Einstellungen der Kommunikationsschnittstellen überprüfen. Falsche Einstellungen sind sehr häufig die Ursache für eine Fehlermeldung bei der Kommunikation zwischen EURO_535 und dem PC. Achten Sie bitte darauf, dass auch in der Registerkarte Target die Einstellungen korrekt sind. Bestätigen Sie die Eingaben mit OK. Bei neueren Notebooks muss ein USB-Seriell Umsetzer eingesetzt werden. Dazu muss unter Windows die richtige COM-Schnittstelle im Gerätemanager eingestellt werden. Wählen Sie COM1 oder COM2. Das Fenster „Project Workspace“ können Sie schließen und erhalten dann das folgende Fenster mit dem gesamten Programm. Sollte die Verbindungsaufnahme zwischen den beiden Systemen nicht funktionieren, können Sie unter Settings die verwendete COMSchnittstelle Ihres PCs auswählen.

76

Abb. 4.17 Das editierte Programm Ein_aus.asm nach Auslösen des Ladevorganges zur EURO_535

Die Registerinhalte des Controllers können Sie über den Button ein- und ausschalten. Der Programmcounter steht nach dem Start auf 0000H. Sie erkennen dies auch am gelben Pfeil am rechten Rand. Betätigen Sie den Button wird ein Einzelschritt ausgeführt und der Programmcounter springt auf 0100H. Wählen Sie unter dem Menüpunkt Debug den Punkt Breakpoints aus, so erscheint das folgende Fenster:

4 Assembler für die 8051-Controller-Familie 77

Abb. 4.18 Debug-Fenster nach Verbindungsaufnahme mit der EURO_535-Karte mit MON51 und das Setzen von Breakpoints

Im Feld Expression werden die gewünschten Breakpoints editiert und durch Define in die Breakpointliste eingetragen. Sinnvollerweise verwendet man hierzu die symbolischen Namen der Labels - Sprungmarken.. In diesem Fall wurde beispielsweise 'LICHT_EIN' gewählt. Sobald Sie Close

78

anklicken, erscheint eine rote Markierung an den gewählten Labels im Source Code. Sie können einen Breakpoint auch mit einem Doppelklick an der gewünschten Stelle auslösen. Im Programm EIN_AUS können die einfachen Techniken zum Austesten eines Programmes im Zusammenspiel mit der Hardware sehr gut geübt werden. Dies ist das einfachste Beispiel für EVA. E steht für Eingabe, V für Verarbeitung, A für Ausgabe. Die Eingabe erfolgt mit einem Taster, die Verarbeitung mit dem Controller und die Ausgabe mit einer LED. Das EVA-Prinzip ist das Grundschema für die elektronische Datenverarbeitung. Es gilt für Software und Hardware.

Abb. 4.19 Breakpoint LICHT_AUS

Mit dem Button lassen Sie das Programm ablaufen. Sobald der Taster T1 am Port 1.1 betätigt wird, hält das Programm am Breakpoint LICHT_EIN: an. Beobachten Sie beim Einzelschrittbetrieb mit der Taste „F11“ den Program Counter. Durchlaufen Sie die Warteschleife zu Beginn mehrmals und beobachten Sie die Befehlsausführungszeit für die Warteschleife. Bei 12 MHz-Betrieb können Sie die Warteschleife 125 000 Mal pro Sekunde durchlaufen.

4 Assembler für die 8051-Controller-Familie 79

4.5

Entwicklungsprozess für ein µ-Controller-Programm

An unserem einfachen Beispiel EIN_AUS lernen wir die typischen Schritte zur Lösung einer Aufgabe mit dem µ-Controller kennen. Diese Schritte sind im nachfolgenden Schaubild nochmals dargestellt. Produktvorstellung und Produktspezifikation sind durch die Aufgabenstellung von EIN_AUS vorgegeben. Aufgrund der simplen Anforderungen fällt dieser Teil hier sehr einfach aus. Normalerweise muss eine Anforderungsliste für das Produkt erstellt werden. Diese Anforderungsliste muss vom Vertrieb, der Geschäftsleitung, der Hardware- als auch der Softwareabteilung gegengezeichnet werden. Ich kann dieses "muss" nur jedem Entwickler empfehlen, selbst wenn einer der Beteiligten sich herausredet; bestehen Sie darauf! Die weitere Entwicklung verläuft meist parallel, da eine lineare Entwicklung zu viel Zeit beansprucht. Vorteilhaft erweist sich zu diesem Zeitpunkt der Einsatz eines Simulators zur Entwicklung der Software. Die Festlegung der Portbenutzung bzw. der Adressen und Speicherbelegung muss in Absprache zwischen Hardware und Software erfolgen. Diese Festlegung setzt einige Erfahrung voraus. Behalten Sie sich deshalb immer eine Reserve für spätere Aufgabenerweiterungen vor. Eine kontinuierliche Überprüfung ihrer Arbeit erreichen Sie durch wöchentliche Absprachen zwischen Hardware und Software. Die Wichtigkeit der ersten Schritte, insbesondere der Produktspezifikation, sei nochmals betont. Auch hier gilt, dass sich ein Fehler beim nächsten Entwicklungsschritt mit dem Kostenfaktor 10 auswirkt. Sind die Phasen Design, Konstruktion und Endtest abgeschlossen und der Endtest nicht erfolgreich, so müssen diese drei Phasen erneut durchlaufen werden. Insbesondere bei Embedded Systems bedingt die Systemintegration häufig einen weiteren Durchlauf von Design, Konstruktion und Endtest. Die Produktion beginnt meist mit einer kleinen Vorserie. Diese Vorserie muss ebenfalls ausgiebig getestet werden, damit keine Rücklaufaktionen notwendig werden. Wechseln Sie unter keinen Umständen ausgetestete Bauteile zugunsten billigerer Angebote aus. Bei der Entwicklung der EURO_535 wurde der Treiber für die serielle Schnittstelle im Prototyp getestet. Die Serie wurde mit einem angeblich kompatiblen Baustein gefertigt. Dennoch gab es zahlreiche Rückläufer wegen der mangelhaften Schnittstelle. Aus dem Gewinn wurde schlagartig ein Verlust!

80

Produkt Vorstellung

Produkt Spezifikation

Prototyp Hardware Design

Prototyp Hardware Konstruktion Prototyp Hardware Endtest

Ü B E R P R Ü F U N G

System Integration

Beginn der Produktion

Abb. 4.20 Entwicklungsablauf

Prototyp Software Design Prototyp Software Codierung Prototyp Software Endtest

4 Assembler für die 8051-Controller-Familie 81

4.6

Prototyp Software Design Start

Turbo-Pascal 6.0 Editor Word in TXT-Format

ASCII-Editor

BSP_2.ASM

BSP_1.ASM

BSP_4.C

BSP_3.ASM

Assembler

C-51 Compiler PL/M-51

ASM51

verschiebbarer Objektcode

Anwender Bibliothek Library Manager

C-Libraries

L51 Linker/Locator BL51 Banking Linker

Absolute Programme CSEG, ORG

BSP_GES.

Symbolpräprozessor SP8051KE

Symbolpräprozessor SP8051KE

Symbolpräprozessor SP8051KE

OH Objekt-HexCode-Wandler

PC

PC

PC

80535 EPROM

HITOP Simulator

Simulator

80535 Monitor EPROM

Remote Debug

Abb. 4.21 Ablauf Programmentwicklung

Hardware ohne µ-Controller

Emulator

Emulator

EPROM

82

Der Ablauf einer Programmentwicklung für µ-Controller beginnt im vorherigen Bild mit „Start“. Das Ende der Programmentwicklung wird meist in Form eines lauffähigen Programms im EPROM vorliegen. Die Testumgebung kann ein Simulator, ein Remote-Debug-System oder ein Emulator sein. Der "Start" im Bild beinhaltet bereits Modularisierung und Erstellung von Struktogrammen. Diese Aufgaben sind aufgrund der Vereinfachung nicht im Bild gezeigt. Sie können mit einem ASCII-Editor sowohl Assembler-Programme als auch C Programme editieren. Je nach Art der Programme wird ein Compiler oder Assembler zum Übersetzen der Programme verwendet. Durch Verwenden des Linkers können Sie verschiedene Module, die bereits auch in Form einer Bibliothek vorliegen, zusammenbinden. Je nach Zielumgebung, d.h. auf welcher Hardware die Software abläuft, erzeugen Sie aus der Linker-Datei entsprechende Dateien. Im Falle des vorgestellten Systems können *.HTX-Dateien sowohl vom Simulator, Remote-Debug-System als auch vom Emulator bearbeitet werden. Der Simulator zeigt sehr schön die Vorgänge im Prozessor auf. Die Umgebung kann in einer Vollversion des Simulators ebenfalls simuliert werden. Das einzige Werkzeug zur Programmentwicklung ist ein PC. Das Remote-Debug-System bietet alle Möglichkeiten, die Programme in Echtzeit auf der Zielhardware ablaufen zu lassen. Diese kann zum Beispiel die EURO_535 sein. Von Nachteil ist die Nicht-Echtzeitfähigkeit beim Austesten des Programms. Ein weiterer Nachteil besteht im erhöhten Speicherbedarf für das Monitorprogramm. Bei Echtzeitaufgaben und großen Entwicklungen empfiehlt sich dringend der Einsatz eines Emulators. Auch beim Test der HardwareUmgebung des Controllers ist dessen Einsatz sinnvoll. 4.7

Die Speicherbereiche des 8051 / 80535

Über den Assembler lässt sich steuern, welche Speicherbereiche des 8051 / 80535 angesprochen werden. Dafür werden zum Quellcode sogenannte Pseudobefehle wie z.B. CSEG -hier beginnt das Codesegement- als Anweisung für den Assembler vorgegeben. Der Unterschied zwischen einem 8051- und einem 80535-Controller liegt in der Erweiterung des internen RAM-Speicherbereiches. Weitere 128 Byte stehen beim 80535 durch indirekte Adressierung zur Verfügung. Vorteilhaft wirkt sich dies insbesondere durch den jetzt genügend großen Speicherplatz für den Stack aus.

4 Assembler für die 8051-Controller-Familie 83

Abb. 4.22 Speicherbereiche 8051 / 80535

4.8

ASM 51 Macro Assembler

Für Assembler-Anweisungen wie Speicherinitialisierung und Reservierung gilt nachfolgende Liste: Tabelle 4.3 und Tabelle 4.4 Assembler Anweisungen Symboli- Anwei- Operant Funktion sche Ad- sung resse Speicher Initialisierung und Reservierung [:]

DB

[:]

DW





Funktionsbeschreibung

Define byte in prog- Definiere Byte (8 Bit) im Programmspeiram memory cher Define word in prog- Definiere Wort (16 Bit) im Programmspeiram memory cher

84 Symboli- Anweis- Operant sche Ad- ung resse [:]

DBIT

Funktion

Funktionsbeschreibung

Advance bit location Reserviere Byte im bitadrescounter sierbaren Bereich

Symbol Definitionen

EQU

Create new symbol

SET

USING

CODE

- 0,1,2,3

DATA



IDATA



XDATA

BIT

Definition eines neuen Symbols (nicht redefinierbar) Set symbol value Definition eines neuen Symbols temporarily (redefinierbar) Select register bank Wahl der aktuellen Registerbank mit R0, R1, R2, R3, R4, R5, R6, R7 Define code address Definition eines Symbols im Programmsymbol speicher Define data adress Definition eines neuen Symbols im symbol internen Datenspeicher Define indirect data Definition eines neuen Symbols im indirekt adress symbol adressierbaren internen Datenspeicher Define an off chip da-Definition eines neuen Symbols im ta adress symbol externen Datenspeicher Define a bit adress Definition eines Symbols im symbol bitadressierbaren Bereich

Relative Segmente

SEGMEN {CODE|XDATA Declare relocatable |DATA|IDATA| segment. T BIT} [Assign attributes]

Definition eines Segmentnamens mit einer Typangabe sowie ggf. Speichergrenzen

RSEG

Aktivieren des vorher definierten relativen Segments

[ _{PAGE|INPAG E|INBLOCK| BITADRESSAB LE|UNIT}]

Select relocatable segment

Absolute Segmente CSEG

[AT]

select code segment

DSEG

[AT]

select internal data segment

ISEG

[AT]

XSEG

[AT]

Select indirect internal segment select external data segment

BSEG

[AT]

select bit adress segment

Die folgenden Befehle und Definitionen werden auf absolute Adressen im CODE-Segment bezogen Die folgenden Definitionen werden auf absolute Adressen im internen Datenspeicher-Segment bezogen Die folgenden Definitionen werden auf absolute Adressen im indirekt adressierbaren Datenspeicher-Segment bezogen Die folgenden Definitionen werden auf absolute Adressen im externen Datenspeicher-Segment bezogen Die folgenden Definitionen werden auf absolute Adressen im bitadressierbaren Segment bezogen

Assembler Kontrolle für Zustände ORG END

Set location Setzt den Adresszähler auf counter value End of program Ende des Programms

4 Assembler für die 8051-Controller-Familie 85

4.9 4.9.1

Die Assembler-Anweisungen im Detail Vereinbarungen für Symbole und Syntax

Symboldefinitionen - Symbol Definitions Ein Symbol repräsentiert Segmente, Register, Adressen und Zahlen. Syntax von Symbolnamen ‚ Beginn mit Buchstaben oder Sonderzeichen (z.B. ? oder _) ‚ erste 31 signifikante Zeichen; Länge max. 255 Zeichen ‚ Keine Unterscheidung zwischen Groß- und Kleinbuchstaben, aber möglich Beispiel: Programm_ENDE Syntax von Zahlenwerten ‚ erstes Zeichen muss Ziffer sein. Nicht FFH - sondern 0FFH Marken - Labels ‚ Symbolnamen mit Doppelpunkt [:] am Schluss ‚ Zuordnung von Befehlsadressen zu Symbolen Es kann Speicher als WORD (16Bit), BYTE (8 Bit) und BIT reserviert werden. 4.9.2

Speicherbereich Initialisierung und Reservierung

DB Das Format einer DB Anweisung ist: [label:] DB expression list Diese Anweisung initialisiert Programmspeicher mit Byte-Werten. Deshalb muss ein CODE-Typ-Segment aktiv sein. PRIMZAHLEN: DB 1,2,3,5,7,11,13 halt 1

; Das Label "Primzahlen" hat den In-

DW Das Format einer DW-Anweisung ist: [label:]DW expression list Diese Anweisung reserviert und initialisiert Worte innerhalb des Programmspeichers.

86 Sprung_Verteiler: DW GO_PROC,BREAK_PROC,DISPLAY_PROC ; eine Sprungverteiler Tabelle wird erstellt ; durch Aufzählung der Adressen für die ; Prozeduren.

DS Das Format ist: [label:]DS expression Diese Anweisung reserviert Speicher in Byte-Schritten. Es dürfen weder Vorwärtsreferenzen noch verschiebbare oder externe Bezüge vorhanden sein. DBIT Das Format ist: [label:]DBIT expression Die Anweisung reserviert Speicher in BIT Einheiten. Die Basiseinheit ist damit Bit und nicht Byte. EQU EQU weist den Wert zu. Nicht redefinierbar innerhalb Modul Bsp.: TRUE EQU OFFH

SET SET weist den Wert zu. Zeitliche Zuweisung - Redefinierbar innerhalb Modul Bsp.: TRUE SET OFFH 4.9.3

Die Registerbänke 0 bis 3

Die Registerbänke befinden sich im internen RAM; Adresse 00H - 1FH Sie können durch Verwenden des Befehls "USING" ausgewählt werden. USING USING 0 ausdruck 3 Ausdruck wählt die aktive Registerbank aus. Bsp.: Using 1

; Registerbank 1 wird ausgewählt

4 Assembler für die 8051-Controller-Familie 87

Nach dem Einschalten wird automatisch die Registerbank 0 gewählt. Symbol R0 bis R7 werden der jeweilig aktiven Registerbank zugewiesen. Es kann jeweils nur eine Registerbank aktiv sein. 1FH

Registerbank 3

18H 17H

Registerbank 2 10H 0FH

Registerbank 1 08H 07H

Registerbank 0 00H

R7 R6 R5 R4 R3 R2 R1 R0

@R1 @R0

kann Adresse von Speicher enthalten

Abb. 4.23 Registerbänke

4.9.4

Der Programmspeicherbereich

CODE CODE Definition eines Symbols für ein Byte im Programmspeicherbereich CODE weist den Wert zu. Nicht redefinierbar innerhalb Modul Bsp.: INT_VEKT_0 CODE 03H ; Interruptvektor 0 für externe Interrupts ; hat Adresse 03 Der Programmspeicher umfasst 64 KByte. Hiervon können 4 KByte im Prozessor sein. Je nach /EA-Signal wird dann interner oder externer Programmspeicher angesprochen. Welche Adresse des Programmspeichers angesprochen wird, steht im PC (Program Counter). Weiterhin liegen in diesem Adressbereich die Interrupt Vector Adresses (InterruptvektorAdressen). Beim 8051-Controller sind dies: Tabelle 4.5 Interrupt Vektoren im Programmspeicherbereich des 8051 PC 0000H 0003H 000BH 0013H 001BH 0023H

Interrupt Name RESET EXTIO TIMER 0 EXTI1 TIMER1 SINT

Erklärung Start Address after Reset External Interrupt 0 Timer 0 Overflow Interrupt External Interrupt 1 Timer 1 Overflow Interrupt Serial Channel 0 Interrupt

88

FFFFH

Für ErweiterungenSoftware-Portierbarkeit freihalten

0FFH

OFF-CHIP ROM

0FFFH 0000H

4 K IN-Chip ROM /EA=1

23H

SINT

1BH

TIMER 1 Timer 1 Überlauf Interrupt

13H

EXTI1

0BH

TIMER 0 Timer 0 Überlauf Interrupt

03H

EXTI0

externer Interrupt 0

00H

RESET

Startadresse nach Reset

Interrupt serielle Schnittstelle

externer Interrupt 1

Abb. 4.24 Programmspeicher

4.9.5

Der interne Datenspeicher

Der interne Datenspeicher ermöglicht eine sehr schnelle Programmbearbeitung. Die Adressierung des internen Datenspeichers kann direkt oder indirekt erfolgen. Für die Effizienz eines Programms ist die richtige Verwendung des internen Speichers wichtig. Der nachfolgende Befehl reserviert internen Speicher. DATA DATA Definition eines Symbols für ein Byte im internen RAM oder SFR DATA weist den Wert zu. Nicht redefinierbar innerhalb Modul Bsp.: TABELLE

DATA 70H

; Tabelle erhält die Adresse 70H

IDATA IDATA Definition eines Symbols für ein Byte im indirekt adressierbaren internen RAM (00H-7FH). IDATA weist den Wert zu. Nicht redefinierbar innerhalb Modul Bsp.: BUFFER

IDATA 60H

4 Assembler für die 8051-Controller-Familie 89 FFH

21 SFR Special Function

nur direkt adressierbar

Registers 80H 7FH

RAM 2FH

indirekt @Ri i=0,1

RAM BIT ADRESS RAUM

1FH 00H

direkt adressierbar

Registerbänke

Abb. 4.25 Interner Datenspeicher

4.9.6

Der externe Datenspeicher

Der externe Datenspeicher ist nur über indirekte Adressierung ansprechbar. Die Adresse steht entweder in den Registerbänken oder im Datenpointerregister. XDATA XDATA Definition eines Symbols für ein Byte im externen RAM XDATA weist den Wert zu. Nicht redefinierbar innerhalb Modul Bsp.: WERT1 XDATA 3890H

; WERT1 erhält die Adresse 3890H

FFFFH

nur indirekt adressierbar RAM über

@DPTR - @Ri

0000H

Abb. 4.26 Externer Datenspeicher

90

4.9.7

Die Bit-Adressen

Im internen direkt und indirekt adressierbaren RAM-Bereich gibt es 16 bitadressierbare Register. Jedes einzelne Bit in diesem Bereich kann direkt adressiert werden. BIT BIT Bit weist den Wert zu. (20H-2FH / 32-47) Nicht redefinierbar innerhalb Programm. Bsp.: ALARM BIT P1.3 ; Alarm-Taste an Pin Port 1.3 angeschlossen OPEN_DOOR BIT ALARM+1; entspricht P1.4 FFH

Special Function 80H 7FH

RAM 2FH 20H 1FH 00H

RAM BIT ADRESS RAUM Registerbänke

2FH 2EH 2DH 2CH 2BH 2AH 29H 28H 27H 26H 25H 24H 23H 22H 21H 20H

7F

09 08 02 01 00 20H.0

Abb. 4.27 Bitadressierbarer Bereich

Die Zuweisungen in Form von werden in den Register-Deklarationsdateien durchgeführt. 4.10 Segmente Segmente sind Speicherbereiche. Da es beim 8051-Prozessor fünf verschiedene Speicherbereiche gibt, sind auch fünf Segmente verfügbar. Innerhalb der einzelnen Segmente muss ein Adresszähler vorhanden sein. Dieser "Location Counter" ist der Adresszähler des jeweils aktiven Segments. Aktiviert man ein Segment, so wird der „Location Counter“ auf die Basisadresse 0 gesetzt. Ist eine andere Basisadresse angegeben, wird diese verwendet.

4 Assembler für die 8051-Controller-Familie 91

interner / externer Programmspeicher

FFFFH

externer Daten speicher

interner Daten speicher

FFFFH FFH

nur direkt

CSEG

XSEG

adressierbar

80H 7FH

DSEG RAM

ISEG 2FH

0000H

0000H

1FH 00H

BSEG Registerbänke

indirekt

@Ri i=0,1

direkt

adressierbar

Abb. 4.28 Speicherbereiche - Segmente

CSEG XSEG DSEG ISEG BSEG

Externer oder interner Programmspeicher Externer Datenspeicher Interner direkt adressierbarer Datenspeicher Interner indirekt adressierbarer Datenspeicher Interner bitadressierbarer Datenspeicher

4.10.1 Relative Segmente Relative Segmente definieren einen verschiebbaren Speicherbereich für den Assembler. Zum Beispiel mit der Anweisung:

SEGMENT DATA Erzeugung eines verschiebbaren Datensegments Der Location Counter wird innerhalb des internen Datenspeicherbereiches auf 0 gesetzt und ein entsprechendes Segment definiert. Entsprechend sieht die Anweisung für die anderen Speicherbereiche aus. Die weiteren Angaben sind: PAGE Gibt die Seite in einem Vielfachen von 256 für Programmspeicher oder externes Datenspeichersegment an. Gültig ist die Anweisung für Programmspeicher und externen Datenspeicher.

92

INPAGE Das Segment liegt innerhalb eines 256 Byte großen Blocks. Gültig für Programmspeicher und externen Datenspeicher. INBLOCK Das Segment liegt innerhalb eines 2048 Byte großen Blocks. Gültig nur für Programmspeicher. RSEG Diese Anweisung aktiviert das vorher definierte relative Segment. 4.10.2 Absolute Segmente Die Anweisung muss ohne Label erfolgen. Die Anweisung wird durch Angabe der entsprechenden Adresse für den „Location Counter“ gegeben. Default ist 0. Wird innerhalb eines Programms das Segment gewechselt, wird dieses Segment mit der Adresse des vorher verlassenen Segmentes fortgesetzt. 4.10.3 Assembler-Anweisungen ORG - END ORG Durch die ORG Anweisung kann der Programmierer die Programme und Daten in bestimmte Speicherbereiche legen. Auf diese Weise kann der Programmierer gewissermaßen einen Linker simulieren. Vorteilhaft wird diese Anweisung, wenn bestimmte Adressen beschrieben werden sollen, beispielsweise Interruptadressen. Diese können aber auch durch EQUAnweisung und den symbolischen Namen beschrieben werden. END Diese Anweisung muss die letzte Programmzeile sein. 4.10.4 Quellcode-Anweisungen für den Linker Falls mehrere Module durch einen Linker zusammengebunden werden, müssen besondere Anweisungen zur Verfügung stehen. PUBLIC Durch diese Anweisung an den Assembler werden die nachfolgenden Namen für andere Module verfügbar. Die Namen sind normalerweise nur in einem Modul lokal bekannt. Durch diese Anweisung wird der Name global bekannt. (Nicht anwendbar bei Evaluation Assembler von Intel)

4 Assembler für die 8051-Controller-Familie 93

EXTERN Durch diese Anweisung an den Assembler werden dem Linker externe, d.h. außerhalb des Moduls stehende Symbole, bekannt gemacht. Diese Symbole können somit als Ansprungadressen von jump- oder callBefehlen für externe Codesymbole dienen. NAME Die Anweisung legt den Namen eines Moduls für den Linker fest. Voreinstellung ist der Dateiname. Es gelten folgende Bedingungen: ‚ Keine Ziffer am Anfang ‚ Muss am Anfang eines Moduls stehen ‚ Kein Label Beispiel: NAME MATH_32_MODUL

4.11

Assembler-Steueranweisungen (Assembler Controls )

[] {} | [,.... ]

eckige Klammern bedeuten optionale Argumente Es darf nur eins der geklammerten Argumente gewählt werden. Einfache Trennung Die vorhergehende Bezeichnung kann wiederholt werden; muss jedoch durch Kommata getrennt werden.

Tabelle 4.6 Assembler Controls. Control

Default

[ { _ MOD51 } ] * MOD51 [ { _ NOMOD51 } ] *

Abkür- Funktion zung -

[ { _ DATE () } DATE () DA ]* [ { _ DEBUG } ] * NODEBU DB / [ { _ NODEBUG } ] * G NODB [ { _ EJECT } ] [ { _ GEN } ]

no EJECT EJ GE

[ { _ GENONLY } ]

GENONL GO Y

[ { _ NOGEN } ]

NOGE

Mit MOD51 benutzt der Assembler die SFRund Bitsymbole des SAB8051. NOMOD51 unterdrückt die Standardsymbole des 8051. Text aus max. 9 Zeichen wird im Seitenkopf als Überschrift ausgegeben Aufnahme bzw. Unterdrückung der Symboltabelle in die Objektcodedatei für das symbolische Testen mit dem ETA Papiervorschub auf Formularanfang Generieren der Makro-Definition, der Makroaufrufe und der Makroexpansionen in der ListDatei Generieren von ausschließlich Makroexpansionen in der List-Datei, als ob die Expansion Teil des Quellenprogramms wäre. Generieren der Makro-Definitionen, der Makroaufrufe.

94 Control

Default

Abkür- Funktion zung

[ { _ LIST } ] LIST LI / [ { _ NOLIST } ] NOLI [ { _ MACRO MACRO MR / [ () (50) NOMR }]* [ { _ NOMACRO } ] * [ { _ OBJECT () OBJECT OJ / }]* () [ { _ PAGELENGTH PAGELEN PL () } ] * GTH (60) [ { _ PAGEWIDTH PAGEWID PW () } ] * TH (120) PAGING PI / [ { _ PAGING } ] * NOPI [ { _ NOPAGING } ] * [ { _ PRINT () } PRINT PR / ]* () [{_ REGISTE RB / REGISTERBANK RBANK NORB ( [...]) } ] * (0) [{_ NOREGISTERBANK }]* [ { _ RESTORE } ] no RS RESTORE [ { _ SAVE } ] no SAVE SA [ { _ SYMBOLS } ] * SYMBOLSSB / [ { _ NOSYMBOLS } NOSB ]* no TITLE TT [ { _ TITLE ('') } ] [ { _ WORKFILES (ddd[, ddd]) } ] * [ { _ XREF } ] * [ { _ NOXREF } ] *

same drive WF as source file NOXREF XR / NOXR

Erstellen bzw. Unterdrücken einer Übersetzungsliste Auswerten und Expandieren von MakroAufrufen (bzw. keine Auswertung und Expansion bei NOMACRO). Prozentuale Zuweisung des verfügbaren Speichers Erstellung bzw. Unterdrückung einer Objektcodedatei Einstellung der Anzahl der Zeilen pro Seite (minimal 10, maximal 65535) Einstellung der Anzahl der Zeichen pro Zeile (72 8000h 59 Signal-Zeit-Diagramm für Datenspeicher schreiben am 80C535 59 Zahlendarstellung 61 Befehl für 8051 61 Beschaltung der Ports 63 Struktogramm für das erste, einfache Programm EIN_AUS.ASM 65 Symbole für Programm-Ablaufpläne 66 Erstellen eines neuen Projektes 68 Speichern der Projektdatei: Ein_aus.uv2 68 Auswahl des Controllers 69 Auswahl des Derivates SAB 80C535 für die EURO-535-Karte 69 Einstellungen für die gewählte Hardwareumgebung 70 Hinzufügen der Datei 70 Das editierte Programm EIN_AUS.asm 71 Das editierte Programm EIN_AUS.asm mit Start/Stop Debug Session 72 Das editierte Programm EIN_AUS.asm im Debug-Modus 73 Das editierte Programm EIN_AUS.asm mit abgearbeiteten Befehlen 74 Einstellungen in der Registerkarte Debug 75 Das editierte Programm nach Auslösen des Ladevorganges zur EURO_535 76 Debug-Fenster nach Verbindungsaufnahme mit der EURO_535-Karte 77 Brechpoint LICHT_AUS 78 Entwicklungsablauf 80 Ablauf Programmentwicklung 81 Speicherbereiche 8051 / 80535 83 Registerbänke 87 Programmspeicher 88 Interner Datenspeicher 89 Externer Datenspeicher 89 Bitadressierbarer Bereich 90 Speicherbereiche Segmente 91 Blockbild von Timer 0 und 1 im 16-Bit Modus 112 Mode 2, Zähler / Zeitgeber 0 und 1 mit automatischem ...... 113 Mode 3, Timer 1 Interrupt wird von Timer 0 mitbenutzt 113

11 Bildverzeichnis Abb. 5.4 Abb. 5.5 Abb. 5.6 Abb. 5.7 Abb. 5.8 Abb. 5.9 Abb. 5.10 Abb. 5.11 Abb. 5.12 Abb. 5.13 Abb. 5.14 Abb. 5.15 Abb. 5.16 Abb. 5.17 Abb. 5.18 Abb. 5.19 Abb. 5.20 Abb. 5.21 Abb. 5.22 Abb. 5.23 Abb. 5.24 Abb. 5.25 Abb. 5.26 Abb. 5.27 Abb. 5.28 Abb. 5.29 Abb. 6.1 Abb. 6.2 Abb. 6.3 Abb. 7.1 Abb. 7.2 Abb. 7.3 Abb. 7.4 Abb. 7.5 Abb. 8.1 Abb. 8.2 Abb. 8.3 Abb. 8.4 Abb. 8.5 Abb. 8.6 Abb. 8.7 Abb. 9.1 Abb. 9.2 Abb. 9.3 Abb. 9.4 Abb. 10.1 Abb. 10.2 Abb. 10.3 Abb. 10.4

Erzeugen von Interrupts Zu viele Interrupts Prioritäten / Anforderungen von Interrupts Struktogramm für Blink-Programm Debug-Programm Zeitgeber-Anzeige Debug-Programm Zeitgeber-Anzeige Debug-Programm: Interrupt Blockbild A/D-Wandler Anschluss eines Potentiometers an EURO_535 Schaltbild ADDA535-Karte Anzeige des ADDAT-Inhalts im Debug-Programm Umsetzung von parallel in seriell Einstellungen der seriellen Schnittstelle Einstellungen im Terminalprogramm Wechselspiel zwischen PC und Controller Erzeugen der Baudrate Blockschaltbild für Effektivwertmesser Abgetasteter Sinus Blockschaltbild Zeitgeber 2 Struktogramm für AD_40T2 Struktogramm für AD_40T2O A/D-Wandlung ohne Interrupts. Abgetasteter Sinus mit Offset Speicherinhalt nach A/D-Wandlung von 40 Werten, AD_40 Speicherinhalt nach Quadrieren Speicherinhalt nach Addition Speicherinhalt nach Addition Compilieren eines C-Programmes Simulator mit geladener EIN_AUS-Datei EIN_AUS in symbolischer Debug-Umgebung Struktogramm des Programmes BLIN_INT.C Debug-Oberfläche beim Programm BLIN_INT.C Verändern des Zählregisters Struktogramm AN0_COD.C Ausschnitt einer Debug-Sitzung von AN0_COD.C Anzeige des Hauptspeichers im Programm DEBUG.EXE Blockbild des Signalprozessors 218x Analog Devices ADSP-2106x Blockbild Einheiten des C515C-Controllers Blockbildschaltbild FullCAN Controller Blockschaltbild C8051F340 Prototyp mit C8051F340 auf der EURO_535 Einfache Aufgabendarstellung für CPU - Datenflussabschätzung Blockschaltbild als Unterlage für die Dokumentation Schaltplan für Dokumentationsunterlagen Layout - Bestückungsplan Schaltung zwischen Prozessor und EPROM Zeitdiagramm beim Umschaltvorgang (nicht zeitgetreu) Anschluss des RAM - Speichers Eprom über Decoder an 80535

307 116 118 119 121 124 125 125 127 127 128 132 133 134 135 135 139 143 143 146 148 151 153 157 158 158 159 179 180 181 188 191 192 193 195 205 208 211 213 213 215 216 221 224 225 230 249 249 261 273

Tabellenverzeichnis Tabelle 1.1 Tabelle 2.1 Tabelle 2.2 Tabelle 2.3 Tabelle 2.4 Tabelle 2.5 Tabelle 2.6 Tabelle 2.7 Tabelle 2.8 Tabelle 2.9 Tabelle 2.10 Tabelle 2.11 Tabelle 3.1 Tabelle 3.2 Tabelle 3.3 Tabelle 3.4 Tabelle 3.5 Tabelle 3.6 Tabelle 3.7 Tabelle 3.8 Tabelle 3.9 Tabelle 3.10 Tabelle 4.1 Tabelle 4.2 Tabelle 4.3 Tabelle 4.4 Tabelle 4.5 Tabelle 4.6 Tabelle 4.7 Tabelle 4.8 Tabelle 4.9 Tabelle 4.10 Tabelle 4.11 Tabelle 4.12 Tabelle 4.13 Tabelle 5.1 Tabelle 5.2 Tabelle 5.3 Tabelle 5.4 Tabelle 5.5 Tabelle 5.6 Tabelle 5.7 Tabelle 5.8 Tabelle 5.9 Tabelle 5.10

Die Ebenen in vereinfachter Darstellung Wahrheitstabelle D-Flip-Flop Erklärung der Abkürzungen für Timing D-Flip-Flop FACT Logikbausteine ( aus Datenbuch für FACT-Bausteine ) Wahrheitstabelle für 3-State-Register 74125 Wahrheitstabelle für 3-State-Register 74126 Wahrheitstafel für Register Wahrheitstafel Latch Datenübergabe Pin Namen Wahrheitstabelle für einen Adressdecoder(Baustein 74LS139) Wahrheitstabelle Multiplexer Pin-Definitionen und Funktionen der 8051 DIL-Version Alternative Funktionen an Port 3 Verwendete Abkürzungen im verfeinerten Blockbild des 8051 Port 3 Alternative Funktionen /PSEN und /RD verknüpft Timing-Werte für Controller 80C535 und EPROM Wichtigste Timing-Werte für Controller 80C535 … Wichtigste Timing-Werte für den RAM-Speicher 55257 AFL-10... Wichtigste Timing-Werte für Controller 80C535 … Wichtigste Timing-Werte für den RAM-Speicher … Übersetzung des Codes in eine Hexadezimal Dokumentation der Beschaltung Endungen der verwendeten Dateien Werkzeuge für die µ-Controller-Programmentwicklung Interrupt Vectoren im Programmspeicherbereich des 8051 Assembler Controls Program Status Word - Programm-Status-Wort Special Function Register nach funktionellen Gruppen Wichtige Schreibweisen und Bedeutungen für die Befehle Registerinhalte nach RESET mit Übersetzung PCON BITS Power Control Bits IEN0 Interrupt 0 Control Bits IEN1 Interrupt 0 Control Bits Die verwendeten Einheiten in den Projekten Vorschlag für Registerverwendung TMOD BYTE TCON BITS Timer 0 - Timer 1 Control Bits Interrupt-Vektor-Adressen IEN0 Interrupt 0 Control Bits Interrupt Control Bits TCON Interrupt Control Bits IP0 Interrupt Priority Bits IP0 Interrupt Priority Bits

2 12 14 15 16 16 18 19 20 22 22 27 31 38 41 42 47 52 58 58 60 60 62 64 83 83 87 93 96 97 99 105 106 107 107 108 109 112 114 115 117 117 118 120 120

309 Tabelle 5.11 Tabelle 5.12 Tabelle 5.13 Tabelle 5.14 Tabelle 5.15 Tabelle 5.16 Tabelle 5.17 Tabelle 5.18 Tabelle 5.19 Tabelle 5.20 Tabelle 5.21 Tabelle 6.1 Tabelle 6.2 Tabelle 6.3 Tabelle 6.4 Tabelle 8.1 Tabelle 8.2 Tabelle 8.3 Tabelle 9.1 Tabelle 9.2 Tabelle 9.3 Tabelle 9.4 Tabelle 9.5 Tabelle 9.6 Tabelle 9.7 Tabelle 9.8 Tabelle 9.9 Tabelle 9.10 Tabelle 10.1 Tabelle 10.2 Tabelle 11.1 Tabelle 11.2

Codierung Wert - Spannung ADCON REGISTER Erhöhung der Auflösung durch Einschränkung des Messbereiches SCON Bits ADCON REGISTER Allgemein verwendete Baudraten Verwendetet Abkürzungen Timer 2 Control-Bits Lösung der Aufgabe mit Interrupts Zahlendarstellung: Die vorderste "Eins" bedeutet "Negativ" Beispiele für Programmiersprachen und Hinweise ... Datentypen des C-51-Compilers Speichertypen bei C-51 ( nach C-51-Bedienungsanleitung ) Speichermodelle bei C-51 ( nach C-51 Bedienungsanleitung ) Entwicklung einer Prozessorfamilie Prozessoren - Namen und Aufgabengebiet Unterscheidungskriterien für Prozessoren Anforderungsliste für EURO_535 Karte Leitlinien zum Aufstellen einer Anforderungsliste Verschiedene Prozessoren - CPU's Stückliste für EURO_535 Kabelbelegung EURO_535 - PC Steckerbelegung VG-Leiste EURO_535 Pinbelegung des VG-Steckers mit Funktionsbeschreibung Fertigungsunterlagen Ausschnitt aus CD: Technical Product Information for .... Beispiel für kontinuierliche Verbesserung durch Anforderungslisten Codierung mit Leuchten Wahrheitstabelle 74LS138 TMOD BYTE TCON BITS Timer 0 - Timer 1 Control Bits

126 128 129 130 138 140 140 146 147 148 155 175 183 184 185 200 202 203 218 220 224 226 227 228 229 231 233 234 259 273 293 294

Stichwortverzeichnis µ-Computer 5 µ-Controller 30 16K-EPROM 50 32K-RAM 57 74F374 17 8051 30 8051 Befehle 99 A/D-Wandler 127; 129; 138; 140 ACC 105 ADCON 129; 138; 140 ADDA535-Karte 128 ADDAT-Register 129 ADD Files 70 Adressbus 23 ALE-Signal 49 AN0_COD.ASM 126 AN0_COD.C 193 Anforderungsliste 218 ASM 51 83 AT-Bus 23 Ausgabeeinheit 42 Auslösen des Ladevorganges 76 B 105 Baudrate 139 Befehle 99 Bit 10 Bit-Adressen 90 Bitadressierbar 90 BLIN_INT.ASM 111; 122 BLIN_INT.C 188 Blinklicht 111 BSEG 91 BUS 23 Controlbus 23 Counter 111 CPU 40 CSEG 91

Data Memory 39 Datenbus 23 Datenspeicher lesen 50; 57 Datenspeicher schreiben 50 DB 85 DBIT 86 D-Flip-Flop 11; 12 Digitalrechners 42 DPTR 105 DS 86 DSEG 91 DW 85 Ebenen-Problem 3 EFF_WERT.C 198 Effektivwert 141 Effektivwertmesser 141; 143 EIN_AUS.ASM 65 EIN_AUS-Programm 71 Eingabeeinheit 42 Emulator 81 END 92 Event Counters 39 Externer Datenspeicher 89 EXTRN 93 Feldeffekttransistor 34 FET 34 Funktionstabelle 11 GAL 22 I/O-Bereich 23 I/O-Bus 23 IEN0 105; 107; 117 IEN1 105; 107; 117 Impulsdiagramm 12 Interrupt 125 Interrupt 0 enable bits 292 Interrupt 1 enable bits 292 Interrupt Control Bits 293 Interrupt Priorität 120 Interrupt System 114 Interrupt Vector Adressen 115 Interruptcontroller 44

11 Stichwortverzeichnis Interrupt-Prioritäten 119 Interrupts 119 IP0 105; 120 IP1 105; 106; 115; 116; ISEG 91 Jumper 230 Latch 18 Leitwerk 42 Leuchte_x 183 Lichtgeschwindigkeit 13 Macro Assembler 84 NAME 93 ORG 92 Oscillator 39 PAL 22 PCON 106; 139 Pegel 9 Pin-Definitionen 31 Port 0 35 Program Memory 39 Program Status WORD 96 Programm Status Wort 292 Programmspeicher lesen 49; 50 Programmspeicher Lesezugriff 51 Projekte 108 PROM 22 PSW 96 PUBLIC 92 Rechenwerk 42 Recovery Time 13 Regel 1 109 Regel 2 109 Regel 3 109 Register 17 Remote Debug System 74 Remote-Debug 76 RESET 105 SBUF 139

Schaltnetz 8 Schaltwerk 7 SCON 138 Segmente 90; 91; 92 Serial port 40 SERIEL_1.ASM 133 SERIEL_1.C 196 Ser. Schnittst. 44; 134; 138; 139 Serielles Kabel 227 Simulator 72 SMx 295 Special Function Register 96 Speicher 42 Stack 96 Steuerbus 23 Steuerlogik 42 Synchrone Übertragung 138 T2CON 147; 296 Taster_x 183 TCON 106; 114; 118; 120; 294 Theorie des µ-Controller Chips 9 Theorie des Klavierspiels 4 Three-State-Ausgang 16 Timer 111 Timer 2 146 TMOD 112; 293 Truth Table 11 TTL Pegel 10 Turingmaschine 6 UART 40 verfeinertes Impulsdiagramm 13 VG-Leiste 228 Vollduplex-Betrieb 138 Wahrheitstabelle 11 Watchdog 107 Watch-Point 132 XSEG 91 Zähler 111 Zeitdiagramm 12

311

8

Prozessorarchitekturen im Überblick

8.1

Grundstrukturen und Einteilung von µ-Prozessoren

In diesem Kapitel wird anstatt von µ-Controllern hauptsächlich von µ-Prozessoren gesprochen. Da alle µ-Prozessoren inzwischen auf einem Chip aufgebaut werden, kann der µ-Prozessor mit dem Prozessor gleichwertig verwendet werden. Jeder Controller beinhaltet einen µ-Prozessor. Deshalb ist die Suche nach dem geeigneten Prozessor unmittelbar mit der Frage nach der Controller-Familie verknüpft. Die Entwicklung der µ-Prozessoren möchte ich am Beispiel der Firma Intel erläutern, da diese den ersten einsatzfähigen Mikroprozessor entwickelte. Tabelle 8.1 Entwicklung einer Prozessorfamilie Jahr 1969/70 1971 1973 1978 1981 1982 1982 1985 1988 1989 1990 1991 1991 1993 1994 1997 1998 1998 1999 2000 2001

Prozessor 8008 8008 8080 8086 8088 80186 80286 80386 80386SX 80486 80386 SL 80486SX 80486 50MHz Pentium Pentium Pro Pentium MMX Celeron Pentium II Xeon Pentium III / Xeon Pentium 4 Xeon

Bemerkungen Siemens Second Source = 8086 mit 8-Bit externem Datenbus IBM-PC

= 80386 mit 16-Bit externem Datenbus 1,2 Millionen Transistoren ! Stromsparende Version 80386 = 80486 mit 16-Bit externem Datenbus Auf 32-Bit getrimmt Grafik-, Video-, Audio-Verarbeitung Privat-Anwender Server, Workstations Desktop / Server Neue Architektur, Front Side Bus, Befehlssatz Dualprozessor

8 Prozessorarchitekturen im Überblick 2001 2002 2002 2004 2005 2005 2006

Itanium Pentium 4 –M Itanium 2 Celeron M Pentium Extreme Celeron D Core 2 Duo

201

Server 64-Bit Notebookprozessor Server 64-Bit Mobile Plattform für Privatanwender Erste Dualcore Prozessor 64-Bit für günstige PCs PC und Notebook Prozessor

Die einfachste technische Einteilung der Prozessoren kann mit Hilfe ihrer Bezeichnung vorgenommen werden. Diese Verbindung zwischen dem Namen und dem Aufgabengebiet, das sich vorteilhaft mit diesen Prozessoren lösen lässt, wird in Tabelle 8.2. hergestellt. Das bekannteste Einsatzgebiet von Prozessoren ist der PC. Die Veränderungen, die dieser Computer bewirken wird, werden nicht fassbare Ausmaße annehmen. Die Entwicklung und Verbreitung dieser erst ca. 40 Jahre alten Technik verursachte den Übergang vom Energiezeitalter zum Informationszeitalter. Man kann daher von einer neuen Kulturtechnik sprechen. Die ethischen Gesichtspunkte dieser Schlüsseltechnologie sind leider nicht Gegenstand dieses Buches, aber ich möchte jeden Entwickler und Techniker ermuntern, sich auch mit den Folgen dieser Technik für den Menschen auseinanderzusetzen. Eine weitere Unterscheidung zwischen den Prozessoren besteht in der Bit-Breite des Datenbusses. Die allgemeinen 8-Bit-Prozessoren sind zwar vereinzelt noch im Einsatz, sollten aber bei Neuentwicklungen nicht mehr verwendet werden. Im Gegensatz dazu sind 8-Bit-Controller bei Neuentwicklungen sehr wohl zu berücksichtigen. Das breite Einsatzgebiet von 8-Bit-Prozessoren unterstreicht diese Aussage, da mit ihnen bereits alle wesentlichen Entwicklungen für Computer durchgeführt werden. Die wesentlichen Architekturen der Peripherie kristallisierten sich im Laufe dieser Entwicklungen heraus und wurden in den Chip integriert. Infolge der geringeren Kosten und der Miniaturisierung der Bausteine kann die so entstandene Architektur für neue Aufgaben, ausgehend von einem Kern, erweitert werden. Neueste Einsatzmöglichkeiten und damit Entwicklungen entstehen beispielsweise auf dem Gebiet der Chipkarten. Kartentelefone, Abrechnungen für Verkehrssysteme, Einsatz im Bankwesen als elektronisches Geld, Zugangskontrollen oder der elektronische Krankenschein basieren auf der Architektur von 8-BitControllern. Allgemeine 16-Bit-Prozessoren sind im Bereich der PCs ebenfalls bereits "Geschichte". Im Bereich der 16-Bit-Controller ergeben sich dagegen neue Einsatzfelder in Rahmen industrieller Anwendungen. Prozess-

202

steuerungen und Prozessregelungen stellen immer höhere Geschwindigkeitsanforderungen. Interessanterweise entstand im Bereich der 16-BitProzessoren eine weitere Architektur in Form der Signalprozessoren. Alle Befehle dieser Prozessoren werden innerhalb eines Zyklus ausgeführt. Außerdem können durch die Verwendung von mehreren Einheiten wie Multiplizier-Einheit, arithmetisch-logische Einheit und Shift-Einheit drei Befehle gleichzeitig ausgeführt werden. Sie sollten deshalb insbesondere bei Einsatz von 16-Bit-Prozessoren einen Vergleich zwischen Signalprozessor und Controller anstellen. Bei 32-Bit-Prozessoren ergeben sich die Einsatzfelder: PC, Workstation, Embedded Control Supercomputing und Multimedia. Das Aufgabengebiet von Intel-Prozessoren ist auch in der vorherigen Tabelle enthalten. Tabelle 8.2 Prozessoren: Namen und Aufgabengebiet Prozessor Beispiel µ-Prozessor 6502, 6809 8080, 8085 Z-80 68000 68020 80x86 Pentium i960 i860 MPC604 Arithmetik- 8087 prozessor 80287 80387 SignalADSP 2100 prozessor TMS 320 DSP 56001 ADSP 21020 DSP 96000 TMS 32040 GrafikET4000 prozessor P9100 Vision864 Controller 8051 8096 80166

Bitbreite 8-Bit 8-Bit 8-Bit 16-Bit 32-Bit 16-Bit 32-Bit 32-Bit 64-Bit 64-Bit 8-Bit 16-Bit 32-Bit 16-Bit 16-Bit 24-Bit 32-Bit 32-Bit 32-Bit 24-Bit 64-Bit 8-Bit 16-Bit 16-Bit

Art CISC CISC CISC CISC CISC CISC RISC C/RISC RISC RISC

RISC RISC RISC RISC RISC

CISC CISC CISC

Einsatzgebiet allgemein , Home-Computer, PC allgemein , PC, Industrie allgemein, PC, Industrie allgemein , Macintosh, allgemein, Macintosh allgemein, PC allgemein, PC allgemein, Hybrid allgemein / Workstation allgemein, Server, Workstation arithmetische Operationen arithmetische Operationen arithmetische Operationen Digitale Signalverarbeitung Digitale Signalverarbeitung Digitale Signalverarbeitung Digitale Signalverarbeitung Digitale Signalverarbeitung Digitale Signalverarbeitung Grafik Grafik Grafik Für spezielle Aufgaben Für spezielle Aufgaben

Die wesentlichen Eigenschaften und Unterschiede der Prozessoren lassen sich anhand eines Vertreters aus jeder Familie kurz beschreiben. Die

8 Prozessorarchitekturen im Überblick

203

Unterschiede in der Architektur liegen vor allem in der Anzahl der Register und deren Verwendungsmöglichkeit sowie in den Arten der Adressierung. Weitere Unterscheidungsmerkmale sind: Tabelle 8.3 Unterscheidungskriterien für Prozessoren Kriterium Allgemeine Register Arithmetische Register Index-Register Segment-Register Busbreite Adressbus nach außen Busbreite Adressbus intern Busbreite Datenbus nach außen Busbreite Datenbus intern Taktfrequenz Datenfluss Adressierbarer Speicherbereich Memory Management auf dem Chip I/O Adressierbarkeit Adressierarten Interface für Arithmetikprozessor Cache Pin-Anzahl Stromversorgung

Bemerkungen / typische Werte 4,8 8 4,8 4,8 4,8,16,24,32,64 Bit 4,8,16,24,32,64 Bit 4,8,16,24,32,64 Bit 4,8,16,24,32,64 Bit 5,8,10,16,20,25,33,50,66,100,150 MHz 2,5,16,50,80,132,160 MByte/s 64, 512 KByte; 1,16,32 MByte; 4 GByte 64 KByte 8,1,24 1st Level, 2nd Level 40, 68, 100, 132, 228 3,3V, 5V

Wie wichtig die Art und Weise der Adressierung ist, verdeutlicht sich anhand der Segmentregister. Sind diese Register nicht vorhanden, ergibt sich eine linearen Adressierung. Der Adressbereich unterteilt sich nicht in einzelne Segmente. Welche Auswirkungen die Segmentierung hatte, verdeutlichen alte Betriebssysteme wie MS-DOS. Es gab durchweg Speicherplatzprobleme aufgrund der Segmentgröße von 64 KByte. Hier greift die Hardware-Architektur zu stark in die Software-Architektur ein. Der Software-Entwickler muss die Freiheit haben, seine Segmentierung bzw. Modularisierung selbst durchzuführen. Aber auch bei Dateisystemen für die Festplatte spielt die Adressierung eine wesentliche Rolle. Sobald Sie mit FAT32 arbeiten, haben Sie bei einer Videodatei mit 25MBit/s ab einer Dauer von 10 Minuten „Schwierigkeiten“ (Speicherplatzprobleme). 8.1.1 80x86-Prozessoren Stellvertretend für die erste und zweite Generation von Prozessoren führe ich das Registermodell des 8086 auf, das aus dem 8080-Prozessor hervorging. Der 8088-Prozessor entspricht im Grundaufbau dem 8086-

204

Prozessor. Im Unterschied zu diesem hat er jedoch einen acht Bit breiten Datenbus zur Peripherie. Der erste IBM-PC beinhaltete genau diesen Prozessor. Register von 8086 und 8088-Prozessor grau hinterlegt 8080-Prozessor Arbeitsregister 16 Bit breit AH BH CH DH

AX BX CX DX

8080 A HL BC DE

AL BL CL DL

Akkumulator Basis Counter / Zähler Datenregister

Pointer- und Indexregister 8080 SP BP SI DI

SP

Stapelzeiger Basiszeiger Source - Quellindex Destinat. -Zielindex

Programmzustand IP FLAG HIGH

8080 PC FLAG LOW

Befehlszeiger Kennzeichenregister

Segmentregister CS DS SS ES

Codesegment Datensegment Stapelsegment Extrasegment

Diese Darstellung der Register veranschaulicht die Entwicklungsphilosophie der Firma Intel. Neue Prozessoren wurden immer unter dem Aspekt der Kompatibilität entwickelt. Dies hatte zur Folge, dass zuvor entwickelte Software sofort auf einem neu entwickelten Prozessor ablauffähig war. Abwärtskompatibilität ist der Hauptgrund für den Erfolg dieser Prozessorgeneration. In der Konsequenz ergaben sich aber auch Nachteile in der Adressierbarkeit. Die physikalische Adresse von 1 MByte ergibt sich aus einer SegmentAdresse und einer Offset-Adresse. Soll beispielsweise die physikalische Adresse 20020H angesprochen werden, so erhalten Sie in einem DebugProgramm wie DEBUG (liegt jedem DOS-System und auch Windows XP bei und kann durch Eingabe von "DEBUG" in der CMD-Box aufgerufen werden) nach Eingabe von d2000:0020 folgende Bildschirmanzeige:

8 Prozessorarchitekturen im Überblick C:\>debug -d2000:0020 2000:0020 E9 DF 2000:0030 E3 8B 2000:0040 4C 89 2000:0050 B8 00 2000:0060 D1 D8 2000:0070 10 73 2000:0080 87 2E 2000:0090 5A 58 -r AX=0000 BX=0000 DS=24EE ES=24EE 24EE:0100 FE3C -

00 1E 16 42 B1 95 3B 8B

50 18 C2 33 03 B9 06 DA

52 59 4C D2 B1 10 02 83

80 B8 A3 8B 04 00 00 E2

3E 02 C6 CA D3 F7 77 0F

CA-4C 42-33 4C-89 CD-21 E8-03 F1-0B 80-89 B1-04

40 D2 16 58 D8 D2 3E D3

74 8B C4 5B 8B 74 A7 EB

CX=0000 DX=0000 SP=FFEE SS=24EE CS=24EE IP=0100 ??? [SI]

E5 CA 4C 53 D6 01 4C 03

E8 CD 8B 50 8B 40 89 C3

B9 21 F2 05 C7 03 36 50

FD A3 8B 0F 83 C3 A5 52

72 C0 F8 00 FA 72 4C 89

205

...PR.>[email protected] ....Y..B3....!.. L...L..L...L.... ..B3....!X[SP... ................ [email protected] ..;...w..>.L.6.L ZX...........PR.

BP=0000 SI=0000 DI=0000 NV UP EI PL NZ NA PO NC DS:0000=CD

Abb. 8.1 Anzeige des Hauptspeichers im Programm DEBUG.EXE

Die 20-Bit-Adresse entsteht durch Multiplikation der vor dem Doppelpunkt stehenden Zahl und anschließender Addition der nach dem Doppelpunkt stehenden Zahl. 2000:0020 2000H*16=2000H * 10H 20000+20= absolute physikalische Adresse 20020H Sie könne das Programm DEBUG und die Befehle auf ihrem PC testen. Es funktioniert auch unter Windows XP. Diese komplizierte Adressbildung hat den Vorteil, dass 64 KByte große Programme an beliebiger Stelle im Hauptspeicher ausgeführt werden können. Es muss lediglich eine entsprechende Offsetadresse eingestellt werden. „Spötter“ behaupten übrigens, dass auf diese Weise die modulare Programmierung entwickelt wurde Stellvertretend für 32-Bit-Prozesssoren sei das Registermodell der Prozessoren 80386 / 80486 vorgestellt. Auch hier wurden die bisherigen Register der Vorgänger in den neuen Prozessor integriert. Eine wesentliche Erweiterung dieser Prozessoren besteht in der MMU Memory Management Unit - Speicherverwaltungseinheit. Mit Hilfe dieser Einheit wird ein Speicherbereich verwaltet, dessen Adresse größer als der Umfang des Hauptspeichers sein kann. Es wird also virtueller Speicher hinzugenommen. Mit Virtuell bezeichnet man hier die Vortäuschung von Hauptspeicher durch Hinzufügen von physikalischem Festplattenspeicher. Die Zugriffszeiten auf solche Speicher sind zwar einerseits größer als bei echtem Hauptspeicher, andererseits kann man nun mit einem logischen Adressbereich arbeiteten , der wesentlich größer als der physikalische Hauptspeicher ist.

206

Register von 80386 und 80486-Prozessor Arbeitsregister 32 Bit breit EAX EBX ECX EDX

AH BH CH DH

AL BL CL DL

Pointer- und Indexregister 32 Bit ESP SP EBP BP ESI SI EDI DI Programmzustand 32 Bit EIP EFLAGS

IP FLAG LOW

Erweiterter Akkumulator Erweiterte Basis Erweiterter Counter / Zähler Erweitertes Datenregister

Stapelzeiger Basiszeiger Source - Quellindex Destinat. -Zielindex

HIGH-

Befehlszeiger Kennzeichenregister

Segmentregister 16 Bit CS ES SS DS FS GS

Codesegment Extrasegment Stapelsegment Datensegment (1) Datensegment (2) Datensegment (3)

Maschinensteuerregister 32 Bit CR0 CR1 Reserviert CR2 CR3 GDT 48 Bit IDT 48 Bit

Seitenfehler lineare Adresse Seiteninhaltsverz. Basisadr. Globale Deskriptortabelle Interruptdeskriptor-Tabelle

LDT LSS

Lokale Deskriptortabelle Prozessstatussegment

DR0 DR1 DR2 DR3 DR4 DR5 DR6 DR7 TR6 TR7

Reserviert

Maschinensteuerregister

Debugreg. 0 (lin.Brkpdr. Debugreg. 0 (lin.Brkpdr. Debugreg. 0 (lin.Brkpdr. Debugreg. 0 (lin.Brkpsr. Für Intel reserviert Für Intel reserviert Breakpoint-Status Breakpoint-Steuerung Test-Steuerung Test-Status

0) 0) 0) 0)

8 Prozessorarchitekturen im Überblick

8.1.2

207

Signalprozessoren

Signalprozessoren erlangen aufgrund ihrer angepassten, hohen Rechenleistung bei der Signalverarbeitung eine immer größere Bedeutung. Sowohl im Kommunikationsbereich als auch in der schnellen Prozessverarbeitung bei Echtzeitanwendungen kommen diese Prozessoren zum Einsatz. Als konkretes Beispiel soll hier die Sprachverarbeitung dienen: Mit Hilfe von Signalprozessoren entstehen u.a. komplexe Systeme für TelefonBanking und automatische Auskunftssysteme. Entscheidende Architekturmerkmale des Signalprozessors sind: RISC-Prozessor

Alle Befehle werden innerhalb eines Zyklus ausgeführt Harvard-Architektur Zwei getrennte Speicher für Programme und Daten Mindestens drei parallel arbeitende Recheneinheiten mit: ALU Arithmetisch-logische-Einheit MAC Multiplizier-Akkumulier-Einheit Barrel-Shifter Shift-Einheit Zwei Adressgeneratoren Um Signalprozessoren zu programmieren, müssen Sie nicht unbedingt den entsprechenden Assembler erlernen. Es gibt bereits mehrere CCompiler, die die Architektur des Prozessors nutzen und den Code entsprechend optimieren, wie z.B. ein frei erhältlicher GNU-C-Compiler. Stellvertretend für Signalprozessoren stelle ich hier zwei Architekturen vor: Aus dem Bereich der 16-Bit Fixed-Point Prozessoren innerhalb der 2100-Familie den ADSP-21msp51 Signalprozessor- er ist durch seine vielfältig integrierte Peripherie in der Funktionalität einem Controller sehr ähnlich. Sowie aus dem Bereich der 32-Bit Floating-Point Prozessoren einen sehr aktuellen, leistungsfähigen. Signalprozessor ADSP 218x Im folgenden Blockschaltbild erkennen Siedie für einen Signalprozessor typischen Einheiten. Die ADSP-2100 Basis-Architektur ist mit einer durchgehenden Linie umrandet. Die zu den externen Speichern führenden Anschlüsse werden im Multiplex-Verfahren betrieben. Intern stehen vier getrennte Busse zur Verfü-

208

gung. Zwei Adressbusse mit jeweils 14 Bit Breite und zwei Datenbusse mit 16 und 24 Bit Breite. Der 24 Bit breite Datenbus ist ein Programmspeicher-Datenbus und kann sowohl Programme als auch Daten befördern.

Abb. 8.2 Blockbild des Signalprozessors 218x Analog Devices

Data Adress Generator (Adresserzeugung) Für viele Algorithmen der digitalen Signalverarbeitung müssen komplexe Manipulationen der Daten durchgeführt werden. Dafür eignen sich Umlaufpuffer (circular buffers). Mit Hilfe der beiden Adressgeneratoren können gleichzeitig acht Umlaufpuffer automatisch verwaltet werden. Jeder Adressgenerator verfügt also über 4 Zeiger (Pointer). DAG #1 greift nur auf den Datenspeicher Adressbus zu. DAG #2 kann auf den Datenspeicher Adressbus und auf den Programmspeicher Adressbus zugreifen. Es kann also gleichzeitig auf Daten aus dem Programmspeicherbereich und auf Daten aus dem Datenspeicherbereich zugegriffen werden. Program Sequenzer ( Steuerung der Programmabfolge ) Der Program Sequenzer versorgt den Programmspeicher mit den Instruktionsadressen. Der Sequenzer selbst wird vom Instruktionsregister gesteuert, welches die momentane Instruktion beinhaltet. Instruktionen werden innerhalb eines Zyklus geholt und in das Instruktionsregister geladen. Im nächsten Zyklus wird dieser Befehl dann ausgeführt. Um keinen Zyklus zu verlieren, realisiert der Prozessor ein single level pipelining (Zwischenspeicherung mit der Tiefe eins). Schleifen werden ohne Zusatzzyklen ausgeführt.

8 Prozessorarchitekturen im Überblick

209

Memory ( Speicher ) Der Programmspeicher umfasst bis 48Kx24Bit und ist als SRAM (Statischer RAM) realisiert. Der Datenspeicher, ebenfalls als SRAM realisiert, umfasst bis zu 56Kx16 Bit. Ein Boot-Adressgenerator erzeugt die Adressen, damit beim Hochfahren des Prozessors Daten aus einem BootEPROM in den Programmspeicher geladen werden können. Anschließend wird auf dieses Programm zugegriffen. Hierdurch vereinfacht sich die Boot-Routine erheblich. Bei der EURO_80535-Karte war dagegen eine komplizierte Adressumschaltung notwendig, um den Bootvorgang zu realisieren. Zusätzlich können über die beiden Busse ein externer Programmspeicher und ein Datenspeicher angeschlossen werden. Arithmetic Units ( Arithmetische Einheiten ) Drei unabhängig rechnende Einheiten können gleichzeitig Rechenoperationen ausführen. Die Multiplizier- und Akkumuliereinheit führt die beiden Operationen Multiplizieren und Addieren innerhalb eines Zyklus aus. Gleichzeitig können in der arithmetisch-logischen Einheit und im Barrel Shifter andere Operationen ausgeführt werden. Diese drei Einheiten zusammen führen zu einer derartig hohen Rechenleistung. Die nun folgenden Einheiten sind nicht notwendig Bestandteile eine jeden Signalprozessors. Doch ähnlich wie bei den Controllern integrierte man die im Laufe der Entwicklung oft benötigte Peripherie in den eigentlichen Signalprozessor- Chip. Serial Ports ( Serielle Schnittstellen ) Die beiden seriellen Schnittstellen arbeiten bidirektional. Zusätzlich sind noch Komprimierungseinheiten und automatische Datenpufferung innerhalb der seriellen Schnittstellen integriert. Timer ( Zeitgeber ) Der 16-Bit-Zeitgeber enthält zwei zusätzliche Register, das Zählregister und das Periodenregister. Zusätzlich kann die Zählfrequenz mit Hilfe eines 8-Bit-Registers variiert werden. Der Zeitgeber funktioniert als Abwärtszähler. Bei jedem Erreichen des Nullzustandes wird ein Interrupt ausgelöst. Die zeitliche Auflösung liegt bei der Zykluszeit des Prozessors ( bis 60 ns ). Die gesamte On-Chip-Peripherie erinnert sehr stark an einen 80535Controller. Die Rechenleistungen liegen jedoch wesentlich höher. Dieser Signalprozessor eignet sich hervorragend für die Sprachverarbeitung bis

210

3,4 KHz. Der Controller kann für Signale bis 100 Hz eingesetzt werden. Bei noch höheren Frequenzen, wie sie beispielsweise in der Audiotechnik vorkommen, setzt man am vorteilhaftesten Floating-Point-Signalprozessoren wie ADSP-21060, TigerSHARC oder TMS320C6x ein. Als Beispiel für einen leistungsfähigen Floating-Point Signalprozessor kann der ADSP 2106x SHARC (Super Harvard Architecture Computer) dienen. Dieser erweitert die Architektur des 218x in erheblichem Maße mit mehreren wichtigen Einheiten. Für den Test und die Emulation wurde ein JTAG Standard Test Access Port nach IEEE Standard 1149.1 in den Prozessor integriert. Über diesen Port können alle Register ausgelesen und der Prozessor gebootet werden. Ein 4 MBit-Speicher als dual-ported SRAM (statischer RAM mit zweiseitigen Zugriffsmöglichkeiten) ist auf dem Chip integriert. Der I/OProzessor beinhaltet die wesentlichen Schnittstellen wie DMA-Controller Direct Memory Access Controller (Direkter Speicherzugriff - der Controller generiert die Adressen und nicht der Prozessor) und serielle Schnittstellen (40 MBit/s). Aus der Transputer-Welt wurden die Link Ports (Verbindungsports) übernommen. Diese Verbindungen eignen sich hervorragend für Punkt-zu-Punkt-Verbindungen zwischen Prozessoren. Die sechs LinkPorts können unabhängig und gleichzeitig zum Prozessorkern arbeiten. Die maximale Datenübertragungsrate beträgt 280 MByte/s. Zwei rechnende Einheiten mit jeweils ALU, Barrel Shifter und Multiplier sind in der TigerSHARC Architektur enthalten. 6Mbit on-chip SRAM und 4 Link Ports mit 1 GByte/s sind integriert. Die Verbindung zwischen mehreren TigerSHARC-Prozessoren kann durch spezielle DMA-Kanäle erfolgen. Hiervon bietet der Prozessor 14 Kanäle an. Die Mehrfachprozessorarchitektur „lässt grüßen“. Eine FFT Fast Fourier Transformation mit 32-Bit Breite für 1024 Abtastwerte benötigt nur 32µs. Das ist eine typische Operation für die Erzeugung von Kompressionsalgorithmen in der Audio- und Videotechnik. Die Multiprozessorfähigkeit in Verbindung mit der enormen Rechenleistung erlauben in Zukunft, Systeme mit bisher unerreichten Rechenleistungen aufzubauen. Mit solchen Prozessoren können die Leistungsanforderungen, die Multimedia-Systeme stellen, sehr gut befriedigt werden. LiveÜbertragungen in HDTV und 5.1 können mit solchen Prozessoren realisiert werden. Kleinere DSPs werden zahlreich in MP3 Aufnahmegeräten und Playern eingesetzt. Aber auch in Kameras aller Art sind Signalprozessoren zu finden. Ein weiteres breites Einsatzgebiet ist die Musik: Filter wie z.B. Hall oder Verzerrungen werden inzwischen digital erzeugt. In Prüf-

8 Prozessorarchitekturen im Überblick

211

ständen zur Analyse von Klopfgeräuschen oder zur Klapperdiagnose finden sich die verschiedensten digitalen Signalprozessoren. 4 MBIT SRAM

Core Processor Cache 32x48

Timer

JTAG 2 unabhängige 2MBIT Bänke Test &

7

Zweiseitiger Zugriff Emulation DAG 1

DAG 2

Program

Processor Port

8x4x32

8x4x24

Sequenzer

I/O Port

DATA DATA ADDR ADDR ADDR DATA DATA ADDR

PM Address Bus 24

IOD

IOA

48

17

EXTERNAL PORT 32 Address Bus Mux

DM Address Bus 32

Host Port & Multiprocessor Interface

PM Data Bus 48

48 Data Bus Mux

Bus

DM Data Bus 40

Control

4 Register

IOP Registers

File

DMA Controller

16x40 Multiplier

Barrel Shifter

Serial Ports 0,1

ALU

36

Memory Mapped

6 6

Link Ports 0,1,2,3,4,5 I/O PROCESSOR

Abb. 8.3 ADSP-2106x Blockbild

Für eine Diskussion der anderen Prozessoren sei auf die entsprechende Firmenliteratur verwiesen, weil die Halbwertzeit von Spezialprozessoren wie etwa Grafikprozessoren nur bei ca. 1,5 bis 2 Jahren liegt. Dies bedeutet, dass die Information, die ich Ihnen auf diesem Gebiet vermittle, in 18 Monaten nur noch zur Hälfte nutzbar wäre. Dies kann nicht das Anliegen einer langfristigen Ausbildung im Bereich der µ-Computertechnik sein. Ich befasse mich deshalb wieder gerne mit der nicht so spektakulären, aber seit langem bestehenden Familie der 8051Controller. Insbesondere auch deshalb, weil deren Vielfalt einen großen Anwendungsbereich abdeckt. Die Vielfalt der neuen Entwicklungen von beispielsweise Silicon Laboratories können Sie auf www.keil.com studieren. Im Menüpunkt „Supported Mikrocontrollers“ können Sie die Controller auswählen.

212

8.2

Derivate der 8051-Controller-Familie

Die Vielzahl der Einsatzfelder von µ-Controllern der 8051-Familie brachte ein breites Produktspektrum hervor. Insbesondere die neuen Chipkarten mit einem 8051-Controller erweitern, wie bereits erwähnt, die Einsatzfelder der µ-Controller. Die Automobilindustrie erkannte ebenfalls die weitreichenden Einsatzfelder der Controller und baut diese Felder kontinuierlichaus. Der Einsatz in der Consumer-Elektronik für die braune und weiße Ware hat sich bereits mehrere Jahre bewährt und wird weiter vorangetrieben. Selbstverständlich beinhaltet nahezu jede PC-Tastatur ein 8051Derivat. Diese große Vielzahl erlaubt es Ihnen, für beinahe jede Anforderung, den geeigneten Prozessor auf Basis des 8051-Controllers zu finden. Die Architektur des 8051-Kerns kann je nach Aufgabenstellung erweitert werden. Die weiteren Blockschaltbilder wurden, ausgehend von diesem Ursprung, so ergänzt, dass daraus die neuen Derivate hervorgehen konnten.. Die zwei wesentlichen Vertreter der 8051 und der 80515 / 80535 wurden bereits vorgestellt. Der 80535 wird inzwischen nicht mehr hergestellt und kann durch den C515C-Controller ersetzt werden. Der Programmspeicher auf dem Chip kann per Hardware deaktiviert werden. Das erste Bild zeigt in starker Vereinfachung die wesentlichen Einheiten dieses Controllers auf. Der wesentliche Unterschied zum bereits vorgestellten 80C515 besteht in der Einheit „FullCAN Controller“. Das verfeinerte Blockschaltbild ist in Abb. 8.5 dargestellt. Der CAN Controller Area Network nach Spezifikation 2.0B, entwickelt von Bosch, wird vorwiegend in der Automobilindustrie eingesetzt. Es gibt aber inzwischen auch einige Anwendungen in der Prozessautomatisierung. Die anschließende Tabelle zeigt nur einen Bruchteil der bestehenden Derivate auf. Sie erkennen dort aber bereits die Vielfalt der möglichen Derivate. Firmen wie AMD, Philips, Atmel, Infineon oder Silicon Laboratories bieten jeweils eine breite Palette dieser Bausteine an. Bei der Auswahl des Prozessors sollten Sie immer zuerst Ihre Aufgabe genau analysieren und dann den entsprechenden Controller auswählen. Gehen Sie einfach davon aus, dass Ihr Wunschcontroller bereits existiert. Die umgekehrte Vorgehensweise, also zuerst einen Controller auszuwählen und dann die Peripherie dieses Controllers entsprechend der Aufgabenstellung zu entwickeln, bedeutet immer einen hohen Entwicklungsaufwand für die Peripherie. Die meisten Anforderungen können durch eine geschickte Wahl des Controllers erfüllt werden.

8 Prozessorarchitekturen im Überblick

8.2.1 C515C-Controller

Abb. 8.4 Einheiten des C515C-Controllers TXDC

RXDC

BTL-Configuration

CRC Gen/Check

Bit Timing Logic

Bit

Timing Generator

TX/RX Shift Register

Messages Handlers

Intelligent Memory

Clocks (to all) Control

Interrupt Register

Status + Control

Bit Stream Processor Status Register

Error Management Logic

Abb. 8.5 Blockschaltbild FullCAN Controller (Users Manual Infineon)

213

214

8.2.2

8051-Derivat C8051F340

Diese Weiterentwicklung von Silicon Laboratories enthält zahlreiche sinnvolle Erweiterungen zum 8051-Controller. Herausragend für den Einsatz im Prototypenbau sind die Einheiten: ‚ 8051 Kern High-Speed Controller Core. - On-chip debug circuitry facilitates full speed, non-intrusive in-system debug (No emulator required) – ein im Prozessor integriertes Entwanzungssystem mit Unterbrechungspunkten, Einzelschrittbearbeitung, Beobachtung und Änderung der Register und des Speichers. - Pipelined Instructions architecture - 70% der Befehle mit 1 oder 2 Systemtakten - 48 MIPS - Erweiterter Interrupt Verwaltung - Watchdog Timer ‚ Speicher - 4352 Bytes RAM - 64kB In-system programmable Flash - im Chip programmierbarer Speicher ‚ Digitale Eingänge und Ausgänge - 40 Ports - 5 V tolerant - Hoher Strom - SMBus – I2C - SPI-BUS - 2 UARTS - 4 16-Bit Zähler / Zeitgeber - 16-Bit Zähler-Array - Ext. Speicherschnittstelle ‚ Analoge Einheit - Multiplexer AMUX - Differentieller oder auf Masse bezogener Eingang - 10-Bit A/D-Wandler Abtastfrequenz 200kHz - Temperatursensor - Vergleichsspannung extern oder intern - Option externer Wandlungsstart ‚ Oszillator - 0,25% Genauigkeit - Taktrückgewinnung - Unterstützung USB und UART - Externer Oszillator - 80 kHz Interner Oszillator

8 Prozessorarchitekturen im Überblick

215

- Kann zwischen Taktquellen im Betrieb umschalten ‚ USB Controller - USB Spezifikation 2.0 - Full speed 12 Mbps - Low speed 1,5 Mbps - Integrierter Takt - Unterstützt 8 Endpunkte - 1 kB USB Buffer Speicher - Integrierter Sender - Keine externen Bauteile ‚ Crossbar - Die Crossbar ordnet die internen digitalen und analogen Funktionen den externen Port-Pins zu. Zur Vereinfachung der Programmierung gibt es einen Configuration Wizard.

Abb. 8.6 Blockschaltbild C8051F340

216

Dieser Controller kann an alle Aufgaben und bisherigen Projekte mit der EURO_535-Karte angepasst werden. Er dient als Ausgangsbasis für weitere Projekte. Alle Funktionen der bisherigen EURO_535-Karte sind hier in einem Chip enthalten. Damit ist die neue Karte 10-mal kleiner aber dafür 10-mal schneller. Einen Prototyp der neuen Karte sehen Sie im folgenden Bild, auf der EURO_535 Karte liegend. Auf dem weißen Keramikträger ist der Controller erkennbar.

Abb. 8.6 Prototyp mit C8051F340 auf der EURO_535

11

Anhang

11.1

Zusammenstellung der Register von 8051/80535

Nachfolgend finden Sie die Registerdeklarationsdateien, die beim Assemblieren für den jeweiligen Prozessortyp in den Source-Code eingebunden werden. 11.1.1 REG8051.PDF ; Copyright 1979,1983,1986 Intel Corporation ; REGISTER DECLARATIONS FOR 8051 ;******** BYTE REGISTERS ******* P0 DATA 80H P1 DATA 90H P2 DATA 0A0H P3 DATA 0B0H PSW DATA 0D0H ACC DATA 0E0H B DATA 0F0H SP DATA 81H DPL DATA 82H DPH DATA 83H PCON DATA 87H TCON DATA 88H TMOD DATA 89H TL0 DATA 8AH TL1 DATA 8BH TH0 DATA 8CH TH1 DATA 8DH IE DATA 0A8H IP DATA 0B8H SCON DATA 98H SBUF DATA 99H

11 Anhang

;******** BIT REGISTERS ******* ;******** CY BIT AC BIT F0 BIT RS1 BIT RS0 BIT OV BIT P BIT

PSW BITS ******* 0D7H 0D6H 0D5H 0D4H 0D3H 0D2H 0D0H

;******** TF1 BIT TR1 BIT TF0 BIT TR0 BIT IE1 BIT IT1 BIT IE0 BIT IT0 BIT

TCON BITS ******* 8FH 8EH 8DH 8CH 8BH 8AH 89H 88H

;******** EA BIT ES BIT ET1 BIT EX1 BIT ET0 BIT EX0 BIT

IE BITS ******* 0AFH 0ACH 0ABH 0AAH 0A9H 0A8H

;******** PS BIT PT1 BIT PX1 BIT PT0 BIT PX0 BIT

IP BITS ******* 0BCH 0BBH 0BAH 0B9H 0B8H

285

286

;******** RD BIT WR BIT T1 BIT T0 BIT INT1 BIT INT0 BIT TXD BIT RXD BIT

P3 BITS ******* 0B7H 0B6H 0B5H 0B4H 0B3H 0B2H 0B1H 0B0H

;******** SM0 BIT SM1 BIT SM2 BIT REN BIT TB8 BIT RB8 BIT TI BIT RI BIT

SCON BITS ******* 9FH 9EH 9DH 9CH 9BH 9AH 99H 98H

11 Anhang

11.1.2 REG535.PDF Datei ;******** BYTE REGISTERS ******* P0 DATA 080H P1 DATA 090H P2 DATA 0A0H P3 DATA 0B0H PSW DATA 0D0H ACC DATA 0E0H B DATA 0F0H SP DATA 081H DPL DATA 082H DPH DATA 083H PCON DATA 087H TCON DATA 088H TMOD DATA 089H TL0 DATA 08AH TL1 DATA 08BH TH0 DATA 08CH TH1 DATA 08DH IEN0 DATA 0A8H IP0 DATA 0A9H IEN1 DATA 0B8H IP1 DATA 0B9H SCON DATA 098H SBUF DATA 099H IRCON DATA 0C0H CCEN DATA 0C1H CCL1 DATA 0C2H CCH1 DATA 0C3H CCL2 DATA 0C4H CCH2 DATA 0C5H CCL3 DATA 0C6H CCH3 DATA 0C7H T2CON DATA 0C8H CRCL DATA 0CAH CRCH DATA 0CBH TL2 DATA 0CCH TH2 DATA 0CDH ADCON DATA 0D8H ……………………..

287

288

ADDAT DAPR P4 P5

DATA DATA DATA DATA

0D9H 0DAH 0E8H 0F8H

;******** BIT REGISTERS ******* ;******** PSW CY AC F0 RS1 RS0 OV F1 P

BIT BIT BIT BIT BIT BIT BIT BIT

BITS *******

0D7H 0D6H 0D5H 0D4H 0D3H 0D2H 0D1H 0D0H

;******** IEN0 BITS ******* EAL WDT ET2 ES ET1 EX1 ET0 EX0

BIT BIT BIT BIT BIT BIT BIT BIT

0AFH 0AEH 0ADH 0ACH 0ABH 0AAH 0A9H 0A8H

;******** IEN1 BITS ******** EXEN2 SWDT EX6 EX5 EX4 EX3 EX2 EADC

BIT BIT BIT BIT BIT BIT BIT BIT

0BFH 0BEH 0BDH 0BCH 0BBH 0BAH 0B9H 0B8H

11 Anhang

;******** IRCON BITS ******** EXF2 BIT 0C7H TF2 BIT 0C6H IEX6 BIT 0C5H IEX5 BIT 0C4H IEX4 BIT 0C3H IEX3 BIT 0C2H IEX2 BIT 0C1H IADC BIT 0C0H ;******** TCON BITS ******* TF1 BIT 08FH TR1 BIT 08EH TF0 BIT 08DH TR0 BIT 08CH IE1 BIT 08BH IT1 BIT 08AH IE0 BIT 089H IT0 BIT 088H ;******** P3 RD BIT WR BIT T1 BIT T0 BIT INT1 BIT INT0 BIT TXD BIT RXD BIT

BITS ******* 0B7H 0B6H 0B5H 0B4H 0B3H 0B2H 0B1H 0B0H

;******** SCON BITS ******* SM0 BIT 09FH SM1 BIT 09EH SM2 BIT 09DH REN BIT 09CH TB8 BIT 09BH RB8 BIT 09AH TI BIT 099H RI BIT 098H

289

290

;******** T2CON BITS ******** T2PS I3FR I2FR T2R1 T2R0 T2CM T2I1 T2I0

BIT BIT BIT BIT BIT BIT BIT BIT

0CFH 0CEH 0CDH 0CCH 0CBH 0CAH 0C9H 0C8H

;******** P1 BITS ******** T2 BIT CLKOUT T2EX INT2 INT6 INT5 INT4 INT3

097H BIT BIT BIT BIT BIT BIT BIT

096H 095H 094H 093H 092H 091H 090H

;******** ADCON BITS ******** BD CLK BSY ADM MX2 MX1 MX0

BIT BIT BIT BIT BIT BIT BIT

0DFH 0DEH 0DCH 0DBH 0DAH 0D9H 0D8H

;******** INTERRUPT VECTOR ADRESSES ******** TIMER2 ADCI EXTI2 EXTI3 EXTI4 EXTI5 EXTI6

EQU EQU EQU EQU EQU EQU EQU

02BH 043H 04BH 053H 05BH 063H 06BH

11 Anhang

291

11.1.3 REGISTER DECLARATIONS FOR 80535 mit Erklärungen ;******** BYTE REGISTERS ******* P0 DATA P1 DATA P2 DATA P3 DATA PSW DATA ACC DATA B DATA SP DATA DPL DATA DPH DATA PCON DATA TCON DATA TMOD DATA TL0 DATA TL1 DATA TH0 DATA TH1 DATA IEN0 DATA IP0 DATA IEN1 DATA IP1 DATA SCON DATA SBUF IRCON CCL1 DATA CCH1 DATA CCL2 DATA CCH2 DATA CCL3 DATA CCH3 DATA T2CON CRCL DATA CRCH DATA TL2 DATA TH2 DATA ADCON ADDAT DAPR DATA P4 P5

080H 090H 0A0H 0B0H 0D0H 0E0H 0F0H 081H 082H 083H 087H 088H 089H 08AH 08BH 08CH 08DH 0A8H 0A9H 0B8H 0B9H 098H DATA DATA 0C2H 0C3H 0C4H 0C5H 0C6H 0C7H DATA 0CAH 0CBH 0CCH 0CDH DATA DATA 0DAH DATA DATA

Port 0 Port 1 Port 2 Port 3 Programm-Status-Wort Akkumulator Hilfsregister- Multiplikationsregister Stackpointer - Kellerzeiger Datenzeiger Low-Byte Datenzeiger High-Byte Power-control-register Timer control-register Timer mode register Timer 0, low byte Timer 1, low byte Timer 0, high byte Timer 1, high byte Interrupt enable Interrupt priority regist. 0 Interrupt 1 enable Interrupt priority register 1 Serial channel control register 099H Serial channel buffer register 0C1H Interrupt control register Compare capture register 1, low byte Compare capture register 1, high byte Compare capture register 2, low byte Compare capture register 2, high byte Compare capture register 3, low byte Compare capture register 3, high byte 0C8H Timer 2 Control register Compare reload capture register , low byte Compare reload capture register , high byte Timer 2, low byte Timer 2, high byte 0D8H A/D converter control register 0D9H A/D converter data register D/A converter program register 0E8H Port 4 0F8H Port 5

292 ;******** BIT REGISTERS ******* ;******** PSW

BITS *******

CY AC F0 RS1

BIT BIT BIT BIT

0D7H 0D6H 0D5H 0D4H

RS0

BIT

0D3H

BIT BIT BIT

0D2H 0D1H 0D0H

OV F1 P

Carry flag Auxiliary carry flag for BCD operations General purpose user flag register bank select bits (00 - Bank 0; 01 Bank 1) register bank select bits (10 - Bank 2; 11 Bank 3) Overflow flag General purpose user flag Parity flag, wird bei jeder Instruktion ge setzt, zurückgesetzt, ODD-EVEN von Akkumulator

;******** IEN0 BITS ******* EAL BIT 0AFH WDT BIT 0AEH ET2 BIT ES ET1 EX1 ET0 EX0

BIT BIT BIT BIT BIT

Programm Status Wort

Interrupt 0 enable bits

Enables=1 or disables=0 external interrupts Watchdog timer refresh flag, wird unmittelbar vor SWDT gesetzt, um unbeabsichtigten Refresh zu verhindern Enables=1 or disables=0 timer 2 overflow, ext. reload Enables=1 or disables serial channel interrupt Enables=1 or disables=0 timer 1 interrupt Enables=1 or disables=0 external interrupt 1 Enables=1 or disables=0 timer 0 interrupt Enables=1 or disables=0 external interrupts

0ADH 0ACH 0ABH 0AAH 0A9H 0A8H

;******** IEN1 BITS ******** EXEN2

BIT

0BFH

SWDT

BIT

0BEH

EX6

BIT

0BDH

EX5

BIT

0BCH

EX4

BIT

0BBH

EX3

BIT

0BAH

EX2

BIT

0B9H

EADC

BIT

0B8H

Interrupt 1 enable bits

Enables=1 or disables= 0 timer 2 reload interrupt, external interrupt is not affected Watchdog timer status flag. Wird durch Hardware gesetzt falls Watchdog timer gestartet wird. Enables=1 or disables=0 external interrupt 6 capture / compare Enables=1 or disables=0 external interrupt 5 capture / compare Enables=1 or disables=0 external interrupt 4 capture / compare Enables=1 or disables=0 external interrupt 3 capture / compare Enables=1 or disables=0 external interrupt 2 capture / compare Enables=1 or disables=0 A/D converter interrupt

;******** IRCON BITS ********Interrupt Control Bits EXF2

BIT

0C7H

Enables=1 or disables=0 external reload flag,

11 Anhang

TF2

BIT

0C6H

IEX6

BIT

0C5H

IEX5

BIT

0C4H

IEX4

BIT

0C3H

IEX3

BIT

0C2H

IEX2

BIT

0C1H

IADC

BIT

0C0H

293

neg. transition on pin T2EX Timer 2 overflow flag, TF2=1 cause an interrupt if timer 2 interrupt is enabled. Must be cleared by SW external interrupt 6 edge flag, cleared when interrupt processed external interrupt 5 edge flag, cleared when interrupt processed external interrupt 4 edge flag, cleared when interrupt processed external interrupt 3 edge flag, cleared when interrupt processed external interrupt 2 edge flag, cleared when interrupt processed A/D converter interrupt request flag. Set by hardware at the end of a conversion. Must be cleared by software

TMOD BYTE - Timer 0 - Timer 1 - Modus Control Register (nicht bitadressierbar) 89H

GATE

C/T# M1 Timer 1

M0

GATE

C/T# M1 Timer 0

M0

TMOD

Tabelle 11.1 TMOD BYTE Bit Gate C/T#

Funktion Gating control "1" schaltet, wenn INTx#-Pin auf "1" und TRx Kontrollbit gesetzt. "0" => Timer x zählt, wenn TRx Kontrollbit gesetzt ist Counter or timer select bit. Zähler oder Zeitgeber Auswahlbit "1" Zähler-Funktion ( Eingang am Tx Eingangspin vom Prozessor ) "0" Zeitgeber-Funktion ( Eingang vom internen System Clock )

M1/M0 0 0 8-bit timer / counter THx ist ein 8-bit-Zähler / Zeitgeber TLx dient als 5-bit-Vorteiler 0 1 16-bit timer/counter "THx" und TLx" ergeben zusammen einen 16-bit Zähler / Zeitgeber. 1 0 8-bit auto-reload timer / counter 8-bit automatisch ladender Zähler / Zeitgeber. THx enthält den Wert der in TLx bei jedem Überlauf geladen wird. 1 1 Timer 0: TL0 ist ein 8-bit -Zähler / Zeitgeber der von den Kontrollbits von Timer 0 kontrolliert wird. TH00 ist ein 8-Bit-Zeitgeber der nur von den Zeitgeber 1 Kontrollbits kontrolliert wird. 1 1 Timer 1. Zähler / Zeitgeber hält

294

;******** TCON BITS ******** TCON BITS - Timer 0 / 1 Control Bits Bitadressierbar

88H

8FH

8EH

8DH

8CH

8B

8AH

89H

88H

TF1

TR1

TF0

TR0

IE1

IT1

IE0

IT0

Diese Bits werden nicht zur Kontrolle des Zeitgebers verwendet

Tabelle 11.2 TCON BITS Timer 0 - Timer 1 Control Bits Bit TR0 TF0 TR1 TF1

Funktion Timer 0 run control bit Bit zum Starten und Stoppen des Zeitgebers 0 Timer 0 overflow flag Wird hardwaremäßig beim Zeitgeber / Zählerüberlauf gesetzt Wird bei Aufruf des entsprechenden Interrupts zurückgesetzt Timer 1 run control bit Bit zum Starten und Stoppen des Zeitgebers 1 Timer 1 overflow flag Wird hardwaremäßig beim Zeitgeber / Zählerüberlauf gesetzt Wird bei Aufruf des entsprechenden Interrupts zurückgesetzt

;******** P3 BITS ******* Port 3 bits, alternate functions RD WR T1 T0 INT1 INT0 TXD

BIT BIT BIT BIT BIT BIT BIT

0B7H 0B6H 0B5H 0B4H 0B3H 0B2H 0B1H

RXD

BIT

0B0H

External data memory read strobe External data memory write strobe Timer 1 external counter input Timer 0 external counter input External interrupt 1 input, timer 1 gate control External interrupt 0 input, timer 0 gate control Serial port's transmitter data outputs (asynchron) synchron clock output Serial port's receiver data input (asynchron) synchron data input/output

TCON

11 Anhang

295

;******** SCON BITS ******* Serial control bits SM0 BIT 09FH Mode für Serielle Schnittstelle SM1 BIT 09EH SM0 SM1 Mode Beschreibung 0 0 0 Shift register, sync. 0 1 1 8-Bit UART 1 0 2 9-Bit UART 1

1

3

9-Bit UART

Baudrate f0SC/12 Variabel f0SC/64 f0SC/32 Variabel

SM2 BIT 09DH "1" Ermöglicht Multiprozessor-Kommunikation in Mode 2 und 3. Empfänger-Interrupt wird nicht ausgelöst, falls das neunte Datenbit "0" ist. In Mode 1 und SM2="1" wird der Interrupt ebenfalls nicht aktiviert, falls kein gültiges Stoppbit empfangen wird. In Mode 0 muss SM2="0" sein. REN BIT 09CH Receiver enable. "1" Gibt den seriellen Empfang durch Software frei. "0" sperrt den Empfang. TB8 BIT 09BH Übertragungsbit 8. Ist neuntes Bit für Mode 2 und 3. Wird durch Software gesetzt und rückgesetzt. RB8 BIT 09AH Empfangsbit 8. Neuntes Bit für Empfang in Mode 2 und 3 TI

BIT 099H Übertragungsinterrupt. Wird durch die Hardware am Ende des achten Bits in Mode 0 gesetzt, oder am Beginn des StopBits in den anderen Moden. Muss durch Software zurückgesetzt werden.

RI

BIT 098H Empfängerinterrupt. Ist das empfangene Interrupt-Flag. Wird am Ende des achten Bits in Mode 0 gesetzt, oder am Beginn des Stop-Bits in den anderen Moden. Muss durch Software zurückgesetzt werden.

296

T2CON Bits - Timer 2 Control Bits I2FR

I3FR

T2PS

T2PS

BIT 0CFH Vorteiler Auswahl-Bit. "1" Timer 2 Stand wird in den Timer oder die GatterTimer-Funktion mit 1/24 der Oszillator-Frequenz geschrieben. "0" Gatter mit fOSC für Timer 2. Muss "0" sein für die Zählerfunktion von Timer 2

I3FR

BIT 0CEH Externer Interrupt 3 fallende / steigende Flanke. Ebenso für Übernahme-Funktion in Kombination mit dem CRCRegister benutzt. "1" Übernahme für CRC-Register bei positivem Übergang am Pin P1.0. "0" Übernahme für CRC-Register bei negativem Übergang am Pin P1.0.

I2FR

BIT

T2R1

BIT 0CCH T2R1 T2R0 Timer 2 reload mode selection

T2R0

BIT 0CBH 0 1

x 0

1

1

0CDH

T2R1

T2R0

T2CM

T2I1

T2I0

T2CON

0C8H

wird nicht für Timer 2 benutzt

Reload nicht möglich Mode 0: Automatisches Laden bei Timer 2 Überlauf Mode 1: Laden bei fallender Flanke an Pin P1.5

T2CM BIT 0CAH Timer 2 Compare Mode. "1" Vergleichsmodus 1 aktiv "0" Vergleichsmodus 0 aktiv T2I1

BIT 0C9H Timer 2 Input Auswahl

T2I0

BIT 0C8H T2I1 T2I0 0 0 Kein Eingang ausgewählt 0 1 Timer-Funktion, Eingangsfrequenz von T2PS abhängig 1 0 Zähler-Funktion für externes Signal an Pin 1.7 1 1 Torzeit-Funktion durch P1.7 Eingang

;******** P1 BITS ******** Port 1 Alternative Funktionen T2 CLKOUT T2EX INT2 INT6

IN / OUT OUT

097H 096H

Externes Zählen oder Gatter für Timer 2 Takt-Ausgang ( Zykluszeit )

IN / OUT IN / OUT IN / OUT

095H 094H 093H

Externer Trigger für Laden der Zähler Externer Interrupt 2 Eingang Vergleich-Ausgang/ Übernahme-Eingang für CCRegister 3

11 Anhang INT5

IN / OUT

092H

INT4

IN / OUT

091H

INT3

IN / OUT

090H

297

Vergleich-Ausgang/ Übernahme-Eingang für CCRegister 2 Vergleich-Ausgang/ Übernahme-Eingang für CCRegister 1 Vergleich-Ausgang/ Übernahme-Eingang für CRCRegister

;******** ADCON BITS ******** A/D-Wandler Kontroll-Bits BD

Bit

0DFH

Baud rate enable "1" Baudrate von Mode 1 und 3 wird von einem speziellen Vorteiler erzeugt. Hierdurch werden die StandardBaudraten von 4800 und 9600 Baud bei 12 MHz Oszillatorfrequenz erzeugt. CLK Bit 0DEH Takt-Ausgang ( Zykluszeit ) OUT "1" Takt erscheint am Port 1.6; erscheint nicht in pdf-Datei BSY Bit 0DCH Busy Flag "1" A/D-Wandlung findet statt "0" wird durch Hardware gesetzt falls keine A/D-Wandlung ADM Bit 0DBH A/D Wandlungs-Mode "1" kontinuierliche Wandlung "0" Nur eine Wandlung MX2 BIT 0DAH Multiplexer-Auswahlbit 2 MX1 BIT 0D9H Multiplexer-Auswahlbit 1 MX0 BIT 0D8H Multiplexer-Auswahlbit 0 MX2 MX1 MX0 Kanal 0 0 0 0 1 1 1 1

0 0 1 1 0 0 1 1

0 1 0 1 0 1 0 1

Analog Eingang 0 Analog Eingang 1 Analog Eingang 2 Analog Eingang 3 Analog Eingang 4 Analog Eingang 5 Analog Eingang 6 Analog Eingang 7

Pin MYMOS AN0 AN1 AN2 AN3 AN4 AN5 AN6 AN7

PIN ACMOS P6.0 P6.1 P6.2 P6.3 P6.4 P6.5 P6.6 P6.7

;******** INTERRUPT VECTOR ADRESSES ******** TIMER2 EQU 02BH ADCI EQU 043H EXTI2 EQU 04BH EXTI3 EQU 053H EXTI4 EQU 05BH EXTI5 EQU 063H EXTI6 EQU 06BH

298

11.1.4 EURO_535.h Diese Datei wird bei Entwicklungen in der Programmiersprache C für die EURO_535-Karte verwendet. /* (c) Copyright KEIL ELEKTRONIK GmbH. 1990, All rights reserved. */ /* Register Declarations for the 80515 Processor */ /* Erweiterungen fnr die EURO_535 Karte in Standardkonfiguration*/ /* sfr sfr sfr sfr sfr sfr sfr sfr sfr sfr sfr sfr sfr sfr sfr sfr sfr sfr sfr sfr sfr

BYTE Register */ P0 = 0x80; P1 = 0x90; P2 = 0xA0; P3 = 0xB0; P4 = 0xE8; P5 = 0xF8; PSW = 0xD0; ACC = 0xE0; B = 0xF0; SP = 0x81; DPL = 0x82; DPH = 0x83; PCON = 0x87; TCON = 0x88; TMOD = 0x89; TL0 = 0x8A; TL1 = 0x8B; TH0 = 0x8C; TH1 = 0x8D; SCON = 0x98; SBUF = 0x99;

sfr sfr sfr sfr sfr sfr sfr sfr sfr sfr sfr sfr sfr sfr sfr sfr

IEN0 IEN1 IP0 IP1 IRCON CCEN CCL1 CCH1 CCL2 CCH2 CCL3 CCH3 T2CON CRCL CRCH TL2

= = = = = = = = = = = = = = = =

0xA8; 0xB8; 0xA9; 0xB9; 0xC0; 0xC1; 0xC2; 0xC3; 0xC4; 0xC5; 0xC6; 0xC7; 0xC8; 0xCA; 0xCB; 0xCC;

11 Anhang sfr sfr sfr sfr

TH2 ADCON ADDAT DAPR

= = = =

0xCD; 0xD8; 0xD9; 0xDA;

/* BIT Register */ /* PSW */ sbit CY = 0xD7; sbit AC = 0xD6; sbit F0 = 0xD5; sbit RS1 = 0xD4; sbit RS0 = 0xD3; sbit OV = 0xD2; sbit F1 = 0xD1; sbit P = 0xD0; /* TCON sbit TF1 sbit TR1 sbit TF0 sbit TR0 sbit IE1 sbit IT1 sbit IE0 sbit IT0

*/ = = = = = = = =

0x8F; 0x8E; 0x8D; 0x8C; 0x8B; 0x8A; 0x89; 0x88;

/* IEN0 sbit EAL sbit WDT sbit ET2 sbit ES sbit ET1 sbit EX1 sbit ET0 sbit EX0

*/ = = = = = = = =

0xAF; 0xAE; 0xAD; 0xAC; 0xAB; 0xAA; 0xA9; 0xA8;

/* IEN1 */ sbit EXEN2 = sbit SWDT = sbit EX6 = sbit EX5 = sbit EX4 = sbit EX3 = sbit EX2 = sbit EADC =

0xBF; 0xBE; 0xBD; 0xBC; 0xBB; 0xBA; 0xB9; 0xB8;

/* P3 */ sbit RD sbit WR sbit T1 sbit T0 sbit INT1

0xB7; 0xB6; 0xB5; 0xB4; 0xB3;

= = = = =

299

300 sbit INT0 sbit TXD sbit RXD

= 0xB2; = 0xB1; = 0xB0;

/* SCON sbit SM0 sbit SM1 sbit SM2 sbit REN sbit TB8 sbit RB8 sbit TI sbit RI

*/ = = = = = = = =

0x9F; 0x9E; 0x9D; 0x9C; 0x9B; 0x9A; 0x99; 0x98;

/* T2CON sbit T2PS sbit I3FR sbit I2FR sbit T2R1 sbit T2R0 sbit T2CM sbit T2I1 sbit T2I0

*/ = = = = = = = =

0xCF; 0xCE; 0xCD; 0xCC; 0xCB; 0xCA; 0xC9; 0xC8;

/* ADCON sbit BD sbit CLK sbit BSY sbit ADM sbit MX2 sbit MX1 sbit MX0

*/ = = = = = = =

0xDF; 0xDE; 0xDC; 0xDB; 0xDA; 0xD9; 0xD8;

/* IRCON sbit EXF2 sbit TF2 sbit IEX6 sbit IEX5 sbit IEX4 sbit IEX3 sbit IEX2 sbit IADC

*/ = = = = = = = =

0xC7; 0xC6; 0xC5; 0xC4; 0xC3; 0xC2; 0xC1; 0xC0;

11 Anhang /* sbit sbit sbit

Leuchtdioden */ Leuchte_3 = 0xB4; Leuchte_2 = 0xB3; Leuchte_1 = 0xB2;

/* sbit sbit sbit

Taster */ Taster_3 = 0x93; Taster_2 = 0x92; Taster_1 = 0x91;

11.2

301

Installation der Software

Die Entwicklungsumgebung der 8051 Keil-Software als Evaluationsversion lässt sich bei vielen Systemen ohne Anleitung direkt von der CD installieren. Bei Fragen finden Sie eine beispielhafte Anleitung zur Installation unter http://www.hit-karlsruhe.de/8051/. Für die Installation der 8051-Umgebung wählen Sie: ‚ Install Evaluation Software. Im neu erscheinenden Fenster wählen Sie: ‚ C51 V X.xx(Eval Tools) aus. Folgen Sie den Anweisungen der Installation. Die vollständige Entwicklungsumgebung sollte sich danach im Ordner: Keil befinden. Das Programm legt automatisch ein Icon unter: Start/Programme mit dem Namen: KeilµVision an. Für eine Programmentwicklung wird in den neueren Programmumgebungen meist ein Projektordner und eine Projektdatei angelegt. In der Datei und dem dazugehörigen Ordner sind alle notwendigen Dateien für die Entwicklungsumgebung gespeichert. Sie erleichtern sich die Arbeit, wenn Sie diese Struktur übernehmen und wie nachfolgend beschrieben verfahren. ‚ Anlegen eines neuen Projektes ‚ Auswahl des Controllers ‚ Editieren des Programms ‚ Assemblieren und Linken des Programms ‚ Testen des Programms Unter dem Menüpunkt: Project legen Sie ein neues Projekt an. Damit Sie alle bisherigen Beispielprogramme für die 8051-Familie von den älteren Auflagen verwenden können, ist es sinnvoll einen neuen Ordner: entw_asm im Verzeichnis Keil anzulegen.

302

In diesem Ordner können die neuen Projekte angelegt werden. Legen Sie das Projekt EIN_AUS.Uv2 an. Danach erscheint ein neues Fenster mit der Überschrift: Select Device for Target 'Target 1'. Hier wählen Sie das Zielsystem, also den Mikrocontroller aus. Im vorliegenden Beispiel befindet sich der 80C535-Chip im Verzeichnis von Infineon unter der Bezeichnung SAB80C535. Im linken Fenster befindet sich unter dem Ordner: Target ein weiterer Ordner mit dem Namen: Source Group 1. Klicken Sie auf diesen Ordner mit der rechten Maustaste und erscheinen die zum Projekt gehörigen Assembler-Dateien. Sehr einfach wird die Entwicklung eines neuen Programmes mit einem kleinen Zusatzprogramm zur Entwicklung von neuen 8051-Programmen. Sie finden dieses unter: http://193.196.117.22/EURO_535_ASM/publish.htm Hier wird ein Projektordner auf dem Laufwerk D: erzeugt und die Entwicklungsumgebung von Keil aufgerufen. Die Datei-Vorlagen können einfach an ihre Vorgaben angepasst werden. Die andauernden Änderungen und die vielen unterschiedlichen Computersysteme machen eine gute Beschreibung zur Installation von Software in einem Buch sehr schwierig. Hierfür ist das Internet sehr gut geeignet.

11 Anhang

11.3

303

Hilfreiche Bücher zum Aufarbeiten der Grundlagen

Die nachfolgende Literatur ist mit entsprechenden Bemerkungen in Klammern versehen. In diesen Büchern finden Sie wichtige Voraussetzungen und Ergänzungen zum Verständnis des behandelten Stoffes. Kammerer, Josef ( Einfache klare Erklärungen ) 3. Grundschaltungen/Leiter des Arbeitskreises III Wolfgang Oberthür. (HPI-Fachbuchreihe Elektronik) München: Pflaum 1980 Tietze, U. , Schenk, Ch. ( Umfassendes Grundlagenwerk ) Halbleiterschaltungstechnik Berlin, Heidelberg, New York: Springer-Verlag 1989 Osborne, Adam ( Allgemeine Einführung ) Einführung in die Mikrocomputertechnik te-wi Verlag GmbH München 1978 Einführung in die Mikroprozessortechnik Grundlagen / Entwurfsprinzipien / Anwendungen TI Learning Center ( Allgemeine Einführung ) Siemens ( Wichtiges Datenbuch ) SAB 80515 / SAB 80C515 8-Bit Single-Chip Microcontroller Family User´s Manual 1990 Siemens (Wichtigstes Hilfsmittel) Pocket Guide 11.4

Vortragsfolien

Die Vortragsfolien sind auf der CD verfügbar. Mit Hilfe des Programms Powerpoint können diese Folien an Ihre Bedürfnisse angepasst werden. Sie können die Folien an ihre Bedürfnisse anpassen.

10

Übungsaufgaben

Mit Hilfe der Übungsaufgaben können Sie Ihren Kenntnisstand kontrollieren. Eine thematische Gliederung der Aufgaben wurde nicht durchgeführt. Vielmehr wurden jeweils Übungsklausuren über das gesamte Fachgebiet erstellt. Für die Einordnung der Schwierigkeit dient die Punktezahl. Die maximal erreichbare Punktezahl pro Übungsklausur beträgt 50. Bei der Lösung der Aufgaben können Sie alle Hilfsmittel verwenden. Hilfreich kann ein persönlicher "Spickzettel" sein, mit dessen Hilfe Sie die Zeitdauer, in der Sie die Aufgaben lösen, reduzieren können. Das Detailwissen in der µ-Controllertechnik hat aufgrund der Variation der bestehenden Controller einen sehr großen Umfang. Die Fülle der Detailinformationen wird Sie gewissermaßen "erschlagen". Falls Sie sich bisher ein Stoffgebiet durch Auswendiglernen eingepaukt haben, müssen Sie sich jetzt umstellen. Die Aufgabe muss zuerst jeweils in die entsprechende Ebene / Kapitel eingeordnet werden. Danach empfiehlt es sich, durch methodisches Vorgehen, beispielsweise durch Entwickeln eines Struktogrammes bei der Programmentwicklung, die Aufgabe zu lösen. Bei vielen Aufgaben hilft auch ein gezieltes Nachschlagen in Ihren Unterlagen, nachdem Sie die Einordnung der Aufgabe in das entsprechende Umfeld vollzogen haben. Die Aufgaben zum 8086-Assembler können nur mit Zusatzliteratur gelöst werden. 10.1

Übungsklausur 1

1. 8051-Assembler (12 Punkte) Schreiben Sie ein 8051-Programm zur Addition von zwei 8-Bit-Zahlen mit Übertrag. Die beiden Zahlen 0FFH und 20H werden zuerst in den externen Speicher an die Adresse 7000H und 7001H geschrieben. Nach Ausführung des Programmes steht das Ergebnis in 7002H (LSB) und 7003H (Übertrag). a. Skizzieren Sie den Ablauf / Struktogramm b. Schreiben Sie das Programm (mit Rücksprung in Monitor) c. Schreiben Sie die Anweisung zum Assemblieren mit ASM51 d. Das Programm wird auf dem 80535-Board ausgeführt. Beschreiben Sie stichwortartig die Vorgehensweise beim Testen.

10 Übungsaufgaben

237

2. 8086-Assembler (10 Punkte) Schreiben Sie ein 8086-Programm zur Multiplikation von zwei Zahlen (Dez.). Der Bediener des Programmes wird jeweils durch eine Aufforderung am Bildschirm veranlasst, die beiden Zahlen einzugeben ("ohne Überprüfung auf Zahl"). Das Ergebnis wird am Bildschirm wie folgt ausgegeben:

Bitte geben Sie eine erste einstellige Zahl ein: 9 Bitte geben Sie eine zweite einstellige Zahl ein: 9 Das Ergebnis der Multiplikation beider Zahlen ist: 81

Hilfe: ASCII-Zeichen 30H-39H

Zahl 0-9

Funktion 01h: Liest ein Zeichen ein und gibt dies am Bildschirm aus Variablen: AL eingegebenes Zeichen Unveränderte Register: AH,BX,CX,DX,SI,DI,BP,CS,DS,SS,ES,FLAG Funktion 02h: Gibt ein Zeichen am Bildschirm aus Variablen: DL auszugebendes Zeichen Unveränderte Register: AX,BX,CX,DX,SI,DI,BP,CS,DS,SS,ES,FLAG Befehle 8088/8086: push reg16 pop reg16 aam Konvertiert eine Zahl kleiner 100 in zwei BCDZahlen. Die niederwertige steht im AL-Register, die höherwertige im AH-Register and al,00001111b verundet Inhalt im AL-Register (für ASCII-HexWandlung) ähnlich ist Hex-ASCII-Wandlung Grober Ablauf: ‚ Text1 ausgeben ‚ Zahl1 einlesen ‚ ASCII-HEX-Wandlung ‚ Text2 ausgeben ‚ Zahl2 einlesen ‚ ASCII-HEX-Wandlung ‚ Multiplikation durchführen ‚ aam Adjust after Multiply ‚ Ergebnis in ASCII ausgeben

238

3. Signalprozessor Assembler (4 Punkte)

a. b. c. d.

Nachfolgend sehen Sie ein Programm für einen ADSPSignalprozessor. Welche mathematische Operation führt dieses Programm durch? Welche Bit-Breite wird verarbeitet? Wie viele Zyklen braucht dieses Programm? Wie lange benötigt dann ein 12,5 MHz Prozessor? .Module DPA; { Was wird hier gemacht? Aufrufende Parameter AX0=LSW von X AX1=MSW von X AY0=LSW von Y AY1=LSW von Y zurückgegebene Werte SR0=LSW von Z SR1=MSW von Z veränderte Register AR,SR Berechnungszyklen ? Zyklen } .ENTRY dpa; dpa: AR=AX0+AY0; SR0=AR, AR=AX1+AY1+C; SR1=AR; RTS; .ENDMOD;

4. Timing Berechnung (8 Punkte) Sie verwenden einen 8051A mit 16 MHz und haben ein EPROM mit einer Zugriffszeit von 250 ns verfügbar. a. b. c.

Berechnen Sie, ob es möglich ist, das EPROM zu verwenden. Bei welcher Taktfrequenz des Prozessors könnten Sie das EPROM verwenden? Bei Programmausführung beträgt die Prozessorauslastung 40%. Welchen Typ von Prozessor setzen Sie dann ein?

10 Übungsaufgaben

239

5. Prozessoren im Vergleich (6 Punkte) 1. Bei Prozessoren gibt es zwei unterschiedliche Arten von Adressierung, die lineare und die segmentierte Adressierung. Welche Aussage ist richtig? a b c d

68000- und 8088-Prozessoren haben linearen Adressraum 68000-Prozessoren haben einen segmentierten Adressraum 8051 und 21xx-Prozessoren haben einen segmentierten Adressraum 8086-Prozessoren haben segmentierte, 68000 lineare Adressraum

2. Welche Aussage ist richtig? a b c d

80xxx-Prozessoren sind Hardware-kompatibel 80xxx-Prozessoren sind Software-kompatibel 21xx und 8051 sind Software-kompatibel 80535 und 8051 sind Pin-kompatibel

3. Die Architektur von Prozessoren hat entscheidenden Einfluss auf die Leistung. Welcher Prozessor verwendet zwei parallel arbeitende Einheiten zur Leistungssteigerung? a b c d

80535 8048 8086 2111

4. Bei Multiprozessorsystemen verwendet man Coprozessoren mit BusInterface-Einheit. Welcher Prozessor hat eine solche Einheit? a b c d

80535 8048 80286 und 8051 2111

240

5.

Welche Hochsprache kann bei verschiedenen Prozessoren (Signalprozessor, µ-Controller, CISC-Prozessor eingesetzt werden? a b c d

Pascal Assembler Cobol C

6. Man unterscheidet zwischen CISC (Complex Instruction Set Computer) und RISC (Reduced Instruction Set Computer). Welcher Prozessor gehört zur RISC-Familie? a b c d

8087-Arithmetikprozessor 80517 2101 68000

6. Allgemeine Fragen zur µ-Computertechnik (10 Punkte) 1. Auf einem Speicher ist die Angabe 62256 zu lesen. Wie viel Speicher ist auf diesem Baustein verfügbar? a b c d

62 256 Bit 256 KByte 32 KByte 256 Nibbles

2. Welche beiden Signale müssen für eine Von-Neumann-Architektur beim 8051 miteinander mit logisch UND verknüpft werden? a b c d

/PSEN und /RD PSEN und ALE PSEN und RD RD und ALE

10 Übungsaufgaben

241

3. Welches Statusbit können Sie im Programmstatuswort frei verwenden? a b c d

PSW.0 Freibit STATFREI F0

4. Welche Besonderheit ist beim 8051 beim Anschluss des Port0 gegenüber den restlichen Ports zu beachten? a b c d

Der Ausgang ist rücklesbar Der FAN-Out ist > 2 LSTTL Es gibt keinen Zugriff auf den internen Bus Kein interner Pull-Up Widerstand vorhanden

5. Welche Aussage ist für 8051-Derivate falsch? a b c d

80515 hat 256 Byte interner RAM Bestimmte 8051-Derivate haben keinen USART 80515 hat bereits PWM Jedes 8051-Derivat hat 5 Interruptvektoren

6. Welches Signal bei 8051-Prozessoren ist für das Multiplexen zwischen Daten und Adressen zuständig? a b c d

/RD RD /ALE ALE

7. Welche Flags werden beim ADD A,Rr - Befehl beeinflusst? a b c d

CY,AC,OV CY,AC AC,CY,P,OV keines

242

8. Die Interrupt-Vektor-Adresse von 80515 für das externe Compare/Capture2- Ereignis ist? a b c d

9BH FFH 00H 63H

9. Beim Übergang auf 80515-Prozessoren wird eine Symboltabelle .pdf verwendet. Welche(r) Assembler-Befehl(e) sind zur Einbindung der Symboltabelle notwendig? a b c d

NOMOD51 NOMOD51 und INCLUDE SYMBOLS NOMOD und INCLUDE

10. Um 4 verschiedene Prozessorprogramme quasiparallel abzuarbeiten, verwendet man vorteilhaft folgende Einheiten im 8051 für die Speicherung der Register. a b c d

externen EPROM Cache den internen RAM von 0H-1EH Auxiliary Carry-Bytes

10 Übungsaufgaben

243

Lösungen Übungsklausur 1 Lösung Aufgabe 1 a. Grober Ablauf / Struktogramm Initialisierung ‚ Assembler Anweisungen ‚ Variablen ‚ CSEG, ORG Speicher vorbereiten ‚ Zahlen in externe Speicherzellen schreiben Addition ‚ Zahlen einlesen ‚ Addition durchführen ‚ L-Byte in Speicher ‚ Übertrag in externen Speicher Monitor 80535 ‚ Rücksprung in Monitorprogramm b.

Programm

$ title (ADDIT_SP) $ NOMOD51 ;8051 $ INCLUDE (reg535.pdf) ;80535

;Austragen der symbolischen Adressen von ;Einbinden der symbolischen Adressen von

;Einfaches Programm zur Addition von zwei 8 Bit Zahlen mit Übertrag Z1 EQU 0FFH ;Wert Zahl 2 Z2 EQU 20H ;Wert Zahl 1 ADRZ1 EQU 7000H ;Adresse von 1. Zahl CSEG AT 0H ORG 0H jmp Anfang ORG 100H Anfang: mov DPTR,#ADRZ1 mov A,#Z1 movx @DPTR,A inc DPTR mov A,#Z2 movx @DPTR,A mov R0,#0

mov DPTR,#ADRZ1

;Legt absolute Codesegmentadresse auf 0h ;Programmzähler auf 0 ;Auf Startadresse springen, da Monitor auf ;PC=0 eingestellt ;Setzt Adresszähler auf 100H Programmteil

;Adresse in Datenpointer ;Akku mit Z1 beschreiben ;Z1 in externen Speicher ;DPTR+1 ;Akku mit Z2 beschreiben ;Z1 in externen Speicher ;Register 0 mit 0 beschreiben für addc A,R0;Befehl ;eigentliche Addition beginnt ;

244 movx A,@DPTR ;Akku mit Z1 laden mov R1,A ;Z1 in Register 1 laden inc DPTR ;Inhalt des Datenpointers inkrementieren movx A,@DPTR ;Z2 in Akku add A,R1 ;Addition von Z1 und Z2 inc DPTR ;Inhalt des Datenpointers inkrementieren movx @DPTR,A ;Ergebnis speichern mov A,#0 ;0 in Akku schreiben, damit ADDC ausgeführt kann addc A,R0 ;Carry in Akku inc DPTR ;externe Speicheradresse für Übertrag movx @DPTR,A ;Übertrag speichern Programm_ENDE: ljmp 8000H ;Monitoreinsprung

;werden

end

c. asm51 Addit_SP.asm d. ‚ ‚ ‚ ‚ ‚

MS51 laden PC-Programm für PC-80535 Kommunikation ADDIT_SP.OBJ Download des Programmes auf 80535-Board G0 Start des Programmes Anschauen des Speicherinhaltes Bei Fehler Programm im Einzelschrittbetrieb abarbeiten.

Lösung Aufgabe 2 title mult_8B DOSSEG .MODEL small .STACK 100h ; .DATA Text1 DB DB Text2 DB DB Text3 DB DB

;Multiplikation mit 8-Bit Ergebnis ;Mit .MODEL, DOSSEG ;Definiert die Segmentierungsfolge nach DOS ;Speichermodell: alles in einem Segment ;Reservierung von 256 Bytes ;Hier beginnt der Datenbereich 13,10,'Bitte geben Sie' ' eine erste einstellige Zahl ein: $' 13,10,'Bitte geben Sie' ' eine zweite einstellige Zahl ein: $' 13,10,'Das Ergebnis der' ' Multiplikation beider Zahlen ist: $'

; .CODE START: mov ax,@data mov ds,ax mov dx,offset Text1 mov ah,09h int 21h mov ah,01

;Hier beginnt der Programmteil ;DS zeigt auf Datensegment ;Adresse von Text1 in DX-Register ;Funktion - Zeichenausgabe ;Zahl1 in ASCII einlesen

10 Übungsaufgaben int 21h and al,00001111b push ax mov dx,offset Text2 mov ah,09h int 21h mov ah,01 int 21h and al,00001111b pop dx mul dl push ax mov dx,offset Text3 mov ah,09h int 21h pop ax aam or al,00110000b mov bl,al or ah,00110000b mov dl,ah mov ah,02h int 21h mov dl,bl mov ah,02h int 21h mov ah,4ch int 21h END START

245

;jetzt steht dies in AL ;umwandeln in Zahl1 ;in Stack retten ;Adresse von Text2 in DX-Register ;Funktion - Zeichenausgabe ;Zahl2 in ASCII einlesen ;jetzt steht dies in AL ;umwandeln in Zahl ;Zahl 1 von Stack holen ;Multiplikation durchführen ;retten von Ergebnis ;Adresse von Text3 in DX-Register ;Funktion - Zeichenausgabe ;Ergebnis holen ;8-Bit Zahl kleiner 100 wird in BCD ;gewandelt ;30h dazu für ASCII ;niedere Stelle retten ;30h dazu für ASCII ;höchste Stelle ausgeben ;Funktion Zeichenausgabe aufrufen ;niedere Stelle ausgeben ;Funktion Zeichenausgabe aufrufen ;Programmende

Lösung Aufgabe 3 a. b. c. d.

Eine Addition 32 Bit + Carry? 4 Zyklen 12,5 MHz -> 80ns / Zyklus *4= 320 ns

Lösung Aufgabe 4 a. Aus Programmspeicher-Lese-Zugriff: "Timing" 16/12MHz tAVIV =223 ns < 250 ns Das EPROM kann bei der Taktrate 16 MHz nicht verwendet werden.

246

b.

1 / 90 ns xMHz 1 - 90 ns ? 5 * xMHz 1 xMHz ? 5 * tAVIV - 90 ns 1 ? 5* 250 ns - 90 ns 5 ? ? 14, 7 MHz 340 ns tAVIV ? 5 *

tAVIV

c. Verwendeter Prozessor 8051A; Taktfrequenz 12 MHz. Kostengünstigerer Prozessor und genügend Prozessor-Reserve.

Lösung Aufgabe 5 1d; 2b; 3c; 4d; 5d; 6c;

Lösung Aufgabe 6 1c; 2a; 3d; 4d; 5b; 6d; 7c; 8d; 9b; 10c;

10 Übungsaufgaben

10.2

247

Übungsklausur 2

1. 8051-Assembler (10 Punkte) Schreiben Sie ein 8051-Programm (mit allgemeinem Kopf zum symbolischen Debuggen und List-file, ablauffähig auf 80535-Prozessor) zur Division einer 8-Bit-Zahl durch 2. Die 8-Bit-Zahl steht im externen Speicher an Adresse: Zahl_zur_Division. Der externe Speicher ist ab 2000H frei. Das Ergebnis wird in den externen Speicher an Adresse: Erg_der_Division geschrieben. a. Skizzieren Sie den groben Ablauf / Struktogramm b. Schreiben Sie das Programm (mit Rücksprung in Monitor) mit EQUAnweisung für die symbolischen Adressen. c. Schreiben Sie die Anweisung zum Assemblieren mit ASM51 d. Das Programm wird auf dem 80535-Board ausgeführt. Beschreiben Sie stichwortartig die Vorgehensweise beim Testen. e. Ist das Programm auf jedem 8051-Derivat ausführbar? 2. 8051-Assembler (12 Punkte) Im internen Speicher stehen 10-Byte-Zahlen (0-255) ab der Adresse: Adr_10_Zahlen. Diese sollen zum PC als ASCII-Zahlen übertragen werden. Es werden serielle Schnittstellen ( Initialisieren ist nicht notwendig ) verwendet. a. Entwerfen Sie den Programmablaufplan oder ein Struktogramm b. Schreiben Sie ein ablauffähiges 8051-Programm (Mit Standard-Kopf) c. Welche Art von Programm können Sie auf der PC-Seite verwenden? Hilfe: ZEICHEN

HEX

0 30

1 31

2 32

3 33

4 34

5 35

6 36

7 37

8 38

9 39

A 41

B 42

C 43

D 44

E 45

F 46

3. Prozessorwahl ( 8 Punkte ) Wählen Sie für die nachfolgenden Aufgaben den optimalen Prozessor aus (bzgl. Kosten / Programmieraufwand bei 1000 Stück ) . a. Randbedingungen: ‚ 8 KB Programmumfang ‚ Es werden Kopierroutinen unter Verwendung von 2 Adresszeiger durchgeführt (nicht zeitkritisch) ‚ A/D-Wandlung 8 Bit ‚ 156-Byte-Speicher für Parameter

248

Bitte genaue Bezeichnung des Prozessors Prozessor:_____________________________

b. Aufgabe: Aufzugsteuerung für Personenbeförderung mit Selbstbedienung ‚ sehr schneller Aufzug ‚ 16 Stockwerke ‚ Vorrangschaltung ‚ kurze Reaktionszeit Prozessor:__________________________________ c. Wählen Sie für die Spracheingabe an einem PC den geeigneten Prozessor für die Einsteckkarte für einen AT-Bus aus. Prozessor:__________________________________

d. Für die Tastatur an einem PC mit serieller Datenübertragung zum PC wird ein Prozessor benötigt. Welchen Prozessor verwenden Sie? Prozessor:__________________________________

4. Timing-Berechnung (12 Punkte) Sie verwenden einen 80535 mit 12 MHz und haben ein EPROM mit einer Zugriffszeit von 120 ns. Das /PSEN-Signal, vom Prozessor erzeugt, wird über ein NOR-Gatter, ein D-Flip-Flop und einem Exklusiv-Oder, dem EPROM am CE/-Eingang zugeführt. Das Flip-Flop ist für die Adressumschaltung notwendig. Die maximale Zeitdauer TPLIV, von bis zur ist für den Prozessor: (3*tclcl-100ns). tclcl ist die Periodendauer des Prozessortakts.

10 Übungsaufgaben

A15 1

1

JP6

CE Rom

1

0 › 1

1

NORE

249

0

1

NORA

PSEN

0 1

JP5

CE Ram

1

JP7

7486

Abb. 10.1 Schaltung zwischen Prozessor und EPROM

D=A15 /PSEN Q=NORE CLK=NORA /Q /CE ROM /CE RAM

Abb. 10.2 Zeitdiagramm beim Umschaltvorgang (nicht zeitgetreu)

a. b.

Berechnen Sie für das /CE-Signal des EPROMs, welche Bausteinfamilie (74 AC, und / oder 74ACT jeweils bei TA= -40° bis 85°) verwendet werden kann. Bis zu welcher Frequenz des Prozessors können beide Bausteinfamilien verwendet werden?

Angaben zum EPROM: Symbol Parameter /CE to output valid tCE

min

max 120

Einheit ns

Angaben zu den Bausteinen der Schaltung zwischen Prozessor und EPROM in den beiliegenden Kopien.

250

µ-Controller (3 Punkte, jeweils nur eine Lösung)

5.

1. Bei 8051-Prozessoren gibt es unterschiedliche Arten von Adressierung. Die direkte und indirekte Adressierung. Welche Aussage ist richtig? a b c

d

Die externen Speicherbereiche sind nur direkt zu adressieren Der interne Speicher ist nur direkt adressierbar Es gibt sowohl direkt als auch indirekt adressierbaren, internen Speicher Die Speicher sind alle Bit-adressierbar

2. Ein Echtzeitbetriebssystem mit Antwortzeiten von 100 ms zum Einsatz in einer Fabrik kann für folgende Aufgaben eingesetzt werden: a

b c d

Regelung mit Drehgebern direkt am Prozessor bei 1200 U/min und 128 Strichen Bei Befehlseingabe durch Sprache Sortieren von Schrauben bei 800 Schrauben / min Temperaturregelung mit 3 Sensoren 1 Messung / 5 Sek.

3. Die Architektur von Prozessoren hat entscheidenden Einfluss auf die Leistung. Das Verwenden von mehreren Datenpointern ist bei folgenden Aufgaben sinnvoll: a b c d

Bei Bitmanipulationen Bei Verwendung der serieller Schnittstelle Beim Kopieren von Speicherbereichen Bei Watchdog-Routinen

4. Ein Signalprozessor hat folgende Eigenschaften: a b c d

Befehlszykluszeit < 500 ns Er rechnet analog und ist deshalb sehr schnell Im Signalprozessor sind keine Register vorhanden Externer Speicher kann nicht verwendet werden

10 Übungsaufgaben

251

5. Welche Hochsprache kann bei 8051-Derivaten eingesetzt werden? a b c d

C++ Basic Cobol C

6. Man unterscheidet zwischen CISC (Complex Instruction Set Computer) und RISC (Reduced Instruction Set Computer). Welcher Prozessor gehört zur RISC-Familie? a b c d

µ-Controller 80535 Arithmetikprozessor 80387 µ-Prozessor 8086 DSP-Prozessor 2100

6. Allgemeine Fragen (5 Punkte, jeweils nur eine Lösung) 11. Auf einem Speicher ist die Angabe 27C64-200 zu lesen. Wieviel Speicher ist bei diesem Baustein verfügbar? a b c d

640 KBit 64 KByte 200 KByte 8 KByte

12. Welche beiden Signale müssen für eine Harvard-Architektur beim 8051 miteinander mit logisch UND verknüpft werden? a b c d

/PSEN und /RD PSEN und ALE PSEN und RD keine

252

13. Der µ-Controller 80535 verfügt über mehrere Register. Welche Aufgabe hat der Akkumulator? a b c d

Er puffert die Betriebsspannung des µ-Controllers Er speichert die Flag-Bits Er nimmt das Ergebnis von Verknüpfungsoperationen auf Er speichert den Inhalt des Stackpointers bei Ausfall der Betriebsspannung

14. Was wird unter dem Begriff >>ALUCarry ZAHL: jnc BUCHSTABE ;Wenn Carry nicht gesetzt ->Buchstabe add a,#30H ;+ 30H dann ASCII ret BUCHSTABE: add a,#37H ;+ 37H dann ASCII ret SER_BYTE: setb TI ;nur für Test mit Simulator setzen ! jnb TI,SER_BYTE ;warten bis sendefähig mov SBUF,A ;Zeichen in SBUF BYTE_WEG: jnb TI,BYTE_WEG ;Warten bis Byte gesendet ist clr TI ;TI löschen ret end

Lösung 2c

257

Ein einfaches Terminalprogramm

ein-

258

Lösung Aufgabe 3 a. 80535 b. 8051 c. Signalprozessor d. 8051 Lösung Aufgabe 4 Es gilt:

T PLIV ? 3 *1 / 12 Mhz / 100ns ? 150ns T PLIV / T NORHL / T CLKQLH / T EXCLLH @ T CE Verwendung von AC-Bausteinen:

150 ns / 7, 0 ns / 10, 5ns / 9, 5ns @ ?120 ns 123ns @ 120 ns Verwendung von ACT-Bausteinen

150 ns / 10 ns / 13ns / 12 ns @ ?120 ns 115ns @ ?120 ns Gleichung nicht erfüllt, ACT-Bausteine können nicht verwendet werden. b.

T PLIV ? 3 *1 / xMhz / 100 ns ? 155ns 3 ? 11, 7 MHz (155 - 100)ns Beide Familien können bei einer Taktfrequenz von 11,7 MHz verwendet werden. Lösung Aufgabe 5 1c; 2d; 3c; 4a; 5d; 6d; Lösung Aufgabe 6 1d; 2d; 3c; 4d; 5a; 6c; 7c; 8b; 9b; 10c;

10 Übungsaufgaben

10.3

259

Übungsklausur 3

1. 8051-Assembler A/D-Wandlung mit Anzeige (10 Punkte) Schreiben Sie ein 8051-Programm (mit allgemeinem Kopf zum symbolischen Debuggen und List-file, ablauffähig auf 80535-Prozessor), das A/D-Werte an Kanal 0 wandelt. Es liegt eine Spannung zwischen 0V und 5V am Eingang des A/D-Wandlers und soll folgendermaßen angezeigt werden: Tabelle 10.1 Codierung mit Leuchten Spannung 0CACHE