Mikroprozessorsysteme mit MVUS 80535
Mikroprozessorsysteme mit MVUS 80535
Mikroprozessorsysteme mit MVUS 80535
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
FH-Darmstadt - 1 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
<strong>Mikroprozessorsysteme</strong> <strong>mit</strong> <strong>MVUS</strong> <strong>80535</strong><br />
Grundlagen<br />
Funktionseinheiten des Mikrocomputers ............ 3<br />
Aufbau eines Mikroprozessors ............ 4<br />
Speicherbausteine - Software ............ 5<br />
Bauformen und Einsatz von Mikrocomputern ............ 6<br />
<strong>80535</strong> - Mikrocontroller<br />
Mikrocontroller - Familien und Literatur ............ 8<br />
Komponenten und Eigenschaften ............ 9<br />
Speicher ............ 10<br />
SFR und Controller-Teil ............ 11<br />
Externe Speicherorganisation ............ 12<br />
Externer Datenspeicher u. externer Bus ............ 13<br />
Befehlsverarbeitung ............. 14<br />
Taktsteuerung ............ 15<br />
Eigenschaften der <strong>80535</strong>- Ports ............ 17<br />
<strong>MVUS</strong> <strong>80535</strong><br />
Mikrocomputer Versuchs- und Übungssystem ............ 19<br />
Programmiermodell des <strong>MVUS</strong><strong>80535</strong> ............. 20<br />
Speicherbelegung und Adreßdecodierung ............ 21<br />
8255 - Porterweiterung ............ 24<br />
Anzeigebox (Portbeschaltung am <strong>MVUS</strong> <strong>80535</strong>) ............ 25<br />
LCD-Modul ............ 26<br />
Unterprogramme LCDINI und TXTPOS ............ 27<br />
Programmbeispiele ............ 28<br />
Entwicklungssoftware für <strong>MVUS</strong> <strong>80535</strong><br />
Arbeitsschritte am PC ............ 29<br />
Betriebssystemkommandos des MONITOR-51 ............ 31<br />
Assembler A 8051 ............ 33<br />
<strong>80535</strong> - Befehle<br />
Befehlsaufbau ............ 35<br />
Adressierungsarten ............ 36<br />
Registerstruktur ............ 37<br />
Stapel - PUSH/POP-Befehle ............ 38<br />
Datentransfer Registerinhalte nach RESET ............ 39<br />
Sprungbefehle - Unbedingte Sprünge ( JMP ) ............ 40<br />
Unterprogramm - Aufrufe ( CALL, RET) ............ 41<br />
Bedingte Sprungbefehle ( JZ, DJNZ, CJNE ) ............ 42<br />
Logische Befehle ( ANL, ORL, XRL ..) ............ 43<br />
Schiebebefehle ( RL, RLC, RR, RRC ) ............ 44<br />
Arithmetische Befehle ( ADD, SUBB, MUL.. ) ............ 45<br />
Zahlendarstellung ............ 46<br />
BCD-Zahlen u. Dezimalkorrektur (DA A) ............ 47<br />
Einzelbit - Verarbeitung . ........... 48<br />
Unterbrechungssystem des <strong>80535</strong> ( Interrupt ) ............. 49<br />
Interrupt - und Polling - Prinzip ............ 50<br />
Überblick über Interruptquellen ............ 51<br />
Interrupt Register IRCON, IEN0, IEN1 ............ 52<br />
Interruptbehandlung und Prioritätsstruktur ............ 54<br />
Korrekte Interrupt-Behandlung ............ 55<br />
Programmbeispiel für Interrupt ............ 56
FH-Darmstadt - 2 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
Timer<br />
TIMER 0 und 1 ............ 57<br />
Basisfunktionen der drei Timer ............ 58<br />
Timer-Register TMOD, TCON, CCEN, T2CON ............ 59<br />
Timer 2 (Reload, Compare, ) ............ 60<br />
Compare / Capture-Mode ………. 61<br />
Blockschaltbilder zu TIMER 2 Compare ............ 62<br />
Serielle Schnittstelle<br />
Serielle, asynchrone Datenübertragung ............ 64<br />
Serieller Port und Control-Register SCON ............ 65<br />
Takterzeugung für die serielle Schnittstelle ............ 66<br />
V24-Schnittstelle ............ 67<br />
Serielle asynchrone Kommunikation über RS232/V24 ............. 68<br />
Kommunikationssteuerung und Terminalemulation ............. 69<br />
Analog - Digital - Wandler ........... 70<br />
Blockschaltbild und Control-Register ADCON ............ 71<br />
Einstellung der internen Referenzspannungen ............ 71<br />
Übersicht<br />
Spezial-Funktions-Register SFR ............ 72<br />
SFR-Bit-Adressen ............ 73<br />
ASCII-Code ............. 74<br />
Erweiterter IBM-PC-Zeichensatz ............ 75<br />
8051-Befehlssatz ............ 76<br />
Befehlsliste in Hex-Folge ............ 78<br />
8051-Befehlsliste ............. 79
FH-Darmstadt - 3 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
Funktionseinheiten eines Computers / Mikrocomputers<br />
CPU Zentraleinheit Prozessor<br />
Rechenwerk und Steuerwerk<br />
Adreß-Bus Daten-Bus Steuer-Bus<br />
Speicher Arbeitsspeicher<br />
Hauptspeicher<br />
für Programme u. Daten<br />
Schnittstelle<br />
Ein- / Ausgabe Peripherie<br />
1. Prozessor, ( CPU , Zentraleinheit, Mikroprozessor )<br />
wichtigste Komponente , seine Eigenschaften bestimmen wesentlich die Leistungsfähigkeit des gesamten<br />
Computers, ( CPU auf einem Chip -> Mikroprozessor -> Mikrocomputer; CPU = central processing unit )<br />
2. Speicher , bestehend aus Festwertspeicher ( Nur-Lese-Speicher ROM ) und flüchtigem Schreib/Lese-<br />
Speicher ( RAM ) enthält die Programm-Befehle und die zu verarbeitenden Daten.<br />
3. Periphere Bausteine ( Interface, Schnittstellen) verbinden den Mikrocomputer <strong>mit</strong> der Außenwelt, z.B. <strong>mit</strong><br />
Drucker, Tastatur, Bildschirm, Floppylaufwerk, Festplatte oder einem Meßgerät.<br />
Tastatur, Maus und Bildschirm bilden die Schnittstelle für die Mensch-Maschine-Kommunikation<br />
Aufgaben der Interfacebausteine sind<br />
- zeitliche Abstimmung, da Peripherie deutlich langsamer<br />
- Pegelanpassung (unterschiedliche Spannungen)<br />
- Daten puffern ( zwischenspeichern )<br />
4. Bus-System - Verbindungsleitungen (Adreß-, Daten- und Steuerbus) dienen der bidirektionalen Übertragung<br />
von Informationen zwischen Prozessor / Speicher und Prozessor / periphere Bausteine.<br />
5. Software (Programme) beinhaltet die Anweisungen ( Befehle ) an den Prozessor und legt da<strong>mit</strong> die Aufgabe<br />
des Computers fest.<br />
Die Anpassung des Mikrocomputer an die jeweilige Aufgabe erfolgt durch<br />
- unterschiedliche Speicherkonfiguration (ROM / RAM )<br />
- verschiedene Schnittstellenbausteine<br />
- anwendungsspezielle Software.
FH-Darmstadt - 4 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
Aufbau eines Mikroprozessors<br />
Der Mikroprozessor enthält die logischen Funktionen eines Prozessors auf einem einzigen hochintegrierten<br />
Halbleiterbaustein ( integrated circuit IC in MOS-Technologie).<br />
Der Prozessor ist ein Automat ( synchrones Schaltwerk ) der eine festgelegte Anzahl von Tätigkeiten ( Menge<br />
der Maschinenbefehle, Befehlssatz ) ausführen kann und da<strong>mit</strong> den gesamten Computer steuert und arithme -<br />
tische und logische Aufgaben löst. Er ist also für die Abarbeitung der Maschinenbefehle zuständig, die in<br />
binärcodierter Form im Arbeitsspeicher vorliegen und in ihrer Gesamtheit ein ablauffähiges Programm bilden.<br />
Ein von einem Quarzgenerator extern erzeugter Takt sorgt innerhalb der CPU für den synchronen Ablauf der<br />
Arbeitsvorgänge.<br />
Ein Resetimpuls (auch beim Einschalten) versetzt den Prozessor in einen definierten Grundzustand, aus dem<br />
heraus er sofort <strong>mit</strong> der Befehlsabarbeitung an einer konstanten, festgelegten Adresse im Arbeitsspeicher<br />
beginnt.<br />
Steuerbus Adreßbus (16, 20, 24, 32 Bit ) Datenbus ( 8, 16, 32, 64 Bit )<br />
Steuersignale Adressen Befehle Daten<br />
interne<br />
Steuerwerk Steuersignale Rechenwerk<br />
Das Rechenwerk besteht aus Registern ( CPU interner schneller Speicher) und der Arithmetisch-Logischen-<br />
Einheit (ALU), einer Rechenschaltung für die Verarbeitung von Daten.<br />
Das Steuerwerk (Leitwerk) besteht aus einer Ablaufsteuerung, die den binären Code der Programmbefehle in<br />
Steuersignale umsetzt. Es holt sich das Programm Befehl für Befehl aus dem Arbeitsspeicher und führt die<br />
Befehle aus, indem es die Operanden aus dem Arbeitsspeicher in das Rechenwerk lädt, dort die erforderlichen<br />
Operationen anstößt und eventuell anschließend das Ergebnis in den Arbeitsspeicher schreibt.<br />
Die Register des Steuerwerks enthalten Adressen und das zentrale Register des Steuerwerks ist der Befehlszähler<br />
( Program Counter PC oder auch Instruction Pointer IP ) <strong>mit</strong> der Adresse des nächsten Befehls.<br />
Die Breite der Register (8, 16 oder 32 Bit ) von Rechen- und Steuerwerk entspricht meist der externen Datenbus-<br />
breite und ist zusammen <strong>mit</strong> der Taktfrequenz ein überschlägiges Kriterium für die Leistungsfähigkeit des<br />
Mikroprozessors.<br />
Bus-System eines Mikrocomputers<br />
Register Register<br />
Ablaufsteuerung A L U<br />
Leitungssystem für die parallele, gleichzeitige Übertragung von Signalen zwischen den Komponenten eines<br />
Mikrocomputers (auch innerhalb des Mikroprozessors)<br />
Datenbus - Transport von Befehlen und Daten zwischen Prozessor und Bausteinen, bidirektional<br />
Mikroprozessoren werden nach der Breite des Datenbusses eingeteilt ( 8, 16, 32 oder 64 Bit )<br />
Adreßbus - Mikroprozessor legt die Adresse eines Speicherwortes (Byte ) oder die Adresse des Registers<br />
eines Peripheriebausteines auf den unidirektionalen Adreßbus (16, 20, 24 oder 32 Bit )<br />
Steuerbus - Sammelschiene für unterschiedlichste Steuersignale zur zeitlichen und logischen Koordination<br />
der Abläufe ( z.B. Schreiben / Lesen im Speicher ) durch den Mikroprozessor.
FH-Darmstadt - 5 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
Speicherbausteine<br />
hoch<br />
Kosten/Bit<br />
niedrig<br />
Worte Register ( parallele Flipflops )<br />
k-Byte Cache ( SRAM)<br />
M-Byte Haupt - bzw Arbeitsspeicher (EPROM u. DRAM)<br />
Geschwindig- M-Byte Diskette / Floppy<br />
keit<br />
G-Byte Festplatte u. Magnetband<br />
G-Byte Optische Speicher ( CD, DVD )<br />
Speicherhierachie in Computersystemen<br />
Die in Computersystemen verwendeten Halbleiterspeicher sind intern als Matrixspeicher organisiert.<br />
Durch das Anlegen einer Adresse kann in einem wahlfreien Zugriff ( random access ) auf das<br />
Speicherelement (meist 1 Bit oder 1 Byte ) zugegriffen werden, d.h. entweder der Inhalt ausgelesen oder ein<br />
neuer eingeschrieben werden.<br />
Die Zugriffszeit (access time ) kennzeichnet die Zeitspanne, die zwischen dem Anlegen der Adresse und der<br />
Verfügbarkeit der gültigen Daten an den Ausgängen vergeht.<br />
Die Zykluszeit ist die Zeitspanne vom Beginn eines Speichervorganges bis zu dem Zeitpunkt, an dem ein neuer<br />
Speichervorgang beginnen kann und setzt sich zusammen aus der Zugriffszeit und möglicherweise einer<br />
Regenerationszeit für das Wiederherstellen der beim Lesen zerstörten Information (DRAM).<br />
Nach der Beständigkeit der Information bei Spannungsausfall unterscheidet man flüchtige Schreib/Lese-<br />
Speicher ( RAM ) und nichtflüchtige Festwertspeicher ( Nur-Lese-Speicher read only memory ROM )<br />
ROM - Festwertspeicher (Read only memory), nichtflüchtig für Programme und konstante Daten<br />
ROM - vom Hersteller maskenprogrammiert, nur wirtschaftlich bei großen Stückzahlen<br />
PROM - vom Anwender <strong>mit</strong> Programmiergerät einmal programmierbar<br />
EPROM - (erasable PROM) <strong>mit</strong> UV-Licht löschbar und vom Anwender neu programmierbar<br />
EEPROM / EAROM - electrically alterable ROM, kann in Schaltung umprogrammiert werden<br />
Flash-PROM - technisch u. preislich zwischen EPROM und EEPROM angesiedelt,<br />
ganzer Chip bzw Teile (Page, Block) lassen sich in Sekundenbruchteilen löschen und neu program –<br />
mieren, wobei die dafür nötige Spannung von 12V auf dem Chip erzeugt wird und dieser dabei in der<br />
Schaltung verbleiben kann. Kapazität byteorganisiert bis 20 Mbit, Lesespannung 5V und Lesezugriffs -<br />
zeit < 100 nsec, Siliziumdisk, PCMCIA-Memory-Card, BIOS-Festwertspeicher<br />
RAM - Schreib-Lesespeicher für variable Information, flüchtig, ohne Spannung Datenverlust<br />
SRAM - statisches RAM, Speicherelement sind Flipflops und deswegen Datenhaltung solange Spannung<br />
anliegt, wortorganisiert (meist 1 Byte), störsicher und zuverlässig , problemloser Anschluß, kurze<br />
Zugriffszeit von wenigen nsec ( Zykluszeit ), um Faktor 4 niedrigere Speicherdichte als DRAM, teuer<br />
DRAM - dynamisches RAM, da Speicherelement ein Kondensator ,benötigt es alle 2 - 100 ms einen Refresh,<br />
viermal höhere Integrationsdichte und dadurch kostengünstiger als SRAM, überwiegend bitorganisiert,<br />
meistens Multiplexen der beiden Adresshälften, Zugriffszeiten < 100 nsec, störanfällig, billig<br />
dynamische Speicherbausteine <strong>mit</strong> integrierter Refreshlogik erhältlich ( pseudostatische DRAM )<br />
Mit den Begriffen FPM (Fast Page Modus), EDO (extended data out ) oder SDRAM (synchrones<br />
dynamisches RAM ) sind DRAM-Bausteine gemeint, bei denen durch besondere Betriebsmodi die<br />
Zugriffszeiten verkürzt werden.
FH-Darmstadt - 6 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
Software<br />
Ein Programm für einen Prozessor besteht aus einer sequentiellen Folge von binären Bitmustern,<br />
den Maschinenbefehlen ( Makrobefehle ). Ein Maschinenbefehl kann z.B. im PC 1 bis 9 Byte lang sein.<br />
Bei der Abarbeitung des Programms werden diese Befehle sukzessive im Maschinencode aus dem Arbeits-<br />
speicher über den Datenbus in den Prozessor geladen.<br />
Der Operationscode (opcode) des Befehls, der die gewünschte Operation und die dazu benötigten Prozessor-<br />
Komponenten spezifiziert, wird in die Befehlsregister des Steuerwerks geladen.<br />
Ein Programm in Maschinensprache ist also eine Folge von binär codierten Befehlen (Objectcode).<br />
Diese Maschinenbefehle sind als eine Folge von Nullen und Einsen (Bitmuster) sehr unübersichtlich und<br />
werden deswegen grundsätzlich in hexadezimaler Schreibweise abgekürzt und übersichtlicher dargestellt.<br />
Für das Programmieren sind diese hexadezimalen Abkürzungen immer noch zu unhandlich und von daher<br />
erfolgt der Schritt zur Verwendung einer Assemblersprache <strong>mit</strong> mnemonischen Abkürzungen für die Befehle.<br />
Beispiel: MOV A,#13 Assemblerbefehl ( 2 Byte ) Lade Akkumulator <strong>mit</strong> Konstante 1310<br />
74 0D Maschinenbefehl hexadezimal ( Opcode ->74h, Operand-> 13 )<br />
01110100 00001101 Maschinenbefehl binär<br />
Der Begriff Assembler wird zum einen für die Sprache (Vereinbarung der mnemonischen Abkürzungen) als<br />
auch für das Übersetzungsprogramm (das aus den mnemonischen Abkürzungen die Maschinenbefehle erzeugt)<br />
verwendet. Programmierung in Assembler ist bei Mikrocomputern noch recht häufig, da der aus Assembler-<br />
programmen erzeugte Maschinencode gegenüber demjenigen aus Hochsprachen erzeugten schneller und<br />
speicher- effizienter ist.<br />
Andererseits ist für Assemblerprogrammierung ein hoher Einarbeitungsaufwand nötig und der Assemblercode<br />
ist prozessorabhängig (nicht kompatibel).<br />
Die Compiler ( Übersetzerprogramme ) für höhere Programmiersprachen erzeugen zum einen direkt den<br />
Maschinencode für den jeweiligen Prozessor oder generieren in der jeweiligen Assemblersprache einen sogn.<br />
Zwischencode, der anschließend vom Assembler übersetzt wird.<br />
Im Mittel werden für die Realisierung eines Hochsprachen-Befehls ungefähr 10 – 20 Maschinenbefehle benötigt.<br />
Bei Generierung eines Assembler-Zwischencodes, kann falls gewünscht, dieser von Hand optimiert werden.<br />
Ein Betriebssystem ordnet sich zwischen Hardware und Anwendersoftware ein und man versteht darunter<br />
nach DIN: " diejenigen Programme eines digitalen Rechensystems, die zusammen <strong>mit</strong> den Eigenschaften der<br />
Rechenanlage die Basis der möglichen Betriebsarten des digitalen Rechensystems bilden und insbesondere die<br />
Abwicklung von Programmen steuern und überwachen."<br />
Infolgedessen umfasst das Betriebssystem nur die Basissoftware, die einem Benutzer der Anlage erst ermöglicht<br />
seine eigene (Anwendungs-) Software mehr oder weniger komfortabel ablaufen zu lassen.<br />
Betriebssysteme bestehen im wesentlichen aus Hilfsprogrammen für Dateiverwaltung, Editieren, Übersetzen,<br />
Linken/Laden und Testen (Debuggen). Einfachste Betriebssysteme (ohne Massenspeicher) werden als Monitor<br />
bezeichnet (im <strong>MVUS</strong> <strong>80535</strong> -> MONITOR-51, auch DEBUG im PC kann als solches betrachtet werden )<br />
Bekannteste Betriebssysteme für Personalcomputer und Arbeitsplatzrechner sind<br />
CP/M (8 Bit)<br />
DOS (16 Bit)<br />
OS-2 (32 Bit)<br />
UNIX (32 Bit)<br />
WINDOWS (32 Bit)<br />
LINUX (32 Bit)<br />
Betriebssysteme lassen sich grob in Singletasking- und Multitasking-Systeme unterteilen, wobei letztere die<br />
(quasi-) "gleichzeitige" Ausführung mehrerer Programme (Tasks, Prozesse) unterstützen.<br />
Beim kooperativen Multitasking unterbricht sich eine Anwendung selbst, um einer anderen vorübergehend<br />
den Vortritt zu lassen ( WINDOWS 3.x ) und beim preemtiven Multitasking wird jedem Programm ( Task )<br />
vom Scheduler eine Zeitscheibe zugeteilt (WINDOWS 98, UNIX, LINUX ).<br />
Bei Echtzeitbetriebssystemen wird für den Taskwechsel eine bestimmte Zeitdauer garantiert, da<strong>mit</strong> zeit -<br />
kritische Aufgaben ausreichen schnell bearbeitet werden können.<br />
Verbreitete Echtzeitbetriebssysteme (Multitasking): RMX 86 und OS-9
FH-Darmstadt - 7 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
Bauformen und Einsatz von Mikrocomputern<br />
Mikrocontroller<br />
Der Single-Chip-Mikrocomputer besteht aus einem einzigen Baustein, d.h. er ist ein vollständiger Rechner auf<br />
einem Chip. Neben dem Prozessorkern (meist aus einer erfolgreichen Mikroprozessorfamilie ) enthalten diese<br />
Bausteine eine aufgaben- bzw kundenspezifische Speicher- und Peripheriebestückung. Nur die Anschlüsse der<br />
Peripherie-Komponenten werden an den Stiften ( Pins ) herausgeführt.<br />
Sie werden für einfache Steuerungen ( controller ) im Masseneinsatz verwendet und diese Embedded Systems/<br />
Embedded Controller-Anwendungen sind sicherlich die am weitesten verbreitete Mikrocomputerform,<br />
allerdings meist unsichtbar für den Geräteanwender, denn ihre Anwesenheit ist nicht sofort augenscheinlich.<br />
Beispiel : Intel 8051-Familie <strong>mit</strong> 80515 / <strong>80535</strong> im <strong>MVUS</strong>-System der FH-Dieburg<br />
Definition: Ein Mikrocontroller ist die monolithische Integration eines Mikroprozessors <strong>mit</strong> mindestens einem<br />
weiteren Baustein des Von-Neumann-Rechnermodells, entweder Speicher oder Peripherie (meistens beides)<br />
Ein-Platinen-Computer<br />
Der Single-Board-Mikrocomputer besteht aus einer Karte <strong>mit</strong> einer gedruckten Schaltung.<br />
Prozessor, Speicherbausteine und Peripheriebausteine werden durch Leitungen <strong>mit</strong>einander verbunden. Mit<br />
Erweiterungssteckern können Zusatzkarten (z.B. Speichererweiterung, Grafik) angeschlossen werden.<br />
Beispiel : Motherboard des PC<br />
Einsatzgebiete: Personalcomputer, Hobbycomputer, Arbeitsp1atzrechner<br />
Programmierung in Assembler und höheren Programmiersprachen<br />
Baugruppen-System<br />
Das Bauplattensystem besteht aus einzelnen Karten im Europa oder Doppeleuropaformat für ein Einschub-<br />
Gehäuse (Rack) <strong>mit</strong> einer standardisierten Bus-Rückwand.<br />
Es gibt Prozessorkarten, Speicherkarten und Peripheriekarten. Der Rechner wird nach den Erfordernissen der<br />
Anwendung zusammengesteckt und läßt sich daher leicht ändern und erweitern.<br />
Die verschiedensten Hersteller können Karten für das jeweilige genormte Bus- System anbieten.<br />
Systeme : ECB ( 8 Bit Z80 / 8080 ), VME-Bus ( Motorola 68 000 ), Multibus ( Intel 80x86 )<br />
Einsatzgebiete: Steuerung von Maschinen und Anlagen (Prozeßrechner), insbesondere in der industriellen<br />
Automatisierungs- und Robotertechnik.<br />
Digitale Signalprozessoren DSP<br />
sind speziell für die schnelle digitale Verarbeitung von analogen Signalen (z.B. Audio, Video ) ausgelegt.<br />
Die Synthese und Analyse von analogen Signalen ist sehr rechenintensiv und benötigt spezielle Reihen-<br />
entwicklungen. Hierzu ist die Multiplikation und eine anschließende Addition zu einem bereits vorhandenen<br />
Wert nötig ( DFT bzw FFT )<br />
DSPs haben ein Rechenwerk, das auf solche Berechnungen spezialisiert ist. Auf den Bausteinen befinden sich<br />
mehrere Analog/Digital- ( ADC ) und Digital/Analog-Wandler ( DAC ).<br />
Außerdem besitzen sie meist getrennte Programm- und Datenspeicher <strong>mit</strong> jeweils eigenen Bussystemen und<br />
vermeiden <strong>mit</strong> dieser Harvard-Architektur den von-Neumannschen Flaschenhals.<br />
Anwendung: Sprach- und Bildverarbeitung, Regelungstechnik, Telekommunikation.<br />
Co-Prozessoren<br />
erfüllen im Computer spezielle Aufgaben und entlasten dadurch die CPU.<br />
Arithmetik-Co-Prozessoren übernehmen die Gleitkommaberechnungen, Graphik-Co-Prozessoren führen<br />
komplexe graphische Berechnungen durch.<br />
Daneben übernehmen Spezial-Mikrocontroller die Kommunikation und Verwaltung von Externspeicher (Hard<br />
Disk Controller, Floppy Disk Controller ) , Bildschirm , serielle Schnittstelle (USART) und Netzwerken.<br />
Multimediaprozessoren beschleunigen die Bildverarbeitung.<br />
Mit zunehmendem Integrationsgrad werden viele dieser Hilfsfunktionen in den Mikroprozessor integriert.
FH-Darmstadt - 8 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
<strong>80535</strong>- Mikrocontroller<br />
Das Übungssystem <strong>MVUS</strong> <strong>80535</strong> verwendet auf der Rechnerplatine den Mikrocontroller <strong>80535</strong>.<br />
Der <strong>80535</strong> gehört zu einer 8-Bit Mikrocontrollerfamilie, die auf dem von Intel 1981 auf den Markt gebrachten<br />
8051 basiert.<br />
Vom 80515 unterscheidet sich der <strong>80535</strong> nur durch den fehlenden,auf dem Chip integrierten 8-kByte ROM-<br />
Speicher.<br />
Die Siemens-SAB 8051-Familie<br />
Typ Variante Oszillator- RAM ROM<br />
Frequenz [MHz] [Byte] [Byte]<br />
8051/C51 ROM-Version 12/16 128 4<br />
8031/C31 ROM-lose-Version 12/16 128 -<br />
8052/C52 ROM-Version 12/16 128 8<br />
8032/C32 ROM-lose-Version 12/16 128 -<br />
80515/C515 ROM-Version 12/16 256 8<br />
<strong>80535</strong>/C535 ROM-lose-Version 12/16 256 -<br />
80C517 ROM-Version 12/16 256 8<br />
8031/C31 ROM-lose-Version 12/16 256 -<br />
Hardwaremäßig unterscheiden sich die 8051-Familien<strong>mit</strong>glieder durch zusätzlich auf dem Chip integrierten<br />
Speicher und periphere Funktionskomponenten (A/D-Wandler, Timer, Ports, Interrupteingänge usw).<br />
Softwaremäßig, d.h. bezüglich der Maschinenbefehle sind die einzelnen Mikrocontroller kompatibel, da die<br />
jeweils neu hinzugekommenen Hardware-Komponenten nicht durch neue zusätzliche Befehle sondern über<br />
Spezial-Funktions-Register SFR angesprochen und gesteuert werden .<br />
Ein C in der Bezeichnung weist auf eine CMOS-Variante hin und neben den Varianten <strong>mit</strong> und ohne<br />
integriertem ROM gibt es auch Bausteine die einen EPROM-Speicher enthalten ( 8751).<br />
Durch die Software-Kompatibilität der 8051-Familie kann die unten angegebene Literatur, die sich<br />
überwiegend auf 8051 und 8032 bezieht, auch für den hier verwendeten <strong>80535</strong> herangezogen werden.<br />
Nur [3] enthält eine etwas ausführlichere Beschreibung der zusätzlichen Hardware des 80515.<br />
[5] ist das nur in Englisch erhältliche Handbuch des 80515/<strong>80535</strong><br />
Literatur:<br />
[1] Kühn/Schultes [7] Bernd-Dieter Schaaf<br />
8051-Prozessoren Mikrocomputertechnik<br />
Franzis-Verlag GmbH München 1988 Carl Hanser Verlag 1999 ISBN 3-446-19386-3<br />
[2] Andreas Roth [8] Andreas Roth<br />
Das Mikrocontroller-Kochbuch Das Mikrocontroller-Applikations Kochbuch<br />
IWT-Verlag, Vaterstetten 1989 Internat. Thomson Publ. 1996 ISBN 3-8266-2666-4<br />
[3] Otmar Feger [9] V.Keim, G.Schnell<br />
Die 8051 Mikrocontroller-Familie 8051 Mikrocontroller Praktikum<br />
Markt & Technik Verlag AG 1987 Franzis-Verlag 1996 ISBN 3-7723-5214-6<br />
[4] Otmar Feger [10] Jürgen Maier-Wolf<br />
Applikationen zur 8051 Mikrocontroller-Familie 8051 Mikrocontroller erfolgreich anwenden<br />
Markt & Technik Verlag AG 1988 Farnzis 1996 ISBN 3-7723-6453-5<br />
[5] Siemens [11] Norbert Heesel, Werner Reichstein<br />
Microcomputer Components Mikrocontroller Praxis<br />
SAB 80C515 / 80C535 Vieweg 1996 ISBN 3-528-15366-0<br />
8-Bit CMOS Single-Chip Microcontroller<br />
User's Manual 4.90<br />
[6] Dietsche / Ohsmann [12] Ohsmann<br />
Mikrocontroller Handbuch 8051-Mikrocontroller und Assembler-Kursus<br />
Elektor-Verlag 1994 ISBN 3-928051-69-5 Elektor-Verlag 1993 ISBN3-928051-43-1
FH-Darmstadt - 9 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
Technische Daten des <strong>80535</strong>-Mikrocontrollers<br />
- 8 Bit-CPU<br />
- interner Oszillator für externe Quarze von 1.2 bis 12 MHz Taktfrequenz (im <strong>MVUS</strong> <strong>80535</strong> 12 MHz )<br />
- 256 Byte internes RAM, <strong>mit</strong> maximal 64 kByte extern erweiterbar<br />
- 128 direkt adressierbare Bit im internen RAM-Speicher<br />
- 42 direkt adressierbare Spezial-Funktions-Register<br />
- 128 direkt adressierbare Bit in den Spezial-Funktions-Registern<br />
- voll-duplex-serielle Schnittstelle <strong>mit</strong> 4 Betriebsarten und 4 Baudraten<br />
- 3 sehr flexible 16-Bit-Zähler/Zeitgeber<br />
- 12 Interrupt-Quellen und 4 Prioritätsebenen<br />
- eigener Baudratengenerator für 4800 und 9600 Bd bei 12 Mhz Oszillatorfrequenz<br />
- 16-Bit Reload/Capture-Eingang Compare-Ausgang Funktion<br />
- A/D-Wandler 8 Bit <strong>mit</strong> 8 gemultiplexten Analogeingängen, Sample & Hold Zeit 5us (12MHz) und<br />
15 us Wandlungszeit, programmierbare 16 stufige Refenzspannung<br />
- 16 Bit Watchdog-Timer<br />
- 6 quasi-bidirektionale 8-Bit Ports<br />
<strong>80535</strong> - Mikrocontroller Komponenten und Eigenschaften<br />
Mikrocontroller = Mikroprozessor ( CPU bzw Rechnerkern )<br />
+ Programm/Datenspeicher ( PROM od. EPROM, RAM )<br />
+ Peripheriefunktionen ( Controller )<br />
+ internes Bussystem<br />
auf einem Chip.<br />
80515/<strong>80535</strong> im quadratischen PLCC-Gehäuse <strong>mit</strong> 68 Anschlüssen.<br />
(PLCC = Plastic Leaded Chip Carrier - ein quadratisches Miniaturgehäuse <strong>mit</strong> bis zu 128 Pins )<br />
Prozessor - Teil umfasst<br />
- 8 - Bit - CPU <strong>mit</strong> teilweise 8080/8085 ähnlichem Befehlssatz. Die CPU besteht aus<br />
. 16-Bit-Befehlszähler (Program Counter PC)<br />
. Befehlsdecoder<br />
. Arithmetisch-Logischer-Einheit ( ALU ) <strong>mit</strong> dem Boolschen Prozessor (Bitrechner)<br />
. Program-Control-Einheit (Ablaufsteuerung)<br />
- interner Oszillator für externe Quarze von 1.2 bis 12 Mhz Taktfrequenz ( im <strong>MVUS</strong> <strong>80535</strong> beträgt die<br />
Taktfrequenz 12 MHz ) Eine externe Taktquelle könnte ebenfalls verwendet werden.<br />
- Arbeitsregister wie Akkumulator ACC, Hilfsakku B, Program Status Word PSW,<br />
Datapointer DPTR, Stapelzeiger SP bilden zusammen <strong>mit</strong> den Steuer-Registern für die<br />
Peripheriefunktionen den Block der Spezial-Funktions-Register SFR .<br />
Die Arbeitsregister der vier Registerbänke ( jeweils R0 bis R7 ) sind identisch <strong>mit</strong> dem internen<br />
'unteren' RAM ab 00 h bis 1F h und können von einem Teil der Befehle entweder als Register<br />
' MOV R3,A ' oder als interne RAM-Byte ' MOV 03 ,A ' adressiert werden.
FH-Darmstadt - 10 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
Speicher - Teil<br />
Blockschaltbild des 80515<br />
- 80515 besitzt intern 8 kByte maskenprogrammierbares ROM<br />
<strong>80535</strong> besitzt keinen internen Festwertspeicher<br />
- 256 Byte internes RAM als Datenspeicher, untergliedert in<br />
' unteren ' 128 Byte, direkt + indirekt adressierbar 00 - 7F h<br />
' oberen ' 128 Byte, nur indirekt adressierbar 80 - FF h<br />
bitweise adressierbar sind die 16 internen RAM-Bytes 20 - 2F h <strong>mit</strong> den 128 Bitadressen 00 - 7F h<br />
Die Bytes 00 - 1F h enthalten die 4 Registerbänke 0,1,2,3 <strong>mit</strong> je 8 Registern R0 - R7 d.h. das<br />
Register R2 der Registerbank 1 hat die interne Byteadresse 0A h bzw 10.<br />
Interner Daten-Speicher <strong>mit</strong> Registerbänken und bitadressierbarem Bereich
FH-Darmstadt - 11 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
- Spezial-Funktions-Register SFR<br />
belegen den oberen internen Adreßraum 80 - FF h und können nur direkt adressiert werden.<br />
Beim <strong>80535</strong> sind von den 128 möglichen Adressen 42 <strong>mit</strong> Spezial-Funktions-Registern SFR belegt.<br />
Spezial-Funktions-Register, deren Adressen <strong>mit</strong> 0 oder 8 enden (x0 h oder x8 h ) sind<br />
' bitadressierbar ', reagieren also auf die speziellen Bitmanipulationsbefehle.<br />
Die meisten SFR dienen zur Steuerung der peripheren Funktionen.<br />
In Assembler-Programmen können die SFR bzw deren einzelne Bit nicht nur durch die Adresse<br />
sondern auch durch die symbolischen Kurzbezeichnungen ( nicht E0 h sondern ACC, nicht D7 h<br />
sondern CY oder PSW.7 ) angegeben werden. ( zwecks Lesbarkeit der Pogramme sollten nur<br />
die symbolischen Kurzbezeichner verwendet werden ).<br />
Special Function Registers SFR- Bit-Adressable-Locations<br />
Controller - Teil umfaßt<br />
- Parallelschnittstelle <strong>mit</strong> 6 digitalen, bidirektionalen 8-Bit-Kanälen (Port 0 - 5 )<br />
- Analog-Schnittstelle <strong>mit</strong> 8 gemultiplexten Analogeingängen und 8-Bit A/D-Wandler einschließlich<br />
Sample & Hold Port 6<br />
- eine serielle Voll-Duplex-Schnittstelle <strong>mit</strong> 4 Betriebsarten und 4 Baudraten sowie einem eigenem<br />
Baudratengenerator für 4800 und 9600 Bd bei 12 MHz Taktfrequenz<br />
- drei 16-Bit-Timer ( Zähler / Zeitgeber )<br />
Einer davon <strong>mit</strong> Reload/Capture-Eingangs- und Compare-Ausgangs- Funktionen<br />
- 16-Bit Watchdog-Schaltung<br />
- 7 externe und 5 interne Interruptquellen <strong>mit</strong> vier Prioritätsebenen<br />
Diese Vielseitigkeit des <strong>80535</strong> war nur durch eine aufwendige Registerstruktur <strong>mit</strong> Spezial-Funktions-Registern<br />
SFR und durch die Mehrfachbelegung diverser Anschlüsse möglich.
FH-Darmstadt - 12 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
Externe Speicherorganisation<br />
Ist die interne Speicherkapazität des 80515/<strong>80535</strong> <strong>mit</strong> 8 kByte maskenprogrammierten ROM als<br />
Programmspeicher und 256 Byte RAM als Datenspeicher nicht ausreichend, so kann <strong>mit</strong> den Ports P0 und P2<br />
ein externer gemultiplexter Adreß/Datenbus gebildet werden.<br />
An diesem externen Bussystem können maximal 64 kByte Programm- und maximal 64 kByte Datenspeicher<br />
angeschlossen werden. Insgesamt können extern so<strong>mit</strong> 128 kByte Speicher angeschlossen werden.<br />
Durch das Steuersignal PSEN ( Program Storage Enable ) zeigt der Controller nach außen einen Lesezugriff auf<br />
den Programmspeicher an.<br />
Zusätzliche externe Peripheriebausteine müssen wie Speicherzellen des externen Datenspeichers angeschlossen<br />
und angesprochen werden ( Memory Mapped IO ).<br />
Beim Anschluß von externem Speicher gehen nicht nur Port 0 und 2 als Parallelschnittstellen verloren, sondern<br />
für die Steuersignale RD und WR zur Ansteuerung des externen Datenspeichers müssen von<br />
Port 3 die Pins P3.6 (WR) und P3.7 (RD) herangezogen werden.<br />
Programmspeicher<br />
Das Potential am EA -Eingang (External Access) legt fest, ob im unteren Adreßraum 0000 - 1FFF h der interne<br />
oder der externe Programmspeicher angesprochen wird. ( <strong>80535</strong> -> EA immer auf Low )<br />
EA = 1 interner Programmspeicher<br />
EA = 0 externer Programmspeicher<br />
Bei Adressen > 1FFF h wird immer auf einen externen Programmspeicher zugegriffen ( EA ist dann<br />
bedeutungslos ).<br />
80515 8 kByte interner Programmspeicher, extern noch 56 kByte ( 64 kByte ) anschließbar<br />
<strong>80535</strong> 0 kByte interner Programmspeicher, extern noch 64 kByte anschließbar ( EA immer auf 0 )<br />
PSEN (Program Storage Enable) ist das Steuersignal für das Lesen des externen Programmspeichers.<br />
Das Beschreiben eines Programmspeichers ist nicht möglich.<br />
Interface zum externen Programmspeicher
FH-Darmstadt - 13 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
Externer Datenspeicher<br />
Der Zugriff auf die maximal 64 kByte externen Datenspeicher wird über die Signale RD ( Lesen ) und WR<br />
( Schreiben ) gesteuert.<br />
Da es bei der 8051-Familie keine Befehle gibt, <strong>mit</strong> denen man in den Programmspeicher hineinschreiben könnte<br />
(für den Programmspeicher gibt nur Lesebefehle ), muß die Unterteilung in externen Programm- und<br />
Datenspeicher immer dann aufgegeben werden, wenn Programme aus dem RAM-(Daten)-speicher ablaufen<br />
sollen.<br />
Dies kann z.B. bei einem Übungssystem wie dem <strong>MVUS</strong> <strong>80535</strong> der Fall sein, bei dem ja die zu erstellenden<br />
Übungsprogramme in das RAM geladen werden und dort ablaufen sollen.<br />
Ein anderes Beispiel ist der Personal Computer PC, bei dem die verschiedensten Anwender- programme von<br />
der Festplatte in den RAM-Speicher geladen werden und dort ablaufen.<br />
Dann muß beim <strong>80535</strong> ein sogn. gemischter Programm/Datenspeicher gebildet werden, wie er in der<br />
Computertechnik überwiegend üblich ist. ( von Neumann-Rechner )<br />
Dies wird beim <strong>80535</strong> durch die logische ODER Verknüpfung der Steuersignale PSEN und RD erreicht, wo<strong>mit</strong><br />
dann aber nur noch ein insgesamt 64 kByte großer gemischter Speicher angeschlossen werden kann.<br />
Externes Bussystem<br />
Das externe Bussystem<br />
Das vom 8080/85/86 bekannte Zeitmultiplexen von Adreßbus-Lowbyte <strong>mit</strong> dem 8-Bit-Datenbus wird <strong>mit</strong> Port<br />
0 und das Adressbus-Highbyte <strong>mit</strong> Port 2 gebildet.<br />
Wird neben externem Programmspeicher auch externer Datenspeicher angeschlossen, so gehen für die Bildung<br />
der Steuersignale RD zusätzlich noch die Portleitung P3.7 und für WR die Portleitung P3.6 verloren .<br />
Zugriffe auf einen externen Programmspeicher erfolgen immer indirekt über eine 16-Bit Adresse, während<br />
auf externen Datenspeicher entweder <strong>mit</strong> einer 16-Bit Adresse ( MOVX A,@DPTR) oder <strong>mit</strong> einer 8-Bit<br />
Adresse (MOVX A,@R0) ebenfalls nur indirekt zugegriffen werden kann.<br />
Im zeitlichen Bus-Timing wird durch das ALE-Signal vom <strong>80535</strong> angezeigt, ob Port 0 im Augenblick als<br />
Daten- ( ALE = 0 ) oder Adressbus (ALE = 1) arbeitet (ALE -> Adress Latch Enable ).<br />
Da die externen Speicherbausteine die gesamte Adresse während der Dauer des Zugriffs benötigen, muß das<br />
Adress-Lowbyte für die nachfolgende Datenbusdauer in einem Latch (taktzustandgesteuerte<br />
D-FFs) zwischengespeichert werden.<br />
Da ein externer Programm-Lesezugriff zweimal pro Maschinenzyklus erfolgt, ein externer Datenspeicher-<br />
Zugriff dagegen nur einmal, muß bei gemischtem Programm/Datenspeicher der gesamte gemischte Speicher <strong>mit</strong><br />
schnelleren Speicherbausteinen ( kürzere Zugriffszeit ) realisiert werden.
FH-Darmstadt - 14 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
Befehlsverarbeitung<br />
Fetch-Phase<br />
Es wird der nächste zu verarbeitende Befehl aus dem Programmspeicher geholt.<br />
Dazu wird der Inhalt des Befehlszählers PC (Program Counter 16Bit) auf den Adreßbus geschaltet und danach<br />
das erste Byte eines Befehls, der sogn. Op-Code, über den Datenbus (8 Bit) eingelesen.<br />
Nach RESET steht der PC immer auf 0000, erwartet dort also den Op-Code eines Befehls.<br />
PC inkrementieren - da<strong>mit</strong> der PC immer auf das nächste Programmspeicherbyte weist.<br />
Operanden holen - Am Op-Code erkennt der Befehlsdecoder, ob und wieviel weitere Operanden zum Befehl<br />
gehören und über das Hinausschalten auf den Adreßbus und Inkrementieren des PC werden die weiteren<br />
Operanden eingelesen. (max. 2 beim <strong>80535</strong>)<br />
Ausführungsphase - Nachdem alle Byte eines Befehls eingelesen sind, erfolgt die Ausführung des Befehls. Die<br />
Zahl der dafür erforderlichen Maschinenzyklen (Mikroschritte) hängt vom Befehl ab.<br />
Danach folgt erneut die Fetch-Phase des nächsten Befehls.<br />
I-Phase<br />
E-Phase<br />
Befehl holen<br />
Op-Code<br />
Befehlszähler<br />
PC<br />
inkrementieren<br />
Alle Operanden<br />
da ?<br />
Operation<br />
ausführen<br />
ja<br />
Fetch-Phase<br />
Operand<br />
holen<br />
nein<br />
Befehlsverarbeitung<br />
in der CPU<br />
Charakteristisch für die Befehlsverarbeitung des <strong>80535</strong> ist, daß er in jedem Maschinenzyklus zweimal auf den<br />
Programmspeicher zugreift und zwei Byte einliest. (Prefetch)<br />
Bei Ein-Byte-Befehlen wird das zweite Byte nicht benötigt, (blinder Speicherzugriff) der PC daher nicht<br />
inkrementiert und im nächsten Maschinenzyklus wird das selbe Byte nochmals als Op-Code des nächsten<br />
Befehls eingelesen.<br />
Im Extremfall kann dadurch bei 1 Byte-Befehlen <strong>mit</strong> einer Ausführungszeit von 4 Maschinenzyklen ( MUL<br />
AB ) insgesamt 7 mal auf das dem Befehl folgende Byte lesend zugegriffen werden.<br />
Der achte Zugriff liest im nächsten Maschinenzyklus dann dieses Byte als Op-Code des nächsten Befehls ein.
FH-Darmstadt - 15 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
Taktsteuerung<br />
Ein Maschinenzyklus besteht aus 12 Oszillatorperioden, die unterteilt werden in 6 Zustände (States) S1.. S6<br />
<strong>mit</strong> je zwei Phasen S1P1, S1P2, S2P1,...S6P2<br />
Die Signale CLKOUT P1.6 (System Clock Output = 1/12 Oszillatorfrequenz) und ALE Pin 50 (Adress Latch<br />
Enable) sind extern verfügbar.<br />
In einem Maschinenzyklus werden in S1P1 und S4P1 immer 2 aufeinander folgende Befehlsbyte aus dem<br />
internen oder externen Programmspeicher eingelesen.<br />
Handelt es sich nur um einen 1 Byte-Befehl, so wird das zweite eingelesene Byte ignoriert (blinder<br />
Speicherzugriff) und beim nächsten Maschinenzyklus als Opcode erneut eingelesen.<br />
Dies führt dazu, daß z.B. bei einem 1-Byte Befehl <strong>mit</strong> einer Ausführungszeit von 4 Maschinenzyklen<br />
(Maximum) 7 blinde Speicherzugriffe auf das nächste Byte auftreten.<br />
Nur im 2. Maschinenzyklus eines MOVX-Befehls werden keine zwei Befehlsbyte sondern nur ein Datenbyte<br />
eingelesen.<br />
Datenspeicher-Schreibzyklus<br />
Datenspeicher-Lesezyklus
FH-Darmstadt - 16 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
Speicherzugriff auf externen Programmspeicher<br />
Befehlshol- und Ausführungsphasen<br />
Ablauf eines MOVX A,@DPTR Befehls
FH-Darmstadt - 17 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
Eigenschaften der <strong>80535</strong>-Ports<br />
Alle sechs 8-Bit breiten Parallel-Ports des <strong>80535</strong> sind bidirektional und können bitweise einzeln als Ein- oder<br />
Ausgang benutzt werden.<br />
Die Ports P0 und P2 können außerdem für die Bildung eines externen Adreß- und Datenbusses verwendet<br />
werden und die Ports P1 und P3 haben alternative Zusatzfunktionen wie z.B. Bussteuersignale, Serielle<br />
Ein/Ausgänge oder Interrupteingänge.<br />
Alternative Funktionen an Port 1 und Port 3<br />
Port Pin Alternative Funktionen<br />
P1.0 INT3 / CC0 External Interrupt 3 / Capture 0 / Compare 0<br />
P1.1 INT4 / CC1 External Interrupt 4 / Capture 1 / Compare 1<br />
P1.2 INT5 / CC2 External Interrupt 5 / Capture 2 / Compare 2<br />
P1.3 INT6 / CC3 External Interrupt 6 / Capture 3 / Compare 3<br />
P1.4 INT2 External Interrupt 2<br />
P1.5 T2EX Timer 2 External Reload Trigger Input<br />
P1.6 CLKOUT System Clock Output<br />
P1.7 T2 Timer 2 Input<br />
P3.0 RxD Serial Input Port<br />
P3.1 TxD Serial Output Port<br />
P3.2 INT0 External Interrupt 0<br />
P3.3 INT1 External Interrupt 1<br />
P3.4 T0 Timer 0 Input<br />
P3.5 T1 Timer 1 Input<br />
P3.6 WR External Data Memory Write Strobe<br />
P3.7 RD External Data Memory Read Strobe<br />
Nur P4 und P5 stehen als reine Parallelschnittstellen zur Verfügung. Sie sind auf der <strong>80535</strong>-Rechnerplatine an<br />
die <strong>mit</strong> '<strong>80535</strong>-Ports' beschriftete Frontbuchse geführt und können <strong>mit</strong> den LED/Kippschalterkombinationen der<br />
Anzeigebox verbunden werden.<br />
Port P0 kann wegen seiner Funktion bei der Bildung des gemultiplexten Adreß/Datenbusses in den Tri-State-<br />
Zustand gebracht werden<br />
Bei den anderen 5 Ports ist dies nicht möglich, sie werden deshalb auch nur als 'quasi-bidirektional' bezeichnet.<br />
Jede Ausgangsschaltung eines Portbit enthält ein Latch (D-FF), mehrere Feldeffekttransistoren sowie zwei<br />
Leseverstärker.<br />
Quasi-bidirektionale Ein-/Ausgabeleitung von Port P1<br />
(vereinfacht dargestellte Prinzipschaltung ) LED / Kippschalterkombination
FH-Darmstadt - 18 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
Eine '1' im Latch sperrt den T2-FET und legt durch den Pull-Up-Widerstand High-Potential an den Ausgang.<br />
Eine '0' im Latch schaltet T2 niederohmig nach Masse durch und bringt da<strong>mit</strong> Low-Potential an den Ausgang.<br />
Soll der Portpin als Eingang verwendet werden, muß vorher eine '1' in das Latch geschrieben worden sein,<br />
da<strong>mit</strong> T2 sperrt und das Potential am Pin von außen bestimmt werden kann.<br />
Nach einem RESET steht in allen Port-Latches eine '1', sie sind da<strong>mit</strong> also für das Einlesen initialisiert.<br />
Mit den Portausgangsströmen I = - 80 uA und I = 1.6 mA können maximal 4 LSTTL-Eingänge getrieben<br />
werden.<br />
Einige Befehle lesen den Signalpegel am Portpin, andere lesen den Flip-Flop-Inhalt (Registerinhalt), um<br />
Störungen oder Verfälschungen auf der Portleitung zu unterdrücken.<br />
Einlesebefehl (Auszug ) Lesen Portpin<br />
Befehl Funktion Beispiel<br />
MOV ziel,port Portpegel in ein Ziel einlesen MOV A,P2<br />
ADD A, port Portpegel zum Akkuinhalt addieren ADD A,P1<br />
ANL A, port Portpegel <strong>mit</strong> Akkuinhalt logisch verknüpfen ANL A,P2<br />
JNB portpin,rel Sprung, wenn Pegel am Portpin = „Low“ JNB P3.0,Warte<br />
Änderungsbefehle Lesen Register ( Read Modify Write )<br />
Befehl Funktion Beispiel<br />
ORL port,operand 2 Logische Verknüpfung von Port und Operand ANL P3, #0Fh<br />
XRL port,operand 2 das Ergebnis überschreibt den Port XRL P0, A<br />
INC port Port + 1 INC P0<br />
DEC port Port - 1 DEC P2<br />
DJNZ port,rel Port – 1, Sprung, wenn Ergebnis ungleich Null DJNZ P1, Zurueck<br />
CPL portpin Portpin komplementieren (invertieren) CPL P1.2<br />
JBC portpin,rel Sprung, wenn Portpin=1 und Portpin löschen JBC P3.1,Weiter<br />
MOV portpin,C * Carry an Portpin ausgeben MOV P1.7,C<br />
CLR portpin * Portpin löschen CLR P2.5<br />
SETB portpin * Portpin setzen SETB P3.6<br />
* werden als Änderungsbefehle behandelt:<br />
1. Lesen aller Flip-Flops des Ports in interne Zwischnregister<br />
2. Änderung der gewünschten Bitstelle durch Maskierung und<br />
3. Zurückschreiben des Ergebnisses in die Ausgabe-Flip-Flops
FH-Darmstadt - 19 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
<strong>MVUS</strong> <strong>80535</strong><br />
Das Mikrocomputer-Versuchs-und Übungssystem <strong>MVUS</strong> <strong>80535</strong> besteht aus <strong>80535</strong>-Rechnerplatine <strong>mit</strong><br />
Mikrocontroller <strong>80535</strong> in einem schwarzen Kunststoffgehäuse <strong>mit</strong> durchsichtiger Plexiglas- abdeckung.<br />
Links oben in der Abdeckung befindet sich der RESET-Schalter und rechts oben das Potentiometer für die<br />
Kontrasteinstellung des daneben sichtbaren LCD-Displays.<br />
Anschlüsse hinten:<br />
. Spannungsversorgung durch externes Netzteil<br />
. 9-polige DB 9 - Buchse der seriellen V24-Schnittstelle für die Kommunikation <strong>mit</strong> dem PC<br />
Anschlüsse vorne:<br />
. eine 64-polige Steckerleiste für die Verbindung von Rechnerplatine <strong>mit</strong> Anzeigebox über<br />
Flachbandkabel.<br />
Da<strong>mit</strong> können die LED/Kippschalterkombinationen der Anzeigebox für binäre Ein/Ausgabe<br />
<strong>mit</strong> den 8 Bit-Ports P1, P4 und P5 des <strong>80535</strong> und <strong>mit</strong> den Ports A, B und C des Peripherie -<br />
bausteines PIO 8255 verbunden werden.<br />
. 8 Buchsen für die 8 gemultiplexten Analogeingänge des <strong>80535</strong> ( Bezeichnung 0 - 7 )<br />
. 5 Buchsen für Referenzspannung und 4 Analogausgänge des D/A-Wandlers AD 7226<br />
(Bezeichnung Ref D C B A)<br />
Anschlüsse links:<br />
. zwei 9-polige DB 9 - Buchsen für je einen Kanal des programmierbaren, seriellen<br />
Schnittstellenbausteins Z85C30 (da<strong>mit</strong> Aufbau serieller Bussysteme möglich)<br />
- Anzeigebox <strong>mit</strong> LEDs, Kippschaltern und Buchsen für die Ein- und Ausgabe <strong>mit</strong> den parallelen 8<br />
Bit - Ports des Controllers <strong>80535</strong> und des Peripheriebausteines 8255<br />
- ein PC als übergeordneter Entwicklungsrechner für <strong>80535</strong>-Software der über die serielle<br />
Schnittstelle <strong>mit</strong> der <strong>80535</strong>-Rechnerplatine verbunden wird.<br />
Auf dem PC werden <strong>mit</strong> Hilfe eines Editors, eines Cross-Assemblers und eines Binder-Laders für<br />
die <strong>80535</strong>-Rechnerplatine ablauffähige Programme erstellt.<br />
Das fertige Objectprogramm kann dann <strong>mit</strong> Hilfe eines Terminalprogrammes ( MT ) vom PC auf<br />
die Rechnerplatine übertragen und <strong>mit</strong> dem Monitor-Betriebssystem MONITOR 51 gestartet und<br />
getestet werden.<br />
PC Rechnerplatine<br />
Anzeigebox<br />
| | | | | | |<br />
Port 1<br />
° ° ° ° ° ° ° ° ° | | | | | | | |<br />
Port C Port 5<br />
8255 <strong>80535</strong><br />
Übungssystem <strong>MVUS</strong> <strong>80535</strong>
FH-Darmstadt - 20 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
Programmiermodel <strong>MVUS</strong> <strong>80535</strong><br />
<strong>80535</strong> externer Speicher<br />
Programm Daten
FH-Darmstadt - 21 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
Speicherbelegung und Adreßdecodierung<br />
Der externe Speicherraum des <strong>80535</strong> wird durch eine 16 Bit Adresse A0 - A15 (gebildet von P0 = Low Byte<br />
und P2 = High Byte) angesprochen.<br />
Die Datenbusbreite ( P0 im Zeitmultiplex ) beträgt 8 Bit (1 Byte) und da<strong>mit</strong> können <strong>mit</strong> 16 Adreßbit 65536 =<br />
64 kByte Speicher angesprochen werden.<br />
Durch die Steuerleitung PSEN = 0 ( Program Storage Enable = Programm-Speicher-Lesezugriff) unterscheidet<br />
der Controller zwischen Lesezugriffe auf den Programmspeicher PSEN = 0 und<br />
Zugriffen auf den Datenspeicher PSEN = 1.<br />
Bei Datenspeicherzugriffen wird das Lesen noch durch RD = 0 und das Schreiben durch WR = 0 gesteuert.<br />
So<strong>mit</strong> kann unter Verwendung von PSEN ( quasi als 17. Adreßbit ) der externe Speicher <strong>mit</strong> maximal 128 kByte<br />
( 64k Programm- und 64k Datenspeicher ) bestückt werden.<br />
Da der <strong>80535</strong> kein Steuersignal zur Unterscheidung von Zugriffen auf Speicher- oder Peripheriebausteine kennt,<br />
müssen Peripheriebausteine wie externer Datenspeicher behandelt werden ( memory mapped I/O ) und <strong>mit</strong><br />
MOVX – Befehlen angesprochen werden.<br />
Der externe Speicher ist auf der <strong>MVUS</strong>-Rechnerplatine folgendermaßen aufgeteilt:<br />
- RAM 1 32 kByte, statisch, CMOS TC 55257<br />
Auswahl auf dem Baustein durch A0 bis A14 als gemischter Programm/Datenspeicher<br />
ansprechbar d.h. PSEN für die Freigabe des Bausteines ohne Bedeutung<br />
Adresse 0000 h - 7FFF h<br />
- EPROM 32 kByte, 27C5120 (eigentlich 64kByte) enthält Betriebssystem MONITOR 51<br />
nur Programmspeicher d.h. freizugeben bei PSEN = 0<br />
Adresse 8000 h - FFFF h<br />
- RAM 2 32 kByte, statisch, CMOS TC 55257 Auswahl auf dem Baustein durch A0 bis A14<br />
nur Datenspeicher, d.h. freizugeben bei PSEN = 1<br />
Adresse 8000 h - F7FF h<br />
Die obersten 2 kByte dieses Bausteines <strong>mit</strong> den Adressen F800 bis FFFF h lassen sich nicht<br />
verwenden, da in diesem Adreßraum die peripheren I/O- Bausteine von der Adreßlogik<br />
decodiert werden<br />
- PIO 8255 Parallel-Schnittstelle ( 82C55A ) Peripherie-Baustein die 4 Register des 8255 sind durch<br />
A0 und A1 auszuwählen<br />
wie Datenspeicher <strong>mit</strong> Adresse F800 - F803 h<br />
- Z85C30 serieller Schnittstellenbaustein für die Ansteuerung werden A0 und A1 herangezogen<br />
wie Datenspeicher <strong>mit</strong> Adresse F900 - F903 h<br />
- LCD-Display TLX-1021 <strong>mit</strong> 120 * 64 Bildpunkten<br />
zur Unterscheidung von Kommando (Status)- und Datenwörtern auf dem Datenbus wird A0<br />
verwendet.<br />
wie Datenspeicher Adresse FA00 h -> Datenwort<br />
FA01 h -> Kommandowort<br />
- D/A Wandler AD 7226 <strong>mit</strong> vier 8 Bit Kanälen die Auswahl von einem der 4 D/A-Kanäle erfolgt<br />
durch A0 und A1<br />
wie Datenspeicher <strong>mit</strong> Adresse FB00 - FB03 h<br />
Im Adreßplan sind die einzelnen Adreßbit für die Adreßbildung der Bausteine dargestellt.<br />
Mit den niederwertigen Adreßbit der vom <strong>80535</strong> auf den Bus gelegten Adresse wird auf dem Baustein die<br />
Speicherzelle oder das Register ausgewählt.<br />
Mit den höherwertigen Adreßbit und der Steuerleitung PSEN wird das Freigabesignal CS ( Chip Select ) für<br />
den Baustein gebildet (CE-Eingänge der Bausteine meist low aktiv).<br />
Da immer nur ein einziger Baustein freigegeben werden darf, führt der Entwurf einer derartigen digitalen<br />
Schaltung auf ein Decoder-Schaltnetz ( nur ein Ausgang aktiv ).
FH-Darmstadt - 22 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
Programm Daten FFFF Programm Daten<br />
I / O-Per.<br />
F7FF<br />
I / O-Per.<br />
EPROM RAM 2<br />
EPROM RAM 2<br />
32kB 32kB<br />
32kB 32kB<br />
MONITOR<br />
51<br />
RAM 1<br />
32kB<br />
8000<br />
7FFF<br />
0000<br />
Q = 1 Q = 0<br />
Normale Decodierung un<strong>mit</strong>telbar nach RESET<br />
RESET-JUMP-Decodier-Schaltwerk<br />
RESET-JUMP Adressdecodierung<br />
MONITOR<br />
51<br />
EPROM RAM 1<br />
32kB 32kB<br />
MONITOR<br />
51<br />
Nach jeder RESET-Auslösung (Einschalten löst ebenfalls RESET aus) legt der Controller die Adresse 0000<br />
auf den Bus und liest aus dieser Adresse den Opcode (erstes Byte) des ersten Befehls ein.<br />
Bei einer Adreßdecodierung wie oben beschrieben wird dadurch der RAM 1 -Baustein freigegeben und dessen<br />
erstes Byte (<strong>mit</strong> einem zufälligen Inhalt) gelesen und eben nicht das erste Byte eines Festwertspeicher <strong>mit</strong> z.B.<br />
einem Betriebssystem.<br />
Um zu erreichen, daß nach jedem RESET für die Dauer eines ersten Sprungbefehles LJMP 80xx h das<br />
EPROM und nicht das RAM freigegeben wird, muß das obige Adreßdecoder-Schaltnetz zu einem sogn.<br />
RESET-JUMP-Schaltwerk erweitert werden.<br />
Da<strong>mit</strong> soll erreicht werden, daß das EPROM, in dessen untersten drei Byte der Sprungbefehl LJMP 80xx h<br />
(Sprung ins Betriebssystem) steht, nach einem RESET für die Dauer der Ausführung dieses Befehls<br />
freigegeben wird (anstatt des RAM 1).<br />
Nach Ausführung dieses Befehls folgt <strong>mit</strong> dem Zugriff auf den nächsten Befehl (der Sprung- ausführung) das<br />
erstmaligen Setzen von A15 ( 80xx h ) und ab dann soll die normale, oben beschriebene Decodierung gelten.<br />
Zum 'Merken' des RESET muß die Zustandsvariable Q (Switch) <strong>mit</strong> den Zuständen<br />
Q = 0 bei und nach RESET bis zum ersten Mal A15 = 1<br />
Q = 1 bei und nach A15 = 1<br />
eingeführt werden.<br />
Auf der Rechnerplatine wird dieses Adreß-Decodier-Schaltwerk <strong>mit</strong> Hilfe des programmierbaren<br />
Logikbausteines EPLD (EP900J) realisiert.<br />
Wenn dieses Adreßdecodier-Schaltwerk <strong>mit</strong> möglichst minimalem Aufwand in diskreter Logik (Gatter)<br />
entworfen wird, dann führt dies auf ein asynchrones Schaltwerk, bestehend nur aus teilweise rückgekoppelten<br />
Logikgattern, aber keinen Flipflops.<br />
Da von diesem RESET-JUMP nur RAM 1 – und der EPROM-Baustein betroffen sind (RAM 2 und alle<br />
Peripheriebausteine haben Adressen > 8000 h und sind von der Umschaltung nicht betroffen) werden nur deren<br />
CS-Signale als Ausgänge in der Zustandsfolgetabelle behandelt.<br />
Eingangsseitig wird das low-aktive RESET-Signal benötigt und da im Zustand Q = 0 nur ein festgelegter<br />
Sprungbefehl ausgeführt werden soll, genügt von den Adreßbit allein A15 für die Realisierung des RESET-<br />
JUMP.<br />
Mit RESET, PSEN, A15 und Q kann die RESET-JUMP-Schaltung und die Decodierung für RAM und EPROM<br />
dargestellt werden.<br />
Die Decodier-Schaltung für die restlichen Bausteine wird durch die RESET-JUMP-Ergänzung nicht verändert.
FH-Darmstadt - 23 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
Zustandsgraph des RESET-JUMP-Schaltwerkes<br />
Zustandsfolgetabelle (Chip Select CS bei allen Speicherchips Low aktiv)<br />
Chip Select<br />
RESET PSEN A15 Q Q + RAM 1 EPROM<br />
0 0 0 0<br />
0 0 0 1<br />
0 0 1 0<br />
0 0 1 1<br />
0 1 0 0<br />
0 1 0 1<br />
0 1 1 0<br />
0 1 1 1<br />
P2 A15<br />
PSEN PSEN<br />
WR<br />
RD<br />
RESET<br />
<strong>80535</strong><br />
RESET<br />
00 01 11 10 00 01 11 10<br />
00 00<br />
01 01<br />
11 11<br />
10 10<br />
RAM 2 32kByte<br />
WR D0<br />
OE<br />
D7<br />
CE A14........A0.<br />
OE<br />
EPROM 32kByte<br />
CE A14........A0.<br />
D0<br />
D7<br />
RAM 1 32kByte<br />
WR D0<br />
OE<br />
D7<br />
CE A14........A0.
FH-Darmstadt - 24 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
8255 Porterweiterung<br />
Der 8255 ist ein universeller, programmierbarer Schnittstellenbaustein für die parallele Ein/-Ausgabe von je 8<br />
Bit an den drei Ports A, B und C ( Parallel In/Out PIO ).<br />
Der 8255 kennt drei Betriebsmodi.<br />
In Betriebsart 0 stellt der 8255 drei 8-Bit-Kanäle für die passive Digital-Ein/Ausgabe zur Verfügung. Jeder<br />
Kanal kann als 8-Bit Ein- oder Ausgang definiert werden. Der Port C ist in zwei unabhängige 4-Bit Kanäle<br />
aufteilbar. (siehe Tabelle u. Beispiel unten)<br />
Betriebsart 1 ermöglicht den Handshake-Modus ( getastete Ein/ Ausgabe ).<br />
Betriebsart 2 ermöglicht eine getastete bidirektionale Ein/Ausgabe für Port A.<br />
Port B kann dann nur in Betriebsart 0 oder 1 arbeiten.<br />
Die Betriebsart und die Funktion der einzelnen Ports wird durch das Schreiben eines Kommando- wortes in das<br />
8-Bit Steuerwortregister (Kommandoregister) festgelegt.<br />
Nach einem RESET sind alle 8255-Ports als Eingänge programmiert.<br />
Der 8255 ist auf der <strong>80535</strong>-Rechnerplatine wie externer Datenspeicher unter den folgenden Adressen<br />
dekodiert:<br />
A - Port F800 h<br />
B - Port F801 h<br />
C - Port F802 h<br />
Kommandoreg. F803 h<br />
Tabelle der Steuerbytes für die Betriebsart 0<br />
A-Kanal B-Kanal C-High C-Low Steuerbyte<br />
AUS AUS AUS AUS 80<br />
AUS AUS AUS EIN 81<br />
AUS AUS EIN AUS 88 Adresse Register<br />
AUS AUS EIN EIN 89 xxxxxx00 Datenregister A-Port<br />
AUS EIN AUS AUS 82 xxxxxx01 Datenregister B-Port<br />
AUS EIN AUS EIN 83 xxxxxx10 Datenregister C-Port<br />
AUS EIN EIN AUS 8A xxxxxx11 Kommandoregister<br />
AUS EIN EIN EIN 8B<br />
EIN AUS AUS AUS 90 Registeradressen der Parallelschnittstelle 8255<br />
EIN AUS AUS EIN 91<br />
EIN AUS EIN AUS 98<br />
EIN AUS EIN EIN 99<br />
EIN EIN AUS AUS 92<br />
EIN EIN AUS EIN 93<br />
EIN EIN EIN AUS 9A<br />
EIN EIN EIN EIN 9B<br />
Beispiel: Einlesen des Bitmusters von den Port A-Kippschaltern der Anzeigebox <strong>mit</strong> nachfolgender<br />
Ausgabe auf die Port B-LEDs. Die Port B-Kippschalter müssen bei der Ausgabe auf die LEDs geöffnet sein (<br />
Stellung oben ). Vor dem Einlesen des Bitmusters werden die 8255-Ports wie folgt initialisiert:<br />
A-Port-> Ein B-Port-> AUS C-Port-> AUS<br />
MOV DPTR,# 0F803 h ;Adresse des Kommandoregisters<br />
MOV A,# 90 h ;Steuerbyte im Akku bilden<br />
MOVX @DPTR,A ;Steuerbyte nach Kommandoregister<br />
MOV DPL,# 00 ;Adresse des A-Portes bilden<br />
MOVX A,@DPTR ;Kippschalterbitmuster (A-Port) nach Akku<br />
INC DPTR ;Adresse B-Port bilden<br />
MOVX @DPTR,A ;Akku auf B-Port ( PB-LEDs ) ausgeben
FH-Darmstadt - 25 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
Anzeigebox ( Beschaltung der Ports beim <strong>MVUS</strong> <strong>80535</strong>)<br />
Die <strong>80535</strong> Ports P1, P4 und P5 sowie P3.2-P3.5 sind auf die 64-polige Steckerleiste an der Vorderfront des<br />
Geäuses geführt. Dies gilt auch für die Ports A, B und C des 8255.<br />
Die Anzeigebox, bestehend aus<br />
24 LED/Kippschalterkombinationen Port1 - Port4 - Port 5 <strong>80535</strong><br />
4 LED/Kippschalterkombinationen P3.2 - P3.3 - P3.4 - P3.5 <strong>80535</strong><br />
8 Buchsen P1.0 - P1.1 - P1.2 - P1.3 <strong>80535</strong><br />
P3.2 - P3.3 - P3.4 - P3.5 <strong>80535</strong><br />
24 LED/Kippschalterkombinationen Port A - Port B - Port C 8255<br />
ist über ein Flachbandkabel <strong>mit</strong> der Steckerleiste der Rechnerplatine verbunden und bildet für die Ports des<br />
<strong>80535</strong> und des 8255 die externe Beschaltung.<br />
Für die Ausgabe von binären Signalen auf die LEDs müssen die zugehörigen Kippschalter geöffnet sein<br />
( Stellung oben ).<br />
<strong>80535</strong><br />
oder<br />
8255<br />
Portanschlüsse 7406<br />
+ 5V + 5V<br />
10 k Ω 390 Ω<br />
200 Ω<br />
LED / Kippschalterkombination<br />
Mikrocontroller<br />
Anzeigebox<br />
P3.5 P3.4 P3.3 P3.2 LEDs<br />
Buchsen -> o o o o . . . .<br />
P1.3 P1.2 P1.1 P1.0 P3.5 P3.4 P3.3 P3.2<br />
o o o o I I I I<br />
Kippschalter<br />
. . . . . . . . . . . . . . . .<br />
PA7 PA6 PA5 PA4 PA3 PA2 PA1 PA0 Port A Port1 P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0<br />
I I I I I I I I I I I I I I I I<br />
. . . . . . . . . . . . . . . .<br />
PB7 PB6 PB5 PB4 PB3 PB2 PB1 PB0 Port B Port4 P4.7 P4.6 P4.5 P4.4 P4.3 P4.2 P4.1 P4.0<br />
I I I I I I I I I I I I I I I I<br />
. . . . . . . . . . . . . . . .<br />
PC7 PC6 PC5 PC4 PC3 PC2 PC1 PC0 Port C Port5 P5.7 P5.6 P5.5 P5.4 P5.3 P5.2 P5.1 P5.0<br />
I I I I I I I I I I I I I I I I<br />
8255 <strong>80535</strong>
FH-Darmstadt - 26 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
LCD-Modul ( hier nur Text-Ausgabe )<br />
Das LCD-Modul besteht aus - Display-Panel für 120 Zeichen ( 8 Zeilen <strong>mit</strong> 15 Spalten )<br />
- LCD-RAM-Speicher von 8 kByte ( Adressen 0000 - 1FFF h )<br />
- LCD-Controller für externe Kommunikation und Bildausgabe<br />
Die Steuerung des LCD-Moduls erfolgt über zwei Register (Kommando/Status u. Daten) des am<br />
<strong>80535</strong>-Datenbus angeschlossenen LCD-Controllers. Die beiden Register werden durch die Adressen<br />
FA00 h und FA01 h im externen Datenspeicher des <strong>80535</strong> angesprochen.<br />
Im folgenden werden nur die Betriebs-Abläufe im Text-Modus unter Verwendung der beiden, aus den<br />
Übungsprogrammen aufrufbaren, Unterprogramme im EPROM<br />
LCDINI 9CF0 h -> LCALL 9CF0 h<br />
TXTPOS 9DA0 h -> LCALL 9DA0 h beschrieben.<br />
Arbeitsweise<br />
In den gesamten LCD-RAM-Speicher lassen sich byteweise die ASCII- Zeichencodes<br />
hineinschreiben oder herauslesen und zwar durch das UP TXTPOS.<br />
Auf dem Panel wird nur ein Ausschnitt (120 Byte) aus diesem RAM-Speicher dargestellt. Dieses<br />
Anzeigefenster wird durch Aufruf des UP LCDINI und Übertragung der beiden Werte TH und TA<br />
festgelegt.<br />
TH = Text-Beginn im LCD-RAM<br />
TA = Text-Spalten Anzahl<br />
Durch Schreiben eines ASCII-Codes <strong>mit</strong> TXTPOS in dieses RAM-Anzeigefenster kann das<br />
zugehörige Zeichen un<strong>mit</strong>telbar in der gewünschten Position auf dem Display angezeigt werden.<br />
Daneben kann aber auch durch Verändern von TH und/oder TA <strong>mit</strong> LCDINI ein anderes im Speicher<br />
befindliches Bild angezeigt oder es können Effekte wie Scrollen oder Laufschrift erreicht werden.<br />
Für die Zuordnung zwischen der durch Zeile ( 0-7 ) und Spalte ( 0-14 ) definierten POSITION auf<br />
dem Display und den LCD-RAM-Adressen (Anzeigefenster) gilt:<br />
ADRESSE (LCD-RAM) = TH + ( ZEILE * TA ) + SPALTE<br />
(0000-1FFF h ) ( 0-7 ) ( 0-14 )<br />
1.Spalte 2.Spalte 3.Spalte 15.Spalte<br />
TH TH+1 TH+2 ....... TH+14 1.Zeile<br />
TH+TA TH+TA+1 TH+TA+2 ....... TH+TA+14 2.Zeile<br />
TH+2TA TH+2TA+1 TH+2TA+2 ....... TH+2TA+14 3.Zeile<br />
........................................................................................................<br />
........................................................................................................<br />
TH+7TA TH+7TA+1 TH+7TA+2 ....... TH+7TA+14 8.Zeile<br />
Für die POSITION auf dem LCD-Display gilt:<br />
POSITION = ZEILE * 15 + SPALTE<br />
0 - 119 0 - 7 0 - 14<br />
Bei der üblichen Einstellung TA = 15 gilt dann ADRESSE = TH + POSITION (bei TA=15)<br />
Beispiel:<br />
3 Zeile 2 Spalte -> POSITION = 31<br />
(TA = 15, TH = 1000 h) -> ADRESSE = 1000 h + 1F h = 101F h
FH-Darmstadt - 27 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
Initialisierung ( <strong>mit</strong> UP LCDINI )<br />
Vor der ersten Ausgabe eines Zeichens muß das LCD-Modul durch Aufruf von LCDINI initialisiert<br />
(eingestellt) werden.<br />
Dabei wird der gesamte LCD-RAM-Speicher gelöscht und es wird das Anzeigefenster über dem<br />
LCD-RAM durch<br />
TH = Text-Beginn im RAM zu übergeben im DPTR ( 0000 - 1FFF h)<br />
TA = Text-Spalten-Anzahl im Akku ( 01 - FF h)<br />
festgelegt.<br />
Beispiel: MOV DPTR,# 1000 h ; TH = 1000 h<br />
MOV A,# 0F h ; TA = 15<br />
LCALL 9CF0 h ; LCDINI <strong>mit</strong> Löschen<br />
Nur TH verändern ohne Löschen wird durch LCDINI <strong>mit</strong> ACC = 00<br />
und<br />
nur TA verändern ohne Löschen durch LCDINI <strong>mit</strong> DPTR = FFFF h bewirkt.<br />
( TH = FFFF h und TA = 00 sind keine sinnvollen Einstellungen)<br />
Gemeinsames Verändern von TH und TA ohne Initialisieren und Löschen durch einen einzigen Aufruf<br />
von LCDINI ist nicht möglich. Das UP LCDINI verändert keine Register.<br />
Beispiel für Weiterschalten des Anzeigefensters um eine Zeile (bei TA = 15 )<br />
MOV DPTR,# 100F h ; TH = 100F h<br />
CLR A ; TA nicht verändert und kein Löschen<br />
LCALL 9CF0 h<br />
Schreiben und Lesen des LCD-RAMs ( <strong>mit</strong> UP TXTPOS )<br />
Die Adresse (Adreßzeiger)der LCD-RAM-Speicherzelle, die angesprochen werden soll, muß dem<br />
UP TXTPOS im DPTR übergeben werden.<br />
Lesen:<br />
Durch 00 im Akku beim Aufruf wird der ASCII-Zeichencode des adressierten LCD-RAM-Bytes im<br />
Akku zurückgeliefert.<br />
Schreiben:<br />
Werte ungleich 00 im Akku werden als ASCII-Zeichencodes betrachtet und in die adressierte<br />
Speicherzelle geschrieben.<br />
Bei Codes < 20 h oder > 7F h wird ein ? (3F h) in das LCD-RAM-Byte geschrieben, denn der LCD-<br />
Controller kann ASCII-Steuerzeichen < 20 h nicht ausführen.<br />
Außerdem wurde TXTPOS auf Standard-ASCII < 80 h beschränkt.<br />
Beim Lesen / Schreiben wird der DPTR um 1 erhöht (inkrementiert) zurückgeliefert. Dann braucht<br />
z.B. bei der Ausgabe von Textfolgen nur zu Beginn die ADRESSE in den DPTR geladen werden.<br />
Außer DPTR und ACC werden durch TXTPOS keine Register verändert.<br />
Beispiel: Lesen der Display-POSITION ganz unten rechts -> 8.Zeile, 15.Spalte bei TH = 1000 h und<br />
TA = 15<br />
MOV DPTR,# 1077 h ; Adreßzeiger = TH + POSITION<br />
CLR A ; Lesen<br />
LCALL 9DA0 h ; TXTPOS<br />
MOV SBUF,A ; z.B. aus auf Bildschirm<br />
.... .......
FH-Darmstadt - 28 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
Beispiele für Anwendung der LCD-Unterprogramme:<br />
1)Es werden nach der Initialisierung des LCD-Moduls ( TH = 1000 h, TA = 000F h) auf den LCD-<br />
Positionen 0 - 119 die ASCII-Zeichen der jeweiligen Codes 1 - 120 ausgegeben.<br />
Danach wird fortwährend die an P1-P4 eingestellte LCD-RAM-Adresse gelesen und auf P5<br />
ausgegeben.<br />
LCDINI EQU 9CF0 h<br />
TXTPOS EQU 9DA0 h<br />
ORG 1000 h ;LCD Beispiel-Programm<br />
MOV P4,# 0FF h<br />
MOV P1,# 0FF h<br />
MOV DPTR,# 1000 h ;Text-Beginn im RAM TH<br />
MOV A,# 0F h ;Low-B. d. Text-Spalten-bereiches TA<br />
LCALL LCDINI ;Initialisierung des LCD-Displays für<br />
; ;Text-Modus<br />
MOV A,# 01 ;ASCII-Code 01 h ( 00 liest LCD-RAM)<br />
AUS: LCALL TXTPOS ;Zeichenausgabe ( DPTR, Akku )<br />
INC A ;ASCII-Code inkrementieren<br />
CJNE A,# 121,AUS ;auf alle LCD-Positionen ausgegeben ?<br />
ALOP: MOV DPL,P4 ;an P1-P4 eingestellte LCD-RAM-<br />
MOV DPH,P1 ;Adresse wird gelesen und an P5<br />
CLR A ;ausgegeben<br />
LCALL TXTPOS<br />
MOV P5,A<br />
SJMP ALOP<br />
END<br />
2.)Bei P3.2 = 0 Initialisierung oder Veränderung von TH (P1-P4) oder TA (P5).<br />
Bei P3.3 = 0 Ausgabe eines Zeichens auf das LCD-Display, dabei die Position an P1 und<br />
P4 (0-119) sowie den ASCII-Code des darzustellenden Zeichens an P5 einstellen.<br />
Auch Schreiben in das LCD-RAM außerhalb des Anzeige-Fensters ist natürlich möglich.<br />
ORG 0000 h ;LCD-Testprogramm<br />
MOV P1,# 0FF h<br />
MOV P4,# 0FF h<br />
MOV P5,# 0FF h<br />
SETB P3.2<br />
SETB P3.3<br />
LOP1: JNB P3.3,AUSG<br />
LOP2: JB P3.2,LOP1<br />
MOV DPL,P4 ;LCD-RAM Adresse TH<br />
MOV DPH,P1<br />
MOV A,P5 ;Spalten-Bereich TA<br />
LCALL 9CF0 h ;Aufruf LCDINI<br />
WARTE: JNB P3.2,WARTE<br />
SJMP LOP1<br />
;<br />
AUSG: MOV DPH,P1<br />
MOV DPL,P4 ;Position auf Display<br />
MOV A,P5 ;ASCII-Code<br />
LCALL 9DA0 h ;Aufruf TXTPOS<br />
WART: JNB P3.3,WART<br />
SJMP LOP1<br />
END
FH-Darmstadt - 29 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
Entwicklungshilfs<strong>mit</strong>tel für das Übungssystem <strong>MVUS</strong>535<br />
Das Erstellen und Testen von Assembler-Programmen für das <strong>80535</strong>-Mikrocontroller-Übungssystem erfolgt auf<br />
dem PC <strong>mit</strong> Hilfe der Entwicklungssoftware Editor, Assembler, Binder, Terminalemulator und<br />
Monitorprogramm für das Übungsgerät.<br />
Für die beiden letzten Programmentwicklungsschritte, die Übertragung des Maschinencodes und<br />
das Testen des Programms muß das <strong>80535</strong>-Übungssystem eingeschaltet und über die serielle Schnittstelle <strong>mit</strong><br />
dem PC verbunden sein.<br />
Arbeitsschritte am PC ( Eingabe: N )<br />
Aufruf einer Batch-Datei durch Eingabe von "N". Hierdurch wird der angeschlossene Drucker initialisiert und<br />
sodann in das Arbeitsverzeichnis C:\IAR gewechselt.<br />
1. Editor ( Eingabe: E )<br />
Zur Erstellung der Quelltextdateien wird auf dem PC ein Textverarbeitungsprogramm verwendet, welches durch<br />
Eingabe von E gestartet wird. Eine Zusammenstellung der wichtigsten Editor-kommandos ist auf der letzten<br />
Seite beigefügt. Die erstellte Textdatei <strong>mit</strong> dem mnemonischen Quellcode muß unter einem Dateinamen <strong>mit</strong> der<br />
Erweiterung ".S03" abgespeichert werden.<br />
2. Assembler ( vereinfachte Eingabe: ALL name )<br />
Das Programm A8051 übersetzt Dateien, die in mnemonischem Code geschrieben sind, in den binären<br />
Maschinencode, der jedoch noch nicht die für das <strong>80535</strong>-Zielsystem ablauffähige Form besitzt.<br />
Beim Assemblerlauf wird eine Objektdatei <strong>mit</strong> der Namenserweiterung ".R03" sowie eine Protokolldatei, die<br />
ggf. vorhandene Fehlerangaben enthält, <strong>mit</strong> der Erweiterung ".LST" erzeugt.<br />
2.1 Aufruf des Assemblers<br />
Der Assembler wird durch folgende Eingaben aufgerufen:<br />
A8051 [Quelltextdatei],[Listendatei],[Objektkodedatei],[Optionen]<br />
Quelltextdatei: Name der zu übersetzenden Textdatei ( Name.S03 )<br />
Angabe ist optional; wurde beim Aufruf kein Dateiname angegeben, hält das<br />
Programm an und erfragt die Parameter im Dialogbetrieb.<br />
Listingdatei: Name, den die vom Assembler erzeugte Protokolldatei erhalten soll ( Name.LST ).<br />
Angabe optional; fehlt der Name wird keine Protokolldatei erzeugt. Durch<br />
Assembleranweisungen in der Quelldatei kann der Inhalt des Protokolls beeinflußt<br />
werden, z. Bsp.:<br />
LSTOUT- ;verhindert, daß der Inhalt der Include-Datei (Symb.Bezeichner der zus. SFRs)<br />
$SFR80515.INC ;$...INC im Protokoll erscheint.<br />
LSTOUT+ ;hier<strong>mit</strong> wird die Protokollierung fortgesetzt.<br />
Objektcodedatei: Name für die vom Assembler erzeugte Objektdatei (Name.R03); fehlt die<br />
Angabe, erhält die Datei den Namen des Quelltextes.<br />
Optionen: Angabe ist optional; Beispiele: F: Protokoll in Spalten formatiert<br />
?: zeigt alle verfügbaren Optionen<br />
Beispiel für einen Assembleraufruf: A8051 TEST,TEST,,F<br />
Das Programm A8051 lädt die Quelltextdatei TEST.S03, erzeugt eine Objektkodedatei <strong>mit</strong> dem Namen<br />
TEST.R03 und eine in Spalten formatierte Protokolldatei namens TEST.LST.<br />
Eine Ausgabe der Quelltext- oder Protokolldatei auf den Drucker kann <strong>mit</strong>tels des Hilfsprogramms LIST<br />
erfolgen.<br />
Beispiel: LIST TEST.LST
FH-Darmstadt - 30 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
3. Binder ( Aufruf in vereinfachter Eingabe enthalten: ALL name )<br />
Der auf dem <strong>80535</strong>-Übungssystem ablauffähige Maschinenkode wird von dem Binder-Programm XLINK<br />
erzeugt und in ein gegen Übertragungsfehler gesichertes Dateiformat (Intel-Hex-Format) gebracht. Diese Datei<br />
kann sodann ins Zielsystem übertragen und gestartet werden.<br />
3.1 Aufruf des Binders<br />
Der Binder kann in zweierlei Modi, dem Kommando-Datei-Modus oder im Kommando-Zeilen-Modus gestartet<br />
werden; letzterer wird hier näher erläutert.<br />
Aufruf des Binders in der Kommando-Zeilen-Betriebsart:<br />
XLINK Objektdatei(en) [-Optionen]<br />
Objektdatei(en): Eine oder mehrere Objektcodedatei(en) (Name.R03), welche vom Assembler<br />
erzeugt wurden. Namenserweiterung ".R03" kann weggelassen werden.<br />
Optionen: Parameterliste zur Steuerung des Binderlaufs.<br />
Beispiele der hier benötigten Parameter:<br />
-c8051: Angabe des Prozessortyps; immer erforderlich<br />
-Fformat: Dateiformat, in dem der vom Binder erzeugte Maschinenkode gespeichert wird; fehlt<br />
der –F Parameter wird Code im Intel-Hex Format erzeugt<br />
-o name.: Dateiname, unter dem der erzeugte Maschinenkode gespeichert wird. "." bewirkt, daß<br />
der Name keine Erweiterung erhält; diese Datei kann <strong>mit</strong>tels Terminalemulations-<br />
programm direkt ins Übungssystem übertragen werden.<br />
Beispiel für einen Binderaufruf: XLINK TEST -c8051 -o TEST<br />
Das Programm XLINK lädt die Objektkodedatei TEST.R03, erzeugt Maschinenkode für Prozessoren aus der<br />
8051-Familie und speichert diesen im Intel-Hex-Format in einer Datei <strong>mit</strong> dem Namen TEST<br />
4. Terminalprogramm ( Eingabe: MT )<br />
Da<strong>mit</strong> das <strong>MVUS</strong> 535 und der PC <strong>mit</strong>einander Daten austauschen können, sind in beiden aufeinander<br />
abgestimmte Kommunikationsprogramme notwendig. Im Übungsgerät stellt das eingebaute Betriebssystem<br />
MONITOR 51 diese Funktion zur Verfügung (startet automatisch nach Einschalten der Stromversorgung). Im<br />
PC wird zu diesem Zweck ein Terminalemulationsprogramm durch Eingabe von "MT" gestartet. Die<br />
Benutzereingaben werden an das Übungsgerät und dessen Ausgabe auf den Bildschirm geleitet. Das Programm<br />
MT wird über folgende Funktionstasten gesteuert:<br />
F1 : Terminalemulationsprogramm beenden<br />
F2 : Übertragen von Maschinenprogrammen vom PC in den Programmspeicher des <strong>MVUS</strong> 535<br />
Nach Betätigung einer dieser Funktionstasten fordert das Terminalprogramm eine Bestätigung oder die Eingabe<br />
eines Dateinamens (ohne ".ERW").<br />
Das übertragene Programm kann sodann durch Eingabe von "G adresse" gestartet werden,<br />
z. Bsp.: g 100 (Adresse hexadezimal angeben).<br />
5. Vereinfachung des Ablaufs einer Programmentwicklung ( Eingabe: ALL name )<br />
Um den Aufruf von Assembler und Binder zu vereinfachen, ist auf dem PC eine Batch-Datei namens "ALL"<br />
vorhanden, welche durch Eingabe von "ALL Quelltextdateiname" (ohne Namensergänzung) gestartet wird.<br />
Wird ALL ohne Quelltextdateinamen gestartet, erscheint ein Hinweis auf dem Monitor, andernfalls wird der<br />
Assembler aufgerufen, der die Objektkode- (name.R03) und Protokolldatei (name.LST) erzeugt. Traten<br />
während der Assemblierung keine Fehler auf, startet das Binder-Programm und erstellt den ablauffähigen<br />
Maschinenkode im Intel-Hex-Format (name).<br />
Im Fehlerfall wird der Editor aufgerufen, welcher Quell-(name.S03) und Protokolldatei (name.LST) zur<br />
Fehlerbeseitigung öffnet.
FH-Darmstadt - 31 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
Betriebssystemkommandos des MONITOR-51<br />
Das Einfach-Betriebssystem MONITOR-51 liegt speicherresident im EPROM der <strong>80535</strong>-Rechnerplatine.<br />
Über die serielle Schnittstelle der <strong>80535</strong>-Rechnerplatine kann per Terminal (beim <strong>MVUS</strong>-<strong>80535</strong> der PC <strong>mit</strong><br />
Terminalprogramm MONTERM MT ) <strong>mit</strong> den MONITOR-51-Kommandos gearbeitet werden.<br />
Wichtigste MONITOR-51-Kommandos<br />
Parametereingabe grundsätzlich nur in hexadezimaler Form ohne spezielle Kennzeichnung als hexadezimaler<br />
Wert (z.B. H oder $ )<br />
Parameter können wahlweise durch Leerzeichen (Blank) oder Komma getrennt werden.<br />
Mit dem Kommando HELP kann eine Kurzbeschreibung aller MONITOR-Kommandos ausgegeben<br />
werden.<br />
Die Kommandos zum<br />
Anzeigen D_ : 'Display' Speicherzelle(n)<br />
Verändern E_ : 'Enter' Speicherzelle<br />
u. Beschreiben FILL_ : Speicherzelle(n) <strong>mit</strong> konstantem Wert füllen<br />
der Speicherbereiche beziehen sich (Kennbuchstaben C, D,I und X ) auf die vier möglichen Speicherbereiche:<br />
- C Programmspeicher(bereich) DC- ausgeben, EC-verändern oder FILLC- füllen<br />
DC startaddr, endaddr<br />
EC address<br />
FILLC startaddr, endaddr, wert<br />
- D ist der interne, direkt adressierbare Datenspeicher.<br />
128 Byte 'unteres' RAM und SFR im 'oberen ' Adressbereich<br />
DD startaddr, endaddr<br />
ED address<br />
FILLD startaddr, endaddr, wert<br />
- I ist der interne, indirekt adressierbare Datenspeicher<br />
128 Byte 'unteres' (00-7F h) und 128 'oberes' ( 80-FF h) RAM<br />
DI startaddr, endaddr<br />
EI address<br />
FILLI startaddr, endaddr, wert<br />
- X meint den externen Datenspeicher ( max 64kByte )<br />
DX startaddr, endaddr<br />
EX address<br />
FILLX startaddr, endaddr, wert<br />
- B umfaßt den bitadressierbaren Speicherbereich im internen 'unteren' RAM (RAM-Adressen 20-<br />
2F h) <strong>mit</strong> den Bitadressen 00 - 7F h und die bitadressierbaren SFR im 'oberen' Adreß-<br />
bereich <strong>mit</strong> den möglichen Bitadressen 80 - FF h (128 - 256)<br />
DB bit-startaddr, bit-endaddr<br />
EB bit-address<br />
FILLB bit-startaddr, bit-endaddr, bit-wert<br />
X ermöglicht das Ändern des Registerinhaltes<br />
X bringt die aktuellen Registerinhalte in folgender Form zur Anzeige :
FH-Darmstadt - 32 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
RA RB R0 R1 R2 R3 R4 R5 R6 R7 PSW DPTR SP PC<br />
xx xx xx xx xx xx xx xx xx xx ---Rn--- xxxx xx xxxx<br />
RA Akkumulator ACC<br />
RB Hilfsakkumulator B<br />
R0 - R7 Register R0 bis R7 der aktuellen Registerbank Rn<br />
PSW Prozessor-Status-Wort<br />
DPTR Datenzeiger (Datapointer ) bestehend aus DPH und DPL<br />
SP Stapelzeiger ( Stackpointer )<br />
PC Befehlszähler (Program-Counter )<br />
xx, xxxx sind die aktuellen Inhalte in Hexdarstellung<br />
Bei Monitorbefehlen, die Zelleninhalte verändern (z.B. E- und X-Befehl oder Zeilenassembler) gilt folgendes:<br />
- der angezeigte, momentane Inhalt bleibt unverändert. Es wird weiter gesprungen<br />
- das jeweilige Kommando wird beendet<br />
- wert oder befehl, die neue Eingabe ersetzt den vorhergehenden Inhalt<br />
Der Disassembler ermöglicht das Umwandeln (Rückübersetzen) vom Programmspeicherinhalt<br />
(Maschinencode) in die Assemblermnemonik, allerdings ohne Labels und Symbole.<br />
Fehlen die Adressangaben, so werden 10 Befehle ausgegeben.<br />
U startadr, endadr<br />
Der Zeilenassembler (Inline-Assembler) dient der zeilenweisen Eingabe von Befehlen. Als<br />
Sprungziele müssen die Zeilennummern (Byteadressen) angegeben werden.<br />
Alle Werte nur hexadezimal ohne h<br />
A adress<br />
Der GO-Befehl startet einen Programmlauf ab Startadresse. Fehlt die Angabe der Startadresse wird ab<br />
aktuellem Befehlszählerinhalt PC gestartet.<br />
G startadr [,breakadr]<br />
TRACE ermöglicht einen Programmlauf im Einzelschrittbetrieb. Fehlt die Angabe der Schrittanzahl<br />
wird nur 1 Befehl abgearbeitet. Angezeigt werden die Registerinhalte vor der Befehlsausführung.<br />
T [anzahl]<br />
PROCEDURE wie TRACE, aber Unterprogramme werden als ein Programmschritt abgearbeitet.<br />
P [anzahl]<br />
Mit Abbruchpunkten kann man Programmverläufe an Haltepunkten (Breakpoints) stoppen.<br />
Maximal 10 Abbruchpunkte können definiert werden und die Abbruchpunkte werden durch eine Zahl 1 - 10<br />
benannt.<br />
BS adress Abbruchpunkt festlegen<br />
BK ALL alle Abbruchpunkte löschen<br />
BK bp,... alle benannten Abbruchpunkte löschen<br />
BL alle Abbruchpunkte ausgeben<br />
BD ALL alle Abbruchpunkte sperren<br />
BD bp,.. alle benannten Abbruchpunkte sperren<br />
BE ALL alle Abbruchpunkte freigeben<br />
BE bp,.. alle benannten Abbruchpunkte freigeben
FH-Darmstadt - 33 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
Assembler<br />
Der A8051-Assembler ist ein Übersetzungsprogramm, das auf dem PC läuft (daher Cross-Assembler), und aus<br />
einem Quellprogramm (name.S03) den Maschinencode (name.R03) für den <strong>80535</strong>-Mikrocontroller erzeugt.<br />
Es werden folgende Ausgabedateien erzeugt:<br />
- name.R03 Objectprogramm (Maschinencode), nur wenn Assemblierung fehlerfrei<br />
- name.LST Assemblerlisting <strong>mit</strong> Fehlermeldungen<br />
Jede Zeile im mnemonischen Quelltext stellt eine Informationseinheit dar.<br />
Kommentar: Beginnt in beliebiger Spalte immer <strong>mit</strong> Semikolon und reicht bis zum Zeilenende. Was<br />
nach dem Semikolon steht wird vom Assembler ignoriert.<br />
Label: symbolische Adresse, endet <strong>mit</strong> Doppelpunkt (optional), max. 20 Zeichen<br />
LOOP: MOV A,70h<br />
TAB: DB 00, 01, 02, 03,...<br />
Symbol: Bezeichner, dem ein Wert zugeordnet wird, endet ohne Doppelpunkt, muß immer in erster<br />
Spalte der Zeile beginnen.<br />
BEREICH EQU 0A1h<br />
ANZAHL = 50000<br />
Befehl: ab Spalte 2 beliebig positionierbar, entweder <strong>80535</strong>-Befehl oder Assembleranweisung<br />
(Pseudobefehl, der keinen Maschinencode erzeugt)<br />
Operand: durch mindestens eine Leerstelle vom Befehl getrennt, mehrere Operanden durch Komma<br />
getrennt.<br />
DJNZ R0 , LOOP<br />
Assembleranweisungen ( Pseudobefehle, Direktiven ))<br />
erzeugen keinen Maschinencode sondern dienen zur Steuerung des Assemblers und bieten Programmierhilfen.<br />
Durch die ORG-Anweisung wird die vorgegebene Lage der folgenden Befehle oder Daten im<br />
Programmspeicher absolut festgelegt (absolute Adressierung)<br />
ORG adresse bestimmt die Anfangsadresse des folgenden Befehls bzw. Datenbereichs.<br />
Beispiel: ORG 200h<br />
MOV P1,#0FFh<br />
- -<br />
Alle folgenden Bytes werden ab Adresse 200 H fortlaufend angeordnet.<br />
END-Anweisung Jedes Assembler-Programm muß durch eine END-Anweisung (letzter Befehl)<br />
abgeschlossen werden.<br />
EQU-Anweisung weist einem Namen ( Symbol ) einen Wert zu.<br />
Beispiel: OTTO EQU 0FFh<br />
gleichbedeutend <strong>mit</strong> OTTO = 11111111b<br />
DB Define Byte erlaubt das Setzen von Bytes <strong>mit</strong> konstanten Werten, beginnend ab der Stelle des<br />
Aufrufes. Die Werte müssen jeweils im Bereich 0-255 liegen und es sind soviele<br />
zulässig, wie auf eine Zeile passen.<br />
Beispiel: TAP: DB 0FAh, 10, 00101011B, AFFE, 'B'<br />
DW Define Word, dient zum Setzen von 16-Bit-Werten.<br />
Beispiel: MAXWERT: DW 65535, 'AB', 4142h<br />
DS Define Storage, reserviert die Anzahl der angegebenen Bytes d.h. der Assembler erhöht seinen<br />
Programm-Zähler um diesen Wert.<br />
Beispiel: TAP: DS 16 ;16 Byte werden reserviert
FH-Darmstadt - 34 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
Operandentypen und Operandensyntax<br />
- Feststehende Bezeichner des Assemblers sind unverändert zu übernehmen z.B.: A, AB, C,<br />
@A+PC, @A+DPTR, DPTR usw.<br />
- Registerbezeichner R0.... R7<br />
- Registerindirektbezeichner @R0 @R1<br />
- Immediate-Daten (Konstanten im Befehl) werden durch vorangestelltes # bezeichnet.<br />
Hexadezimalen Konstanten wird ein H (h) hintenangefügt<br />
Binären " B (b) "<br />
Werte ohne hintenangefügtes H oder B sind dezimal (auch d )<br />
MOV DPTR,# 1234 H+10001110 B-123 = MOV DPTR,# 1247 h = MOV DPTR, # 4679<br />
- Spezialfunktionsregister SFR können entweder durch den fest vorgegebenen Bytebezeichner<br />
(symbolische Adresse) oder durch Angabe der Direktadresse adressiert werden ( dadr )<br />
Bytebezeichner müssen <strong>mit</strong> Großbuchstaben geschrieben werden.<br />
MOV A,IRCON = mov a,0c0h<br />
Um übersichtliche Assemblerprogramme zu erhalten, sollte man für die Adressierung der SFR nur die<br />
symbolische Bytebezeichner (und nicht die Direktadresse dadr) verwenden.<br />
- interne direkt adressierbare RAM-Byte ( 'untere' 128 RAM-Bytes ) können entweder symbolisch<br />
(Definition durch EQU) oder durch die Byteadresse adressiert werden<br />
MOV A,7FH = MOV A,127<br />
- Bit-Adresse _ Adressierung der SFR-Bit über einen der bitadressierbaren SFR-Bezeichner,<br />
gefolgt von einem Punkt und der Bitnummer<br />
MOV C,IRCON.3 = mov C,IRCON.3<br />
oder <strong>mit</strong> dem symbolischen Bit-Bezeichner (Großbuchstaben)<br />
MOV C,IEX4 = mov c,IEX4<br />
_ Adressierung der RAM-Bit innerhalb des controllerinternen RAMs sind 128 Bit aus 16 Byte<br />
(20 H bis 2F H) bitadressierbar und zwar entweder durch<br />
a) Angabe der Bitnummer mov C,115 = MOV C,73h<br />
oder<br />
b) Angabe der Bit über Byteadresse und Bitnummer MOV C,22H.5 = MOV C,21<br />
- Sprungadressen Je nach Adressierungsart werden die Sprungziele auf Erreichbarkeit geprüft<br />
. ACALL und AJMP nur Sprungziele innerhalb des gleichen 2K- Blockes<br />
. LCALL und LJMP keine Einschränkung des adressierbaren Bereiches (Sprungziele im gesamten<br />
64 KByte Programmspeicher möglich)<br />
. relative Adressierung (SJMP, JB, JNB, JC, JNC,..) möglich sind Sprungziele im Bereich -128 bis<br />
+127 Bytes bezogen auf das erste Byte des dem Sprungbefehl folgenden Befehls.<br />
. bei indirekter Adressierung (Adresse in Register), wird dem Registernamen ein @ vorangestellt.
FH-Darmstadt - 35 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
Befehlsaufbau des <strong>80535</strong><br />
Jeder Befehl besteht aus minimal 1 Byte bis maximal 3 Byte.<br />
Das 1. Byte eines Befehls enthält immer den sogn. Operationscode ( Opcode ). In dem einen Byte lassen sich<br />
insgesamt 256 Befehle (Arbeitsanweisungen) binär codieren.<br />
Da der Operationsteil durch die Assemblermnemonik gekennzeichnet wird ( MOV ..; INC ..; ADD ..) ist der<br />
binäre Opcode für die Programmierung von geringem Interesse.<br />
Befehlsaufbau <strong>80535</strong><br />
MOV A,R0 MOV A,#56 h MOV DPTR,#1000 h<br />
Assembler- XCH A,@R1 JZ LOOP LJMP 8000 h<br />
befehle CLR C INC 34 h JNB P1.0,LOOP<br />
Befehlslänge 1 Byte 2 Byte 3 Byte<br />
Befehlsaufbau Op-Code Op-Code Op-Code<br />
Datenbyte od. High-Byte von<br />
8-Bit-Adresse Adresse od. Daten<br />
8-Bit Distanz od. 8-Bit-Adresse<br />
Low-Byte von<br />
Adresse od.Daten<br />
od. 8-Bit-Distanz<br />
Der Operandenteil, bestehend aus dem zweiten und eventuell drittem Byte gibt Ziel, Quelle oder Konstante<br />
einer Operation an.<br />
In der Assembler-Mnemonik des Operandenteils wird immer zuerst das Ziel und dann die Quelle angegeben.<br />
OPCODE !! ZIEL , QUELLE<br />
Beispiel: MOV A , R7 ; Ziel ist Akku , Quelle ist R7<br />
MOVC A , @A+DPTR ; Quelle ist dieProgrammspeicherzelle, deren Adresse<br />
aus Inhalt von DPTR und Akku gebildet (addiert) wird<br />
Die Anordnung von 16-Bit Werten (Sprungziel oder Konstante) erfolgt im byte-organisierten<br />
Programmspeicher in folgender Anordnung:<br />
Low Byte ( der Adresse od. Konstanten) -> High Adresse<br />
High Byte -> Low Adresse<br />
Adresse Programmspeicherinhalt<br />
ORG 1000 h 1000 12
FH-Darmstadt - 36 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
Adressierungsarten<br />
Register-Adressierung Adresse bzw Kennung der Register ist bereits im Opcode enthalten, bezieht<br />
sich für R0 - R7 auf jeweils gewählte Registerbank 0 -3 und gibt es für Akku<br />
MOV A,R0 A (ACC), B- Hilfsregister , Carry-Bit CY und Datenpointer DPTR<br />
INC DPTR<br />
ADD A,R7<br />
Direkte Adressierung der Operand wird durch eine 8 oder 16 Bit-Adresse gekennzeichnet ( dadr ).<br />
MOV A, 00 Vom Datenspeicher sind nur die internen 'unteren' 128 Byte des RAM (00-7F h)<br />
LJMP 1000 h und die Spezial-Funktions-Register SFR direkt adressierbar.<br />
MOV PSW,7F h<br />
Indirekte Adressierung Adresse des Operanden befindet sich entweder in R0 bzw. R1 (8 Bit) oder<br />
im Datapointer DPTR (16 Bit)<br />
MOVX A,@R1 Der externe Datenspeicher kann <strong>mit</strong> R0,R1 (8-Bit-Adreßzeiger ) oder <strong>mit</strong><br />
MOVX @DPTR,A dem Datenpointer DPTR (16-Bit-Adreßzeiger für den gesamten Adreßraum )<br />
indirekt angesprochen werden.<br />
MOV @R0,SP Der interne Datenspeicher muß über R0 oder R1 (8 Bit) indirekt<br />
MOV A, @ R1 angesprochen werden<br />
Un<strong>mit</strong>telbare Adressierung ->un<strong>mit</strong>telbare Wertzuweisung bezieht sich auf konstante Daten, die<br />
MOV R7,# 23 Teil eines Befehls sind, d.h. un<strong>mit</strong>telbar auf den Opcode folgen.<br />
Indirekte, indizierte Adressierung ist eine indirekte Adressierung, bei der zum Basis-Adreßregister<br />
MOVC A,@A+DPTR (DPTR oder Programm-Counter PC) der Inhalt eines Indexregisters (nur<br />
MOVC A,@A+PC Akku ) addiert wird und das Ergebnis die gewünschte Adresse ergibt.<br />
JMP @A+DPTR<br />
Relative Adressierung Sprungbefehle <strong>mit</strong> direkter Adressierung ( LJMP 1000 h) benötigen 3 Byte,<br />
nämlich den Opcode und die 16-Bit-Adresse.<br />
Alle bedingten und ein unbedingter Sprungbefehl benötigen beim <strong>80535</strong> nur<br />
SJMP RELADR eine relative Adresse von einem Byte.<br />
JZ VORW Diese vorzeichenbehaftete 8-Bit-Dualzahl im Zweierkomplement (-128 bis<br />
DJNZ R0,ZUR +127 ) wird zum Inhalt des Programmzählers PC addiert und da<strong>mit</strong> der<br />
Sprung ausgeführt.<br />
Der Sprung-Zielbereich beträgt daher +127 bis -128 Programmspeicherbytes<br />
relativ zum Byte, das dem Sprungbefehl folgt.<br />
Die Berechnung dieser Distanz überläßt man dem Assembler, indem man die<br />
Zieladresse symbolisch als sogn. Label angibt.
FH-Darmstadt - 37 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
Registerstruktur<br />
Akkumulator - wichtigstes Arbeitsregister, ein Vielzahl von Funktionen sind nur <strong>mit</strong>/über den Akku<br />
möglich. Wenn <strong>mit</strong> A bezeichnet, dann registeradressiert, d.h. der Akku ist bereits<br />
im Befehl ( Op-Code) implizit kodiert<br />
Wenn <strong>mit</strong> ACC bezeichnet, dann als SFR direkt adressiert und erfordert im Befehl<br />
ein zusätzliches Adreßbyte (dadr ).<br />
B-Hilfsakkumulator, ein SFR-Register das für Multiplikation und Division unbedingt benötigt wird<br />
symbolische SFR absolute<br />
Adressen Adressen PSW CY AC F0 RS1 RS0 OV F1 P D0 h<br />
B F0 Das SFR PSW<br />
ACC E0<br />
PSW D0<br />
Registerbank-Auswahl<br />
RS1 RS0 Registerbank Adressen der 8 Register<br />
DPH 83 0 0 0 0 bis 7 ( 00 h – 07 h )<br />
DPL 82 0 1 1 8 bis 15 ( 08 h – 0F h)<br />
SP 81 1 0 2 16 bis 23 (10 h – 17 h )<br />
80 1 1 3 24 bis 31 (18 h – 1F h )<br />
R0 - R7 8 Arbeitsregister einer aus vier (0-3)auszuwählenden Registerbank. Die Auswahl der<br />
Registerbank erfolgt durch die Bit RS1 und RS0 im PSW.<br />
Beispiel: Registerbank 2 einstellen<br />
CLR RS0<br />
SETB RS1<br />
Da die 4 * 8 Register identisch <strong>mit</strong> dem internem RAM von 00 - 1F h sind , ist für<br />
diesen Bereich neben der Registeradressierung ( INC R4 ) auch die direkte ( INC 04 )<br />
und indirekte ( INC @R1 ) Adressierung möglich.<br />
R1 und R0 sind die 8-Bit Adreßzeiger für den internen Datenspeicher (indirekte Adressierung).<br />
DPTR Datapointer ( 16 Bit Adreßzeiger ) für indirekte Adressierung des externen Daten-<br />
speichers. Besteht aus den beiden SFR DPH (83 h) und DPL (82 h)<br />
PSW Programm-Status-Word direkt bitadressierbares SFR (D0 h), enthält:<br />
CY Carry-Bit, zeigt Über- oder Unterschreitung des 8-Bit-Zahlenbereiches bei vorzeichenloser<br />
Arithmetik an. Weitere wichtige Aufgabe bei Bitverarbeitungsbefehlen als Bit-Akkumulator<br />
AC Hilfs-Carry-Bit ( Auxilary-Carry ) Übertrag vom niederwertigen in das höherwertige<br />
Halbbyte für Dezimal-Korrektur bei BCD-Arithmetik<br />
OV Overflow-Bit, zeigt Über- oder Unterlauf bei vorzeichenbehafteter Arithmetik an.<br />
F0,F1 Benutzer Flag, für Anwender beliebig verwendbar<br />
RS1,RS0 Bestimmt die aktuelle eingestellte Registerbank ( RB 0 – 3 )<br />
P Paritätsbit Ergänzt die Anzahl der im Akku stehenden Einsen auf eine gerade Anzahl<br />
(gerade Parität) . Da das Paritätsbit durch ein hardwaremäßig fest <strong>mit</strong> dem Akku<br />
verbundenes Schaltnetz gebildet wird, kann es nur gelesen und nicht softwaremäßig<br />
verändert werden ( Kein SETB P oder CLR P möglich !! )<br />
Nach RESET ist PSW-Inhalt -> 00
FH-Darmstadt - 38 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
Stapel ( Stack oder Kellerspeicher )<br />
Der Stapel ist ein variabler Speicherbereich im internen RAM, der für die Zwischenspeicherung von<br />
Daten und Adressen nach dem LIFO-Prinzip ( Last In First Out ) <strong>mit</strong> Hilfe des Stapel-Zeigers SP<br />
verwaltet wird.<br />
Der Stapelbeginn kann durch Initialisierung des Stapelzeigers SP variabel festgelegt werden.<br />
z.B. MOV SP,# 7F h<br />
Der Stapel wächst <strong>mit</strong> jedem PUSH-Befehl um 1 Byte und <strong>mit</strong> jedem Unterprogrammaufruf oder<br />
Interrupteinsprung um 2 Byte (Rücksprungadresse) in Richtung zunehmender RAM-Adressen und<br />
verkleinert sich um die gleichen Werte bei jedem POP-Befehl bzw. RET- oder RETI-Befehl.<br />
Programm: -------<br />
PUSH PSW<br />
PUSH ACC PUSH Stapel POP<br />
-------<br />
-------<br />
POP ACC SP 0B 0B FE FE ACC<br />
POP PSW<br />
0A 11<br />
11 PSW<br />
09 xx<br />
08 yy Beginn d. Stapels<br />
nach RESET<br />
07 (SP = 07 )<br />
00<br />
Adresse<br />
internes<br />
RAM<br />
SP Stapel-Zeiger ( Stack Pointer )<br />
SFR-Register, das immer die aktuelle 8-Bit-Adresse (Top of Stack) des Stapels im internen<br />
RAM enthält. Der SP wird vor jeder Schreiboperation auf den Stapel inkrementiert und<br />
nach jeder Leseoperation dekrementiert.<br />
Nach RESET enthält SP die Adresse 07, d.h. der Stapel würde , wenn der SP nicht verändert<br />
wird, im internen RAM bei Adresse 08 beginnen.<br />
Ein PUSH-Befehl schreibt nach dem Inkrementieren des Stapelzeigers (Stackpointers) SP das<br />
direkt adressierte Byte in das interne RAM-Byte, dessen Adresse im Stapelzeiger steht (indirekte<br />
Adressierung).<br />
POP liest den Inhalt des im SP adressierten internen RAM-Bytes in das direkt adressierte Ziel und<br />
dekrementiert danach den Stapelzeiger SP.<br />
Bei der Ausführung von LCALL-Befehlen (Sprung nach Unterprogramm oder Interrupt-Service-<br />
Routine) wird die Rücksprungadresse (PC-Inhalt = Adresse des auf den LCALL-Befehl folgenden<br />
Bytes) in der Reihenfolge Low-Adressbyte PC-low, High-Adressbyte PC-high auf dem Stapel<br />
zwischengespeichert<br />
Mit dem Rücksprungbefehl (RET oder RETI) werden die beiden oberen Byte auf dem Stapel<br />
zurück in den Befehlszähler PC gebracht und da<strong>mit</strong> der Rücksprung ausgeführt.
FH-Darmstadt - 39 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
Datentransfer<br />
In der Assembler-Mnemonik steht das Ziel eines Transfers links vom Komma des Operandenteils und<br />
die Quelle rechts davon.<br />
MOV A,R6<br />
Einen Überblick über die Möglichkeiten des Datentransfers intern sowie <strong>mit</strong> den externen Daten- und<br />
Programmspeichern zeigt die folgende Tabelle:<br />
Die häufigsten Transferbefehle sind die MOVE-Befehle für Datentransfer im internen RAM und<br />
SFR-Bereich<br />
Adressierung Maschinen-<br />
Mnemonik Operation Dir Ind Reg Kon zyklen<br />
MOV A,[Quelle] A
FH-Darmstadt - 40 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
Sprungbefehle<br />
Unbedingte Sprungbefehle<br />
hängen von keiner Bedingung ab und werden immer ausgeführt. Ein unbedingter Sprung ist in der<br />
Ausführung nichts anderes als das Beschreiben des Programmzählers (Programmcounter) PC <strong>mit</strong><br />
dem neuen Wert (Adresse) des Sprungbefehls.<br />
Mnemonik Operation Operand Ausführung Byte Masch.Zykl.<br />
LJMP 16Bitadr. Sprung im gesamten 16Bitadr. 16Bitadr. überschreibt 3 2<br />
64kByte Programmsp. Befehlszähler PC<br />
SJMP rel Sprung im Bereich 8Bitadr. PC + / - rel 2 2<br />
- 128 < Byte > +127<br />
AJMP 11Bitadr. Sprung innerhalb 11Bitadr. 11 Bit überschreibt 2 2<br />
2kByte Bereiches den PC<br />
JMP @A+DPTR Sprung im gesamten - Inhalt v. ACC+DPTR 1 2<br />
64kByte Programmsp. überschreibt PC<br />
Die JMP-Befehle unterscheiden sich in der Form ihrer Zieladresse:<br />
LJMP 16badr ist drei Byte lang und beeinhaltet eine 16-Bit-Sprungadresse. Es ist so<strong>mit</strong> jedes<br />
Sprungziel im 64kByte-Adreßraum erreichbar. Die Anordung der drei Byte im<br />
Programmspeicher ist folgende:<br />
Adresse Inhalt<br />
xxx0 OPCode<br />
xxx1 High-Adreßbyte<br />
xxx2 Low -Adreßbyte<br />
AJMP 11badr ist nur zwei Byte lang, wobei die drei höchstwertigen Bit der 11-Bit-Adresse im<br />
ersten OPcode-Byte untergebracht werden.<br />
Die 11 Adreßbit werden in die niederwertigsten 11 Bit des Programzählers PC<br />
geschrieben. Da<strong>mit</strong> muß das Sprungziel im selben 2kByte-Block liegen, wie der<br />
nächste auf AJMP folgende Befehl<br />
SJMP 8badr ist 2 Byte lang, wobei das Sprungziel im 2. Byte als relative Adresse im Bereich<br />
von -128 bis +127 angegeben wird (eine Distanz, relativ zum folgenden Byte, als<br />
vorzeichenbehaftete 8-Bit-Dualzahl dargestellt )<br />
Relative Adressierung hat den Vorteil, daß der Maschinencode überall im<br />
Programmspeicher ablauffähig ist (relozierbar).<br />
JMP @A+DPTR ist ein indirekter 1-Byte-Sprungbefehl, bei dem die 16Bit-Zieladresse durch<br />
Addition des Inhaltes von Datapointer DPTR und Akku ACC gebildet wird
FH-Darmstadt - 41 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
Unterprogramm-Aufrufe<br />
CALL-Befehle sind unbedingte Sprungbefehle, bei deren Ausführung noch zusätzlich die Adresse<br />
des auf den CALL-Befehl folgenden Bytes (Rücksprungadresse) auf dem Stapel (Stack)<br />
abgespeichert wird.<br />
Dabei wird die 16-bit-Adresse in der Reihenfolge:<br />
zuerst das niederwertige PC-Byte ( PC-low )<br />
und dann das höherwertige PC-Byte ( PC-high ) auf den Stapel gebracht.<br />
Für die beiden CALL-Befehle<br />
ACALL 11badr<br />
u. LCALL 16badr<br />
gilt bezüglich der Sprungzieladresse das gleiche wie für die JMP-Befehle.<br />
Bei CALL-Befehlen ist das Sprungziel der Anfang (Adresse d. ersten Byte) eines<br />
Unterprogramms, das immer <strong>mit</strong> einem Return-Befehl RET beendet werden muß.<br />
Der RET-Befehl holt die Rücksprungadresse vom Stapel und führt den Sprung aus (lädt den PC<br />
da<strong>mit</strong>), d.h. das aufrufende Programm wird hinter dem CALL-Befehl weitergeführt.<br />
Im Unterprogramm muß darauf geachtet werden, daß der RET-Befehl auch tatsächlich die<br />
Rücksprungadresse vom Stapel holt und der sicherste Weg ist dafür zu sorgen, daß der Zustand des<br />
Stapels vor dem Return-Befehl der gleiche wie nach dem Einsprung in das Unterprogramm ist.<br />
Mnemonik Operation Operand Ausführung Byte Zyklen<br />
LCALL 16Bitadr Sprung zu UP im 16Bitadr. 16Bitadr. überschreibt 3 2<br />
64kByte Programmsp. PC, PC-alt auf Stapel<br />
ACALL 11Bitadr Sprung zu UP inner- 11Bitadr. 11Bitadr. überschreibt 2 2<br />
2 kByte Bereiches PC, PC-alt auf Stapel<br />
RET Rücksprung aus UP - Rücksprungadresse von 1 2<br />
Stapel überschreibt PC<br />
RETI Rücksprung aus Interrupt - wie RET, zusätzlich Meldung 1 2<br />
Service-Routine ISR an Interrupt-System<br />
Programm: -------<br />
-------<br />
1000 LCALL UPR PUSH Stapel POP<br />
1003 MOV ----<br />
-------<br />
SP 0B 0B 10<br />
0A 03<br />
09 xx 2. 1.<br />
UPR: PUSH PSW<br />
PUSH ACC 08 yy 10 03 PC<br />
---------<br />
---------- 07 PC-high PC-low<br />
POP ACC<br />
POP PSW internes<br />
RET RAM<br />
00<br />
Adresse<br />
Stapel nach Ausführung des LCALL-Befehls
FH-Darmstadt - 42 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
Bedingte Sprungbefehle<br />
werden nur ausgeführt, wenn die Sprungbedingung erfüllt ist. Ansonsten wird der Sprungbefehl<br />
ignoriert und das Programm <strong>mit</strong> dem folgenden Befehl fortgesetzt.<br />
Alle bedingten Sprungbefehle benutzen die relative Adressierung, d.h. das Sprungziel muß im<br />
Bereich von -128 bis +127 Bytes relativ zur Adresse des Befehls liegen, der auf den Sprungbefehl<br />
folgt.<br />
Beim DJNZ-Befehl (Dekrementiere und springe wenn ungleich 0 ) wird zuerst das Register oder<br />
die direkt adressierbare Speicherzelle um 1 erniedrigt und wenn dann der Inhalt ungleich Null ist, wird<br />
der Sprung ausgeführt.<br />
Beim CJNE-Befehl ( Vergleiche und springe wenn ungleich ) wird vom 1.Operanden (Akku,<br />
Register oder indirekte Speicherzelle) der 2.Operand testsubtrahiert ( verglichen ) und wenn die<br />
beiden Werte ungleich sind, dann wird gesprungen.<br />
Das Carry-Bit wird entsprechend dem Ergebnis der Testsubtraktion gesetzt:<br />
CY=0 wenn Ergebnis ≥ 0<br />
CY=1 wenn Ergebnis < 0<br />
und da<strong>mit</strong> kann per Programm festgestellt werden, welcher der beiden Operanden größer bzw. kleiner<br />
war.<br />
Testsubtraktion ist eine Subtraktion, bei der das Ergebnis in keinem Register erscheint, sondern nur<br />
die Flags im PSW dem Ergebnis entsprechend gesetzt werden<br />
Mnemonik Operation Operand 1 Operand2 Operand3 Byte Masch.Zykl.<br />
JZ rel Sprung,wenn ACC= 0 8Bitadr. 2 2<br />
JNZ rel Sprung,wenn ACC ≠ 0 8Bitadr. 2 2<br />
DJNZ op1,rel op1 =op1 – 1 Rr, dadr 8Bitadr 2 2<br />
Sprung, wenn op1 ≠ 0<br />
CJNE A,op2,rel Vergleiche A – op2 Akku dadr,konst 8Bitadr. 3 2<br />
Sprung,wenn A ≠ op2<br />
CJNEop1,op2,rel Vergleiche op1-op2 Rr, @Ri 8konst 8Bitadr 3 2<br />
Sprung wenn ungleich<br />
Mit DJNZ- und CJNE-Befehlen lassen sich auf einfache Weise Programmschleifen erstellen.<br />
Eine Schleife besteht aus einer Folge von Befehlen, die solange durchlaufen werden, bis diese durch<br />
das Auftreten des Abbruchkriteriums verlassen wird.<br />
Endlosschleifen ohne Abbruchkriterium können nur harwaremäßig durch Interrupt oder RESET<br />
beendet werden.<br />
Zähler sind Programmschleifen, bei deren Durchlaufen der Inhalt jedesmal inkrementiert ( +1 ) oder<br />
dekrementiert ( -1 ) wird.<br />
Möglich sind die Abfrage am Schleifenende oder zu Beginn der Schleife, um Anfangswert = Endwert<br />
richtig zu erkennen.<br />
Reine Zählschleife ( Ausführung 200 mal )<br />
MOV R5,#200 MOV R5,# 00<br />
LOOP: DJNZ R5,LOOP LOOP: INC R5<br />
CJNE R5,# 200,LOOP
FH-Darmstadt - 43 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
Logische Befehle<br />
Es stehen die vier logischen Funktionen UND, ODER, XOR und NICHT zur Verfügung, die<br />
byteweise, d.h. jeweils 8 bit parallel ausgeführt werden.<br />
Der erste Operand ist entweder der Akku A oder eine direkt adressierbare Speicherzelle und das<br />
Verknüpfungsergebnis erscheint entsprechend entweder im Akku oder in der Speicherzelle.<br />
Mnemonik Operation Operand1 Operand2 Ergebnis<br />
ANL op1,op2 UND A Rr, @Ri, dadr, konst A<br />
dadr A, konst dadr<br />
ORL op1,op2 ODER A Rr, @Ri, dadr, konst A<br />
dadr A, konst dadr<br />
XRL op1,op2 Exclusiv-ODER A Rr, @Ri, dadr, konst A<br />
XOR dadr A, konst dadr<br />
CPL A NICHT A A<br />
COMPLEMENT<br />
CLR A Löschen A A<br />
Durch das sogn. Maskieren lassen sich in einem Byte einzelne Bit gezielt verändern.<br />
Durch die <strong>mit</strong> dem 'Boolschen Prozessor' mögliche Einzelbitverarbeitung des <strong>80535</strong> ist das<br />
'Maskieren' nur dann vorteilhaft, wenn das Register oder die Speicherzelle nicht bitadressierbar sind,<br />
und der Inhalt zwecks gezielter Veränderung zuerst in ein bitadressierbares Register (z.B. Akku)<br />
gebracht werden müßte.<br />
Logische Befehle und ihre Funktion beim 'Maskieren'<br />
Befehle Funktion Wirkung des Maskenbit<br />
Bit=1 Bit=0<br />
XRL XOR invertiert erhält<br />
ANL UND erhält löscht=0<br />
ORL ODER setzt=1 erhält<br />
Beispiele: XOR UND ODER NICHT<br />
vorher 1010 1001 1010 1001 1010 1001 1010 1001<br />
Maske 1111 0000 1111 0000 1111 0000<br />
------------ ------------- ------------ -------------<br />
nachher 0101 1001 1010 0000 1111 1001 0101 0110<br />
Aufgabe: höherwertiges Akku-Halbbyte (Nibble) Null setzen, niederwertiges nicht verändern<br />
Lösung: ANL A,# 0F h<br />
Aufgabe: Das Bit PCON.2 auf 1 und das Bit PCON.5 auf 0 setzen, sowie PCON.7 invertieren,<br />
ohne die anderen Bit zu ändern. Das SFR PCON ist nicht bitadressierbar.<br />
Lösung: ORL PCON,# 04 h ; setzt PCON.2 auf 1<br />
ANL PCON,# 0DF h ; setzt PCON.5 auf 0<br />
XRL PCON,# 10000000 b ; invertiert PCON.7
FH-Darmstadt - 44 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
Schiebebefehle (Rotierbefehle)<br />
schieben bitweise den Inhalt des Akkus A um eine Stelle nach links oder rechts.<br />
Bei der Ausführung der Schiebebefehle bildet der Akkumulator <strong>mit</strong>/ohne Carrybit CY ein serielles<br />
9/ 8bit-Schieberegister.<br />
Logisches, arithmetisches und zyklisches Schieben werden in der Computertechnik unterschieden.<br />
Der <strong>80535</strong> kennt nur zyklische Schiebebefehle ohne Carry ( RL A/ RR A )<br />
und <strong>mit</strong> Carry (RLC A/ RRC A ).<br />
RL A rotiere Akku um 1 Bit nach links<br />
RLC A rotiere Akku einschließlich CY –Flag um 1 Bit nach links<br />
RR A rotiere Akku um 1 Bit nach rechts<br />
RLC A rotiere Akku einschließlich CY –Flag um 1 Bit nach rechts<br />
logisches Schieben -> in frei werdende Stelle eine 0 nachziehen, das herausfallende Bit geht ins Carry-Flag<br />
CY ACC<br />
0 CY 0<br />
vorzeichenlose Dualzahl * 2 n vorzeichenlose Dualzahl / 2 n , Rest im Carry<br />
logisch links logisch rechts<br />
arithmetisches Schieben -> die Operanden werden als vorzeichenbehaftete Dualzahlen behandelt,<br />
das Links- Schieben entspricht völlig dem logischem Links-Schieben<br />
beim arithmetischen Rechts-Schieben bleibt das höchstwertige Bit 7 MSB erhalten (Vorzeichen )<br />
CY ACC ACC CY<br />
0<br />
vorzeichenbehaftete Dualzahl * 2 n vorzeichenbehaftete Dualzahl / 2 n<br />
arithmetisch links = logisch links arithmetisch rechts<br />
zyklisches Schieben -> frei werdende Stelle wird durch herausgeschobenes Bit ersetzt. Es geht kein Bit<br />
verloren. CY ACC<br />
CY ACC<br />
RR A schiebe Akku ohne CY um 1Bit RRC schiebe Akku <strong>mit</strong>samt CY über CY im Ring<br />
RL A im Ring RLC<br />
zyklisch links / rechts<br />
Beispiele:<br />
logisch rechts für <strong>80535</strong> : CLR C ; löscht Carrybit<br />
vorz.lose Dualzahl/2 RRC A ; Divisionsrest-> CY<br />
arithmetisch rechts für <strong>80535</strong>: MOV C, ACC.7 ; Vorzeichen ->Carry<br />
vorz.behaftete Dualzahl/2 RRC A ; schiebt rechts<br />
logisch/arithmetisch links für <strong>80535</strong> : ADD A,ACC
FH-Darmstadt - 45 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
Arithmetische Befehle<br />
Die arithmetisch logische Einheit ALU kann 8 Bit lange Operanden und den alten Inhalt des Carry-Bit<br />
CY zu einem 8 oder 16 Bit langem Ergebnis verarbeiten.<br />
Die Operanden sind Inhalte von Registern oder Datenspeicherstellen. Die meisten arithmetischen<br />
Befehle benutzen den Akkumulator als ersten Operanden und als Ergebnis-Speicher.<br />
PSW-Flags<br />
Mnemonik Operation Op1 Operand2 Ergebnis CY OV AC Zyklen<br />
ADD A,op Addition ohne A dadr, Rr, @Ri ,konst A x x x 1<br />
Übertrag<br />
ADDC A,op Addition <strong>mit</strong> A dadr, Rr, @Ri ,konst A x x x 1<br />
Übertrag (CY)<br />
SUBB A,op Subtraktion <strong>mit</strong> A dadr, Rr, @Ri ,konst A x x x 1<br />
Borrow (CY)<br />
MUL AB Multiplikation A B A und B 0 x 4<br />
DIV AB Division A B A und B 0 x 4<br />
INC op Addition von 1 A, DPTR, Rr, @Ri, dadr - - - 1<br />
DEC op Subtrakt. von 1 A, Rr, @Ri, dadr - - - 1<br />
Abhängig vom Ergebnis der Operationen werden im Program-Status-Word PSW folgende Bit<br />
gesetzt:<br />
CY Carry Über/Unterlauf bei vorzeichenlosen Dualzahlen<br />
AC Hilfscarry Überlauf vom Low-Nibble -> High Nibble<br />
OV Overflow Über/Unterlauf bei vorzeichenbehafteten Dualzahlen<br />
P Parität durch ein Schaltnetz wird die Anzahl der '1' im Akku durch P auf eine gerade<br />
Anzahl ergänzt (gerade Parität)<br />
Umgekehrt können das Carry-Bit bei der Addition <strong>mit</strong> Übertrag ADDC und der Subtraktion <strong>mit</strong><br />
Borrow SUBB sowie das Hilfscarry-Bit bei der Dezimalkorrektur DA A das Ergebnis beeinflußen.<br />
Ein Subtraktionsbefehl ohne Berücksichtigung eines Übertrages (also ein SUB ) ist im<br />
Befehlssatz nicht vorgesehen. Wird diese Operation benötigt, muß vor dem Subtraktionsbefehl das<br />
Carry-Bit <strong>mit</strong> dem Befehl CLR C zurückgesetzt werden.<br />
Multiplikations- und Divisionsbefehl sind nur zur Verknüpfung vorzeichenloser 8 Bit Dualzahlen<br />
vorgesehen. Nach der Multiplikation befindet sich das niederwertige Byte LSB des Ergebnisses im<br />
Akku und das höherwertige MSB im Hilfsakku B.<br />
CY-Bit ist immer 0 und das OV-Bit zeigt <strong>mit</strong> OV = 1 an, wenn das Ergebnis größer 255 ( > 1 Byte)<br />
ist, also Akku A und Hilfsakku B umfasst.<br />
Der Divisionsbefehl DIV AB dividiert den Akkuinhalt durch den Inhalt des Hilfsakku B.<br />
Der ganzzahlige Anteil ( Integerwert ) des Ergebnisses erscheint im Akku A und der Teilerrest im<br />
Hilfsakku B.<br />
Das OV-Bit wird bei einer Division durch Null gesetzt, die Inhalte von A und B sind dann<br />
unbestimmt.<br />
Multiplikation Division<br />
B x A = B A A / B = A B<br />
MSB LSB Ergebnis Rest<br />
Ergebnis
FH-Darmstadt - 46 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
Zahlendarstellung<br />
8 Bit Mikrocomputer unterstützen vorwiegend das Rechnen in den folgenden drei einfachen Zahlensystemen.<br />
Gleitkommadarstellungen (Exponent, Mantisse) werden nicht unterstützt und erfordern entweder ein spezielles<br />
Programmpaket oder einen Arithmetik-Coprozessor.<br />
Bitmuster Hex vl.D. vb.D. BCD<br />
0000 1001 09 09 +09 09<br />
1000 0001 81 129 -127 81<br />
1111 1010 FA 250 -06 -<br />
Vorzeichenlose Dualzahl (vl.D.)<br />
Der Zahlenbereich reicht bei 8 Bit von 0 bis 255. Das werthöchste Bit ist Bestandteil der Zahl und kein<br />
Vorzeichen.<br />
Das Carry-Bit CY zeigt nach Addition oder Subtraktion an, ob der zulässige Zahlenbereich überschritten<br />
wurde. Das Carry-Bit ist der Übertrag (Borger) von Ergebnis-Bit 7.<br />
Vorzeichenbehaftete Dualzahl (vb.D.)<br />
Der Zahlenbereich reicht bei 8 Bit von -128 bis +127. Das werthöchste Bit einer Zahl gibt das Vorzeichen an.<br />
Die Zahl wird im 2er-Komplement dargestellt. Das CY-Bit ist bedeutungslos. Ein Überschreiten des<br />
Zahlenbereiches wird im OV-Bit angezeigt.<br />
Das OV-Bit wird vom Rechenwerk gesetzt, wenn in den Ergebnis-Bit 6 und 7 nur ein Übertrag (ein Borgen)<br />
stattfindet.<br />
Zweierkomplement im 8 Bit Dualsystem am Beispiel der dualen Darstellung von -5 :<br />
0000 0101 +5<br />
1111 1010 Einerkomplement<br />
+ 1<br />
= 1111 1011 -5 Zweierkomplement von +5 oder 1 0000 0000 - 0000 0101 = 1111 1011<br />
Overflow OV = 1<br />
Zahlenkreis vorzeichenloser 8-Bit-Dualzahlen und vorzeichenbehafteter 8-Bit-Dualzahlen<br />
Zahlengerade vorzeichenbehafteter Dualzahlen
FH-Darmstadt - 47 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
BCD-codierte Dezimalzahl<br />
Die vier werthöchsten und die vier niederwertigsten Bit (Nibble) bilden jeweils eine Dezimalziffer (0 bis 9 und 6<br />
Pseudotetraden) Der Zahlenbereich erstreckt sich bei 8 Bit in der gepackten Darstellung von 00 bis 99. Da die<br />
ALU dual rechnet, ist bei BCD-Zahlendarstellung eine zusätzliche, sogn. Dezimalkorrektur nötig.<br />
Beim <strong>80535</strong> wird diese Dezimalkorrektur <strong>mit</strong> dem Befehl DA A ( Decimal Adjust Accumulator )<br />
durchgeführt. Er funktioniert nur korrekt nach einer Addition (ADD..., ADDC..) und seine Ausführung erfolgt<br />
in zwei Schritten:<br />
1. Wenn das niederwertige Ergebnishalbbyte im Akku eine Pseodotetrade ist oder das Hilfscarry-<br />
Bit AC gesetzt ist, dann wird zum Akuu 06 H addiert, wobei das Carry-Bit in Abhängigkeit vom neuen<br />
Ergebnis evtl. gesetzt, aber nicht gelöscht wird.<br />
2.Wenn das höherwertige Akkuhalbbyte eine Pseudotetrade ist oder das Carry-Bit CY gesetzt ist<br />
(beides kann beim Addieren von gültigen BCD-Ziffern nicht zugleich auftreten) dann wird zum<br />
Akku 60 H addiert, wobei für das Carry-Bit das gleiche wie im ersten Schritt gilt<br />
Beispiel: 6 9 H<br />
+ 7 8 H<br />
E 1 H<br />
0 1<br />
+ 6 6 H<br />
4 7 H Ergebnis 147 > 99 -> CY = 1<br />
CY -> 1 0
FH-Darmstadt - 48 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
Einzelbit-Verarbeitung ('Boolscher Prozessor')<br />
Der Befehlssatz des <strong>80535</strong> umfaßt auch Befehle zur Bearbeitung des Inhalts von Einzelbitstellen.<br />
Dieser Teil des Befehlssatzes wird als 'Boolscher Prozessor' bezeichnet.<br />
Im internen Datenspeicher sind im unteren RAM die Byte von Adresse 20 h bis 2F h (Bitadressen<br />
00 - 7F h ) und von den SFR diejenigen <strong>mit</strong> durch 8 teilbarer Byteadresse (Bitadressen 80 - FF h )<br />
bitadressierbar.<br />
Alle Ports sind bitadressierbar und können so<strong>mit</strong> als separate Einzelpinports behandelt werden.<br />
Die Einzelbit im internen, 'unteren' RAM müssen durch die jeweilige Bitadresse badr z.B. 7F h =<br />
127 = 2F h.7 = 47.7 und in den SFR symbolisch z.B. PSW.7 = CY od. ACC.4 angegeben<br />
werden.<br />
Das Carry-Bit CY übernimmt bei Bitbefehlen die Aufgabe eines 1-Bit-Akkumulators.<br />
Ein Bittransfer ist nur über das Carry-Bit möglich.<br />
Beispiel: Portbit P1.7 nach ACC.0<br />
MOV C, P1.7<br />
MOV ACC.0, C<br />
Die logische Exklusiv-Oder-Funktion XRL C,badr für 1 Bit-Operationen ist nicht vorhanden<br />
und kann bei Bedarf durch folgende Befehlssequenz nachgebildet werden.<br />
Beispiel: EX-OR Verknüpfung der Bit ACC.0 und B.1, Ergebnis in CY<br />
ACC.0 B.1 XOR (CY) MOV C, ACC.0<br />
0 0 0 JNB B.1,WEITER<br />
0 1 1 CPL C<br />
1 0 1 WEITER: - -<br />
1 1 0<br />
Mnemonik Operation Byte Zyklen<br />
JC rel Sprung, wenn CY = 1 2 2<br />
JNC rel Sprung, wenn CY = 0 2 2<br />
JB badr,rel Sprung, wenn Inhalt von badr = 1 3 2<br />
JNB badr,rel Sprung, wenn Inhalt von badr = 0 3 2<br />
JBC badr,rel Sprung, wenn Inhalt von badr = 1 und 3 2<br />
badr = 0 setzen<br />
ANL C,badr CY = CY UND (Inhalt badr ) 2 2<br />
ANL C,/badr CY = CY UND NICHT (Inhalt badr) 2 2<br />
ORL C,badr CY = CY ODER (Inhalt badr ) 2 2<br />
ORL C,/badr CY = CY ODER NICHT (Inhalt badr) 2 2<br />
MOV C,badr CY
FH-Darmstadt - 49 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
<strong>80535</strong> - Unterbrechungssystem (Interrupt-System)<br />
Ein Interrupt ist eine Programmunterbrechung, die von 'außen', nämlich von der Peripherie-Hardware<br />
ausgelöst wird.<br />
Interrupts dienen der schnellen/un<strong>mit</strong>telbaren Reaktion des Prozessors auf Steuersignale der Peripherie, die<br />
da<strong>mit</strong> z.B. folgendes signalisiert:<br />
- Spannungsausfall, um das Retten von Registerinhalten und Daten zu ermöglichen<br />
- Betätigen des Not - Aus Schalter einer Maschine, um Vollbremsung <strong>mit</strong> anschließender<br />
Spannungsfreischaltung durchzuführen<br />
- Daten-Empfang eines Interface-Baustein für Datenübertragung, um empfangene Daten<br />
einzulesen<br />
- Beendete Umwandlung eines A/D - Wandlers, um digitalen Wert abzuholen und nächste<br />
Wandlung zu starten<br />
- Betätigung einer Tastatur oder eines Schalters<br />
Für die Erkennung von Anforderungen der Peripherie gibt es im Prinzip zwei Möglichkeiten:<br />
- Polling, das ist die zyklische Abfrage von passiven Steuereingängen oder Statusregistern der<br />
Interface-Bausteine per Programm<br />
Nachteile: langsam, Rechenzeitvergeudung für unnötige Abfragen, keine un<strong>mit</strong>telbare Reaktion<br />
- Interrupt, direkte Reaktion des Steuerwerks auf aktive Steuereingänge, wobei das laufende<br />
Programm unterbrochen und ein dem Steuereingang zugeordnetes Unterprogramm gestartet wird.<br />
Nachteil: zusätzlicher Hardwareaufwand, komplexe Prioritätenbehandlung<br />
Jedem aktive Interrupteingang ist eine Interrupt-Service- Routine ISR (Unterprogramm) zugeordnet.<br />
Wenn der Interruptanforderung stattgegeben wird, so wird das laufende Programm unterbrochen, die<br />
Rücksprungadresse auf den Stapel gebracht und zu der zugehörigen Routine gesprungen.<br />
Der RETI-Befehl in der ISR bewirkt wie bei Unterprogrammen der RET-Befehl den Rücksprung zum<br />
unterbrochenen Programm.<br />
Der <strong>80535</strong> verfügt über ein Interruptsystem, das sowohl externe Anforderungen an den Baustein-Anschlüssen<br />
als auch interne Unterbrechungsanforderungen der integrierten Peripheriefunktionen bearbeiten kann.<br />
Der <strong>80535</strong> kennt insgesamt 12 Interruptquellen und 4 Prioritätsebenen. Die 12 Interruptquellen teilen sich auf<br />
in 7 externe (External Interrupt 0 - 6, EX 0 - EX 6 ) und 5 interne (Timer 0 - 2, serielle Schnittstelle und A/D-<br />
Wandler ).
FH-Darmstadt - 50 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
Hauptaufgabe<br />
nein<br />
Haupt-<br />
programm<br />
Anfangsbedingungen<br />
einstellen<br />
Befehl i<br />
Befehl i + 1<br />
Eingabe<br />
Signal-<br />
ereignis<br />
vorhand<br />
en ?<br />
Polling und Interrupt<br />
externes Signalereignis<br />
Überwachung bei<br />
Polling<br />
ja<br />
Reaktion<br />
Vergleich der Verfahren Polling und Interrupt<br />
Polling Interrupt<br />
Interrupt-Service-Routine<br />
Reaktion bei Interrupt<br />
Return from Interrupt<br />
. große Reaktionsverzögerung . schnellstmögliche Reaktion<br />
. Rechenzeitverlust für Hauptaufgabe . kein Rechenzeitverlust<br />
. schwankender Abfrageabstand<br />
. die meisten Abfragen umsonst<br />
. keine Zusatzhardware . zusätzlicher Hardwareaufwand<br />
. einfache Realisierung . Software kann sehr komplex werden<br />
ISR<br />
Register retten<br />
Register zurück<br />
RETI
FH-Darmstadt - 51 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
Überblick über externe und interne Interrupt-Quellen des <strong>80535</strong><br />
Quelle Pin Anzeigebit Freigabebit Auslösung Vektor<br />
gelöscht durch selektiv<br />
INT0 ext. P3.2 IE0=TCON.1 EX0=IEN0.0 Zustand/ 0003 H<br />
Software neg.Flanke<br />
IT0=1 dann IT0=TCON.0<br />
Hardware =1 ->neg.Fl.<br />
INT1 ext. P3.3 IE1=TCON.3 EX1=IEN0.2 Zustand/ 0013 H<br />
Software neg.Flanke<br />
IT1=1 dann IT1=TCON.2<br />
Hardware =1 ->neg.Fl.<br />
INT2 ext. P1.4 IEX2=IRCON.1 EX2=IEN1.1 neg. oder 004B H<br />
Hardware pos.Flanke<br />
I2FR=T2CON.5<br />
=1 ->pos.Fl.<br />
INT3 ext. P1.0 IEX3=IRCON.2 EX3=IEN1.2 neg. oder 0053 H<br />
Hardware pos.Flanke<br />
I3FR=T2CON.6<br />
=1 ->pos.Fl.<br />
INT4 ext. P1.1 IEX4=IRCON.3 EX4=IEN1.3 pos. Flanke 005B H<br />
Hardware<br />
INT5 ext. P1.2 IEX5=IRCON.4 EX5=IEN1.4 pos. Flanke 0063 H<br />
Hardware<br />
INT6 ext. P1.3 IEX6=IRCON.5 EX6=IEN1.5 pos. Flanke 006B H<br />
Hardware<br />
A/D-Wandl. - IADC=IRCON.0 EADC=IEN1.0 Wandlungs- 0043 H<br />
Software ende<br />
TIMER 0 - TF0=TCON.5 ET0=IEN0.1 Timer 0 - 000B H<br />
Hardware Überlauf<br />
TIMER 1 - TF1=TCON.7 ET1=IEN0.3 Timer 1 - 001B H<br />
Hardware Überlauf<br />
TIMER 2 - TF2=IRCON.6 ET2=IEN0.5 T2-Überlauf 002B H<br />
Reload- P1.5 EXF2=IRCON.7 EXEN2=IEN1.7 neg.Flanke 002B H<br />
Trig. ext. Software<br />
serielle - RI=SCON.0 ES=IEN0.4 Ende Senden 0023 H<br />
Schnittst. TI=SCON.1 /Empfangen<br />
Software<br />
Das Löschen der Interrupt-Request-Flag (Anzeigebit) erfolgt entweder beim Sprung zur Interrupt-<br />
Routine automatisch (in Tabelle ' Hardware') oder muß per Programm in der ISR durchgeführt<br />
werden (in Tabelle 'Software')<br />
Die beiden pegeltriggerbaren externen Interrupt 0 und 1 können durch IT0=0 und IT1=0 auf Low-<br />
Zustand als Auslöser eingestellt werden.
FH-Darmstadt - 52 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
IRCON ( Interrupt-Request-Control-Register )<br />
EXF2 TF2 IEX6 IEX5 IEX4 IEX3 IEX2 IADC IRCON<br />
C7 h C6 h C5 h C4 h C3 h C2 h C1 h C0 h C0 h<br />
Symbol Position Bezeichnung Funktion / gesetzt nach gelöscht durch<br />
IADC IRCON.0 A/D-Wandler-Request-Flag nach beendeter Wandlung Software<br />
IEX2 IRCON.1 ext. Interrupt 2 Request-Flag pos./negative Flanke an P1.4 Hardware<br />
IEX3 IRCON.2 ext. Interrupt 3 Request-Flag pos./negative Flanke an P1.0 Hardware<br />
oder Compare / Capture 0<br />
IEX4 IRCON.3 ext. Interrupt 4 Request-Flag positive Flanke an P1.1 Hardware<br />
oder Compare / Capture 1<br />
IEX5 IRCON.4 ext. Interrupt 5 Request-Flag positive Flanke an P1.2 Hardware<br />
oder Compare / Capture 2<br />
IEX6 IRCON.5 ext. Interrupt 6 Request-Flag positive Flanke an P1.3 Hardware<br />
oder Compare / Capture 3<br />
TF2 IRCON.6 Timer-2-Überlauf-Flag Timer-2 Überlauf Software<br />
EXF2 IRCON.7 ext. Reload-Request-Flag negative Flanke an P1.5 / T2EX Software<br />
IEN0 ( Interrupt-Enable-Register 0 )<br />
EAL WDT ET2 ES ET1 EX1 ET0 EX0 IEN0<br />
AF h AE h AD h AC h AB h AA h A9 h A8 h A8 h<br />
Symbol Position Bezeichnung Funktion<br />
EX0 IEN0.0 externe Interrupt 0-Freigabe EX0 = 0 / 1 Int. gesperrt / freigegeben<br />
ET0 IEN0.1 Timer 0 Interrupt - Freigabe ET0 = 0 / 1 Int. gesperrt / freigegeben<br />
EX1 IEN0.2 externe Interrupt 1-Freigabe EX1 = 0 / 1 Int. gesperrt / freigegeben<br />
ET1 IEN0.3 Timer 1- Interrupt- Freigabe ET1 = 0 / 1 Int. gesperrt / freigegeben<br />
ES IEN0.4 serieller Port Interrupt-Freigabe ES = 0 / 1 Int. gesperrt / freigegeben<br />
ET2 IEN0.5 Timer-2-Interrupt- Freigabe ET2 = 0 / 1 Int. gesperrt / freigegeben<br />
WDT IEN0.6 Rücksetzflag Watchdog-Timer WDT = 1 setzt Watchdog-Timer zurück<br />
EAL IEN0.7 generelle Interrupt-Freigabe EAL=0/1 alle Interrupts gesperrt / freigegeben<br />
Beachtung: Alle flanken- und überlaufgetriggerten Interruptanforderungen bleiben im<br />
Anzeigebit gespeichert (IEXx,TFx,RI u. Ti ), auch wenn der Interrupt nicht aktiv oder<br />
freigegeben ist und werden entweder bei Interrupt-Annahme automatisch oder durch Software<br />
gelöscht
FH-Darmstadt - 53 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
IEN1 ( Interrupt-Enable-Register 1 )<br />
EXEN2 SWDT EX6 EX5 EX4 EX3 EX2 EADC IEN1<br />
BF h BE h BD h BC h BB h BA h B9 h B8 h B8 h<br />
Symbol Position Bezeichnung Funktion<br />
EADC IEN1.0 A/D-Wandler Interrupt -Freigabe EADC = 0 / 1 Int. gesperrt / freigegeben<br />
EX2 IEN1.1 externer Interrupt 2 - Freigabe EX2 = 0 / 1 Int. gesperrt / freigegeben<br />
EX3 IEN1.2 externer Interrupt 3 - Freigabe EX3 = 0 / 1 Int. gesperrt / freigegeben<br />
EX4 IEN1.3 externer Interrupt 4 - Freigabe EX4 = 0 / 1 Int. gesperrt / freigegeben<br />
EX5 IEN1.4 externer Interrupt 5 -Freigabe EX5 = 0 / 1 Int. gesperrt / freigegeben<br />
EX6 IEN1.5 externer Interrupt 6 - Freigabe EX6 = 0 / 1 Int. gesperrt / freigegeben<br />
SWDT IEN1.6 Rücksetzflag Watchdog-Timer SWDT=1 startet bzw setzt <strong>mit</strong> Bit WDT zurück<br />
EXEN2 IEN1.7 externer Reload- Interrupt-Freigabe EXEN2 = 0/1 Interrupt gesperrt / freigegeben<br />
Interruptbehandlung des <strong>80535</strong><br />
Die Interruptanforderungen werden in jedem Maschinenzyklus in Zustand 5 Phase 1 in die<br />
Interrupt-Request-Flags gespeichert (gelatcht) und im nächsten Maschinenzyklus werden<br />
alle diese Interrupt-Request-Bit abgefragt.<br />
Für die Interrupt-Anforderung <strong>mit</strong> der höchsten Priorität wird dann ein Unterprogrammsprung<br />
LCALL vektoradr. zur fest zugeordneten Einsprungsadresse ( Interrupt-Vektor ) ausgeführt<br />
sofern nicht eine der folgenden Bedingungen dies verhindert:<br />
- ein Interrupt gleicher oder höherer Priorität ist noch in Bearbeitung<br />
- der momentane Maschinenzyklus ist nicht der letzte Zyklus eines Befehls, d.h. vor der<br />
Unterbrechung wird der laufende Befehl immer zu Ende gearbeitet<br />
- der laufende Befehl ist der RETI-Befehl oder ein Zugriff auf eines der Interruptregister IEN0,<br />
IEN1, IP0 o. IP1. Dann wird vor dem LCALL-Sprung noch ein weiterer Befehl ausgeführt<br />
Das Speichern der Interruptanforderung und das Abfragen der Request-Bit erfolgt in jedem<br />
Maschinenzyklus neu und das bedeutet für das anfordernde, externe Interrupt-Signal, daß es bei<br />
den pegelgetriggerten Eingängen mindestens die Dauer des ungünstigsten Falles aufweisen muß.<br />
Flankengetriggerte Anforderungen bleiben bis zur Löschung des Interrupt-Request-Flag (durch<br />
Interrupt-Annahme oder Software) gespeichert und da<strong>mit</strong> muß, für das sichere Erkennen des<br />
Pegelwechsels zwischen den Abfragezeitpunkten der Maschinenzyklen, das Signal mindestens für die<br />
Dauer eines Maschinenzyklus anstehen.<br />
Die Interrupt-Request-Flag, die eine Interruptanforderung speichern, werden teilweise bei der<br />
Annahme des Interrupts durch die Hardware zurückgesetzt und zum Teil muß dies per Software<br />
erfolgen.<br />
Alle Interrupt-Request-Bit können auch durch Software gesetzt werden und da<strong>mit</strong> kann der<br />
zugehörige Interrupt ausgelöst werden.<br />
Ausnahmen sind nur die externen Interrupts 0 und 1 bei Pegeltriggerung, die dann durch Schreiben in<br />
die Portflags INT0 ( P3.2 ) und INT1 ( P3.3 ) ausgelöst werden müssen.
FH-Darmstadt - 54 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
Interrupt-Prioritätsstruktur<br />
Durch die Interrupt-Prioritätsstruktur muß festgelegt werden, welcher Interrupt bei gleichzeitigem<br />
Auftreten mehrerer angenommen wird und welcher eine bereits laufende Interruptbearbeitung<br />
(angenommener Interrupt) unterbrechen darf.<br />
Dazu sind je zwei Interruptquellen paarweise verbunden und können einer der vier Prioritätsebenen<br />
zugeordnet werden.<br />
Nach RESET (IP0 = IP1 = 00 ) sind alle Interruptpaare der Prioritätsebene 0 zugeordnet.<br />
Innerhalb einer Prioritätsebene gilt für den Fall des gleichzeitigen Auftretens folgendes<br />
vorgegebene, nicht veränderbare Prioritätsschema:<br />
Fest eingestellte Prioritäten der Interruptquellen einer Prioritätsebene<br />
hohe niedere Priorität<br />
Interrupt-Paare ( fest verbunden ) hohe<br />
External Interrupt 0 + A/D-Converter Interrupt IE0 + IADC<br />
Timer 0 Interrupt + External Interrupt 2 TF0 + IEX2<br />
External Interrupt 1 + External Interrupt 3 IE1 + IEX3<br />
Timer 1 Interrupt + External Interrupt 4 TF1 + IEX4<br />
Serial Port Interrupt + External Interrupt 5 RI/TI + IEX5<br />
Timer 2 Interrupt + External Interrupt 6 TF2/EXF2 + IEX6 niedere<br />
Interruptanforderungen der gleichen oder einer niedrigeren Prioritätsebene können eine<br />
laufende Interruptbearbeitung nicht unterbrechen.<br />
Nach RESET ist so<strong>mit</strong> keine ISR unterbrechbar und es gilt obiges Schema für gleichzeitige Interrupt-<br />
Anforderungen, weil sich alle Interruptquellen in der gleichen Prioritätsebene 0 befinden.<br />
Die Priorität eines Interruptpaares wird durch den Paaren zugeordnete Bit in den Interrupt-<br />
Prioritätsregistern IP0 und IP1 festgelegt.<br />
IP0 und IP1 (Interrupt-Prioritätsregister 0 und 1 )<br />
- WDTS IP0.5 IP0.4 IP0.3 IP0.2 IP0.1 IP0.0 IP0 ( A9 h )<br />
- - IP1.5 IP1.4 IP1.3 IP1.2 IP1.1 IP1.0 IP1 ( B9 h )<br />
Die Priorität eines Paares bestimmen die Inhalte der beiden korrespondierenden Bits in IP0.x und IP1.x<br />
Bits Interruptpaar<br />
IP1 IP0<br />
0 0 Prioritätsebene 0 ( niederste )<br />
0 1 Prioritätsebene 1<br />
1 0 Prioritätsebene 2<br />
1 1 Prioritätsebene 3 ( höchste )<br />
IP1.0 IP0.0 IE0 + IADC<br />
IP1.1 IP0.1 TF0 + IEX2<br />
IP1.2 IP0.2 IE1 + IEX3<br />
IP1.3 IP0.3 TF1 + IEX4<br />
IP1.4 IP0.4 RI / TI + IEX5<br />
IP1.5 IP0.5 TF2 / EXF2 + IEX6
FH-Darmstadt - 55 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
Für eine korrekte Interruptbehandlung müssen vom Anwender für jeden aktiven Interrupt folgende<br />
Funktionen realisiert werden:<br />
1. Laden eines Sprungbefehls zu der ISR in die zugehörige Interrupt-Einsprungadresse (Interrupt- Vector)<br />
Sehr kurze ISR < 8 Byte können auch direkt bei den Interrupt-Vektoren plaziert werden.<br />
2. Im Initialisierungspfad des Hauptprogramms muß<br />
- bei externen Interruptquellen das entsprechende Portbit als Eingang konfiguriert werden ( eine<br />
'1' ins Latch schreiben)<br />
- der aktive Interrupt durch Setzen des entsprechenden Enable-Bit in den Registern IEN0 oder IEN1<br />
selektiv freigegeben werden. Nach RESET sind alle Interrupts gesperrt, d.h. IEN0 und IEN1 sind gelöscht.<br />
- das auslösende Triggersignal (neg/pos Flanke, H/L-Pegel) durch das entsprechende Bit in den<br />
SFR TCON oder T2CON eingestellt werden.<br />
- den Interruptpaaren durch Setzen in den Registern IP0 und IP1 eine Priorität zugeordnet werden, wenn<br />
von der fest eingestellten abgewichen werden soll.<br />
- die generelle Freigabe aller selektierten Interrupts durch das Setzen des EAL-Bit (IEN0.7) erfolgen.<br />
3. Für jeden aktiven Interrupt muß eine spezielle Interrupt- Service -Routine ISR erstellt werden.<br />
Diese ISR muß folgenden Forderungen genügen:<br />
- alle Registerinhalte, die von der ISR verändert werden, müssen gerettet und am Unterprogrammende<br />
zurückgeschrieben werden.<br />
Für die Register der Registerbänke kann dies eventuell einfach durch Umschalten der Registerbank<br />
erfolgen, aber die SFR- Softwareregister wie z.B. ACC, PSW, usw müssen auf dem Stapel<br />
zwischengespeichert werden ( PUSH/POP-Befehle).<br />
- nicht hardwaremäßig zurückgesetzte Interrupt-Request-Flag müssen per Programm zurückgesetzt<br />
werden.<br />
- der Rücksprung aus der ISR muß <strong>mit</strong>tels RETI-Befehl erfolgen, der wie der RET-Befehl wirkt,<br />
aber noch zusätzlich dem Interrupt-System meldet, daß eine Interruptbearbeitung beendet ist<br />
Programmbeispiel für externen Interrupt 3 und TIMER-2-Interrupt<br />
ORG 53 h ;Einsprung des Externen Interrupt 3<br />
LJMP INTR3 ;Sprung zur Interrupt-Service-Routine 3<br />
; - -<br />
ORG 2B h ;Einsprung des TIMER-2-Interrupt<br />
LJMP TIM2 ;Sprung zur TIM2<br />
- -<br />
;<br />
ORG 200 h ;Startadresse des Hauptprogramms<br />
SETB P1.0 ;Eingang für INT3 konfigurieren<br />
MOV PSW,#00 ;Registerbank 0 einstellen<br />
MOV SP,#07 ;Stapel initialisieren<br />
MOV TH2,#?? ;<br />
MOV TL2,#?? ;TIMER 2 initialisieren und starten<br />
MOV T2CON,#?? ;<br />
MOV IEN0,#00 ;alle Interrupts selektiv und generell sperren<br />
MOV IEN1,#00<br />
CLR IEX3 ;Anforderungsflags vor Interrupt-Freigabe löschen<br />
CLR TF2<br />
SETB EX3 ;Freigabe des aktiven Interrupt 3<br />
SETB ET2 ;Freigabe des TIMER-2-Interrupt<br />
SETB I3FR ;Interrupt 3 <strong>mit</strong> positiver Flanke triggern<br />
MOV IP0,# 04 h ;Interr.3->höchste Priorität und TIMER-2<br />
MOV IP1,# 04 h ;auf niedrigste Priorität einstellen<br />
SETB EAL ;generelle Interruptfreigabe<br />
- -
FH-Darmstadt - 56 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
INTR3: PUSH PSW<br />
PUSH ACC ;Retten der Registerinhalte die verändert<br />
PUSH 00 ;werden auf den Stapel<br />
CLR RS0 ;Registerbank 0 einstellen<br />
CLR RS1<br />
- - ;eigentliche Interruptbehandlung<br />
MOV R0,A ;Verwendung von R0 = (00) in Registerbank 0<br />
- -<br />
POP 00<br />
POP ACC ;Rückschreiben Registerinhalte vom Stapel<br />
POP PSW ;<strong>mit</strong> Einstellen der alten Registerbank<br />
RETI ;Rücksprung zum unterbrochenen Programm<br />
TIM2: PUSH PSW<br />
PUSH ACC<br />
MOV PSW,# 18 h ;Umschalten auf Registerbank 3<br />
CLR TF2 ;Interrupt-Request-Flag von TIMER 2 löschen<br />
- - ;Registerbank 3 ist in diesem Beispiel<br />
- - ;ausschließlich für TIM2 reserviert<br />
POP ACC<br />
POP PSW ;alte Registerbank wird gleichzeitig<br />
RETI ;auch wieder eingestellt
FH-Darmstadt - 57 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
Timer<br />
Auf dem <strong>80535</strong> sind drei 16-Bit-Timerschaltungen integriert.<br />
Ein Timer ist hier im Prinzip ein zyklischer Vorwärtszähler, der sich in seinen beiden Funktionen als<br />
'interner' Zeitgeber (Uhr) und als 'externer' Ereigniszähler nur durch die Herkunft der Signale<br />
unterscheidet.<br />
Der Zeitgeber zählt die internen Maschinenzyklen <strong>mit</strong> der konstanten Zählrate von 1/12<br />
Oszillatorfrequenz, der Zähler zählt die negativen Flanken an dem zugehörigen Eingangspin.<br />
Die maximale Zählrate des Zählers beträgt 1/24 der Oszillatorfrequenz.<br />
Jeder der drei Timer 0, 1 und 2 besteht aus zwei 8-Bit-Zähl-Registern (SFR) <strong>mit</strong> den zugehörigen<br />
Eingangpins<br />
Timer Register- Eingangspin Überlauf- Gatebit<br />
High- Low-Byte Anzeigebit<br />
TIMER 0 TH0 TL0 T0 (P3.4) TF0=TCON.5 INT0 (P3.2)<br />
TIMER 1 TH1 TL1 T1 (P3.5) TF1=TCON.7 INT1 (P3.3)<br />
TIMER 2 TH2 TL2 T2 (P1.7) TF2=IRCON.6 T2 (P1.7)<br />
Überläufe der drei Timer werden in den drei Interrupt-Request-Bit TF0 (TCON.5), TF1 (TCON.7)<br />
und TF2 (IRCON.6) angezeigt und können entweder abgefragt werden (Polling) oder einen Interrupt<br />
auslösen.<br />
Durch die zyklische Arbeitsweise wird nach einem Überlauf entweder <strong>mit</strong> Zählerstand 0000<br />
weitergezählt oder im Auto-Reload-Betrieb der vorgegebene Startwert in das Zählregister geladen<br />
und darauf weitergezählt<br />
TF0 und TF1 werden beim Sprung zur ISR automatisch gelöscht, für TF2 muß dies per<br />
Programm erfolgen.<br />
Alle drei Timer sind durch Setzen (Starten) und Löschen (Stoppen) bestimmter Bit per Software<br />
steuerbar und können zusätzlich noch durch eine Gate-Funktion (Tor-Schaltung) von extern über<br />
die Gatebit an- und abgeschaltet werden.<br />
Timer Start/Stopbit Gate-<br />
Einstellung Funktion (Timer-Stop)<br />
TIMER 0 TR0=TCON.4 TMOD.3 INT0 (P3.2) = 0<br />
TIMER 1 TR1=TCON.6 TMOD.7 INT1 (P3.3) = 0<br />
TIMER 2 T2I0 (T2CON.0) T2I0 u T2I1 T2 (P1.7) = 0<br />
T2I1 (T2CON.1)<br />
TIMER 0 und TIMER 1 sind weitgehend identisch und werden durch die beiden SFR TCON (88H)<br />
und TMOD (89H) gesteuert.<br />
Die vier Betriebsarten, einstellbar in TMOD sind:<br />
- 8-Bit Timer <strong>mit</strong> 5-Bit Vorteiler<br />
- 16-Bit Timer<br />
- 8-Bit Auto-Reload-Timer, beim Überlauf wird der Inhalt von THx als Startwert nach TLx geladen .<br />
- TIMER 0 wird in zwei unabhängige 8-Bit Timer aufgeteilt.<br />
Beispiel: Durch Abfragen der Überläufe von TIMER 1 (Polling) werden jeweils 250 usec in R5<br />
heruntergezählt.<br />
MOV TH1,# 6 ; Zählregister u. Nachladeregister<br />
MOV TL1,# 6 ; setzen<br />
MOV TMOD,#20h ;Modus 8-Bit-Auto-Reload einstellen<br />
CLR TF1 ;Überlauf-Bit (Inter.-Req.) löschen<br />
SETB TR1 ;Starten TIMER1<br />
WART: JNB TF1,WART ;Abfrage Überlauf-Bit<br />
CLR TF1 ;Löschen,da kein Sprung zu einer ISR<br />
DJNZ R5,WART ;Abwärtszählung in R5
FH-Darmstadt - 58 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
Basisfunktionen der drei Timer Timer 0<br />
Timer 1<br />
Timer 2<br />
Timer 0 + 1 nur 8-Bit-Reload<br />
fOsz /12 Zeitgeber TMOD.0+1<br />
TMOD.4+5<br />
TMOD.2<br />
TMOD.6 Zählregister<br />
T2CON.0+1 Low High- Byte Überlauf-Bit<br />
TL0 TH0 TF0<br />
C / T TL1 TH1 TF1<br />
TL2 TH2 TF2<br />
Interrupt-Request-Bit<br />
Ein Aus<br />
T2CON.3+4<br />
Pin<br />
T0 ( P3.4 )<br />
T1 ( P3.5 )<br />
T2 ( P1.7 ) 16-Bit-Reload<br />
nur für Timer 2<br />
neg. Flanken Zähler CRCL CRCH<br />
TR0<br />
TR1<br />
T2CON.0+1<br />
&<br />
Gate-Bit<br />
TMOD.3<br />
TMOD.7 1<br />
T2CON.0+1<br />
≥ 1<br />
Gate-Pin INT0 ( P3.2 )<br />
INT1 ( P3.3 )<br />
T2 ( P1.7 ) nur für Zeitgeber<br />
Timer 2 im 16-Bit-Reload-Mode<br />
T2EX<br />
P1.5<br />
Input Clock<br />
Mode 1<br />
Mode 0<br />
TL2 TH2<br />
CRCL CRCH TF2<br />
EXEN2<br />
EXF2<br />
≥ 1<br />
Timer 2<br />
Interrupt<br />
Request
FH-Darmstadt - 59 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
TMOD (Timer / Counter-Mode-Control-Register ) TCON (Timer / Counter-Control-Register ) bitadressierbar<br />
Zähler / Zeitgeber 1 Zähler / Zeitgeber 0<br />
Gate C/T M1 M0 Gate C/T M1 M0 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 88h<br />
7 6 5 4 3 2 1 0 89h 8Fh 8Eh 8Dh 8Ch 8Bh 8Ah 89h 88h Bitadr<br />
Gate Umschaltung interne/externe Freigabe TF1 Timer-1-Überlauf-Bit<br />
= 0 Interne Freigabe über TR0 / TR1 wird beim Sprung zur ISR automatisch gelöscht<br />
= 1 Timer 0 freigegeben, wenn P3.2 = HIGH TR1 Timer-1-Start / Stopp<br />
Timer 1 freigegeben, wenn P3.3 = HIGH = 1 schaltet T1 ein, = 0 stoppt T1<br />
plus TR0 / TR1 = 1 TF0 Timer-0-Überlauf-Bit<br />
wird beim Sprung zur ISR automatisch gelöscht<br />
C/T = 0 Timer x ist Zeitgeber (interner Takt) TR0 Timer-0-Start / Stopp<br />
= 1 Timer x ist Zähler (externer Takt) = 1 schaltet T0 ein, = 0 stoppt T0<br />
M1 M0 Arbeitsmodi IE1 Interrupt 1 Anforderungs-Flag<br />
durch negative Flanke an P3.3 gesetzt, dann<br />
0 0 8048-Timer Low-Byte als 5-Bit Vorteiler gelöscht beim Sprung zur ISR oder durch<br />
( 13-Bit-Zähler ) Low-Pegel an P3.3 gesetzt, dann nicht gelöscht<br />
0 1 16-Bit-Zähler / Zeitgeber IT1 Interrupt 1 Flanken / Pegelauswahl<br />
1 0 8-Bit-Auto-Reload-Timer = 0 Low-Pegel an P3.3 setzt IE1<br />
Low-Byte TLx wird inkrementiert = 1 negative Flanke an P3.3 setzt IE1<br />
High-Byte THx wird beim Überlauf nach<br />
TLx kopiert IE0 Interrupt 0 Anforderungs-Flag<br />
1 1 Timer 1 stoppt wie IE1 an P3.2<br />
TL0 kann 8-Bit-Zähler oder Zeitgeber sein<br />
TH0 nur Zeitgeber IT0 Interrupt 0 Flanken / Pegelauswahl<br />
TL0 durch Timer 0-Steuerbits eingestellt = 0 Low-Pegel an P3.2 setzt IE0<br />
TH0 durch Timer 1-Steuerbits eingestellt = 1 negative Flanke an P3.2 setzt IE1<br />
T2CON ( Timer 2 Control-Register ) CCEN-Register (Compare-Capture-Enable-Register )<br />
T2PS I3FR I2FR T2R1 T2R0 T2CM T2I1 T2I0 C8h<br />
CFh CEh CDh CCh CBh CAh C9h C8h 7 6 5 4 3 2 1 0 C1h<br />
T2PS Timer 2 Zeitgeber Eingangstakt Bits Funktion<br />
= 0 dann Takt = f Osz / 12 ; = 1 dann fOsz /24 1 + 0 CRC-Register<br />
I3FR externer Interrupt 3 Flankenauslösung 0 0 Compare / Capture gesperrt<br />
= 0 / 1 negative /positive Flanke 0 1 Capture ausgelöst durch fallende / steigende<br />
I2FR externer Interrupt 2 Flankenauslösung Flanke an Pin P1.0 ( eingestellt in I3FR )<br />
= 0 / 1 negative /positive Flanke 1 0 Compare freigeben<br />
T2CM = 0 Compare-Modus 0 1 1 Capture bewirkt durch Schreiben in CRCL<br />
= 1 Compare-Modus 1<br />
3 + 2 CC1-Register<br />
T2R1 T2R0 Reload-Betriebsarten des Timer 2 0 0 Compare / Capture gesperrt<br />
0 X keine Reload-Funktion 0 1 Capture ausgelöst durch steigende Flanke<br />
1 0 Modus 0: Auto-Reload bei Überlauf an Pin P1.1<br />
1 1 Modus 1: Reload bei negativer Flanke 1 0 Compare freigeben<br />
am Pin T2EX / P1.5 1 1 Capture bewirkt durch Schreiben in CCL1<br />
T2I1 T2I0 Eingangs-Selektion für Timer 2 5 + 4 CC2-Register<br />
0 0 Timer 2 (Zähler/Zeitgeber ) stoppt 0 0 Compare / Capture gesperrt<br />
0 1 Zeitgeber ein 0 1 Capture ausgelöst durch steigende Flanke<br />
1 0 Zähler ein, Eingang an Pin T2 / P1.7 an Pin P1.2<br />
1 1 Zeitgeber ein, wenn Pin T2 / P1.7 = HIGH 1 0 Compare freigeben<br />
1 1 Capture bewirkt durch Schreiben in CCL2<br />
7 + 6 CC3-Register<br />
0 0 Compare / Capture gesperrt<br />
0 1 Capture ausgelöst durch steigende Flanke<br />
an Pin P1.3<br />
1 0 Compare freigeben<br />
1 1 Capture bewirkt durch Schreiben in CCL3
FH-Darmstadt - 60 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
TIMER 2<br />
besteht aus den Registern<br />
T2CON -> TIMER 2 Kontroll-Register 8 Bit<br />
TL2/TH2 -> low- und high-Byte des TIMER 2-Zählregisters<br />
und für die Zusatzfunktionen RELOAD, COMPARE, CAPTURE aus den vier folgenden 16-Bit<br />
Registern <strong>mit</strong> den zugeordneten Ausgängen (Compare) bzw. Eingängen (Capture) und den Interrupt-<br />
Request-Flag IEX3 bis IEX6.<br />
Register Funktionen Ein/Aus-Pin IR-Flag<br />
CRCL/CRCH Compare/Reload/Capture l/h-Byte P1.0/INT3/CC0 IEX3<br />
CCL1/CCH1 Compare/Capture low/high-Byte P1.1/INT4/CC1 IEX4<br />
CCL2/CCH2 Compare/Capture low/high-Byte P1.2/INT5/CC2 IEX5<br />
CCL3/CCH3 Compare/Capture low/high-Byte P1.3/INT6/CC3 IEX6<br />
CCEN Compare/Capture Enable Register ist das 8-Bit Steuerregister für die Compare/Capture-<br />
Funktion<br />
P1.5/T2EX ist der externe Trigger-Eingang für die Reload-Funktion.<br />
Wenn die RELOAD-Funktion beim TIMER 2 nicht benötigt wird, kann dieser Eingang als<br />
zusätzlicher externer Interrupt-Eingang verwendet werden (siehe Interrupt-Überblick).<br />
Der Zähleingang von TIMER 2 P1.7/T2 hat beim TIMER 2 noch die alternative Funktion des<br />
steuernden Gate-Eingangs, und das bedeutet, daß beim TIMER 2 die Gate-Funktion nur im<br />
Zeitgeberbetrieb verwendbar ist .<br />
Reload<br />
Im Reload-Modus (einzustellen durch T2R0 und T2R1 in T2CON) wird bei jedem TIMER 2-<br />
Überlauf oder bei jeder fallenden Flanke am Pin P1.5/T2EX der Inhalt des 16-Bit-CRC-Registers<br />
(CRCL/CRCH) in TL2 und TH2 nachgeladen.<br />
Beispiel: Mit dem TIMER2 soll alle 10 msec die P5.7-LED umgeschaltet werden. Dazu Überlaufbit<br />
TF2 abfragen (Polling), TIMER2 einstellen als Zeitgeber <strong>mit</strong> 1 MHz im 16 Bit- Auto-Reload-Betrieb.<br />
MOV CRCL,# 0F0 h ; Reload-Wert laden<br />
MOV CRCH,# 0D8 h ; 65536 - 10000 = 55536<br />
MOV TL2,# 0F0 h<br />
MOV TH2,# 0D8 h<br />
MOV T2CON,# 00010001 b ; Einstellung und Start<br />
POLL: JNB TF2, POLL ; Polling und<br />
CLR TF2<br />
CPL P 5.7 ; LED-Umschaltung<br />
SJMP POLL
FH-Darmstadt - 61 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
Compare<br />
Der 16-Bit Wert in einem der Registerpaare CRC, CC1, CC2, CC3 wird in jedem Zählzyklus <strong>mit</strong><br />
dem Inhalt des Timers 2 (TL2,TH2) verglichen und bei Gleichheit kann jede der vier Compare-<br />
Schaltungen einen Pegelwechsel am Ausgang und eine Interrupt-Anforderung (IEXx ) erzeugen.<br />
Dadurch läßt sich an den Ausgängen P1.0 -> P1.3 sehr einfach ein pulsweiten-moduliertes Signal<br />
PWM erzeugen.<br />
Compare-Modus 0 (einzustellen durch T2CM = T2CON.2 = 0) generiert bei jedem Vergleich-<br />
Ereignis einen Pegelwechsel am entsprechenden Ausgangspin von Low -> High und beim Timer2-<br />
Überlauf von High -> Low.<br />
Im Compare-Modus 1 (T2CM = T2CON.2 = 1) wird nur bei den Vergleichsereignissen und nicht<br />
bei den TIMER 2-Überläufen das Portlatch auf den Ausgang durchgeschaltet.<br />
Da<strong>mit</strong> sind Pegelwechsel am Ausgang nur durch das Beschreiben der Portlatches (SETB P1.0 od.<br />
CPL P1.3) per Software möglich. Dies kann am besten durch Verwendung -Ereignis zugeordneten<br />
(externen) Interrupt-Anforderung (IEXx) in einer ISR geschehen.<br />
In beiden Compare-Modi wird das entsprechende Interrupt-Request-Flag IEXx bei jedem<br />
Vergleichs-Ereignis gesetzt und kann zur Interrupt-Auslösung verwendet werden.<br />
Die Einstellung von Mode 0 oder 1 erfolgt durch Bit T2CM für alle vier Registerpaare einheitlich.<br />
Capture<br />
Der Fang-Vorgang der Capture-Funktion kann entweder in<br />
Mode 0 durch ein externes Eingangssignal am zugehörigen Pin (IR-Flags werden immer gesetzt)<br />
oder in<br />
Mode 1 durch einen Schreibbefehl ( MOV CCLx, beliebig ) in das Low-Byte des jeweiligen<br />
Capture-Registers (IR-Flags werden nicht gesetzt)<br />
bewirkt werden (einzustellen in CCEN ).<br />
Dadurch wird der aktuelle Timer2-Zählwert in das entsprechende Capture-Register geladen<br />
(gefangen).
FH-Darmstadt - 62 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
Write to CCL1<br />
Input Clock Timer 2<br />
TL2 TH2 TF2 Interrupt Request<br />
Mode 1<br />
Mode 0<br />
Capture<br />
CRCL CRCH<br />
P1.1 IEX4 External<br />
Interrupt 4<br />
INT4 Request<br />
CC1<br />
TIMER 2 im Capture Mode <strong>mit</strong> Register CC1<br />
Funktion des Compare-Mode 0<br />
Ausgangsschaltung im Compare-Modus 0
FH-Darmstadt - 63 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
Ausgangsschaltung im Compare-Modus 1<br />
Compare-Modus <strong>mit</strong> CRC-Register
FH-Darmstadt - 64 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
Serielle, asynchrone Datenübertragung<br />
Das Prinzip einer seriellen Datenübertragung<br />
Die serielle Übertragung <strong>mit</strong> Start- und Stopbits<br />
Asynchrone serielle Datenübertragung benötigt keine eigene Taktleitung.<br />
Nur Datenformat und Übertragungs-Geschwindigkeit (Baudrate) müssen zwischen Sender und Empfänger<br />
vereinbart sein.<br />
Die Synchronisation erfolgt durch die Datenübertragung selbst <strong>mit</strong> folgendem Ablauf:<br />
- die Übertragungsleitung liegt im Ruhezustand auf High-Pegel<br />
- der Empfänger tastet die Empfangsleitung üblicherweise <strong>mit</strong> 16-facher Übertragungsrate ab<br />
- nach Erkennen der fallenden Flanke des Startbits tastet der Empfänger die Empfangsleitung in den<br />
Bit<strong>mit</strong>ten ab (durch die bekannte Übertragungsrate möglich).<br />
- mindestens ein Stopbit schließt die Übertragung eines Zeichens ab und ermöglicht dadurch neue<br />
Synchronisation <strong>mit</strong> der negativen Flanke des nächsten Startbit<br />
Serieller Port des <strong>80535</strong><br />
Die auf dem <strong>80535</strong> integrierte serielle Schnittstelle ermöglicht Voll-Duplex-Betrieb, d.h. gleichzeitiges Senden<br />
und Empfangen.<br />
Sie kann in vier Betriebsarten ( Modus 0 bis 3 ) arbeiten, wobei Modus 1 der gebräuchlichste ist.<br />
In den Modi 2 und 3 wird für Multiprozessor-Zwecke ein 9. Datenbit übertragen, das auch zur<br />
Paritätssicherung verwendet werden kann.<br />
In Modus 0 wird über den RxD-Pin gesendet und empfangen und gleichzeitig über den TxD-Pin ein Schiebetakt<br />
ausgegeben.<br />
Modus 1 -> 10 Bit werden gesendet ( TXD - an Pin P3.1 ) oder empfangen ( RXD - an Pin P3.0 )<br />
1 Startbit - 8 Datenbit ( LSB zuerst ) - 1 Stopbit<br />
Das Datenformat in Modus 2 und 3 unterscheidet sich nur durch ein zusätzliches 9. Datenbit (programmierbar).
FH-Darmstadt - 65 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
Serial Port Control Register SCON ( 98 h )<br />
SM0 SM1 SM2 REN TB8 RB8 TI RI SCON<br />
9Fh 9Eh 9Dh 9Ch 9Bh 9Ah 99h 98h 98 h<br />
Serial Port Mode Selection ( UART = Universal Asynchrone Receiver Trans<strong>mit</strong>ter )<br />
SM0 SM1 Mode Funktion Baud-Rate<br />
0 0 0 Schiebe-Register fOsz / 12<br />
0 1 1 8-Bit UART variabel<br />
1 0 2 9-Bit UART fOsz / 64 oder fOsz / 32<br />
1 1 3 9-Bit UART variabel<br />
SM2 Funktion für Multiprozessormodi 2 und 3. In Modus 1 wird bei gesetztem SM2-Bit nur dann RI<br />
gesetzt, wenn ein gültiges Stopbit eingeht.<br />
REN Reception Enable. Mit REN = 1 ist Datenempfang möglich und <strong>mit</strong> REN = 0 ist der<br />
Datenempfang gesperrt. Muß durch Software gesetzt oder gelöscht werden.<br />
TB8 9.Sende-Datenbit in Modi 2 und 3. TB8 kann als Paritätsbit verwendet werden. Muß per<br />
Programm nach SCON geschrieben werden, z.B.<br />
MOV A,#20h ;Senden ASCII-Code 'Leerzeichen'<br />
MOV C,P ;Paritätsbit P (gerade, even ) über CY-Flag<br />
MOV TB8,C ; nach TB8 kopieren<br />
MOV SBUF,A ; Senden über serielle Schnittstelle starten :9Bit = TB8<br />
RB8 9.Empfangs-Datenbit in den Modi 2 und 3. Stopbit in Modus 1<br />
In Modus 1 steht bei SM2=0 in RB8 das empfangene Stopbit.<br />
TI Trans<strong>mit</strong> Interrupt Flag<br />
Dieses Bit zeigt an, wann der Sendevorgang beendet ist (Sendepuffer leer ). Es wird zu Beginn<br />
des gesendeten Stopbit gesetzt. Es muß immmer per Befehl zurückgesetzt (auf Null gesetzt,<br />
gelöscht) werden.<br />
RI Receive Interrupt Flag<br />
Dieses Bit zeigt an, wann der Empfangsvorgang beendet ist (Empfangspuffer voll).<br />
Es wird zu Beginn des empfangenden Stopbit gesetzt.<br />
Es muß immer per Befehl zurückgesetzt werden.<br />
Empfangs- und Senderegister des seriellen Ports sind physikalisch verschieden, jedoch als SFR-Register<br />
SBUF ( 99h ) unter derselben Adresse anzusprechen.<br />
Ein Schreibbefehl auf SBUF ( z.B. MOV SBUF, A ) lenkt die Daten in das Senderegister und startet den<br />
Sendevorgang. Ein Lesebefehl ( z.B. MOV A , SBUF ) holt den Inhalt des Empfangsregisters.<br />
Die Serielle Schnittstelle kann entweder durch Polling ( Abfrage durch Programm von RI- und TI-Bit) oder<br />
durch Interrupt betrieben werden.<br />
Dieser Interrupt wird entweder durch das RI- oder TI-Bit von SCON ausgelöst, wobei vorher die Freigabebit<br />
EAL ( IEN0.7 ) für die generelle und ES ( IEN0.4 ) für die selektive Freigabe beide auf 1 gesetzt werden<br />
müssen. Nach Interrupt-Annahme, bzw. positiver Abfrage beim Polling muß das jeweilige Anzeigebit RI oder<br />
TI per Programm gelöscht werden.
FH-Darmstadt - 66 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
Takterzeugung für die serielle Schnittstelle<br />
1. Mit Timer 1 kann für Modus 1 und 3 bei 12 MHz Taktfrequenz die Baudrate im Bereich von 122<br />
Bit/s bis 63 KBit/s eingestellt werden.<br />
Die Baudrate ergibt sich aus der Überlaufrate von Timer 1, wobei dieser dabei sowohl als<br />
Zeitgeber (interner Takt) als auch als Zähler (externer Takt) arbeiten kann.<br />
Der Timer 1- Interrupt sollte dabei gesperrt sein.<br />
Im Auto-Reload-Betrieb (Betriebsart 2) des TIMERS 1 gilt dann beispielsweise <strong>mit</strong> dem Bit<br />
SMOD ( PCON.7 ) des Registers PCON für die Baudrate:<br />
SMOD<br />
2 Taktfrequenz<br />
Baudrate = --------- x -----------------------<br />
32 12 * ( 256 - TH1 )<br />
Bevor <strong>mit</strong> der Seriellen Schnittstelle gearbeitet werden kann, muß bei dieser Takterzeugung<br />
natürlich der TIMER 1 zuerst initialisiert und gestartet werden.<br />
2. Sehr einfach lassen sich <strong>mit</strong> dem internen Baudratengenerator bei 12 MHz Taktfrequenz die Baudraten<br />
9600 und 4800 Baud erzeugen.<br />
Dazu Setzen von Bit BD = ADCON.8 im SFR-Register ADCON (D8 H) und Bit SMOD (PCON.7) im<br />
SFR-Register PCON (87 H).<br />
SMOD = 1 -> 9600 bd<br />
SMOD = 0 -> 4800 bd<br />
Zu beachten: Das Bit SMOD in PCON ist nicht bitadressierbar.<br />
Der interne Baudratengenerator wird auch auf der <strong>80535</strong>-Rechnerplatine vom Monitor verwendet und ist so<strong>mit</strong><br />
immer voreingestellt.<br />
SETB BD ;interner Baudratengenerator ein<br />
ORL PCON,# 80h ;setzt SMOD = PCON.7 auf 1<br />
MOV SCON,# 50h ;initialisiert Schnittstelle<br />
Timer 1 erzeugte gängige Baudraten<br />
Baud-Rate ( Bit/s ) fOsz ( MHz ) SMOD= Timer 1<br />
PCON.7<br />
serieller Mode 1, 3 C/T Mode Nachladewert<br />
62 500 12,0 1 0 2 FF h<br />
19 200 11,059 1 0 2 FD h<br />
9 600 11,059 0 0 2 FD h<br />
4 800 11,059 0 0 2 FA h<br />
2 400 11,059 0 0 2 F4 h<br />
1 200 11,059 0 0 2 E 8 h<br />
110 6,0 0 0 2 7 2 h<br />
110 12,0 0 0 1 FEEB h
FH-Darmstadt - 67 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
Baud-Raten Generierung der seriellen Schnittstelle<br />
Baud-Rate erzeugt von serieller Mode Formel für Baudrate<br />
Timer 1 im Modus 1 1,3 2 SMOD f Osz<br />
als 16-Bit-Zeitgeber Baudrate = ---------- x ------------------------------------<br />
Software-Reload 32 12 ( 65536 – ( TH1,TL1 ) )<br />
Timer 1 im Modus 2 1,3 2 SMOD f Osz<br />
8-Bit-Zeitgeber Baudrate = ---------- x ------------------------------------<br />
8-Bit-Auto-Reload 32 12 ( 256 – ( TH1 ) )<br />
Oszillator 2 2 SMOD f Osz<br />
Baudrate = ---------- x ---------<br />
32 2<br />
Baud-Raten-Generator 1,3 2 SMOD f Osz<br />
SETB BD Baudrate = ---------- x ---------<br />
SMOD = 1 -> 9600 Bd 32 1250<br />
SMOD = 0 -> 4800 Bd<br />
Serielle Schnittstelle V24<br />
Die serielle Schnittstelle von der Rechnerplatine zum Terminal (PC ) entspricht RS 232, arbeitet voll duplex <strong>mit</strong><br />
den drei Leitungen TxD (PIN 2), RxD (Pin 3) und Masse (Pin 5) die auf die DB 9 Buchse an der Frontseite<br />
geführt sind und verwendet das XON/XOFF-Protokoll.<br />
Das Übertragungsformat ist in der Standardversion festgelegt auf 9600 Baud, 1 Startbit, 8 Datenbit, kein<br />
Paritätsbit und ein Stopbit.<br />
Die TTL-Pegel der seriellen Schnittstelle des <strong>80535</strong> werden durch den Pegelwandlerbaustein MAX 232 auf die<br />
RS 232 - Pegel umgesetzt.<br />
Für eine funktionierende Kommunikation <strong>mit</strong> dem PC-Terminal wird auf der Rechnerplatine nur der interne<br />
Baudratengenerator für die Takterzeugung verwendet, denn die erzeugbare TIMER 1 Baudrate weicht bei<br />
einer Oszillator-Frequenz von 12 MHz zu sehr von den 9600 Baud für die Kommunikation <strong>mit</strong> dem Terminal ab<br />
und außerdem würde der Timer 1 nicht anderweitig benutzbar sein.<br />
------ 9 RING<br />
+12V 1 DCD<br />
0 ------ 4 DTR<br />
6 DSR<br />
+3V 8 CTS<br />
------ 7 RTS<br />
- 3V RxD 2 2 RxD<br />
TxD 3 3 TxD<br />
1 GND 5 5 GND<br />
-12V<br />
Leitungspegel der V.24-Schnittstelle MC 535 PC
FH-Darmstadt - 68 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
Serielle, asynchrone Kommunikation über die RS232C/V.24-Schnittstelle<br />
Jeder Rechner verfügt über eine oder mehrere RS232C- bzw V.24-Schnittstellen, über die Daten asynchron<br />
seriell übertragen werden ( d.h. die einzelnen Datenbit werden nacheinander für die Bitzeit auf die Leitung<br />
gelegt, wobei die Synchronisation der beiden Partner durch Start- und Stoppbits erfolgt ).<br />
Die beiden Standards RS232C und V24 unterscheiden sich praktisch nur durch die Leitungsbezeichnungen und<br />
sind für den bidirektionalen Datenverkehr zwischen einer Datenendeinrichtung DTE ( Data Terminal<br />
Equipment ) und einem Modem DCE ( Data Communication Equipment ) konzipiert und genormt.<br />
Der Standard definiert 25 Signale, wovon aber nur die folgenden in der Praxis genutzt werden:<br />
Die wichtigsten RS232C-Signale einer DTE ( Endgerät z.B. Rechner PC )<br />
DTE<br />
25 polig 9 polig Signalbezeichnung<br />
Pin-Nr. Pin-Nr.<br />
2 3 TxD � Trans<strong>mit</strong> Data Sendedaten<br />
3 2 RxD � Receive Data Empfangsdaten<br />
7 5 GND - Ground Signalmasse<br />
4 7 RTS � Request To Send Sendeteil einschalten<br />
5 8 CTS � Clear To Send Sendebereitschaft<br />
6 6 DSR � Data Set Ready Betriebsbereitschaft<br />
20 4 DTR � Data Terminal Ready Endgerät betriebsbereit<br />
8 1 DCD � Data Carrier Detect Empfangssignalpegel<br />
Die Signal-Paare RTS / CTS und DSR / DTR sind Hardware -"Handshake"-Leitungen (Anforderung /<br />
Bestätigung ) über die der Datenfluß gesteuert oder die Betriebsbereitschaft gegenseitig <strong>mit</strong>geteilt werden kann.<br />
Für Rechner-Rechner-Verbindungen ( heute allgemein DTE-DTE-Verbindungen ) benötigt man sogn.<br />
Nullmodemkabel, bei denen die gekreuzten Adern typisch sind.<br />
Beim sogn. universellen Null-Modem-Kabel sind alle Signal und Steuerleitungen gekreuzt durchverbunden,<br />
wohingegen beim einfachsten 3-Draht-Nullmodemkabel nur die drei Signalleitungen TxD,RxD und GND<br />
gekreuzt durchverbunden und die Steuerleitungen im Stecker so gebrückt sind, daß die von der Gegenseite<br />
erwarteten Steuersignale durch die eigenen "vorgetäuscht" werden.<br />
Da hierbei keine Leitungen für einen Hardware-Handshake zur Datenflußkontrolle vorhanden sind, benutzt man<br />
einen Software-Handshake <strong>mit</strong> den beiden ASCII-Steuerzeichen<br />
- ASCII #19 : XOFF<br />
- ASCII #17 : XON<br />
Kann der Empfänger die eintreffenden Daten nicht mehr schnell genug verarbeiten, sendet er XOFF. Der Sender<br />
"hört" während der Sendung seine RxD-Leitung ab. Empfängt er das Zeichen "XOFF", stoppt er seine Sendung<br />
solange, bis der Empfänger <strong>mit</strong> "XON" signalisiert, daß er zur weiteren Datenaufnahme bereit ist.<br />
DTE DTE DTE DTE<br />
TxD TxD TxD TxD<br />
RxD RxD RxD RxD<br />
GND GND GND GND<br />
RTS RTS RTS RTS<br />
CTS CTS CTS CTS<br />
DSR DSR DSR DSR<br />
DTR DTR DTR DTR<br />
DCD DCD DCD DCD<br />
3-Draht Nullmodemverbindung Universelle Nullmodemverbindung
FH-Darmstadt - 69 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
Die RS232C/V.24 – Schnittstelle arbeitet bipolar <strong>mit</strong> +12V/-12V-Spannungspegeln ( Low/High-Logikpegel )<br />
und die maximale Leitungslänge von Verbindungskabeln ist auf 15 m begrenzt.<br />
Die DTE hat Stifte und ein Nullmodemkabel hat so<strong>mit</strong> an beiden Enden Buchsen.<br />
Terminalemulation und Kommunikationsprogramme.<br />
Unter Terminalemulation versteht man die Reduktion eine Arbeitsplatzrechners PC durch ein Programm auf die<br />
Funktionalität eines "dummen Terminals" um z.B. über die serielle Schnittstelle <strong>mit</strong> einer zentralen Rechen -<br />
anlage zu kommunizieren. Der PC kann so<strong>mit</strong> einerseits lokal unter einem Betriebssystem arbeiten , andererseits<br />
durch ein Terminalprogramm direkt <strong>mit</strong> dem Host kommunizieren.<br />
Werden durch die Software auf dem PC die speziellen Eigenarten eines bestimmten Terminals nachgebildet, so<br />
spricht man von einer Terminalemulation (Verbreitet VT100 Emulation des DEC VT100 oder die 3270-<br />
Emulation des IBM 3270-Terminals.)<br />
Bei der Terminalemulation wird bei jedem Tastendruck das entsprechende ASCII-Zeichen über die TxD-<br />
Leitung der RS232-Schnittstelle gesendet und über RxD empfangene Zeichen werden am Bildschirm dargestellt.<br />
Alternativ können auch Daten von der Festplatte / Diskette gesendet und empfangen werden.
FH-Darmstadt - 70 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
Analog-Digital-Wandler<br />
Der auf dem <strong>80535</strong> integrierte A/D-Wandler (sukzessive Aproximation <strong>mit</strong> kapazitivem Netzwerk) hat folgende<br />
Eigenschaften:<br />
- 8 Bit Auflösung<br />
- 8 gemultiplexte Eingänge<br />
- Sample & Hold - Schaltung, Sample-Zeit 5 us bei 12 MHz<br />
- Wandlungszeit 15 us einschließlich Samplezeit (13 us CMOS-Version)<br />
- Interrupt-Anforderung nach beendeter Wandlung<br />
- 2 programmierbare interne Referenzspannungen<br />
Für den Anwender sind die drei folgenden SFR zugänglich:<br />
- ADDAT (D9H) hält das 8-Bit Ergebnis einer Wandlung, bis es nach<br />
der nächsten abgeschlossene Wandlung (frühestens nach 15 Maschinenzyklen) überschrieben wird.<br />
Ist eine Wandlung abgeschlossen, so wird der Wert nach ADDAT geschrieben, das Busy-Flag BSY<br />
(ADCON.4) gelöscht und das Interrupt-Request-Bit IADC (IRCON.0) gesetzt.<br />
Aufbau des internen A/D-Wandlers<br />
- ADCON (D8H) das Steuer-Register ermöglicht die Auswahl<br />
- von einem der 8 Eingang-Analog-Kanäle (MX0, MX1, MX2),<br />
- der einmaligen oder fortlaufenden Wandlung (ADM)<br />
und es wird angezeigt, ob eine Wandlung gerade läuft (BSY)<br />
- DAPR (DAH) Durch Beschreiben von DAPR ( MOV DAPR,#00 ) wird <strong>mit</strong> dem nächsten<br />
Maschinenzyklus immer eine neue Wandlung gestartet.<br />
Eine evtl. laufende Wandlung wird abgebrochen.<br />
Mit dem High-Nibble von DAPR wird die interne Referenzspannung IVAREF und <strong>mit</strong> dem<br />
Low-Nibble IVAGND eingestellt.<br />
Hierbei sind der Bezug die externen Referenzspannungen VAREF = 5 V und VAGND = 0 V,<br />
wobei VAREF-VAGND in 16 Stufen (4 Bit) unterteilt wird.<br />
Die Differenz IVAREF - IVAGND darf 1 V nicht unterschreiten.<br />
Der Wandlungsbereich, der durch die beiden internen Referenzspannungen IVAREF (obere<br />
Grenze) und IVAGND bestimmt wird, ist in 256 Stufen (8 Bit) unterteilt.<br />
Durch einen zweiten Wandlungsschritt <strong>mit</strong> eingeschränktem Bereich der internen<br />
Referenzspannungen um den ersten Meßwert, läßt sich die Auflösung (z.B. 19.6 mV bei 0 - 5V)<br />
erhöhen.
FH-Darmstadt - 71 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
ADCON ( Analog- / Digital-Wandler-Control-Register )<br />
BD CLK - BSY ADM MX2 MX1 MX0 ADCON<br />
DFH DEH DDH DCH DBH DAH D9H D8H D8H<br />
MX2 MX1 MX0 Auswahl des Analogeinganges Pin-Signal<br />
0 0 0 Analogeingang 0 AN0<br />
0 0 1 Analogeingang 1 AN1<br />
0 1 0 Analogeingang 2 AN2<br />
0 1 1 Analogeingang 3 AN3<br />
1 0 0 Analogeingang 4 AN4<br />
1 0 1 Analogeingang 5 AN5<br />
1 1 0 Analogeingang 6 AN6<br />
1 1 1 Analogeingang 7 AN7<br />
ADM A/D-Modus: 0 = stoppt nach Wandlung<br />
1 = fortlaufende Wandlung<br />
BSY 'Busy ' 0 = es läuft keine Wandlung<br />
1 = Wandlung läuft<br />
CLK Systemtakt-Ausgang: 0 = keine Taktausgabe<br />
1 = Takt wird an CLKOUT / P1.6 ausgegeben<br />
BD Baudrate:<br />
BD = 0 : Baudratengenerator ist gesperrt<br />
BD = 1 : Die Baudrate im Modus 1 und 3 der seriellen Schnittstelle<br />
wird vom internen Baudratengenerator erzeugt.<br />
(4800 / 9600 Bd bei 12 MHz und SMOD = 0 / 1 )<br />
Die internen programmierbaren Referenzspannungen<br />
Stufe DAPR 0 – 3 IVAREF (V) IVAGND (V)<br />
DAPR 4 – 7 DAPR 4 – 7 DAPR 0 – 3<br />
0 0000 5,0 0,0<br />
1 0001 -- 0,31<br />
2 0010 -- 0,62<br />
3 0011 -- 0,94<br />
4 0100 1,25 1,25<br />
5 0101 1,56 1,56<br />
6 0110 1,87 1,87<br />
7 0111 2,19 2,19<br />
8 1000 2,5 2,5<br />
9 1001 2,81 2,81<br />
10 1010 3,12 3,12<br />
11 1011 3,44 3,44<br />
12 1100 3,75 3,75<br />
13 1101 4,06 --<br />
14 1110 4,37 -- nicht zulässig,<br />
15 1111 4,69 -- da IVAREF – IVAGND < 1 Volt<br />
AN0 (P6.0) AN1 (P6.1) ANx (P6.x) Referenzspannungen<br />
VAREF = 5V<br />
4,375 V<br />
7,35mv/Bit 3,125 V<br />
2,5 V 2,5V IVAREF<br />
9,8mV/Bit<br />
4,9mV/Bit<br />
1,25 V IVAGND<br />
VAGND = 0V 0,625 V
FH-Darmstadt - 72 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
Special Function Registers SFR<br />
Symbol Name Adresse<br />
* P0 Port 0 80H<br />
SP Stack Pointer 81H<br />
DPL Data Pointer, Low Byte 82H<br />
DPH Data Pointer, High Byte 83H<br />
PCON Power Control Register 87H<br />
* TCON Timer Control Register 88H<br />
TMOD Timer Mode Register 89H<br />
TL0 Timer 0, Low Byte 8AH<br />
TL1 Timer 1, Low Byte 8BH<br />
TH0 Timer 0, High Byte 8CH<br />
TH1 Timer 1, High Byte 8DH<br />
* P1 Port 1 90H<br />
* SCON Serial Port Control Register 98H<br />
SBUF Serial Port Buffer Register 99H<br />
*P2 Port 2 0A0H<br />
* IEN0 Interrupt Enable Register 0 0A8H<br />
IP0 Interrupt Priority Register 0 0A9H<br />
* P3 Port 3 0B0H<br />
* IEN 1 Interrupt Enable Register 1 0B8H<br />
IP1 Interrupt Priority Register 1 0B9H<br />
* IRCON Interrupt Request Control Register 0C0H<br />
CCEN Compare/Capture Enable Register 0C1H<br />
CCL1 Compare/Capture Register 1, Low Byte 0C2H<br />
CCH1 Compare/Capture Register 1, High Byte 0C3H<br />
CCL2 Compare/Capture Register 2, Low Byte 0C4H<br />
CCH2 Compare/Capture Register 2, High Byte 0C5H<br />
CCL3 Compare/Capture Register 3, Low Byte 0C6H<br />
CCH3 Compare/Capture Register 3, High Byte 0C7H<br />
*T2CON Timer 2 Control Register 0C8H<br />
CRCL Compare / Reload / Capture Register, Low Byte 0CAH<br />
CRCH Compare / Reload / Capture Register, High Byte 0CBH<br />
TL2 Timer 2, Low Byte 0CCH<br />
TH2 Timer 2, High Byte 0CDH<br />
* PSW Program Status Word Register 0D0H<br />
*ADCON A/D Converter Control Register 0D8H<br />
ADDAT A/D Converter Data Register 0D9H<br />
DAPR D/A Converter Program Register 0DAH<br />
* ACC Accumulator 0E0H<br />
* P4 Port 4 0E8H<br />
* B B Register 0F0H<br />
*P5 Port5 0F8H<br />
Die <strong>mit</strong> einem Stern ( * ) gekennzeichneten SFRs sind zusätzlich noch Bit-adressierbar
FH-Darmstadt - 73 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
Special Function Register Bit-Addressable Locations badr<br />
Byte- Bit - Adressen badr Symbolische<br />
Adresse dadr Direkt-Adresse dadr<br />
F8H FFH FEH FDH FCH FBP FAH F9H F8H P5<br />
F0H F7H F6H F5H F4H F3H F2H F1H F0H B<br />
E8H EFH EEH EDH ECH EBH EAH E9H E8H P4<br />
E0H E7H E6H E5H E4H E3H E2H E1H E0H ACC<br />
BD CLK — BSY ADM MX2 MX1 MX0<br />
D8H DFH DEH DDH DCH DBH DAH D9H D8H ADCON<br />
CY AC F0 RS1 RS0 OV F1 P<br />
D0H D7H D6H D5H D4H D3H D2H D1H D0H PSW<br />
T2PS I3FR I2FR T2R1 T2R0 T2CM T2I1 T2I0<br />
C8H CFH CEH CDH CCH CBH CAH C9H C8H T2CON<br />
EXF2 TF2 IEX6 IEX5 IEX4 IEX3 IEX2 IADC<br />
C0H C7H C6H C5H C4H C3H C2H C1H C0H IRCON<br />
EXEN2 SWDT EX6 EX5 EX4 EX3 EX2 EADC<br />
B8H BFH BEH BDH BCH BBH BAH B9H B8H IEN1<br />
B0H B7H B6H B5H B4H B3H B2H B1H BOH P3<br />
EAL WDT ET2 ES ET1 EX1 ET0 EX0<br />
A8H AFH AEH ADH ACH ABH AAH A9H A8H IEN0<br />
A0H A7H A6H A5H A4H A3H A2H A1H A0H P2<br />
SM0 SM1 SM2 REN TB8 RB8 TI RI<br />
98H 9FH 9EH 9DH 9CH 9BH 9AH 99H 98H SCON<br />
90H 97H 96H 95H 94H 93H 92H 91H 90H P1<br />
TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0<br />
88H 8FH 8EH 8DH 8CH 8BH 8AH 89H 88H TCON<br />
80H 87H 86H 85H 84H 83H 82H 81H 80H P0
FH-Darmstadt - 74 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
Standard-ASCII ( 7 Bit ) verwendet nur 128 der 256 möglichen Byte-Werte. ( ISO-7-Bit-Code, CITT-Nr.5,<br />
DIN-Vorschrift 66003 u. a. ). Davon sind die ersten 32 ASCII-Zeichen Steuerzeichen und dienen der<br />
Kommunikationskontrolle und der Drucker-Steuerung ( z.B. CR und LF ).<br />
Die restlichen 128 Code-Kombinationen bilden den erweiterten ASCII-Zeichensatz ( kein Standard ) und<br />
werden von Herstellern und Computergeräten ( Bildschirm, Drucker ) für Sonder- und Grafikzeichen<br />
unterschiedlich genutzt ( auch nationale Zeichensätze ).<br />
Beim IBM-PC sind auch die ersten 32 Zeichen des ASCII-Codes ( Sonderzeichen ) für Drucker und Bild-<br />
schirmausgabe unterschiedlich belegt.<br />
ACK Positive Rückmeldung (Acknowledge),<br />
BEL Klingel (Bell),<br />
BS Rückwärtsschritt (Backspace),<br />
CAN Ungültig (Cancel),<br />
CR Wagenrücklauf (Carriage Return),<br />
DC Gerätesteuerzeichen (Device Control Characters),<br />
DEL Löschen (Delete),<br />
DLE Datenübertragungsumschaltung (Data Link Escape),<br />
EM Ende der Aufzeichnung (End of Medium),<br />
ENQ Stationsaufforderung (Enquiry),<br />
EOT Ende der Ubertragung (End of Transmission),<br />
ESC Code-Umschaltung (Escape),<br />
ETB Ende des Datenübertragungsblocks (End of Transmission Block),<br />
ETX Ende des Textes (End of Text),<br />
FF Formularvorschub (Form Feed),<br />
FS Hauptgruppen-Trennzeichen (File Separator),<br />
GS Gruppen-Trennzeichen (Group Separator),<br />
HAT Horizontal-Tabulator (Horizontal Tabulation),<br />
LF Zeilenvorschub (Line Feed),<br />
NAK Negative Rückmeldung (Negative Acknowledge),<br />
NUL Füllzeichen (Null),<br />
RS Untergruppen-Trennzeichen (Record Separator),<br />
SI Rückschaltung (Shift-in),<br />
SO Dauerumschaltung (Shift-out),<br />
SOH Anfang des Kopfes (Start of Reading),<br />
SP Zwischenraum (Space),<br />
STX Anfang des Textes (Start of Text),<br />
SUB Substitutionszeichen (Substitute Character),<br />
SYN Synchronisierung (Synchronous Idle),<br />
US Teilgruppen-Trennzeichen (Unit Separator),<br />
VT Vertikal-Tabulator (Vertical Tabulation).<br />
HEX 0 1 2 3 4 5 6 7 höherwertiges<br />
Halbbyte<br />
HEX BIN 0000 0001 0010 0011 0100 0101 0110 0111<br />
0 0000 NUL DLE SP 0 @ P ` p<br />
1 0001 SOH DC1 ! 1 A Q a q<br />
2 0010 STX DC2 " 2 B R b r<br />
3 0011 ETX DC3 # 3 C S c s<br />
4 0100 EOT DC4 $ 4 D T d t<br />
5 0101 ENQ NAK % 5 E U e u<br />
6 0110 ACK SYN & 6 F V f v<br />
7 0111 BEL ETB ' 7 G W g w<br />
8 1000 BS CAN ( 8 H X h x<br />
9 1001 HT EM ) 9 I Y i y<br />
A 1010 LF SUB * : J Z j z<br />
B 1011 VT ESC + ; K [ k {<br />
C 1100 FF FS , < L \ 1 |<br />
D 1101 CR GS - = M ] m }<br />
E 1110 SO RS . > N ^ n ~<br />
F 1111 SI US / ? O _ o DEL<br />
niederwertiges ASCII-Code, 7-Bit-Code nach DIN 66003<br />
Halbbyte (Beispiel: 6 => 0011 01102 = 3616 )
FH-Darmstadt - 75 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
Dezimal- Hex- ASCII- Bedeutung<br />
Wert Code Zeichen englisch deutsch<br />
00 00 NUL Null Füllzeichen<br />
01 01 S0H Start of Heading Anfang des Kopfes<br />
02 02 STX Start of Text Anfang des Textes<br />
03 03 ETX End of Text Ende des Textes<br />
04 04 EOT End of Transmission Ende der Übertragung<br />
05 05 ENQ Enquiry Stationsaufforderung<br />
06 06 ACK Acknowledge Positive Rückmeldung<br />
07 07 BEL Bell Klingel<br />
08 08 BS Backspace Rückwärtsschritt<br />
09 09 HT Horizontal Tabulation Horizontal-Tabulator<br />
10 0A LF Line Feed Zeilenvorschub<br />
11 0B VT Vertical Tabulation Vertikal-Tabulator<br />
12 0C FF Form Feed Formularvorschub<br />
13 0D CR Carriage Return Wagenrücklauf<br />
14 0E SO Shift Out Dauerumschaltung<br />
15 0F SI Shift In Rückschaltung<br />
16 10 DLE Data Link Espace Datenübertragung-Umschaltung<br />
17 11 DC1 Device Control 1 Gerätesteuerung 1 ( XON )<br />
18 12 DC2 Device Control 2 Gerätesteuerung 2<br />
19 13 DC3 Device Control 3 Gerätesteuerung 3 ( XOFF )<br />
20 14 DC4 Device Control 4 Gerätesteuerung 4<br />
21 15 NAK Negative Acknowledge Negative Rückmeldung<br />
22 16 SYN Synchronous Idle Synchronisierung<br />
23 17 ETB End of Transmission Block Ende des Übertragungs-Blocks<br />
24 18 CAN Cancel Ungültig machen<br />
25 19 EM End of Medium Ende der Aufzeichnung<br />
26 1A SUB Substitute Substitution<br />
27 1B ESC Escape Umschaltung<br />
28 1C FS File Separator Hauptgruppen-Trennung<br />
29 1D GS Group Separator Gruppen-Trennung<br />
30 1E RS Record Separator Untergruppen-Trennung<br />
31 1F US Unit Separator Teilgruppen-Trennung<br />
32 20 SP Space Zwischenraum, Leerschritt<br />
127 7F DEL Delete Löschen<br />
Bedeutung der Sonderzeichen im ASCII-Code nach DIN 66003<br />
Erweiterter IBM-PC Zeichensatz für Bildschirmausgabe
Befehlsliste<br />
FH-Darmstadt - 76 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong>
FH-Darmstadt - 77 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong>
FH-Darmstadt - 78 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong><br />
Befehlsliste in Hex-Folge
FH-Darmstadt - 79 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong>
FH-Darmstadt - 80 - Prof. Komar<br />
FB Informatik <strong>Mikroprozessorsysteme</strong>