16.12.2012 Aufrufe

Mikroprozessorsysteme mit MVUS 80535

Mikroprozessorsysteme mit MVUS 80535

Mikroprozessorsysteme mit MVUS 80535

MEHR ANZEIGEN
WENIGER ANZEIGEN

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>

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!