Mikrocomputertechnik mit dem Prozessor 8085 A: Maschinenorientierte Programmierung. Grundlagen, Schaltungstechnik und Anwendungen [6., verb. und erw. Aufl. Reprint 2018] 9783486785685, 9783486228021

Grundlagen - Hardware - Einführung in die maschinenorientierte Programmierung - Parallele Datenübertragung - Serielle Da

190 50 80MB

German Pages 377 [392] Year 1993

Report DMCA / Copyright

DOWNLOAD FILE

Polecaj historie

Mikrocomputertechnik mit dem Prozessor 8085 A: Maschinenorientierte Programmierung. Grundlagen, Schaltungstechnik und Anwendungen [6., verb. und erw. Aufl. Reprint 2018]
 9783486785685, 9783486228021

Citation preview

Mikrocomputertechnik mit dem Prozessor 8085 A Maschinenorientierte Programmierung Grundlagen - Schaltungstechnik Anwendungen von Prof. Dipl.-Ing. Günter Schmitt 6., verbesserte und erweiterte Auflage Mit 400 Bildern und 17 Tabellen

R. Oldenbourg Verlag München Wien 1994

Die Deutsche Bibliothek — CIP-Einheitsaufnahme Schmitt, Günter: Mikrocomputertechnik mit dem Prozessor 8085 A : maschinenorientierte Programmierung ; Grundlagen Schaltungstechnik - Anwendungen ; mit 17 Tabellen / von Günter Schmitt. - 6., verb. und erw. Aufl. - München ; Wien : Oldenbourg, 1994 ISBN 3-486-22802-1

© 1994 R. Oldenbourg Verlag GmbH, München Das Werk außerhalb lässig und filmungen

einschließlich aller Abbildungen ist urheberrechtlich geschützt. Jede Verwertung der Grenzen des Urheberrechtsgesetzes ist ohne Zustimmung des Verlages unzustrafbar. Das gilt insbesondere für Vervielfältigungen, Übersetzungen, Mikroverund die Einspeicherung und Bearbeitung in elektronischen Systemen.

Gesamtherstellung: R. Oldenbourg Graphische Betriebe GmbH, München

ISBN 3-486-22802-1

Inhaltsverzeichnis

Vorwort

\ . ..

5

1

Einführung

1.1 1.2 1.3

Anwendung von Mikrorechnern Aufbau und Bauformen von Mikrorechnern Die Programmierung von Mikrorechnern

7 8 10

2

Grundlagen .

13

2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8

Darstellung der Daten im Mikrorechner Zahlensysteme und Umrechnungsverfahren Rechenschaltungen Speicherschaltungen Aktive Zustände von Steuersignalen Speicherorganisation Befehle und Programme Übungen zum Abschnitt Grundlagen

13 15 19 23 29 34 39 47

3

Hardware

50

3.1 3.1.1 3.1.2 3.1.3

Halbleitertechnik Die MOS-Technik Die CMOS-Technik Die bipolare Technik

50 51 52 54

3.2 3.2.1 3.2.2 3.2.3

Schaltungstechnik Eingangsschaltungen Ausgangsschaltungen Zusammenschaltung der Bausteine

56 56 58 64

3.3 3.3.1 3.3.2 3.3.3 3.3.4 3.3.5

Der Mikroprozessor 8085A Die Anschlüsse des Prozessors 8085A Der Betrieb der Speicher-und Peripheriebausteine Die Betriebszustände Reset und Interrupt Die Betriebszustände Warten und Halten Mikrorechnerschaltungen mit dem Prozessor 8085 A

71 71 74 83 88 90

3.4 3.4.1 3.4.2 3.4.3 3.4.4

Speicherbausteine Aufbau und Wirkungsweise Die Festwertspeicher (EPROM) 2716 und 2732 Der statische Schreib/Lesespeicher (RAM) 2016 Dynamische Schreib/Lesespeicher (DRAM)

7

92 92 96 98 100

2

Inhaltsverzeichnis

3.5 3.5.1 3.5.2 3.5.3 3.5.4 3.5.5

Peripheriebausteine Aufbau und Wirkungsweise TTL-Bausteine zur Ein/Ausgabe Die Parallelschnittstellen 8155 und 8255 Die Serienschnittstelle 8251A Digital/Analog-und Analog/Digitalwandler

105 105 108 109 114 115

3.6 3.6.1 3.6.2 3.6.3 3.6.4

Bausteinauswahl und Adreßdecodierung Adreßdecoder Die Teildecodierung Die Volldecodierung Die lineare Auswahl

118 118 120 123 128

3.7

Entwurf eines Kleinsystems

130

3.8

Entwurf eines Übungssystems

134

3.9 3.9.1 3.92 3.9 3 3.9.4

Ein Die Die Die Die

137 138 142 144 148

4

Einführung in die maschinenorientierte Programmierung . . . 150

4.1

Die Hardware des Übungsrechners

150

4.2

Assemblerprogrammierung

152

4.3 4.3.1 4.3.2 4.3.3 4.3.4 4.3.5 4.3.6

Einfache Datenübertragung Datenübertragung zwischen den 8-Bit-Registern des Prozessors Laden von 8-Bit-Konstanten Übertragung von 8-Bit-Daten mit direkter Adressierung Assembleranweisungen 16-Bit-Datenübertragung Übungen zum Abschnitt Datenübertragung

156 158 162 166 172 175 181

4.4 4.4.1 4.4.2 4.4.3 4.4.4 4.4.5

Sprungbefehle Der unbedingte Sprung Der bedingte Sprung Der Unterprogrammsprung Anwendung der bedingten Befehle Übungen zum Abschnitt über bedingte Sprünge

182 183 186 188 189 191

4.5 4.5.1 4.5.2 4.5.3 4.5.4

Programmverzweigungen Grafische Darstellung und Vorbereitung einer Verzweigung Untersuchung eines 8-Bit-Wertes (Bytes) Abfrage eines Einzelbits Übungen zum Abschnitt Programmverzweigungen

192 192 195 198 202

Testsystem für PC-Bausteine Prozessor- und DMA-Steuerung des Testsystems Serienschnittstelle 8250 ACE Interruptsteuerung und der Timer Druckerschnittstelle

Inhaltsverzeichnis

3

4.6 4.6.1 4.6.2 4.6.3 4.6.4 4.6.5

Programmschleifen Schleifen mit und ohne Abbruchbedingung Aufbau von 8-Bit-Zählschleifen Aufbau von 16-Bit-Zählschleifen Ereigniszähler Übungen zum Abschnitt Programmschleifen

204 204 206 213 217 221

4.7 4.7.1 4.7.2 4.7.3 4.7.4 4.7.5

Adressierung von Speicherbereichen Die Registerpaaradressierung Die indirekte Speicheradressierung Datentabellen und Sprungtabellen Stapeladressierung Übungen zum Abschnitt Adressierung von Speicherbereichen

222 223 227 229 236 241

4.8 4.8.1 4.8.2 4.8.3 4.8.4 4.8.5 4.8.6 4.8.7 4.8.8

Datenverarbeitung Die logischen Befehle Die Schiebebefehle Die arithmetischen Befehle Vorzeichenlose Dualzahlen Dualzahlen mit Vorzeichen BCD-codierte Dezimalzahlen Multiplikation und Division Übungen zum Abschnitt Datenverarbeitung

242 242 245 248 250 254 258 262 268

4.9

Unterprogrammtechnik

270

4.10

Programmunterbrechungen (Interrupt)

278

4.11

Erweiterungen des Befehlssatzes

284

5

Parallele Datenübertragung

285

5.1 5.2 5.3 5.4 5.5 5.6 5.7

Programmierung des Mehrzweckbausteins 8155 Programmierung der Parallelschnittstelle 8255 Dateneingabe mit Schaltern und Tastern Datenausgabe mit Leuchtdioden und Siebensegmentanzeigen Tastatur und neunstellige Multiplexanzeige Entwurf eines Tastenmonitors Parallele Datenübertragung mit Steuersignalen

285 288 290 294 297 303 308

6

Serielle Datenübertragung

313

6.1 6.2 6.3 6.4

Die V.24-Schnittstelle Programmierung der Serienschnittstelle 8251A Softwaregesteuerte serielle Datenübertragung Ein Terminalmonitor für das Testsystem

313 315 322 324

4

Inhaltsverzeichnis

7

Verarbeitung analoger Daten

332

7.1 7.2 7.3 7.4

Widerstands-Frequenz-Umsetzung Beispiel eines Analog/Digitalwandlers Beispiel eines Digital/Analogwandlers Beispiel einer Analogperipherie

332 338 341 342

8

Lösungen der Übungsaufgaben

346

9

Ergänzende und weiterführende Literatur

357

10

Anhang

358

Zahlentabellen

358

ASCII-Zeichen-Tabelle

359

Sinnbilder für Ablaufpläne und Struktogramme

360

Befehlstabellen des 8085A

361

Stiftbelegung der wichtigsten Bausteine

366

Terminalprogramm in Pascal Register

368 370

Vorwort

Die rasche Entwicklung der Mikrocomputertechnik h a t mich veranlaßt, meine beiden Bücher "Maschinenorientierte Programmierung für Mikroprozessoren " und "Grundlagen der Mikrocomputertechnik" zu überarbeiten. Hardware, Software und Anwendungen eines Prozessors werden jetzt in einem Band zusammengefaßt. Der e r s t e Band f ü r den Prozessor 8085A liegt hiermit vor, weitere Bände für die Prozessoren 6800/6802 , 6809 und 68000 werden folgen. Nach den e r s t e n Lehrjahren gilt es nun, die Mikrocomputertechnik fest in die Ausbildung des technischen Nachwuchses einzubauen. Dieses Buch entstand aus und f ü r meinen Unterricht im Pflichtfach "Mikrocomputertechnik" und in den weiterführenden Wahlpflichtfächern an der Fachhochschule Dieburg. In der Gliederung des Stoffes und in der Auswahl der Beispiele habe ich versucht, einen "Lehrbuchstil" zu finden, wie er sich z.B. auf dem Gebiet der Grundlagen der Elektrotechnik seit langem herausgebildet h a t . Der Programmierteil beschäftigt sich ausschließlich mit der maschinenorientierten Programmierung auf Assemblerebene, wie sie für die Programmierung von technischen Anwendungen und in der Systemprogrammierung vorzugsweise verwendet wird. Ich bedanke mich bei meinen Studenten f ü r die vielen Fragen und Fehler, die viel zu einer besonders eingehenden Darstellung wichtiger und schwieriger Fragen beigetragen haben. Dem Oldenbourg Verlag danke ich für die gute Zusammenarbeit und bei meiner Familie entschuldige ich mich, daß ich "geistig abwesend" war, als dieses Buch entstand.

G r o ß - U m s t a d t , im Februar 1984, dem Jahr des Großen Bruders

Günter Schmitt

Vorwort zur 6. Auflage

Der Unterricht in der Mikrocomputertechnik wird durch das Vordringen des Personal Computers (PC) zunehmend schwieriger. Die in ihm verwendeten 32b i t - und 64-bit-Mikroprozessoren sind in der Grundausbildung wegen ihrer Komplexität "uniehrbar"; die hochintegrierten S t e u e r - und Multifunktionsbausteine machen die Schaltung völlig "undurchsichtig". Daher lassen sich die Grundprinzipien der Maschinenorientierten Programmierung und Schaltungstechnik mit einem PC als Übungsgerät nicht mehr lehren und f ü r den L e r n e n den nicht mehr nachvollziehen. Wer würde es ohne einen ängstlichen Blick auf den Staatsanwalt wagen, im Unterricht an einer PC-Platine bei g e ö f f n e t e m Gehäuse Messungen durchführen zu lassen? Auf der anderen Seite wird der PC immer mehr als Rechner f ü r Aufgaben in der Meß-, Steuerungs- und Regelungstechnik eingesetzt. Die Programmierung verwendet vorzugsweise die modernen Hochsprachen Pascal oder C; nur z e i t kritische Teilaufgaben schreibt man noch im Assembler. Für diese Anwendungen muß die Mikrocomputertechnik zusätzlich Kenntnisse über die S c h n i t t s t e l len des PC sowie über die DMA- und Interruptsteuerung liefern; jedoch sollten diese Bausteine gefahrlos f ü r Messungen zugänglich sein. In der vorliegenden 6. Auflage wurde diese neue Aufgabenstellung berücksichtigt. Der Abschnitt 3.9 beschreibt nun ein einfaches 8085-System mit den im PC üblicherweise verwendeten Peripheriebausteinen und einfachen T e s t p r o grammen, die lediglich die richtige Adressierung der Bausteine zeigen können. Für weitergehende Untersuchungen sollte die im Kapitel 9 genannte ergänzende und weiterführende L i t e r a t u r herangezogen werden. Das System wurde in l ö t f r e i e r Stecktechnik a u f g e b a u t und mit dem in Abschnitt 6.4 beschriebenen Monitor in Verbindung mit einem PC als Bedienungsterminal betrieben. Der Anhang enthält das in Pascal geschriebene Terminalprogramm. Die T e s t p r o g r a m m e wurden mit einem ebenfalls in Pascal geschriebenen Cross-Assembler übersetzt und vom PC in das Testssystem heruntergeladen.

G r o ß - U m s t a d t , im August 1993

Günter Schmitt

1

Einführung

Dieser Abschnitt gibt Ihnen einen zusammenfassenden Überblick über die Anwendung, den Aufbau und die Programmierung von Mikrorechnern, neudeutsch auch Mikrocomputer genannt. In den Fällen, in denen die deutsche Fachsprache noch keine eigenen Ausdrücke gebildet hat, mußten die amerikanischen Bezeichnungen übernommen werden. Dabei wurde versucht, zusätzlich einen entsprechenden deutschen Ausdruck zu finden.

1.1

Anwendung von Mikrorechnern

Der Mikrorechner hat zwei Ahnen: die hochintegrierte Logikschaltung des Taschenrechners und die Großrechenanlage, Computer genannt. Auf einer Fläche von etwa 20 bis SO Quadratmillimetern lassen sich heute mehr als 100 000 Schaltfunktionen unterbringen. Und dies in großen Stückzahlen zu niedrigen Preisen. Ähnlich wie bei einem Großrechner sind auch die Funktionen des Mikrorechners programmierbar. Was die Schaltung, die Hardware, tun soll, b e stimmt ein Programm, die Software. Dadurch erst lassen sich die Bausteine universell einsetzen. Heute unterscheidet man hauptsächlich zwei große Einsatzgebiete: Mikrorechner in der technischen Anwendung steuern z.B. Drucker, elektronische Schreibmaschinen, Kopierautomaten, Telefonvermittlungen und Fertigungsanlagen. Durch den Einsatz von Mikrorechnern werden die Geräte kleiner und billiger und können mehr und "intelligentere" Funktionen übernehmen. Mikrorechner werden in zunehmendem Maße als Klein-EDV-Anlagen eingesetzt und übernehmen damit Aufgaben ihres großen Bruders, des Großrechners. Die elektronische Datenverarbeitung, kurz EDV genannt, hält dadurch ihren Einzug als Personal-Computer oder Hobby-Computer in jeden Haushalt. Ob dies sinnvoll ist, darüber kann man geteilter Meinung sein; die Anwendung von Mikrorechnern zur Textverarbeitung oder Buchführung in Büros und kleineren Betrieben hat sich heute durchgesetzt. Der Text dieses Buches wurde mit Hilfe eines Mikrorechners am Bildschirm entworfen und korrigiert.

8

1 Einßhrung

1.2 Aufbau und Bauformen von Mikrorechnern

Was ist allen M i k r o r e c h n e r n in den verschiedenen E i n s a t z g e b i e t e n g e m e i n s a m ? Von der Funktion h e r g e s e h e n sind e s zunächst p r o g r a m m i e r b a r e R e c h n e r . In einem P r o g r a m m s p e i c h e r b e f i n d e t sich e i n e A r b e i t s v o r s c h r i f t , das P r o g r a m m . Bei einem T y p e n r a d d r u c k e r z.B. gibt das P r o g r a m m dem H a m m e r genau dann einen A u s g a b e b e f e h l , wenn der richtige B u c h s t a b e d e s R a d e s am Papier v o r b e i k o m m t . Bei einem A b r e c h n u n g s p r o g r a m m z.B. e n t h ä l t das Programm R e c h e n b e f e h l e , die aus der Menge und dem Einzelpreis den G e s a m t p r e i s b e r e c h n e n . Der D a t e n s p e i c h e r e n t h ä l t die zu v e r a r b e i t e n d e n D a t e n . Im Beispiel e i n e s D r u c k e r s sind es d i e auszugebenden Buchstaben und Z i f f e r n , im Beispiel des A b r e c h n u n g s p r o g r a m m s sind e s Artikelbezeichnungen und Zahlen. In d e r S p e i c h e r t e c h n i k u n t e r s c h e i d e t man F e s t w e r t s p e i c h e r und S c h r e i b / L e s e s p e i c h e r . F e s t w e r t s p e i c h e r b e h a l t e n ihren Speicherinhalt unabhängig von der V e r s o r gungsspannung. Sie können im Betrieb nur g e l e s e n w e r d e n . Die S t e u e r p r o g r a m m e für G e r ä t e und kleine Anlagen werden h a u p t s ä c h l i c h in F e s t w e r t s p e i c h e r n u n t e r g e b r a c h t . S c h r e i b / L e s e s p e i c h e r verlieren ihren Speicherinhalt beim A b s c h a l t e n der Versorgungsspannung; sie können aber w ä h r e n d des B e t r i e b e s sowohl gelesen a l s a u c h neu beschrieben w e r d e n . Sie werden vorzugsweise f ü r die Speicherung der D a t e n verwendet. K l e i n - E D V - A n l a g e n werden in den m e i sten Fällen mit m a g n e t i s c h e n Speichern ( D i s k e t t e n - oder F l o p p y - L a u f w e r k e n ) a u s g e r ü s t e t , von denen m a n A n w e n d u n g s p r o g r a m m e (z.B. B u c h f ü h r u n g s p r o g r a m me) und D a t e n (z.B. Adressen der Kunden) in den S c h r e i b / L e s e s p e i c h e r l ä d t . Der Mikroprozessor ist die Z e n t r a l e i n h e i t , die das P r o g r a m m a u s f ü h r t und die D a t e n v e r a r b e i t e t . Die B e f e h l e werden in e i n e r b e s t i m m t e n R e i h e n f o l g e a u s dem P r o g r a m m s p e i c h e r in d a s S t e u e r w e r k des Prozessors g e h o l t . Das R e c h e n werk v e r a r b e i t e t die D a t e n , indem es z.B. den auszugebenden Buchstaben mit dem a u g e n b l i c k l i c h e n Stand des T y p e n r a d e s vergleicht o d e r bei einem A b r e c h nungsprogramm Zahlen a d d i e r t und s u b t r a h i e r t . E i n / A u s g a b e s c h a l t u n g e n , a u c h S c h n i t t s t e l l e n g e n a n n t , verbinden den M i k r o r e c h ner mit seiner U m w e l t , der Peripherie. Im Beispiel des T y p e n r a d d r u c k e r s muß der R e c h n e r , n a t ü r l i c h im richtigen Z e i t p u n k t , dem M a g n e t e n des H a m m e r s einen Impuls g e b e n . Bei einem A b r e c h n u n g s p r o g r a m m müssen z.B. von der B e d i e n u n g s t a s t a t u r Zahlen eingelesen werden. E i n / A u s g a b e s c h a l t u n g e n d i e n e n h a u p t s ä c h l i c h zur Ü b e r t r a g u n g von D a t e n . Bild 1 - 1 zeigt Mikrorechners.

zusammenfassend

die

wichtigsten Funktionseinheiten

eines

1.2 Aufbau und Bauformen von Mikrorechnern

Bild 1-1:

9

Aufbau eines Mikrorechners

Mikrorechner b e s t e h e n im wesentlichen aus dem Mikroprozessor, P r o g r a m m und D a t e n s p e i c h e r n sowie Ein/Ausgabeschaltungen f ü r die Verbindung zur Peripherie. Man u n t e r s c h e i d e t folgende Bauformen: Single-Chip-Mikrocomputer ( E i n - B a u s t e i n - M i k r o r e c h n e r ) e n t h a l t e n alle Funktionseinheiten (Prozessor, Speicher und Ein/Ausgabeschaltungen) auf einem Baustein der Größe 15 mal 50 mm. Das Programm b e s t e h t a u s e t w a 1000 Befehlen und b e f i n d e t sich in einem F e s t w e r t s p e i c h e r auf dem Baustein. Der Schreib/Lesespeicher kann e t w a 100 Daten (Zeichen oder Zahlen) a u f n e h m e n . An den Anschlußbeinchen (ca. 40) stehen nur die Ein/Ausgabeleitungen für die Peripherie zur Verfügung. Ein d e r a r t i g e r Baustein k o s t e t zwischen 10 und 100 DM. Der E i n - B a u s t e i n - M i k r o r e c h n e r wird vorzugsweise für die Steuerung von kleineren G e r ä t e n (z.B. e i n f a c h e n Druckern oder Meßgeräten) bei großen Stückzahlen e i n g e s e t z t , bei denen es auf geringe Abmessungen a n k o m m t . Man kann ihn mehr als intelligenten S t e u e r b a u s t e i n denn als Rechner b e t r a c h t e n . Single-Board-Mikrocomputer ( E i n - P l a t i n e n - M i k r o r e c h n e r ) e n t h a l t e n alle Funktionseinheiten eines Mikrorechners a u f g e b a u t aus mehreren Bausteinen auf einer L e i t e r p l a t t e . Im e i n f a c h s t e n Fall enthält eine Platine im E u r o p a f o r m a t (100 x 160 mm) also einen Mikroprozessor z.B. vom Typ 8085, einen F e s t w e r t Speicherbaustein mit dem P r o g r a m m , einen S c h r e i b / L e s e - S p e i c h e r b a u s t e i n f ü r die veränderlichen Daten und einige Ein/Ausgabebausteine für den P e r i p h e r i e -

10

1

Einführung

anschluß. Die Verbindungsleitungen, auf denen die Befehle und D a t e n z w i s c h e n den Bausteinen ü b e r t r a g e n werden, bezeichnet man als Bus. Die Bausteine kosten zusammen c a . 50 DM, die L e i t e r p l a t t e zwischen 50 und 200 DM. Dazu kommen die Kosten f ü r d a s Programm und für die Peripherie. Das H a u p t e i n satzgebiet der Ein-Platinen-Mikrorechner liegt in der Steuerung von größeren G e r ä t e n wie z.B. elektronischen Schreibmaschinen oder Hobby-Computern. Die Entwicklung des G e r ä t e s u m f a ß t den Entwurf d e s R e c h n e r s ( H a r d w a r e ) , des Programms ( S o f t w a r e ) und die Anpassung a n die Peripherie. B a u p l a t t e n - M i k r o c o m p u t e r b e s t e h e n a u s m e h r e r e n K a r t e n , meist im E u r o p a f o r m a t , die in einem Rahmen z u s a m m e n g e s t e c k t werden. Hier teilt man den Mikrorechner auf in eine Prozessorkarte, S p e i c h e r k a r t e n f ü r F e s t w e r t s p e i c h e r , Speicherkarten f ü r Schreib/Lesespeicher und P e r i p h e r i e k a r t e n f ü r die D a t e n übertragung. Sein Haupteinsatzgebiet sind die K l e i n - E D V - A n l a g e n (PersonalComputer, B ü r o - C o m p u t e r ) , die sich durch Einfügen neuer K a r t e n leicht e r w e i t e r n oder durch den Austausch d e f e k t e r Karten schnell r e p a r i e r e n lassen. Für die Anwendung im technischen Bereich zur Steuerung von größeren G e r ä t e n und Anlagen werden von verschiedenen Herstellern B a u p l a t t e n s y s t e m e a n g e b o t e n . Bei einem aus Bauplatten zusammengestellten Mikrorechner e n t f ä l l t der größte Teil der H a r d w a r e e n t w i c k l u n g , und die Entwicklung des P r o g r a m m s , der S o f t w a r e , kann s o f o r t beginnen. Bei steigenden Stückzahlen kann es w i r t s c h a f t l i c h sein, bei unverändertem Programm aus einem B a u p l a t t e n - M i k r o r e c h n e r einen maßgeschneiderten E i n - K a r t e n - M i k r o r e c h n e r zu e n t w i c k e l n .

1.3

Die Programmierung von Mikrorechnern

Die sogenannten Maschinenbefehle im Programmspeicher des Mikrorechners sind binär verschlüsselt, d.h. sie bestehen nur aus Nullen und Einsen. In Programmlisten bedient man sich der kürzeren hexadezimalen Schreibweise, die jeweils vier Binärzeichen durch ein neues Zeichen e r s e t z t . Da diese Art der Programmdarstellung sehr unanschaulich ist, benutzt man beim P r o g r a m mieren Sprachen, als wolle man mit dem Rechner " r e d e n " . Dabei u n t e r s c h e i det man maschinennahe Sprachen, den Assembler, und a u f g a b e n n a h e " h ö h e r e " Sprachen wie z.B. BASIC. Bei der Programmierung von Problemen der D a t e n ü b e r t r a g u n g sind sehr genaue Kenntnisse über den Aufbau des Mikroprozessors und der Ein/Ausgabebausteine e r f o r d e r l i c h . Hier bevorzugt man die maschinennahe Assemblersprache, die aus leicht merkbaren Abkürzungen b e s t e h t . Ein Assemblerbefehl entspricht einem Maschinenbefehl. Da jeder Mikroprozessor einen eigenen B e f e h l s - und R e g i s t e r s a t z h a t , gibt es für jeden Prozessortyp eine eigene Assemblersprache, so daß sich im Assembler geschriebene P r o g r a m m e nicht zwischen verschiedenen Prozessortypen a u s t a u s c h e n lassen. Die Programmierung im Assembler ist sehr z e i t a u f w e n d i g , ergibt aber schnelle und kurze P r o g r a m m e .

10

1

Einführung

anschluß. Die Verbindungsleitungen, auf denen die Befehle und D a t e n z w i s c h e n den Bausteinen ü b e r t r a g e n werden, bezeichnet man als Bus. Die Bausteine kosten zusammen c a . 50 DM, die L e i t e r p l a t t e zwischen 50 und 200 DM. Dazu kommen die Kosten f ü r d a s Programm und für die Peripherie. Das H a u p t e i n satzgebiet der Ein-Platinen-Mikrorechner liegt in der Steuerung von größeren G e r ä t e n wie z.B. elektronischen Schreibmaschinen oder Hobby-Computern. Die Entwicklung des G e r ä t e s u m f a ß t den Entwurf d e s R e c h n e r s ( H a r d w a r e ) , des Programms ( S o f t w a r e ) und die Anpassung a n die Peripherie. B a u p l a t t e n - M i k r o c o m p u t e r b e s t e h e n a u s m e h r e r e n K a r t e n , meist im E u r o p a f o r m a t , die in einem Rahmen z u s a m m e n g e s t e c k t werden. Hier teilt man den Mikrorechner auf in eine Prozessorkarte, S p e i c h e r k a r t e n f ü r F e s t w e r t s p e i c h e r , Speicherkarten f ü r Schreib/Lesespeicher und P e r i p h e r i e k a r t e n f ü r die D a t e n übertragung. Sein Haupteinsatzgebiet sind die K l e i n - E D V - A n l a g e n (PersonalComputer, B ü r o - C o m p u t e r ) , die sich durch Einfügen neuer K a r t e n leicht e r w e i t e r n oder durch den Austausch d e f e k t e r Karten schnell r e p a r i e r e n lassen. Für die Anwendung im technischen Bereich zur Steuerung von größeren G e r ä t e n und Anlagen werden von verschiedenen Herstellern B a u p l a t t e n s y s t e m e a n g e b o t e n . Bei einem aus Bauplatten zusammengestellten Mikrorechner e n t f ä l l t der größte Teil der H a r d w a r e e n t w i c k l u n g , und die Entwicklung des P r o g r a m m s , der S o f t w a r e , kann s o f o r t beginnen. Bei steigenden Stückzahlen kann es w i r t s c h a f t l i c h sein, bei unverändertem Programm aus einem B a u p l a t t e n - M i k r o r e c h n e r einen maßgeschneiderten E i n - K a r t e n - M i k r o r e c h n e r zu e n t w i c k e l n .

1.3

Die Programmierung von Mikrorechnern

Die sogenannten Maschinenbefehle im Programmspeicher des Mikrorechners sind binär verschlüsselt, d.h. sie bestehen nur aus Nullen und Einsen. In Programmlisten bedient man sich der kürzeren hexadezimalen Schreibweise, die jeweils vier Binärzeichen durch ein neues Zeichen e r s e t z t . Da diese Art der Programmdarstellung sehr unanschaulich ist, benutzt man beim P r o g r a m mieren Sprachen, als wolle man mit dem Rechner " r e d e n " . Dabei u n t e r s c h e i det man maschinennahe Sprachen, den Assembler, und a u f g a b e n n a h e " h ö h e r e " Sprachen wie z.B. BASIC. Bei der Programmierung von Problemen der D a t e n ü b e r t r a g u n g sind sehr genaue Kenntnisse über den Aufbau des Mikroprozessors und der Ein/Ausgabebausteine e r f o r d e r l i c h . Hier bevorzugt man die maschinennahe Assemblersprache, die aus leicht merkbaren Abkürzungen b e s t e h t . Ein Assemblerbefehl entspricht einem Maschinenbefehl. Da jeder Mikroprozessor einen eigenen B e f e h l s - und R e g i s t e r s a t z h a t , gibt es für jeden Prozessortyp eine eigene Assemblersprache, so daß sich im Assembler geschriebene P r o g r a m m e nicht zwischen verschiedenen Prozessortypen a u s t a u s c h e n lassen. Die Programmierung im Assembler ist sehr z e i t a u f w e n d i g , ergibt aber schnelle und kurze P r o g r a m m e .

1.3 Die Programmierung von Mikrorechnern

11

Bei der Programmierung von EDV-Problemen wie z.B. einer Adressenverwaltung bevorzugt man " h ö h e r e " P r o g r a m m i e r s p r a c h e n , die z.T. der F o r m e l - und Algorithmenschreibweise der M a t h e m a t i k e n t s p r e c h e n . Ein Algorithmus ist die m a t h e m a t i s c h e Beschreibung eines Lösungsverfahrens. Ein Übersetzungsprogramm ( i n t e r p r e t i e r e r oder Compiler) wandelt einen Befehl in m e h r e r e Maschinenbefehle um. Die Programmierung in einer höheren p r o b l e m o r i e n t i e r t e n Sprache e r f o r d e r t keine Kenntnisse über den Aufbau und die Funktion des Mikrorechn e r s und seiner Bausteine, die Programme sind zwischen verschiedenen R e c h nern a u s t a u s c h b a r . Sie sind jedoch länger und langsamer als e n t s p r e c h e n d e Assemblerprogramme. Bild 1 - 2 zeigt einige Beispiele f ü r Befehle in verschiedenen Darstellungen. Sie sind jedoch nicht miteinander vergleichbar, da z.B. der BASIC-Befehl zum Wurzelziehen im Assembler nur mit sehr hohem Aufwand p r o g r a m m i e r t werden kann.

Bild 1 - 2 :

Befehl binar

001110100001000101000111

Befehl hexadezimal

3A 11 47

Assembler-Befehl

LDA

BASIC-Befehl

LET

WERT WERT = 13

Beispiele f ü r verschiedene Befehlsarten

Mikrorechner in der technischen Anwendung werden vorzugsweise im Assembler oder in besonders auf technische Probleme zugeschnittenen Sprachen p r o g r a m m i e r t . In der Anwendung als K l e i n - E D V - A n l a g e bevorzugt man p r o b l e m n a h e Sprachen wie z.B. BASIC und g r e i f t bei der D a t e n ü b e r t r a g u n g auf S y s t e m p r o g r a m m e zurück, die mit der Anlage vom Hersteller g e l i e f e r t werden und im Assembler geschrieben sind. Die S y s t e m p r o g r a m m e , die zum B e t r i e b eines R e c h n e r s e r f o r d e r l i c h sind, bezeichnet man auch als Betriebssystem. Dieses Buch b e s c h ä f t i g t sich ausschließlich mit der m a s c h i n e n o r i e n t i e r t e n Programmierung im Assembler des Prozessors 8085. Bild 1 - 3 faßt die w i c h t i g sten Erkenntnisse dieser Einführung z u s a m m e n .

12

Bild 1-3:

1

Einßhrung

MikrorechnerHardware

MikrorechnerAnwendungen

MikrorechnerSoftware

Ein-Bausteinoder Kleinstsystem

Klelngeräte Meßgeräte Drucker

Assembler

Ein-KartenSystem

Assembler Größere Geräte Schreibmasch ine Tischcomputer BASIC PASCAL C

BauplattenSystem

Prozeßrechner Klein-EDVAnlagen

Assembler PASCAL

C

Anwendung, Bauformen und Programmierung von Mikrorechnern

Prozessor

8085A ist ein Universalpro-

zessor, der früher in allen Anwendungsbereichen

Der im vorliegenden

Buch behandelte

(Bild 1 - 3 ) eingesetzt wurde.

Er wird heute zunehmend durch andere Bauformen abgelöst. Für die Steuerung von K l e i n g e r ä t e n

( M e ß - und A n z e i g e g e r ä t e n , T a s t a t u r e n , Druckern) verwendet

man fast ausschließlich Single-Chip-Systeme. Die Personal Computer ( P C ) e n t halten heute vorwiegend 16- und 32-Bit-Prozessoren z . T . mit Coprozessoren für arithmetische B e f e h l e und mathematische Funktionen. In nachrichtentechnischen Anwendungen findet man v i e l f a c h Prozessoren, die auf b e s t i m m t e Anwendungen zugeschnitten

sind. Ein Beispiel sind die " D i g i t a l e n Signalprozessoren"

zum Aufbau von digitalen Filtern und Regelungen im E c h t z e i t b e t r i e b .

(DSP)

2

Grundlagen

Dieser Abschnitt ist für Leser ohne Vorkenntnisse gedacht, die ohne begleitenden Unterricht arbeiten. Wer bereits mit den Grundlagen der Datenverarbeitung und Digitaltechnik vertraut ist, kann diesen Abschnitt überschlagen.

2.1

Darstellung der Daten im Mikrorechner

Daten sind Zahlen (z.B. Meßwerte), Zeichen (z.B. Buchstaben) oder analoge Signale (z.B. Spannungen). Sie werden im Rechner binär gespeichert und v e r a r b e i t e t . Binär heißt zweiwertig, es sind also nur zwei Zustände entsprechend Bild 2-1 erlaubt:

wahr Schalter hohes

ein

Potential

HIGH-Potential

falsch Schalter niedriges

aus Potential

LOW-Potential

Bild 2-1: Binäre Zustände

Die Datenverarbeitung bezeichnet die beiden Zustände mit den Z i f f e r n Null und Eins. In der Digitaltechnik wird ein niedriges Potential zwischen 0 und 0,8 Volt als LOW bezeichnet; ein hohes Potential zwischen 2 und 5 Volt heißt HIGH . Eine Speicherstelle, die eines der beiden Binärzeichen enthält, nennt man ein Bit. Acht Bits, also acht Speicherstellen, bilden ein Byte. Weitere Einheiten entsprechend Bild 2-2 sind das Kilobyte für 1024 Bytes und das Megabyte für 1024 Kilobytes.

14

2 Grundlagen

Bild 2-2:

Bit

=

Speie:herstelle m i t 0 oder 1

Byte

=

Spei 2,0 V

'Emax = ±

10

C

10

Emax =

^

Pp

T1

'Je

E i ngangstrans i s t o r

-t?

Bild 3 - 4 :

MOS-Eingangsschaltung

Bei e i n e r P a r a l l e l s c h a l t u n g von B a u s t e i n e n a d d i e r e n s i c h die täten

ihrer E i n g ä n g e . L ä ß t

kann e r durch sich

Einstreuungen

veränderndes

wegen

ihrer

Potential

wechselnden

Eingangskapazi-

man e i n e n M O S - E i n g a n g o f f e n ( u n b e s c h a l t e t ) , und s t a t i s c h e annehmen.

logischen

so

Aufladung ein U n d e f i n i e r t e s o d e r

Unbeschaltete

Zustände

eine

MOS-Eingänge

sehr s c h w e r

zu

sind

findende

Fehlerquelle. Bild 3 - 5 z e i g t den t y p i s c h e n Eingang e i n e r T T L - S c h a l t u n g , bei der die E i n gangsspannung U E den E m i t t e r des T r a n s i s t o r s T 1 und d i e s e r die B a s i s von T 2 ansteuert.

•5 V LOW:

Standard

LS-Technik

I E < - 1 , 6 mA

I £ < - 0 , 4 mA

I E 2,A V

J Bild 3 - 1 3 :

Im 2,4

T T L - L a s t bei

HIGH-Zustand Volt

liefern,

;

I

HIGH

GND

!

Ue>2,0V

I

HIGH-Potential

muß der t r e i b e n d e Ausgang w ä h r e n d d i e Eingänge a l l e

m i n d e s t e n s e i n e Spannung von Spannungen

über

2,0

Volt

als

HIGH e r k e n n e n . D i e D i f f e r e n z von 0 , 4 V o l t ist der S t ö r s p a n n u n g s a b s t a n d , der a l s Einstreuung oder Spannungsabfall auf der L e i t u n g a u f t r e t e n kann, ohne die F u n k t i o n der S c h a l t u n g zu b e e i n t r ä c h t i g e n . Im L O W - Z u s t a n d d a r f der t r e i b e n d e Ausgang h ö c h s t e n s e i n e Spannung von 0 , 4 V o l t l i e f e r n , während a l l e Eingänge Spannungen u n t e r 0 , 8 Volt als LOW e r k e n n e n . D e r S t ö r s p a n n u n g s a b s t a n d b e t r ä g t auch im L O W - Z u s t a n d 0 , 4 V o l t . Zur

Erhöhung

des A u s g a n g s s t r o m e s bzw. zur Erhöhung der

bei HIGH v e r w e n d e t sind

Widerstände,

Ausgangsspannung

man " P u l l - u p " - W i d e r s t ä n d e e n t s p r e c h e n d Bild 3 - 1 5 . D i e s

die p a r a l l e l zu G e g e n t a k t -

Ausgang zur Versorgungsspannung g e s c h a l t e t

oder T r i s t a t e - A u s g ä n g e n

werden.

vom

3.2 Schaltungstechnik

Eingangsstufe

Ausgangsstufe

+ 5V

+5V

sperrend

/V leitend

I L = 1,6 mA ( S t )

UA — RST 7.5-F1 ipflop

I

TRAP-Flipflop

L&

I I •{ TRAP: Start bei 1 0024H

I

&

& 6.5

5.5

7.5

6.5

5.5

-r-

INTE Flip flop

anstehende

Interrupts

Hasken - F l i p f l o p s

|

|

EI

DI

RST 7.5: Start bei 003CH

I I

&

Bild 3 - 2 9 :

RESET:Start bei 0000H

&

> —

7.5

85

Li*'»'

RST 6.5: Start bei 0034H

I

JRST 5.5: Start bei 002CH

I

-* 1 I

Interrupt T s P e r r *' IN'E

'RESET

INTR: Befehl vom Bus holen RST-Befehfe RST-Befehle: Start bei 0000 - 0038H

Befehl

Interruptsteuerung des Mikroprozessors 8085A

Der T R A P - I n t e r r u p t ist aktiv HIGH und sowohl f l a n k e n - als auch zustandsges t e u e r t . Eine steigende Flanke (Ubergang von LOW auf HIGH) setzt das T R A P Flipflop, das von der Prozessorsteuerung zusammen mit dem Leitungszustand (UND-Verknüpfung) im vorletzten T a k t jedes B e f e h l s a b g e f r a g t wird. Das T R A P - S i g n a l muß mindestens 18 T a k t e anstehen, damit es im ungünstigsten Fall ( C A L L - B e f e h l ) noch erkannt werden kann. Die Befehlsablaufsteuerung erzeugt ohne Buszugriff einen eigenen T R A P - F u n k t i o n s c o d e , der a l l e anderen Interrupts sperrt, den Befehlszähler in den Stapel r e t t e t und ein Programm bei der Adresse 0024 s t a r t e t . Das T R A P - F l i p f l o p wird wieder zurückgesetzt; dies geschieht auch durch ein R e s e t . Der T R A P - I n t e r r u p t ist im G e g e n s a t z zu allen anderen Interrupts nicht s p e r r bar; diese wirken nur, wenn das INTE-Flipflop freigegeben ( g e s e t z t ) ist. Es wird bei jedem R e s e t , bei jedem Interrupt oder durch den B e f e h l DI Disable Interrupt gleich Interruptsperre gelöscht und sperrt die R S T - und I N T R - I n t e r rupts. Es muß vom Programm durch den B e f e h l EI Enable Interrupt gleich I n t e r ruptfreigabe gesetzt werden. Die R S T - I n t e r r u p t s werden zusätzlich durch ein Interruptregister kontrolliert. Bei einem R e s e t werden in diesem R e g i s t e r a l l e R S T - I n t e r r u p t s gesperrt. Beispiele und Anwendungen folgen im S o f t w a r e t e i l .

86

3 Hardware

Der RST7.5-Interrupt ist flankengesteuert. Eine steigende Flanke an diesem Eingang setzt ein Flipflop, das wieder im vorletzten Takt eines Befehls zusammen mit dem INTE-Flipflop und einem Masken-Flipflop des Interruptregisters ausgewertet wird. Sind alle Bedingungen erfüllt (UND-Verknüpfung), so e r zeugt die Befehlsablaufsteuerung ohne Buszugriff einen eigenen RST7.5-Funktionscode, der das INTE-Flipflop sperrt (löscht), den Befehlszähler in den Stapel r e t t e t und ein Programm ab Adresse 003C startet. Das RST7.5-Flipflop wird wieder zurückgesetzt; dies geschieht auch durch ein Reset oder durch ein Bit des Interruptregisters mit dem Befehl SIM gleich speichere den Akkumulator in das Interruptregister. Die RST6.5- und RST5.5-lnterrupts sind beide HIGH-zustandsgesteuert. Die B e fehlsablaufsteuerung untersucht den Zustand der Interrupteingänge im vorletzten Takt jeder Befehlsausführung. Liegt der Eingang auf HIGH und sind die Freigabebedingungen (Maske und INTE-Flipflop) e r f ü l l t , so werden nach Ausführung des laufenden Befehls eigene RST6.5- bzw. RST5.5-Funktionscodeserzeugt. Dies bedeutet Löschen (Sperren) des INTE-Flipflops, R e t t e n des Befehlszählers auf den Stapel und Starten eines Programms ab Adresse 0034 bzw. 002C. Der INTR-Interrupt ist ebenfalls HIGH-zustandsgesteuert und wird ebenfalls durch das INTE-Flipflop gesperrt oder freigegeben. Er erzeugt jedoch im G e gensatz zu den anderen Interrupts den in Bild 3-30 dargestellten INTR-Interruptzyklus. Nach Beendigung des laufenden Befehls führt das Steuerwerk einen mindestens 4 Takte dauernden Ml-Lesezyklus durch, in dem anstelle des Lesesignals RD das INTA-Signal aktiv LOW wird. Mit diesem Signal muß eine äußere Schaltung angesteuert werden, die einen Befehl auf den Datenbus legt. Wie bei einem M l - Lesezyklus übernimmt der Prozessor mit der steigenden Flanke des INTASignals das auf dem Datenbus liegende Byte, bringt es in das Befehlsregister und decodiert den Funktionscode im Takt T4. Besonders geeignet sind die Codes der acht RST-Befehle. Dies sind 1-Byte-Befehle, die den Befehlszähler in den Stapel r e t t e n und Programme von festgelegten Adressen zwischen 0000 und 0040 s t a r t e n . Bei den ebenfalls geeigneten CALL-Befehlen, die ein Unterprogramm a u f r u f e n , müßte die äußere Schaltung zwei weitere Bytes mit der Unterprogrammadresse auf den Datenbus legen. Dazu gibt es besondere I n t e r ruptsteuerbausteine. In dem in Bild 3-30 gezeigten Interruptzyklus fordert der INTR-Interrupt über den Datenbus den Funktionscode eines Befehls zur Ausführung an. Während dieser Zeit liegt auf dem Adreßbus der laufende Inhalt des Befehlszählers; RD und WR sind jedoch nicht aktiv. Auch bei den anderen Interrupts (TRAP, RST7.5, RST6.5 und RST5.5) laufen auf dem Bus ähnliche Interruptzyklen ab, bei denen jedoch das INTA-Signal auf HIGH liegen bleibt (nicht aktiv), da die Codes zur Ausführung der anderen Interrupts von der Ablaufsteuerung selbst geliefert werden. Auf den Interruptzyklus folgen Speicherschreibzyklen, die den Inhalt des Befehlszählers in den Stapel schreiben. Als Adresse wird dabei

3.3 Der Mikroprozessor

Bild 3-30:

8085A

87

I N T R - I n t e r r u p t - B e t r i e b s z u s t a n d mit R S T - B e f e h l

der Inhalt des Stapelzeigers, eines 1 6 - B i t - R e g i s t e r s im Prozessor, auf Adreßbus gelegt. Die Interrupteingänge des Prozessors 8085A haben folgende Rangfolge: TRAP ( S t a r t a d r e s s e 0024), nicht s p e r r b a r , f l a n k e n - und z u s t a n d s g e s t e u e r t RST7.5 mit der S t a r t a d r e s s e 003C, s p e r r b a r , f l a n k e n g e s t e u e r t RST6.5 mit der S t a r t a d r e s s e 0034, s p e r r b a r , zustandsgesteuert RST5.5 mit der S t a r t a d r e s s e 002C, s p e r r b a r , zustandsgesteuert INTR holt Befehle über den Datenbus, s p e r r b a r , zustandsgesteuert

den

88

3

Hardware

Liegen mehrere freigegebene Interruptanforderungen gleichzeitig vor, so wird nur die Anforderung mit dem höheren Rang angenommen; dabei werden automatisch die Anforderungen mit dem niederen Rang gesperrt. Jedes Interruptprogramm kann nun über das Interruptregister prüfen, ob noch andere Interrupts vorliegen und kann sie bei Bedarf freigeben.

3.3.4 Die Betriebszustände Warten und Halten Die Betriebszustände Warten und Halten werden bei einfachen Mikrorechnern nicht verwendet. In den bisher behandelten Betriebszuständen müssen die Speicher- und Peripheriebausteine die Zeitbedingungen des Prozessors einhalten. In einem Schreibzyklus bietet der Prozessor während WR = LOW die Daten auf dem Datenbus an; die Bausteine müssen diese in der vorgegebenen Zeit übernehmen. In einem Lesezyklus macht der Prozessor während RD bzw. INTA = LOW den Datenbus t r i state und übernimmt die Buszustände in der Mitte des Taktes T3 ohne Rücksicht auf ihre Gültigkeit. Mit Hilfe des READY-Eingangs ( Bild 3-31 ) können zur Verlängerung der Zugriffszeit Wartetakte eingeschoben werden.

T

T T1

T2

T

T

T

T

WAIT WAIT WAIt| waitI wait WAI

CLK

r-J

T3

r-J

i i ! ; READY

ALE

AB,

1

h

— iI L hE:

-I

L e s e z y k l u s : Daten vom

Schreibzyklus:Daten

RD WR

Bild 3-31:



Adresse

»om

Speicher Prozessor

Steuersignale

Ablauf des READY-Betriebszustandes

3.3 Der Mikroprozessor 8085A

89

Der Zustand der READ Y-Leitung wird im Takt T2 abgefragt. Ist er LOW, so fügt der Prozessor so lange Wartetakte ein, bis die Leitung wieder auf HIGH geht und setzt dann den Zyklus mit dem Takt T3 fort. Während dieser W a r t e t a k t e bleiben die höherwertigen Adreßleitungen A8 bis A15, die Datenleitungen ADO bis AD7 und alle Steuersignale in ihrem augenblicklichen Zustand. Bei einem Lesezyklus ist der Datenbus hochohmig; bei einem Schreibzylus führt er die Daten. Neben einer Verlängerung der Zugriffszeiten dient die R E A D Y Leitung zur Sichtbarmachung von Buszuständen durch binäre oder hexadezimale Anzeigeelemente. Im Gegensatz zu anderen Prozessoren kann der Wartezustand beliebig lange ausgedehnt werden. Im Reset-Betriebszustand (Bild 3 - 2 8 ) sind die Adreß- D a t e n - und ein Teil der Steuerleitungen (RD, WR und IO/K1) im hochohmigen ( t r i s t a t e ) Zustand. Damit ist der Prozessor von seinen Speicher- und Peripheriebausteinen getrennt. Bild 3 - 3 2 zeigt die Möglichkeit, mit Hilfe des HOLD-Eingangs den Bus ebenfalls hochohmig zu machen. Im Gegensatz zum Reset wird jedoch anschließend das Programm mit dem nächsten Befehl fortgesetzt.

T1 CLK

T2

T3

T HOLD

r r: r! r

=J HOLD

T T T HOLD I HOLD I HOLD

LJ

T HOLD

l—J |-rJ

n I

n

HL DA

ALE

AdreB- u n d Datenbus

Steuersignale ' RÜ,BR.IO/M

Bild 3 - 3 2 :

Ablauf des HOLD-Betriebszustandes

Liegt im Takt T2 der HOLD-Eingang auf HIGH, so fügt der Prozessor nach dem Takt T3 HOLD-Takte ein, in denen er die Adreßleitungen A8 bis A15,

90

3 Hardware

die Datenleitungen ADO bis A D 7 und die Steuerleitungen R D , WR und IO/M in den hochohmigen ( t r i s t a t e ) Zustand bringt. Als Bestätigung des H O L D - Z u s t a n des l e g t der Prozessor den H L D A - A u s g a n g auf HIGH. Dieser hochohmige W a r t e zustand bleibt so lange erhalten, bis der H O L D - E i n g a n g des Prozessors wieder auf L O W g e l e g t wird. Der Prozessor nimmt das Bestätigungssignal H L D A zurück und setzt mit dem nächsten Maschinenzyklus seine A r b e i t f o r t . Während des H O L D - Z u s t a n d e s des Prozessors kann der Bus von anderen Prozessoren oder Steuerbausteinen

( D M A - C o n t r o l l e r ) zur Datenübertragung verwendet

werden.

Dies bezeichnet man als D M A gleich D i r e c t M e m o r y A c c e s s (direkter S p e i c h e r z u g r i f f ) . Ein Beispiel

ist die

Abtastung

eines Signals durch einen schnellen

A/D-Wandler und Speicherung der W e r t e direkt in einen R A M - B e r e i c h . Ein dem

HOLD

ähnlicher

Betriebszustand

HALT

kann vom Programm

durch

den B e f e h l H L T e r r e i c h t werden. Dies ist ein 1 - B y t e - B e f e h l mit dem Code 76, der H A L T - T a k t e zur F o l g e hat, in denen e b e n f a l l s die A d r e ß - , D a t e n - und die Steuerleitungen R W , W R und IO/M hochohmig ( t r i s t a t e ) g e m a c h t werden. Als Bestätigung

des HALT-Betriebszustandes

werden die Statusleitungen

SO und

S1 beide auf L O W g e l e g t . Im Gegensatz zum H O L D kann ein H A L T nur durch ein R e s e t oder einen Interrupt wieder verlassen werden. Da in den Betriebszuständen Reset, H O L D und H A L T die A d r e ß - , D a t e n - und Steuerleitungen hochohmig sind und daher unvorhersehbare Zustände annehmen können,

sollten

mindestens die Steuerleitungen

RD

und WR

durch

Pull-up-

Widerstände auf inaktives H I G H - P o t e n t i a l g e l e g t werden.

3.3.5

Mikrorechnerschaltung mit dem Prozessor 8085A

Bild 3-33 zeigt zusammenfassend den a l l g e m e i n e n Aufbau einer M i k r o r e c h n e r schaltung

mit

dem

Steuereingänge.

Prozessor

Vollständige

8085A unter

besonderer

funktionsfähige

Berücksichtigung

Schaltungen

werden erst

der nach

Besprechung der S p e i c h e r - und Peripheriebausteine v o r g e s t e l l t . An den Anschlüssen X I

und X 2 liegt ein Quarz (z.B. 4 M H z ) mit K o n d e n s a t o -

ren von 5,6 pF gegen Masse. Der C L K - A u s g a n g hat dann die halbe Frequenz (2 MHz). Am

RESIN-Eingang

liegt eine

Auto-Reset-Schaltung

zum

Anlauf

nach

dem

Einschalten der Versorgungsspannung und ein e n t p r e l l t e r T a s t e r für ein R e s e t während des Betriebes. Der T R A P - I n t e r r u p t kann e b e n f a l l s mit einem e n t p r e l l ten T a s t e r ausgelöst werden. Die drei RST-Interrupts werden über Inverter auf L O W gehalten, deren Eingänge mit Widerständen auf HIGH liegen. Daher können die Anschlüsse o f f e n bleiben oder nach Bedarf von mehreren Stellen aus ( v e r d r a h t e t e s O D E R ) auf L O W gelegt werden. D i e s e Schaltungen müssen dann O f f e n e - K o l l e k t o r - A u s g ä n g e haben. Die Leitungen SID und SOD sind für s e r i e l l e Datenübertragung

vorgesehen, sie können aber

auch für zusätzliche

signale verwendet werden, die vom Programm gesteuert werden.

Steuer-

3.3 Der Mikroprozessor 8085A

Bild 3 - 3 3 :

M i k r o r e c h n e r s c h a l t u n g mit d e m P r o z e s s o r

8085A

91

92

3 Hardware

Die Steuerausgänge RD, WR und IO/M werden durch Pull-up-Widerstände auf HIGH gehalten, damit sie im hochohmigen Zustand ( t r i s t a t e ) inaktiv bleiben und kein Undefiniertes Potential annehmen können. Für den Anschluß allgemein verwendbarer Speicher- und Peripheriebausteine werden die unteren Adressen in einem Adreßspeicher festgehalten, der durch das ALE-Signal gesteuert wird. Die besonders für den Prozessor 8085A vorgesehenen Mehrzweckbausteine werden direkt an den gemeinsamen Adreß/Datenbus angeschlossen. Die höherwertigen Adreßleitungen sorgen zusammen mit dem IO/M-Signal für die Auswahl der S p e i c h e r - und Peripheriebausteine. Der READY-Eingang liegt mit einem Pull-up-Widerstand auf HIGH für den Fall, daß keine W a r t e s c h a l tung angeschlossen ist. Der HOLD- und der INTR-Eingang werden über Inverter auf LOW gehalten, deren Eingänge über Pull-up-Widerstände auf HIGH liegen für den F a l l , daß kein DMA- bzw. Interruptsteuerbaustein angeschlossen ist.

3.4

Speicherbausteine

Man unterscheidet Schreib/Lesespeicher und F e s t w e r t s p e i c h e r . Schreib/Lesespeicher heißen auch RAM für Random Access Memory gleich Speicher für wahlfreien Zugriff. Festwertspeicher bezeichnet man auch als ROM für Read Only Memory gleich N u r - L e s e - S p e i c h e r . Wahlfrei bedeutet, daß man unter Angabe einer Adresse j e d e beliebige Speicherstelle direkt erreichen kann. In diesem Sinne sind auch ROMs Speicher im wahlfreien Zugriff.

3.4.1

Aufbau und Wirkungsweise

Speicherbausteine sind meist entsprechend Bild 3 - 3 4 byteorganisiert: beim Anlegen einer Adresse werden immer acht Bits oder ein Byte parallel a n g e sprochen. Ihre Eingänge und Ausgänge für Daten haben gemeinsame Anschlüsse. Bei bitorganisierten Speicherbausteinen liegen acht Bausteine parallel am Datenbus. Ihre Eingangs- und Ausgangsleitungen sind meist getrennt. Die Adreßeingänge liegen am Eingang eines Adreßdecoders, der das adressierte Speicherbyte auswählt. Es wird über die Datenanschlüsse übertragen. Über Steuereingänge, die auf die Bausteinsteuerung führen, wird der Baustein f r e i gegeben. Dabei gibt er beim Lesen den Inhalt eines Speicherbytes an den Datenbus ab; beim Schreiben nimmt er ein Byte vom Datenbus a u f . Ist er nicht freigegeben, so sind seine Datenausgänge hochohmig ( t r i s t a t e ) und seine Dateneingänge gesperrt. Die Speichermatrix kann entsprechend Bild 3 - 3 5 aus verschiedenartigen Speicherelementen bestehen.

92

3 Hardware

Die Steuerausgänge RD, WR und IO/M werden durch Pull-up-Widerstände auf HIGH gehalten, damit sie im hochohmigen Zustand ( t r i s t a t e ) inaktiv bleiben und kein Undefiniertes Potential annehmen können. Für den Anschluß allgemein verwendbarer Speicher- und Peripheriebausteine werden die unteren Adressen in einem Adreßspeicher festgehalten, der durch das ALE-Signal gesteuert wird. Die besonders für den Prozessor 8085A vorgesehenen Mehrzweckbausteine werden direkt an den gemeinsamen Adreß/Datenbus angeschlossen. Die höherwertigen Adreßleitungen sorgen zusammen mit dem IO/M-Signal für die Auswahl der S p e i c h e r - und Peripheriebausteine. Der READY-Eingang liegt mit einem Pull-up-Widerstand auf HIGH für den Fall, daß keine W a r t e s c h a l tung angeschlossen ist. Der HOLD- und der INTR-Eingang werden über Inverter auf LOW gehalten, deren Eingänge über Pull-up-Widerstände auf HIGH liegen für den F a l l , daß kein DMA- bzw. Interruptsteuerbaustein angeschlossen ist.

3.4

Speicherbausteine

Man unterscheidet Schreib/Lesespeicher und F e s t w e r t s p e i c h e r . Schreib/Lesespeicher heißen auch RAM für Random Access Memory gleich Speicher für wahlfreien Zugriff. Festwertspeicher bezeichnet man auch als ROM für Read Only Memory gleich N u r - L e s e - S p e i c h e r . Wahlfrei bedeutet, daß man unter Angabe einer Adresse j e d e beliebige Speicherstelle direkt erreichen kann. In diesem Sinne sind auch ROMs Speicher im wahlfreien Zugriff.

3.4.1

Aufbau und Wirkungsweise

Speicherbausteine sind meist entsprechend Bild 3 - 3 4 byteorganisiert: beim Anlegen einer Adresse werden immer acht Bits oder ein Byte parallel a n g e sprochen. Ihre Eingänge und Ausgänge für Daten haben gemeinsame Anschlüsse. Bei bitorganisierten Speicherbausteinen liegen acht Bausteine parallel am Datenbus. Ihre Eingangs- und Ausgangsleitungen sind meist getrennt. Die Adreßeingänge liegen am Eingang eines Adreßdecoders, der das adressierte Speicherbyte auswählt. Es wird über die Datenanschlüsse übertragen. Über Steuereingänge, die auf die Bausteinsteuerung führen, wird der Baustein f r e i gegeben. Dabei gibt er beim Lesen den Inhalt eines Speicherbytes an den Datenbus ab; beim Schreiben nimmt er ein Byte vom Datenbus a u f . Ist er nicht freigegeben, so sind seine Datenausgänge hochohmig ( t r i s t a t e ) und seine Dateneingänge gesperrt. Die Speichermatrix kann entsprechend Bild 3 - 3 5 aus verschiedenartigen Speicherelementen bestehen.

3.4 Speicherbausteine

Speicher-

Adreßdecoder

BausteinSteuerung

Matr i x

t RAM:

Adreßei ngänge

schreiben

EPROM :

Baustein-

programmieren

Freigabe

Bild 3 - 3 4 :

Datenansch1üsse

A u f b a u eines b y t e o r g a n i s i e r t e n S p e i c h e r b a u s t e i n s

statisches Fl i p f lop

Bild 3-3S:

Tristate-Treiber

AusgangstreiberFreigabe

X

L _ L_r " L

a.

93

b.

dynamischer Trans i stor

c.

PROM m i t Sicherung

d.

EPROM m i t Trans i s t o r

Speicherelemente

S t a t i s c h e S c h r e i b / L e s e s p e i c h e r nach Bild 3 - 3 5 a b e s t e h e n aus zwei r ü c k g e k o p p e l t e n T r a n s i s t o r e n in MOS-, CMOS- oder bipolarer T e c h n i k . D y n a m i s c h e S c h r e i b / L e s e s p e i c h e r n a c h Bild 3 - 3 5 b b e s t e h e n aus einem S c h a l t t r a n s i s t o r und einem S p e i c h e r k o n d e n s a t o r , der seine Ladung und d a m i t seinen S p e i c h e r i n h a l t im L a u f e der Zeit verliert. Die Ladung muß durch b e s o n d e r e A u f f r i s c h s c h a l tungen im Abstand von Millisekunden w i e d e r h e r g e s t e l l t w e r d e n . Bei S c h r e i b / L e s e s p e i c h e r n s t e l l t sich nach dem E i n s c h a l t e n der Versorgungsspannung e i n zufälliger Speicherzustand ein. Nach dem Abschalten der Versorgungsspannung geht der Speicherinhalt verloren.

94

3

Hardware

Festwertspeicher behalten ihren Speicherinhalt unabhängig von der Versorgungsspannung. Maskenprogrammierte Festwertspeicher (ROM) werden bereits bei der Herstellung programmiert und lassen sich nicht mehr verändern. Ihre Speicherelemente bestehen aus offenen oder geschlossenen Verbindungen in der Speichermatrix. Anwenderprogrammierbare Festwertspeicher (PROM) nach Bild 3-35c werden elektrisch durch Durchbrennen von Sicherungselementen mit Überspannung programmiert; durchgebrannte Strecken können nicht wiederhergestellt werden. Löschbare Festwertspeicher (EPROM) nach Bild 3-35d werden vom Anwender elektrisch durch Aufladen von isolierten Gates mit Überspannung programmiert. Sie können durch Bestrahlen mit UV-Licht wieder gelöscht werden. EEPROMs sind elektrisch programmierbare und auch elektrisch wieder löschbare Festwertspeicher. Der Adreßdecoder eines Speicherbausteins besteht aus umfangreichen Logikschaltungen. Je nach Halbleitertechnik liegt eine Schaltzeit von 50 bis 500 ns zwischen dem Anlegen der Adresse und der Auswahl des Speicherelementes. Die Schaltzeiten der Bausteinsteuerung und der Ausgangstreiber sind kleiner. Bild 3-36 zeigt den zeitlichen Verlauf eines Lesevorganges, bei dem der Speicherbaustein Daten an den Prozessor sendet.

Lese

-

Z y k l u s

• Zugriffszeit Adressen

"V

i r

t BausteinFreigabe

LeseSignal

G)

Datenbus

D

Daten

gültig

Prozessor übernimmt Daten

Bild 3-36:

Speicher-Lesezyklus

Der Mikroprozessor hält während der gesamten Lese-Zykluszeit seine Datenausgangstreiber im hochohmigen (tristate) Zustand. Zum Zeitpunkt ( l ) schaltet der Speicherbaustein seine Datenausgangstreiber auf den Datenbus. Zum Zeit-

3.4 Speicherbausteine

95

punkt (2) m a c h t der S p e i c h e r b a u s t e i n seine D a t e n a u s g ä n g e wieder hochohmig und m a c h t den D a t e n b u s f r e i . In der Zwischenzeit muß der Prozessor die g ü l t i gen D a t e n ü b e r n e h m e n . Die A d r e ß l e i t u n g e n dienen nur zur Auswahl und haben keinen Einfluß auf den Z e i t p u n k t der D a t e n a u s g a b e oder d e r B u s f r e i g a b e . Der S t e u e r e i n g a n g " B a u s t e i n f r e i g a b e " ist meist aktiv LOW. Das an d e n Eingang a n zulegende S t e u e r s i g n a l wird g e b i l d e t aus h ö h e r w e r t i g e n A d r e ß l e i t u n g e n (Baus t e i n a u s w a h l ) und a u s Z e i t b e d i n g u n g e n (Lesesignal, T a k t ) . Die Zeit zwischen der f a l l e n d e n F l a n k e des F r e i g a b e s i g n a l s und den gültigen D a t e n (1) b e z e i c h n e t man a l s A u s w a h l - Z u g r i f f s z e i t . Hat der Prozessor die D a t e n ü b e r n o m m e n , so sorgt die s t e i g e n d e Flanke des F r e i g a b e s i g n a l s d a f ü r , daß nach d e r B u s f r e i g a bezeit der D a t e n b u s zum Z e i t p u n k t (2) wieder hochohmig und d a m i t f ü r den Prozessor v e r f ü g b a r i s t . D a m i t auch d i e D a t e n d e r r i c h t i g e n S p e i c h e r s t e l l e a n liegen, d ü r f e n sich die Adressen innerhalb der A d r e ß - Z u g r i f f s z e i t n i c h t ä n dern. Diese Zeit ist größer o d e r gleich der A u s w a h l - Z u g r i f f s z e i t . Bild 3 - 3 7 zeigt den zeitlichen Verlauf e i n e s Schreibvorganges, bei dem der Speicher die vom Prozessor g e s e n d e t e n D a t e n ü b e r n i m m t .

- S c h r e i b

f

-

riffsz sit Adressen

— \

Z y k1 U S >

SchreibSignal

Datenbus

/

1

! /

BausteinFreigabe

7

/

/

\

-

1 i

m

..j

Daten

¡D

gültig

1 I

Speicher übernimmt Daten

Bild 3 - 3 7 :

Speicher-Schreibzyklus

Bei einem Schreibzyklus muß z u n ä c h s t die r i c h t i g e S p e i c h e r s t e l l e a u s g e w ä h l t worden sein, bevor der Baustein s e i n e D a t e n e i n g ä n g e ö f f n e t und die D a t e n ü b e r n i m m t . Dies g e s c h i e h t zum Z e i t p u n k t (3) mit der s t e i g e n d e n F l a n k e des F r e i g a b e - bzw.- Schreibsignals. Die Adressen haben keinen Einfluß auf den Z e i t p u n k t der D a t e n ü b e r n a h m e , j e d o c h d ü r f e n sie sich i n n e r h a l b der A d r e ß Z u g r i f f s z e i t n i c h t ä n d e r n , d a m i t die r i c h t i g e S p e i c h e r s t e l l e a d r e s s i e r t wird. Die S t e u e r e i n g ä n g e zur B a u s t e i n f r e i g a b e und f ü r das Schreibsignal sind meist

96

3 Hardware

aktiv

LOW.

Ihre

Signale

(Bausteinauswahl) Flanke bereitet Zeit

vor d e r

werden

gebildet

aus

und aus Zeitbedingungen

die

Übernahme

Übernahme

der

Daten

(Schreibzeit)

höherwertigen

Adreßleitungen

(Takt, Schreibsignal). Die vor.

Diese

und d a n a c h

fallende

müssen e i n e b e s t i m m t e

(Haltezeit)

stabil

sein. B e i

e i n e m S c h r e i b z y k l u s l e g t d e r M i k r o p r o z e s s o r mit s e i n e n A u s g a n g s t r e i b e r n auf

den

Bus;

die

Steuereingänge

Ausgangstreiber

Die

folgenden

von

Speichers

sind i m m e r

verschiedenen

Die

Daten-

Speicherbaustein.

Abschnitte zeigen

folgenden

Daten

hochohmig.

( F r e i g a b e und S c h r e i b e n ) b e s t i m m e n d e n Z e i t p u n k t der

übernahme durch den

den später

des

Beispiele

für Speicherbausteine,

Schaltungsbeispielen

Herstellern

e n t h a l t e n sind.

mit u n t e r s c h i e d l i c h e n

die a u c h

in

Da diese

Bausteine

Zugriffszeiten

angeboten

w e r d e n , sind a u f j e d e n F a l l die D a t e n b l ä t t e r d e r H e r s t e l l e r zu R a t e zu z i e h e n . A n s c h l u ß b i l d e r d e r B a u s t e i n e b e f i n d e n sich im

3.4.2

Anhang.

Die Festwertspeicher (EPROM) 2716 und 2732

271 6

Speichermatrix

Adreßdecoder

2 0 1 6)

\P n n n n n n

BausteinSteuerung

I &

t

cE

OE A

Adreßbus

10

AO 07

Datenbus Bild 3-38:

Bild

Blockschaltplan

3-38

folgende

zeigt

den

des F e s t w e r t s p e i c h e r s

Blockschaltplan

des

2716

EPROMs

Eigenschaften:

-

Versorgungsspannung

-

V e r l u s t l e i s t u n g a k t i v 500 m W , W a r t e z u s t a n d

+5

Volt

-

Speicherkapazität

2 KByte

(2048

Bytes)

130

mW

2716.

Der

Baustein

hat

3.4 Speicherbausteine

97

- hochohmige ( t r i s t a t e ) Ausgangstreiber - e i n f a c h e Programmierung durch 5 0 - m s - I m p u l s e - Löschen durch Bestrahlung ( c a . 20 min) mit U V - L i c h t Der Eingang Vpp wird bei der Programmierung auf +25 Volt und im B e t r i e b auf HIGH (+5 V o l t ) g e l e g t . Da der Baustein als F e s t w e r t s p e i c h e r nur Ausgangstreiber h a t , könnten diese bei einem Schreibversuch beschädigt werden. Verbindet man Vpp mit einem Schreibsignal, das aktiv LOW ist, so ist der Baustein dagegen geschützt. Dazu kann das W R - S i g n a l des Prozessors 8 0 8 5 A dienen. Der im Abschnitt 3.4.3 behandelte Schreib/Lesespeicher 2 0 1 6 hat die g l e i c h e Anschlußbelegung wie der F e s t w e r t s p e i c h e r 2 7 1 6 . Jedoch t r i t t an die S t e l l e des Programmiereingangs das Schreibsignal WE, das aktiv LOW i s t . Die Datenbustreiber sind bidirektional. Die Adreßeingänge

A0 bis A10 dienen zur Auswahl von 2 0 4 8

Speicherbytes.

Die Adressen müssen in der langsamsten Ausführung 450 ns lang vor der Ausgabe gültiger Daten stabil sein. Die Datenleitungen DO bis D7 sind Ausgänge mit T r i s t a t e - T r e i b e r n . Ist der Baustein durch die Steuereingänge g e s p e r r t , so befinden sie sich im h o c h o h migen Zustand. Ist der Baustein f r e i g e g e b e n , so nehmen sie das den Daten e n t sprechende P o t e n t i a l an.

4 50ns

AB

r

A d r e s s e n gültig 4 5 0 ns

CE 120 ns -7

•—100 ns 7 •

1

0E DB Bild 3 - 3 9 :

Datengültig

\

^

Lesezyklus des EPROMs 2 7 1 6 ( 4 5 0 ns)

Bei den Steuersignalen u n t e r s c h e i d e t man CE (Chip Enable = B a u s t e i n f r e i g a b e ) und Ö E

(Output

Enable

= F r e i g a b e der

Ausgangstreiber).

Beide sind aktiv

LOW. Ist der CE-Eingang HIGH, so befindet sich der Baustein in einem W a r t e zustand mit verminderter Leistungsaufnahme. In der 450-ns-Ausführung b e t r ä g t die Verzögerungszeit

zwischen der fallenden Flanke des C E - S i g n a l s und dem

3 Hardware

98

S t a b i l w e r d e n der D a t e n m a x i m a l 4 5 0 ns. D i e D a t e n a u s g ä n g e sind m a x i m a l 100 ns n a c h der s t e i g e n d e n F l a n k e wieder im h o c h o h m i g e n Z u s t a n d . D e r Ö E - E i n gang g i b t die A u s g a n g s t r e i b e r

f r e i . D i e V e r z ö g e r u n g s z e i t zwischen der f a l l e n -

den F l a n k e d e s O E - S i g n a l s und den D a t e n b e t r ä g t nur 120 n s . D i e S i g n a l e CE und O E müssen zum L e s e n b e i d e LOW s e i n . B e i 8 0 8 5 - S y s t e m e n wird man das CE-Signal

aus höheren

Adreßleitungen

und IO/M a b l e i t e n ,

die s e h r

früh zu

B e g i n n e i n e s L e s e z y k l u s s t a b i l sind. O E ist mit dem L e s e s i g n a l RD verbinden, das e r s t im T a k t T 2 aktiv L O W wird. Bild 3 - 3 9 zeigt den z e i t l i c h e n

Verlauf

des L e s e v o r g a n g s . D i e e i n g e t r a g e n e n Z e i t e n sind H ö c h s t w e r t e für die l a n g s a m s t e 4 5 0 - n s - A u s f ü h r u n g . D i e Ausführung 2 7 1 6 - 1 hat eine Z u g r i f f s z e i t von 3 5 0 ns. D e r B a u s t e i n 2 7 3 2 hat g e g e n ü b e r dem 2 7 1 6 die d o p p e l t e S p e i c h e r k a p a z i t ä t von 4

KByte.

A n s t e l l e des

Adreßeingang

All.

Eingangs

Vpp für die P r o g r a m m i e r s p a n n u n g

Die P r o g r a m m i e r s p a n n u n g

tritt

D i e Anschlußbilder für b e i d e B a u s t e i n e b e f i n d e n s i c h im Anhang.

Weiterent-

w i c k l u n g e n sind die B a u s t e i n e 2 7 6 4 mit 8 K B y t e und 2 7 1 2 8 mit 16 K B y t e .

3.4.3

Der s t a t i s c h e S c h r e i b / L e s e s p e i c h e r ( R A M ) 2 0 1 6

2 0 0 ns

2 0 0 ns C

P

h

t

Bild 3 - 4 0 :

der

wird an den Eingang O E g e l e g t .

Lesezyklus des S c h r e i b / L e s e s p e i c h e r s 2 0 1 6 ( 2 0 0 n s )

3.4

Speicherbausteine

gg

Der Baustein wurde deshalb aus dem vielfältigen Angebot an Speicherbausteinen herausgesucht, weil er die gleiche Speicherkapazität und Anschlußbelegung wie der Festwertspeicher 2716 (Bild 3-38) h a t . Da es sich um einen Schreib/Lesespeicher handelt, sind die Datenbusanschlüsse bidirektional, d.h. in beiden Richtungen als Eingang oder als Ausgang verwendbar. Der Steuereingang WE tritt an die Stelle des Programmiereingangs Vpp. Mit WE = HIGH wird der Baustein gelesen, mit WE = LOW beschrieben. In 8085-Systemen v e r bindet man daher WE mit dem Schreibsignal WR. Bild 3-40 zeigt den zeitlichen Verlauf des Lesevorganges in der langsamsten 200-ns-Ausführung. Während des gesamten Lesezyklus muß das Schreibsignal WE auf HIGH liegen. Die Daten sind 200 ns nach der fallenden Flanke an dem CS-Eingang gültig. Der OE-Eingang gibt die Ausgangstreiber 120 ns nach der fallenden Flanke frei. Durch eine steigende Flanke an den CS- bzw. OE-Eingängen werden die Daten wieder vom Bus weggenommen. 60 ns danach sind die Datenausgänge wieder hochohmig ( t r i s t a t e ) . Die Adreßeingänge dürfen sich mindestens 200 ns vor den gültigen Daten nicht mehr ändern. Bild 3-41 zeigt den zeitlichen Verlauf eines Schreibzyklus in der langsamsten 200-ns-Ausführung.

0E

ns

ns

Bild 3-41: Schreibzyklus des Schreib/Lesespeichers 2016 (200 ns) Während des gesamten Schreibzyklus darf sich das OE-Signal zur Freigabe der Ausgangstreiber nicht ändern, da diese im hochohmigen Zustand bleiben müssen. 120 ns nach der fallenden Flanke an den Eingängen CS und WE ist der Speicher zur Datenübernahme bereit. Diese erfolgt mit der steigenden Flanke des WESignals. Die Daten müssen 60 ns vor und 10 ns nach der Übernahme stabil sein.

100

3

Hardware

Die Adressen d ü r f e n sich 200 ns vor d e m Z e i t p u n k t der D a t e n ü b e r n a h m e n i c h t ändern. Da S p e i c h e r k a p a z i t ä t , Zeitverhalten und Anschlußbelegung d e s S c h r e i b / L e s e s p e i c h e r s (RAMs) 2016 und d e s F e s t w e r t s p e i c h e r s (EPROMs) 2716 im w e s e n t lichen ü b e r e i n s t i m m e n , ist möglich, universelle Schaltungen zu e n t w i c k l e n , die wahlweise mit beiden B a u s t e i n e n b e s t ü c k t w e r d e n können. In d e r E n t w i c k l u n g s phase wird d a s P r o g r a m m im RAM g e t e s t e t und f ü r den B e t r i e b in EPROMs "geschossen". Die CMOS-Ausführung mit d e r Bezeichnung 6116 h a t im W a r t e z u s t a n d e i n e S t r o m a u f n a h m e von m a x i m a l 2 mA. W e i t e r e n t w i c k l u n g e n h a b e n S p e i c h e r k a p a z i t ä t e n von 4 KByte e n t s p r e c h e n d dem B a u s t e i n 2732 und 8 K B y t e e n t s p r e c h e n d dem 2764. Der f ü r den Prozessor 8085A besonders e n t w i c k e l t e M e h r z w e c k b a u s t e i n 8155 e n t h ä l t e i n e n 256 Byte g r o ß e n S c h r e i b / L e s e s p e i c h e r . Der Baustein wird im Abschnitt 3.5.5 b e h a n d e l t .

3.4.4

Dynamische Schreib/Lesespeicher (DRAM)

D y n a m i s c h e S c h r e i b / L e s e s p e i c h e r e n t h a l t e n als Speicherzelle nur einen K o n d e n s a t o r , der seine Ladung verliert und in p e r i o d i s c h e n Abständen w i e d e r a u f g e f r i s c h t w e r d e n muß. Dies b e z e i c h n e t man a l s R e f r e s h . Die S p e i c h e r m a t r i x b e s t e h t aus Zeilen (englich row) und Spalten (englisch c o l u m n ) . Im G e g e n s a t z zum s t a t i s c h e n RAM 2016, der b y t e o r g a n i s i e r t ist, sind d y n a m i s c h e RAMs oder DRAMs b i t o r g a n i s i e r t . Ihr Vorteil ist die h ö h e r e S p e i c h e r d i c h t e , der n i e d r i g e r e Preis und die g e r i n g e r e V e r l u s t l e i s t u n g . N a c h t e i l i g ist die z u s ä t z liche B a u s t e i n s t e u e r u n g . Bild 3 - 4 2 zeigt d e n Aufbau und die Steuerung e i n e s 64 KBit DRAMs; die W e r t e in K l a m m e r n g e l t e n f ü r e i n e n 16 KBit S p e i c h e r . Zur Auswahl von 64 KBit sind 16 A d r e ß l e i t u n g e n n o t w e n d i g ; der B a u s t e i n e n t h ä l t jedoch nur 8 Adreßanschlüsse. Mit d e r S t e u e r l e i t u n g RAS Row Address S t r o b e gleich Z e i l e n a d r e ß ü b e r n a h m e wird d i e Zeilenadresse im Baustein g e s p e i c h e r t . Die S t e u e r l e i t u n g CAS Column Address Strobe gleich S p a l t e n a d r e ß ü b e r n a h m e s p e i c h e r t die S p a l t e n a d r e s s e . Die S t e u e r l e i t u n g WE Write Enable gleich S c h r e i b f r e i g a b e u n t e r s c h e i d e t L e s e - und Schreibzyklen. Eine K o m b i n a t i o n d e r R A S - und CAS-Signale s p e i c h e r t eine A u f f r i s c h a d r e s s e . Der Baustein h a t je einen D a t e n e i n g a n g und e i n e n g e t r e n n t e n D a t e n a u s g a n g . F ü r jede D a t e n b u s l e i tung ist ein Baustein e r f o r d e r l i c h . Da die Bausteine nur Abmessungen e i n e s " n o r m a l e n " T T L - B a u s t e i n s mit 16 Anschlüssen h a b e n , lassen sich auf e i n e r E u r o p a k a r t e (100 x 160 m m ) Speicher der G r ö ß e 64 KByte a u f b a u e n b e s t e h e n d aus 32 Bausteinen zu 16 KBit o d e r 8 B a u s t e i n e n zu 64 KBit. Die zusätzliche S p e i c h e r s t e u e r u n g b e s t e h t a u s A d r e ß b u s t r e i b e r n , einem W i e d e r a u f f r i s c h z ä h l e r und e i n e r T a k t s t e u e r u n g , die Ü b e r n a h m e - und A u f f r i s c h i m p u l s e

3.4 Speicherbausteine

Adreßtreiber

Bild 3 - 4 2 :

101

Datenleitung

Aufbau und Steuerung eines DRAMs

e r z e u g t . A n s t e l l e von T T L - S c h a l t u n g e n k ö n n e n a u c h h o c h i n t e g r i e r t e S t e u e r b a u s t e i n e v e r w e n d e t w e r d e n . Bild 3 - 4 3 und 3 - 4 4 zeigen d e n L e s e z y k l u s u n d d e n S c h r e i b z y k l u s e i n e s D R A M s . Die S c h a l t z e i t e n müssen d e n D a t e n b l ä t t e r n d e r H e r s t e l l e r e n t n o m m e n w e r d e n . Die Z y k l u s z e i t e n liegen z w i s c h e n 150 und 450 ns j e n a c h A u s f ü h r u n g . Die S t e u e r u n g legt z u n ä c h s t die a c h t n i e d e r w e r t i g e n A d r e ß b i t s an die A d r e ß e i n g ä n g e , die mit d e r f a l l e n d e n F l a n k e d e s R A S - S i g n a l s ü b e r n o m m e n w e r d e n . A n s c h l i e ß e n d w e r d e n d i e h ö h e r w e r t i g e n a c h t A d r e ß b i t s a n g e l e g t , die von d e r f a l l e n d e n F l a n k e des C A S - S i g n a l s ü b e r n o m m e n w e r d e n . Mit d e r f a l l e n d e n F l a n k e von CAS b e g i n n t n a c h e i n e r V e r z ö g e r u n g s z e i t d i e D a t e n a u s g a b e . Sie wird mit d e r s t e i g e n d e n F l a n k e von CAS n a c h e i n e r H a l t e z e i t b e e n d e t . In d e r B e t r i e b s a r t " S e i t e - L e s e n " b l e i b t d i e Z e i l e n a d r e s s e e r h a l t e n , und n u r d i e Spaltenadresse ändert sich.

102

3

Hardware

Adresse wechseln Adresse

Adresse

Adresse

y «

A0

A8 - A 1 5

RAS

L-,

CÄ5

HWarte-

Halte zeit

Zeit Daten

OUT

gültic

H,

ME

Bild 3-43: Lesezyklus e i n e s DRAMs

Adresse wechseln Adresse

U

Adresse

U

Adresse

\

AO - A?

\

A8 - » 1 5

I

RAS

I

m

-

i

\

WE

-

i aten

IN \

\

\

\

\

\ J

Vorbereitungszeit

Bild 3-44: Schreibzyklus eines DRAMs

H-H

Vi' Haltezeit

'

103

3.4 Speicherbausteine

In e i n e m einem

Schreibzyklus l i e g t die S c h r e i b f r e i g a b e l e i t u n g

Lesezyklus

speichert

WE auf LOW. Wie bei

die f a l l e n d e F l a n k e des R A S - S i g n a l s die

Zeilen-

a d r e s s e und die f a l l e n d e F l a n k e von CAS die S p a l t e n a d r e s s e . D e r S c h r e i b z e i t punkt wird e n t w e d e r durch die f a l l e n d e F l a n k e von CAS oder von WE g e s t e u e r t . Die D a t e n müssen e i n e g e r i n g e V o r b e r e i t u n g s z e i t vorher und e i n e e t w a s l ä n gere

Haltezeit

nachher

stabil

a n l i e g e n . In der B e t r i e b s a r t

"Seite-Schreiben"

b l e i b t die Z e i l e n a d r e s s e e r h a l t e n , und nur die S p a l t e n a d r e s s e ä n d e r t s i c h . Die S p e i c h e r k o n d e n s a t o r e n Beim

Anlegen

einer

Zeile

gleichzeitig.

müssen m i n d e s t e n s a l l e 2 ms a u f g e f r i s c h t

Zeilenadresse

Es

genügt

geschieht

also,

dies

für

innerhalb von 2

alle

ms a l l e

werden.

Spaltenbits

der

Zeilenadressen

a n z u l e g e n . D i e s kann durch L e s e - oder S c h r e i b z y k l e n g e s c h e h e n . Da d a b e i a b e r i m m e r nur die a d r e s s i e r t e Z e i l e a u f g e f r i s c h t wird, muß ein ä u ß e r e r Z e i l e n z ä h ler d a f ü r s o r g e n , daß a l l e Zeilen a d r e s s i e r t

werden. Bild 3 - 4 5 zeigt den z e i t -

lichen V e r l a u f e i n e s A u f f r i s c h z y k l u s .

• Adresse

y A

RefreshAdresse •

RAS

Zeilen-Lesezyklus

,

W A RAS-Wieder' bereitzeit —

RAS-Zugriffszeit

\

/

CAS

Bild 3 - 4 5 :

Nur-Auffrisch-Zyklus eines DRAMs

In e i n e m N u r - A u f f r i s c h - Z y k l u s ( R A S - O n l y - R e f r e s h ) wird die Adresse der a u f z u f r i s c h e n d e n Z e i l e mit der f a l l e n d e n F l a n k e ü b e r n o m m e n . Da a l l e S p a l t e n b i t s gleichzeitig

aufgefrischt

werden,

bleibt

das S p a l t e n a u s w a h l s i g n a l

CAS

kon-

s t a n t HIGH. D e r D a t e n e i n g a n g ist g e s p e r r t ; der D a t e n a u s g a n g h o c h o h m i g . Das RAS-Signal

muß eine b e s t i m m t e M i n d e s t z e i t LOW b l e i b e n und d a r f vor Ablauf

der W i e d e r b e r e i t z e i t

( P r é c h a r g é ) n i c h t wieder LOW w e r d e n . Zum A u f f r i s c h e n

gibt e s zwei V e r f a h r e n : A u f f r i s c h e n des g e s a m t e n S p e i c h e r s in e i n e m D u r c h l a u f ( B u r s t - R e f r e s h ) oder A u f f r i s c h e n e i n z e l n e r Z e i l e n w ä h r e n d des B e t r i e b e s . Bei einem

Burst-Refresh

wird der Prozessor z . B . durch e i n H O L D - S i g n a l a n -

g e h a l t e n , und mit Hilfe d e s A u f f r i s c h z ä h l e r s werden a l l e Z e i l e n n a c h e i n a n d e r adressiert.

Dieses

Verfahren

vermindert

die

Geschwindigkeit

des

Prozessors

und kann z e i t k r i t i s c h e Anwendungen ( I n t e r r u p t , Z e i t s c h l e i f e n ) s t ö r e n .

104

3 Hardware

Zum A u f f r i s c h e n w ä h r e n d d e s B e t r i e b e s g i b t es das " v e r s t e c k t e oder

einen normalen Lesezyklus angehängt

wird.

Lesezyklus Adresse wechseln

•C

Adresse

AO -

A7

I

I

•Refreshzyklus.

Adresse wechseln



Adresse

Adresse A8

-A15

* ~V

RefreshReT

J\

ÎËL e s s e

X

I

/

RAS

I

CAS

Daten

OUT

Bild 3-46:

Am

Auffrischen"

Hidden R e f r e s h , b e i d e m e n t s p r e c h e n d Bild 3 - 4 6 ein A u f f r i s c h z y k l u s an

gültig

V e r s t e c k t e r A u f f r i s c h - Z y k l u s eines D R A M s

A d r e ß e i n g a n g l i e g e n nacheinander der n i e d e r w e r t i g e T e i l der A d r e s s e , der

höherwertige

Teil

der

Adresse

und e i n

Auffrischzähler.

Die

erste

fallende

F l a n k e des Z e i l e n a d r e ß s i g n a l s s p e i c h e r t d i e Z e i l e n a d r e s s e , die z w e i t e d i e frischadresse.

D i e f a l l e n d e F l a n k e des S p a l t e n a d r e ß s i g n a l s C A S s p e i c h e r t

Spaltenadresse

und

frischens bleibt

gibt

die

Datenausgangstreiber

das C A S - S i g n a l

frei.

Während

des

auf L O W und hält d a b e i d i e D a t e n auf

Aufdie Aufdem

D a t e n a u s g a n g f e s t , der e r s t mit der s t e i g e n d e n F l a n k e d e s C A S - S i g n a l s w i e d e r hochohmig

wird. A u f f r i s c h z y k l u s l ä n g e r dauert als e i n n o r m a l e r

Lesezyklus,

kann e s e v e n t u e l l n ö t i g s e i n , den L e s e z y k l u s des P r o z e s s o r s durch

Da d e r v e r s t e c k t e

Wartetakte

(WAIT)

zu

verlängern.

Dieses

Verfahren

heißt

"Cycle-Stealing",

weil

dem

g e r a d e a b l a u f e n d e n P r o g r a m m Zyklen g e s t o h l e n w e r d e n . Ein a n d e r e s V e r f a h r e n legt

den A u f f r i s c h z y k l u s in e i n e n M l - Z y k l u s des Prozessors 8 0 8 5 A , der

3 mindestens 4 T a k t e d a u e r t .

statt

3.5 Peripheriebausteine

3.5

105

Peripheriebausteine

Peripheriebausteine verbinden den Mikrorechner mit seiner Umwelt, z.B. mit Leuchtdioden zur Anzeige von Ergebnissen oder mit Tastern zur Eingabe von Kommandos. Von den vielen zur Verfügung stehenden Bausteinen werden nur die behandelt, die in den Beispielschaltungen Verwendung finden. Dieser Abschnitt beschreibt schwerpunktmäßig den Anschluß der Peripheriebausteine an den Mikroprozessor 8085A. In den Abschnitten Software und Anwendungen finden sich Programmier- und Anwendungsbeispiele.

3.5.1

Aufbau und Wirkungsweise

Als Beispiele dienen die Ansteuerung einer Leuchtdiode und die Eingabe von Signalen mit einem Taster entsprechend Bild 3 - 4 7 .

Bild 3 - 4 7 :

Getrennte Ein/Ausgabeschaltungen

106

3 Hardware

Würde

man die

Leuchtdiode

mit

Vorwiderstand

(Bild

3 - 4 7 a ) direkt an eine

Datenleitung anschließen, so würde sie alle auf dem Bus liegenden Signale a n zeigen. Durch d i e hohe Stromaufnahme könnte die Datenleitung keine Signale mehr übertragen. Man b e n ö t i g t also ein F l i p f l o p als Speicher und einen T r e i ber, der den durch d i e Leuchtdiode fließenden Strom a u f n i m m t . Der T a k t e i n gang wird von der Adresse des Flipflops und vom Schreibsignal g e s t e u e r t . Ein A u s g a b e b e f e h l bringt ein Bit des Akkumulators in das F l i p f l o p , das über eine Treiberstufe sistor

die Leuchtdiode

ansteuert. Eine logische Null sperrt den T r a n -

und schaltet die Leuchtdiode aus; eine Eins ö f f n e t den Transistor und

schaltet die L e u c h t d i o d e ein. Dieser Zustand bleibt bis zu einem neuen A u s g a b e b e f e h l erhalten. Würde

man den

Eingabetaster

(Bild

3 - 4 7 b ) direkt

an die

Datenleitung

an-

schließen, so würde das Eingabepotential dauernd am Datenbus anliegen und dadurch die Datenleitung blockieren. Durch Zwischenschaltung eines T r i s t a t e T r e i b e r s kann das Programm in

den

Mikroprozessor

schaltet kurzzeitig den

die

am

mit einem E i n g a b e b e f e h l den Zustand der T a s t e

übernehmen. In der

Adreßbus

liegende

den T r i s t a t e - T r e i b e r

Akkumulator

übernommen

auf

Ausführungsphase dieses

Adresse zusammen d i e Datenleitung.

und später

mit dem

Das Potential

durch einen

Befehl

Befehls

Lesesignal wird in

ausgewertet.

Das Programm muß die Eingabe in genügend kurzen Abständen a b f r a g e n . Z e i t kritische

Signale

werden

daher

mit

einem

Interrupteingang

verbunden,

der

sofort reagiert. Für die in Bild 3-47 dargestellten Schaltungen werden meist

TTL-Bausteine

v e r w e n d e t . Sie dienen e n t w e d e r zur Eingabe oder zur Ausgabe. Bild 3 - 4 8 z e i g t eine universell verwendbare Schaltung, die wahlweise zur Eingabe oder zur A u s gabe benutzt werden kann.

3.5

Peripheriebausteine

107

Parallelschn^ttstelle

DfO i

i RichtungsFlipflop

-«|

| Dateni Flipflop

I

L

Bausteinsteuerung^jI I

|

lesen

schreiben

Adresse

Bild 3-48: Programmierbare Ein/Ausgabeschaltungen

Die Schaltung enthält sowohl einen Ausgabespeicher als auch einen EingabeT r i s t a t e - T r e i b e r . Beide liegen an einer gemeinsamen Ein/Ausgabeleitung. In der Bausteinsteuerung entscheidet ein Richtungsflipflop, ob die Anschlußleitung zur Eingabe oder Ausgabe dienen soll. Es kann während des Betriebes umprogrammiert werden, so daß beide Betriebsarten möglich sind. Die Technik der programmierbaren Ein/Ausgabe wird in den sogenannten Parallelschnittstellen angewendet, die für die besonderen Bedürfnisse der Mikrorechnertechnik entwickelt wurden. Sie werden in MOS-Technik hergestellt und bilden zusammen mit dem Mikroprozessor eine Bausteinfamilie. Ihre Steuersignale und ihr Zeitverhalten sind so aufeinander abgestimmt, daß sie problemlos miteinander verbunden werden können.

108

3.5.2

Für

3 Hardware

TTL-Bausteine zur Ein/Ausgabe

direkt

am

Datenbus liegende Schaltungen verwendet

TTL-LS-Bausteine,

um

die Busbelastung

man vorzugsweise

gering zu halten. Die

Schaltzeiten

liegen bei 10 ns und erfüllen damit alle zeitlichen Anforderungen des Prozessors. Sie enthalten

meist acht Flipflops bzw. T r i s t a t e - T r e i b e r

in einem

Ge-

häuse und werden an alle acht Datenbusleitungen angeschlossen. Bild 3-49 zeigt zwei Beispiele.

11JL 1JL II I 5V



Il

5V

r r 3xi,7 KJl

6x 390S3.

LED

GND OC

Y — >1' WR—

r

v

w

y

W

V

V

74LS373

l^il 74LS244

RD

Datenbus

a. Ausgabe

Bild 3-49:

b.

Eingabe

Ein/Ausgabe mit TTL-Bausteinen

Der in dem Beispiel verwendete Ausgabebaustein 74LS373 besteht aus acht Flipflops in einem Gehäuse. Die gemeinsame Taktleitung G ( F r e i g a b e ) ist positiv zustandsgesteuert. Für G = HIGH sind die Flipflops transparent

(durchlässig):

die am Eingang anliegenden Daten erscheinen auch am Ausgang. Für G = LOW sind die Eingänge der Flipflops gesperrt: am Ausgang liegen die zuletzt gespeicherten Daten. Die Ausgänge der Flipflops zeigen Tristate-Verhalten: für ÖC = L O W sind die Ausgänge durchgeschaltet. Sie können im LOW-Zustand maximal 24 mA aufnehmen und damit Leuchtdioden direkt ansteuern. OC bedeutet Output Control = Steuerung der Ausgangstreiber. Der Freigabetakt G der Flipflops wird abgeleitet

aus einer NOR-Verknüpfung des Schreibsignals WR und dem

Ausgang "7 einer Decoderschaltung, die dem Baustein eine Adresse innerhalb des Systems zuordnet.

3.5 Peripheriebausteine

109

Der zur Eingabe verwendete Baustein 74LS244 besteht aus acht T r i s t a t e - T r e i bern mit einer gemeinsamen Freigabeleitung, die aktiv LOW ist. Die O D E R Schaltung verknüpft den Decoderausgang Y mit dem Schreibsignal RD durch ein logisches UND; beide sind aktiv LOW. Die Eingänge werden durch Widerstände auf HIGH gehalten und können durch Schiebeschalter oder Taster auf LOW gebracht werden. Ein LOW am Eingang erscheint als LOW bzw. logische Null am Ausgang. Der Baustein 74LS240 hat invertierende Ausgänge und würde ein LOW am Eingang als HIGH oder logische Eins am Ausgang e r s c h e i nen lassen.

3.5.3

Die Parallelschnittstellen 8155 und 8 2 5 5

Beide Bausteine gehören zur Familie der Prozessoren 8080 und 8085A und sind in ihren Steuersignalen auf diese a b g e s t i m m t . Für den Betrieb mit der schnellen Prozessorversion 8 0 8 5 A - 2 gibt es die besonders ausgewählten Versionen 8 1 5 5 - 2 und 8 2 5 5 - 5 . Die Betriebsarten der Peripherieschaltungen werden an Modellen e r k l ä r t . Anwendungsbeispiele folgen im S o f t w a r e t e i l . Die S c h n i t t s t e l len enthalten Datenregister (8 B i t ) und S t e u e r r e g i s t e r , mit denen die Art der Datenübertragung programmiert werden kann. Diese erfolgt immer für die acht Bit eines Registers gleichzeitig (parallel). Die folgenden Modelle zeigen nur eins der a c h t Bit eines R e g i s t e r s . Bei der direkten Dateneingabe (Bild 3 - 5 0 ) sperrt ein Richtungsflipflop die Ausgangstreiber; sie befinden sich im hochohmigen Zustand. Wird die Leitung Datenbus

Bild 3 - 5 0 :

Betriebsart direkte Dateneingabe

110

3 Hardware

durch die B a u s t e i n a u s w a h l und das Signal " L e s e n " a u s g e w ä h l t , so legen die Bustreiber in e i n e m Lesezyklus das P o t e n t i a l d e r Leitung kurzzeitig auf den Datenbus.

Datenbus

Bild 3 - 5 1 :

B e t r i e b s a r t D a t e n a u s g a b e mit Speicher

Bei der D a t e n a u s g a b e mit einem Ausgabespeicher (Bild 3 - 5 1 ) gibt das R i c h t u n g s f l i p f l o p die A u s g a n g s t r e i b e r f r e i ; die D a t e n liegen d a u e r n d am Ausgang an. Wird d a s D a t e n f l i p f l o p d u r c h die Bausteinauswahl und das Signal " S c h r e i b e n " a u s g e w ä h l t , so ü b e r n i m m t es in einem Schreibzyklus die vom Prozessor g e s e n d e t e n D a t e n . Diese erscheinen auf d e r Ausgangsleitung. Bei einem L e s e b e f e h l wird der Inhalt des D a t e n f l i p f l o p s und n i c h t der L e i t u n g s z u s t a n d g e l e sen. In den Bildern 3 - 5 0 und 3 - 5 1 b e s t i m m t der Prozessor durch E i n g a b e - und A u s g a b e b e f e h l e den Zeitpunkt der D a t e n ü b e r t r a g u n g . Die Schaltung n a c h Bild 3 - 5 2 d a g e g e n e n t h ä l t E i n g a b e - und Ausgabespeicher, die t e i l w e i s e durch ä u ß e r e Signale g e s t e u e r t werden können. Bei der Ausgabe s c h r e i b t der Mikroprozessor D a t e n in den A u s g a b e s p e i c h e r . Die A u s g a n g s t r e i b e r werden durch ein von außen k o m m e n d e s Signal g e s t e u e r t . Der E m p f ä n g e r b e s t i m m t den Z e i t p u n k t , zu dem er die D a t e n ü b e r n e h m e n will. Gleichzeitig kann ein I n t e r r u p t s i g n a l e r z e u g t w e r d e n , das dem Prozessor die Datenübernahme meldet.

3.5

111

Peripheriebausteine

FertigSignal Interrupt

Eingabe

-

Steuerung

Datenbusi

ÜbernahmeTakt

EingabeFlipflop

ßustreiber

Ausgangstreiber

PeripherieDatenleitung

1

t &

T L.u 1 |

AusgabeFlipflop

I I I I

tn

RichtungsFlipflop

Register Auswahl lesen

Bild 3-52:

schreiben

Betriebsart g e s t e u e r t e Ein/Ausgabe

Bei der Eingabe schreibt der Sender Daten in den Eingangsspeicher und m e l d e t gleichzeitig

mit einem Interruptsignal, daß neue Daten b e r e i t l i e g e n . Der P r o -

zessor holt sie mit einem L e s e b e f e h l aus dem Eingangsspeicher ab. Bild

3-53 z e i g t

wegen den

der

im

einen

Mikroprozessor

einen

Blockschaltplan

Multiplexverfahren 8085A

Schreib/Lesespeicher

des

Mehrzweckbausteins

betriebenen

angeschlossen

werden kann. Der Baustein

von 256 Bytes, einen Z e i t g e b e r

Parallelschnittstelle bestehend aus z w e i 8 - B i t - und einem Die

Leitungen

8085A

ADO bis A D 7

angeschlossen.

werden

Wenn der

an den

nur

der an

enthält

( T i m e r ) und e i n e

6-Bit-Register.

Adreß/Datenbus des Prozessors

Baustein keine

die Datenausgänge im hochohmigen

8155,

Adreß/Datenleitungen

Daten sendet, befinden sich

( t r i s t a t e ) Zustand. Der Eingang CE (Chip

Enable gleich B a u s t e i n f r e i g a b e ) ist aktiv L O W und gibt den Baustein f r e i . Der RESET-Eingang ( R e s e t RESOUT-Ausgang

gleich zurücksetzen)

ist aktiv HIGH und wird mit dem

des 8085A verbunden. Er löscht a l l e R e g i s t e r und bringt die

Parallelschnittstelle

in

einen

Grundzustand.

Die

Eingänge

RD

(Read

lesen) und W R ( W r i t e gleich s c h r e i b e n ) steuern die Richtung der tragung

zwischen

Baustein und Prozessor.

Der

Eingang

gleich

Datenüber-

IO/M (Input

Output/

M e m o r y gleich Eingabe Ausgabe/Speicher) unterscheidet zwischen einer A d r e s -

112

3 Hardware

sierung der R e g i s t e r ( I O / M g l e i c h H I G H ) und d e s S c h r e i b / L e s e s p e i c h e r s gleich

LOW).

Der

Eingang

A d r e ß s p e i c h e r ) hält die

ALE

(Address

Latch

(IO/M

Enable g l e i c h F r e i g a b e

A d r e s s e n in den i n t e r n e n

Adreßspeichern

fest.

der

Diese

S t e u e r s i g n a l e w e r d e n d i r e k t mit dem 8 0 8 5 A verbunden.

PA7

PAO

PC 5

mum

PB7

111111

PB

mum

Treiberschaltungen Register Kanal C

Treiberschaltungen Register

PCO

Treiberschaltungen

Kanal A

Register

Kanal B

Interruptsteuerung Kanal A Kanal B

*

TIMERIN.

*

Zeitgeber (Timer)

TIMEROUT +5 V

i

'

a

IO/R

Ö 0 1

0 1 X

256

Bytes

8155 Bausteinsteuerung

Adreßspeicher

Adreß/Datenbustreiber

t u m

GMD -

CE

RESET RD WR

IO/M A L E ADO

Adreßbus. /Datenbus

Bild 3 - 5 3 :

Der

RAM

RAM Peripherie gesperrt

B l o c k s c h a l t p l a n d e s M e h r z w e c k b a u s t e i n s 8155

Baustein 8155 ist also S p e i c h e r - und P e r i p h e r i e b a u s t e i n z u g l e i c h . CE g i b t

den g e s a m t e n

Baustein f r e i . Bei g e t r e n n t e n S p e i c h e r - und P e r i p h e r i e b e r e i c h e n

müssen j e e i n Ausgang des S p e i c h e r d e c o d e r s und des P e r i p h e r i e d e c o d e r s durch ein

"logisches

mit

in den

ODER"

verknüpft

Speicherbereich

werden.

Legt

man

die

Peripheriebausteine

(nur ein D e c o d e r a u s g a n g ) , so muß man den I O / M -

Eingang d e s 8155 mit einer f r e i e n A d r e ß l e i t u n g ( z . B . A 1 5 ) v e r b i n d e n , die dann z w i s c h e n den b e i d e n T e i l e n d e s Bausteins u n t e r s c h e i d e t . Die Peripherieanschlüsse Ausgabe

von

Daten

PAO bis P A 7 und PBO bis PB7 dienen zur E i n g a b e und

in verschiedenen

Betriebsarten.

Die

Peripherieanschlüsse

PCO bis PC5 können zusätzlich so p r o g r a m m i e r t w e r d e n , daß sie über d i e I n t e r r u p t e i n g ä n g e des Prozessors 8085A P r o g r a m m u n t e r b r e c h u n g e n Verbindet

man den Eingang T I M E R I N

mit

dem

auslösen.

C L K - Ausgang des

Prozessors,

so l i e f e r t d i e s e r den T a k t f ü r den Z e i t g e b e r ( Z ä h l e r ) . Beim Nulldurchgang Zählers geht

der

Ausgang T I M E R O U T

rupt auslösen. D e r

A n f a n g s w e r t des Z ä h l e r s und seine Funktionen w e r d e n

Befehlen programmiert.

des

nach L O W und kann d a m i t e i n e n I n t e r mit

3.5 Peripheriebausteine

113

Bild 3 - 5 4 zeigt einen Blockschaltplan der P a r a l l e l s c h n i t t s t e l l e 8255, die ursprünglich zum Prozessor 8080 gehörte. Wird sie mit dem Prozessor 8085A b e t r i e b e n , so müssen die Adressen und Daten durch einen äußeren Adreßspeicher g e t r e n n t werden. PAO

PC7

PCO

PBO

PB7

mim mimi iiiiim Trei berschaltungen Register Kanal C

Treiberschaltungen Register

Kanal A

Treiberschaltungen Register

Interruptsteuerung Kanal A Kanal B

I

Kanal B

8255 Datenbustreiber

Bausteinsteuerung

t \1 t

GND-

CS Adreßbus Datenbus

Bild 3-54:

RESET

RD

WR

A1

AO D7

DO

Blockschaltplan der P a r a l l e l s c h n i t t s t e l l e 8255

Die Adreßeingänge A0 und AI wählen vier Register der Schnittstelle aus. Die Datenleitungen DO bis D7 werden in beiden Richtungen zwischen S c h n i t t s t e l l e und Prozessor b e t r i e b e n . Die Ausgänge sind hochohmig ( t r i s t a t e ) , wenn der Baustein nicht ausgewählt ist. Der Eingang CS (Chip Select gleich Bausteinauswahl) ist aktiv LOW und wählt den Baustein aus. Der RESET-Eingang ( R e s e t gleich zurücksetzen) wird mit dem RESOUT-Ausgang des Prozessors verbunden und löscht alle R e g i s t e r , die sich damit in einem Grundzustand b e f i n d e n . Die Eingänge RD ( R e a d gleich lesen) und WR (Write gleich schreiben) steuern die Richtung der D a t e n ü b e r tragung zwischen dem Baustein und dem Prozessor. Die Peripherieanschlüsse PAO bis PA7 und PBO bis PB7 sowie PCO bis PC7 werden an äußere Schaltungen wie z.B. Kippschalter, Leuchtdioden, S i e b e n segmentanzeigen, Drucker oder Relais angeschlossen. Sie verbinden den Mikroc o m p u t e r mit der Außenwelt. Die Register der Schnittstellen werden Peripherieregister, Kanäle oder auch Ports genannt. Die Peripherie-Ausgangstreiber können eine bis zwei S t a n d a r d T T L - L a s t e n treiben.

114

3

3.5.4

Hardware

Die Seriellschnittstelle 8251A

Bei der s e r i e l l e n Datenübertragung verbindet

man Sender und Empfänger mit

mindestens drei Leitungen; einer Sendeleitung, einer Empfangsleitung und einer gemeinsamen

Rückleitung

(Ground).

Die

Serienschnittstelle

übernimmt

die

acht Bits eines Bytes parallel vom Mikroprozessor in ein A u s g a b e s c h i e b e r e g i ster

und

schiebt

sie

seriell

(hintereinander)

auf

die

Sendeleitung.

Ein

Empfangsregister

nimmt seriell ankommende Daten auf und gibt sie parallel

an den Prozessor

weiter.

Die

Schnittstelle sendet

und e m p f ä n g t

unabhängig

vom Prozessor mit einer eigenen Sende- und Empfangssteuerung. Bild 3-55 z e i g t den Blockschaltplan der Serienschnittstelle 8251A, die zur Bausteinfamilie der Prozessoren 8080 und 8085A gehört.

T x D

R x D

Senderegister

Empfangsregister

Sende- und Empfangssteuerung

Sendeda tenreg i ster

Empfangsdatenreg ister

Steuerregister

1

8 2 51A ßausteinsteuerung

RES

CLK

US

RD

Datenbustreiber

WR

Adreßbus 07

Datenbus

Bild 3-55:

Blockschaltplan der Serienschnittstelle 8251A

Die Datenleitungen Der

00

Eingang

C/D

Adreßleitung

DO bis D7 verbinden die Schnittstelle (Command/Data

gleich

mit dem Prozessor.

Kommando/Daten)

wird

A 0 verbunden. Er unterscheidet das Kommandoregister

mit

der

(Steuer-

r e g i s t e r ) vom D a t e n r e g i s t e r . Der Auswahleingang CS (Chip Select gleich Bausteinauswahl)

gibt

(Read gleich

den

Baustein

f r e i ; er

ist aktiv

LOW.

Die

Eingänge

RT)

lesen) und W R (Write g l e i c h schreiben) steuern die D a t e n ü b e r -

tragung zwischen Schnittstelle und Prozessor. Der C L K - E i n g a n g ( C l o c k g l e i c h Takt) (Reset

wird

mit

gleich

dem

Takt

CLK

zurücksetzen)

des

aktiv

Prozessors

HIGH

bringt

verbunden. die

Ein

RES-Signal

Schnittstelle

in

einen

Grundzustand und löscht a l l e R e g i s t e r . TxData

und

RxData

sind

Sende-

bzw.

Daten. Die Ausgänge T x R D Y und R x R D Y

Empfangsleitungen

für die

seriellen

können mit den Interrupteingängen

des Prozessors 8085A verbunden werden und melden dann, daß ein Byte g e s e n det bzw. e m p f a n g e n wurde.

3.5

3.5.5

D i g i t a l / A n a l o g - und

Bild 3 - 5 6 :

Bild

Aufbau eines

3-56

Netzwerk.

zeigt Der

8-Bit-Register. bildet

einen

das

am

Die

1 liegenden

auf

Digital/Analogwandlers

Prinzip e i n e s

wertniedrigsten

Digital/Analogwandlers

speichert

Ausgängen

Spannungsteiler.

größten,

115

Analog/Digitalwandler

Mikroprozessor An d e n

Peripheriebausteine

Am Bit

liegen

den

Stromschalter. Das

werthöchsten liegt

Bits schalten

der

mit e i n e m

umzuwandelnden

Zweig

Bit liegt mit

ihre Teilströme

dem

Wert

ein

R-2R-Netzwerk

der Zweig

mit

niedrigsten

auf einen

R-2Rin

dem

Strom.

Summierer,

der

eine dem digitalen Wert proportionale analoge Ausgangsspannung erzeugt.

Bild

3 - 5 7 z e i g t a l s B e i s p i e l den B l o c k s c h a l t p l a n d e s D / A - W a n d l e r s Z N 4 2 8 . + 5 V

Bild 3 - 5 7 :

B l o c k s c h a l t p l a n des D / A - W a n d l e r s ZN 4 2 8

116

3

Hardware

Die an den a c h t D a t e n l e i t u n g e n DO bis D7 a n l i e g e n d e n D a t e n werden mit dem F r e i g a b e s i g n a l E in den Speicher g e s c h r i e b e n und dort g e s p e i c h e r t . Die U m wandlung e r f o l g t d u r c h ein R - 2 R - N e t z w e r k und S t r o m s c h a l t e r . In der d a r g e s t e l l t e n S c h a l t u n g l i e f e r t der kleinste d i g i t a l e Wert 00000000 eine a n a l o g e Ausgangsspannung von 0 Volt und der g r ö ß t e digitale Wert 11111111 die A u s gangsspannung +2,55 Volt. Der n a c h g e s c h a l t e t e O p e r a t i o n s v e r s t ä r k e r 741 dient als L e i s t u n g s v e r s t ä r k e r . An den P o t e n t i o m e t e r n werden Nullpunkt und A u s gangsspannung e i n g e s t e l l t . Ein D / A - W a n d l e r verhält sich f ü r den Mikroprozessor wie ein 8 - B i t - A u s g a b e r e g i s t e r . Bild 3 - 5 8 zeigt als Beispiel f ü r einen A n a l o g / D i g i t a l w a n d l e r den B l o c k s c h a l t plan d e s A / D - W a n d l e r s ZN 427. +5 V 390

ZNi 27 R - 2R - N e t z w e r k =f= 1 M F 2,56V

Schalter Komparator Zähler (sukzessive Approx.)

Analog

o

Eingang A u s g a n g s t r e i b e r (tnstatei

1 0 7

Bild 3 - 5 8 :

Datenbus

DO

E0C

sE

Blockschaltplan des A / D - W a n d l e r s ZN 427

Der Wandler b e s t e h t aus einem D i g i t a l / A n a l o g w a n d l e r , der eine V e r g l e i c h s spannung l i e f e r t , und einem K o m p a r a t o r ( V e r g l e i c h e r ) , d e r die V e r g l e i c h s spannung mit der umzuwandelnden a n a l o g e n Spannung v e r g l e i c h t . Man v e r ä n dert die Vergleichsspannung so lange, bis sie mit der zu messenden Spannung ü b e r e i n s t i m m t . Der Z ä h l e r s t a n d kann als D i g i t a l w e r t vom Prozessor g e l e s e n w e r d e n . Der Zähler der vorliegenden Schaltung zählt nicht mit der S c h r i t t w e i t e 1, sondern a r b e i t e t nach dem Verfahren der sukzessiven Approximation ( s c h r i t t weisen N ä h e r u n g ) . Er beginnt nicht mit Null, sondern s e t z t das w e r t h ö c h s t e Bit gleich 1 und a l l e a n d e r e n 0. Ist die zu messende Spannung kleiner o d e r gleich, so b l e i b t die 1 e r h a l t e n . Ist die zu messende Spannung g r ö ß e r , so wird an die S t e l l e d e r 1 eine 0 gesetzt. Dies V e r f a h r e n wird f ü r a l l e f o l g e n d e n Stellen d u r c h g e f ü h r t . Nach insgesamt 9 T a k t e n ist die Umwandlung b e e n d e t .

3.5 Peripheriebausteine

117

Die A n s c h l ü s s e DO bis D7 sind d i e D a t e n a u s g ä n g e , von d e n e n d e r P r o z e s s o r den u m g e w a n d e l t e n D i g i t a l w e r t a b h o l t . D e r U m w a n d l u n g s t a k t CLK (Clock g l e i c h T a k t ) k a n n m a x i m a l 1 MHz b e t r a g e n . Die U m w a n d l u n g w i r d m i t e i n e m S C - S i g n a l ( S t a r t of Conversion g l e i c h Beginn der U m w a n d l u n g ) g e s t a r t e t . D a s E n d e der U m w a n d l u n g w i r d d u r c h d e n E O C - A u s g a n g (End Of Conversion g l e i c h Ende d e r U m w a n d l u n g ) a n g e z e i g t . D e r E - E i n g a n g ( E n a b l e g l e i c h F r e i g a b e ) legt d i e u m g e w a n d e l t e n D a t e n a u f d e n D a t e n a u s g a n g . In d e r d a r g e s t e l l t e n S c h a l t u n g l i e f e r t d e r B a u s t e i n b e i e i n e r E i n g a n g s s p a n n u n g von +2,55 V o l t d e n m a x i m a l e n d i g i t a l e n Wert von 11111111. Da d i e U m w a n d l u n g s z e i t i m m e r 9 T a k t e b e t r ä g t , kann auf e i n e A u s w e r t u n g d e s E O C - S i g n a l s v e r z i c h t e t w e r d e n . Der Prozessor s t a r t e t die U m w a n d l u n g mit e i n e m S C - S i g n a l und h o l t n a c h e i n e r k u r z e n V e r z ö g e r u n g ( N O P - B e f e h l e ) d i e D a t e n wie von e i n e m 8 - B i t Eingaberegister ab.

118

3.6

3 Hardware

Bausteinauswahl und Adreßdecodierung

Beim Entwurf eines Mikrorechners sind folgende Überlegungen anzustellen: - Auswahl des Prozessors, der Speicher- und der Peripheriebausteine, - V e r g a b e der Bausteinadressen und Entwurf der Adreßdecodierung, - Untersuchung der Zeitbedingungen f ü r die Datenübertragung und - Kontrolle der Busbelastung und notfalls Einsatz von Bustreibern. Dieser Abschnitt b e f a ß t sich mit der Adreßvergabe für kleine und m i t t l e r e S y s t e m e . Die meisten MOS-Speicher- und Peripheriebausteine haben g e t r e n n t e Steuersignale f ü r die Bausteinauswahl (CE, CS) und f ü r die Schreib- und L e s e signale WR und RD, die neben der Übertragungsrichtung auch noch die Z e i t steuerung vornehmen. Bei T T L - und Wandlerbausteinen (A/D und D/A) müssen die Auswahlsignale noch zusätzlich mit den Signalen RD bzw. WR verknüpft werden, um Richtung und Zeitpunkt der D a t e n ü b e r t r a g u n g zu b e s t i m m e n .

3.6.1

Adreßdecoder

Der Mikroprozessor 8085 hat 16 Adreßleitungen und kann 64 KByte Speicher adressieren. Peripherieadressen bestehen aus 8 Bit und können 256 Register auswählen. Für IO/M = LOW werden die Speicher, für IO/M = HIGH wird die Peripherie angesprochen. Beim Aussenden einer Speicher- oder P e r i p h e r i e a d r e s se darf nur ein Baustein Daten senden oder e m p f a n g e n , alle a n d e r e n müssen gesperrt sein. Bei b e s t i m m t e n Betriebszuständen können die Adreßleitungen hochohmig ( t r i s t a t e ) sein (RESET, HOLD, HALT) oder ungültige Adressen f ü h ren (Takt T4 und w e i t e r e Takte eines M l - Z y k l u s , Interruptzyklen). Gültige Adressen liegen nur dann vor, wenn RD oder WR im LOW-Zustand sind. Die folgenden Beispiele zeigen nur die verschiedenen Arten der Adreßdecodierung und setzen voraus, daß die Zeitsteuerung durch diese Signale vorgenommen wird. Sowohl die Eingänge zur Bausteinfreigabe (CE, CS) als auch die Ausgänge der D e c o d e r b a u s t e i n e entsprechend Bild 3 - 5 9 sind aktiv LOW. Dies wird durch einen Punkt am Bausteineingang bzw. Decoderausgang gekennzeichnet. Zur Auswahl von einem Baustein aus zweien genügt eine Adreßleitung und ein Inverter e n t s p r e c h e n d Bild 3-59a. Sind drei oder vier Bausteine vorhanden, so benötigt man zwei Adreßleitungen und einen l - a u s - 4 - D e c o d e r , der wie in der Einführung Bild 2-29 gezeigt aus Logikschaltungen a u f g e b a u t werden kann. Es ist jedoch günstiger, einen fertigen Decoderbaustein (Bild 3-59b) einzusetzen, selbst wenn einige Ausgänge zunächst nicht verwendet werden. Sie können als Reserve f ü r s p ä t e r e Erweiterungen dienen. Der Baustein 74LS155 b e s t e h t aus zwei g e t r e n n t e n l - a u s - 4 - D e c o d e m mit g e m e i n s a m e n Adreßeingängen und g e -

3.6 Bausteinauswahl

2 Bausteine

2x4=8 Bausteine

Adreßdecodierung

Mtilll

Y 7

MIHI

74LS155

A

a. 1-aus-2Decoder

Bild 3-59:

&

DecoderFreigabe

Adresse

DecoderFreigabe

B

YO

74LS138

J,L

DecoderFreigabe

119

8 Bausteine

1Y0

2Y3

und

A

Adressen

b. 2x1-aus-4Decoder

DecoderFreigabe

C

B A

Adressen

c. 1-aus-8Decoder

Adreßdecoderschaltungen

t r e n n t e n Freigabeeingängen. Ist die Freigabebedingung nicht e r f ü l l t , so sind alle Decoderausgänge HIGH und sperren. Verwendet man j e einen F r e i g a b e e i n gang als Adreßeingang, so läßt sich der Baustein auch als l - a u s - 8 - D e c o d e r b e t r e i b e n . Der funktionsgleiche Baustein 74LS156 hat O f f e n e - K o l l e k t o r - A u s gänge, die man mit einem gemeinsamen Arbeitswiderstand auch z u s a m m e n schalten kann. Dabei e n t s t e h t eine logische ODER-Verknüpfung für aktiv LOW. Zur Auswahl von fünf bis a c h t Bausteinen benötigt man drei Adreßleitungen und einen l - a u s - 8 - D e c o d e r . Der Baustein 74LS138 (Bild 3-59c) hat drei zusätzliche Freigabeeingänge. Die Bausteine 74154 ( G e g e n t a k t a u s g ä n g e ) und 74159 ( O f f e n e - K o l l e k t o r - A u s g ä n g e ) sind 1 - a u s - 1 6 - D e c o d e r mit vier A d r e ß und zwei Freigabeeingängen. Bei schwierigen Auswahlbedingungen können u m fangreiche TTL-Logikschaltungen nötig sein, die zusätzlichen Platz- und Leistungsbedarf e r f o r d e r n und die Auswahlzeit verlängern. Die Schaltzeit von TTL-Logikbausteinen liegt bei ca. 10 ns, die von Decodern bei 20 ns. S t a t t dessen können F e s t w e r t s p e i c h e r e n t s p r e c h e n d Bild 3 - 6 0 zur Adreßdecodierung eingesetzt w e r d e n . Die Schaltzeiten liegen bei e t w a 50 ns. Die p r o g r a m m i e r b a r e n F e s t w e r t s p e i c h e r 74S188 und 74S189 sind in T T L Technik a u f g e b a u t . Bei ihrer Programmierung werden Widerstände mit Ü b e r spannung d u r c h g e b r a n n t . Die Schaltzeiten liegen zwischen 20 und 40 ns. Fünf Eingangssignale und ein Freigabesignal können zu a c h t Ausgangssignalen v e r knüpft werden und damit z.B. acht Speicher a n s t e u e r n . Die Tabelle zeigt ein Beispiel f ü r den Aufbau eines l - a u s - 8 - D e c o d e r s . Der Baustein hat mehr Eingangsleitungen als zur Auswahl von a c h t Bausteinen e r f o r d e r l i c h wären. Vom Anwender p r o g r a m m i e r b a r e Decoderschaltungen lassen sich auch aus PAL-

120

3 Hardware

D7 D6 D5 D4 D3 D2 D1 DO

74S188 (O.C.)

S 0 0 0 0

74S189 (tristate) 32 X 8 Bit

PROM

Eine änqe E D C B A 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 10 0

D7 1 1 1 1

Db 1 1 1 1

Ausqänqe D5 D4 D3 1 1 1 1 1 1 1 1 1 1 1 0

D2 1 1 0 1

D1 1 0 1 1

DÖ 0 1 1 1

DecoderFreigabe

S

E

D

C

B

A

Adressen und Steuersignale Bild 3-60:

P R O M als Adreßdecoder

bzw. P L A - B a u s t e i n e n aufbauen. Sie bestehen aus U N D - und O D E R - S c h a l t u n g e n , deren Verbindungen wie bei einem P R O M programmierbar sind. P L A bedeutet P r o g r a m m a b l e L o g i c A r r a y g l e i c h p r o g r a m m i e r b a r e logische Anordnung.

3.6.2

Die Teildecodierung

OE CS 1-aus-2-Decoder Eingänge Ausgänge Y 1 YU A CS 1 X 1 1 0 1 0 0 1 1 0 0

S

2732 1

YO

Y1 CS

2 73 2 II

1-aus-2-Decoder

A

RD

10/ M IA15,AU,A13)

A12

X = frei Bild 3-61:

Schaltplan einer Teildecodierung

A11

AO

3.6 Bausteinauswahl

und Adreßdecodierung

121

Bei d e r T e i l d e c o d i e r u n g w e r d e n n i c h t a l l e 16 A d r e ß l e i t u n g e n f ü r d i e B a u s t e i n a u s w a h l v e r w e n d e t . D u r c h die f r e i e n A d r e ß l e i t u n g e n kann ein B a u s t e i n u n t e r m e h r e r e n A d r e s s e n a n g e s p r o c h e n w e r d e n . Bild 3 - 6 1 z e i g t a l s Beispiel d i e A u s wahl von zwei 4 - K B y t e - E P R O M s vom Typ 2732. Die A d r e ß l e i t u n g e n AO bis A l l w e r d e n a n b e i d e B a u s t e i n e a n g e s c h l o s s e n und w ä h l e n d o r t j e 4096 B y t e s a u s . Die A d r e ß l e i t u n g A12 u n t e r s c h e i d e t z w i s c h e n den b e i d e n B a u s t e i n e n ; d i e A d r e ß l e i t u n g e n A13 bis A15 w e r d e n n i c h t v e r w e n d e t . Die h e x a d e z i m a l e n S p e i c h e r a d r e s s e n e r g e b e n sich a u s d e m A d r e ß p l a n Bild 3-62.

2732 I 2732 I I

Bild 3 - 6 2 :

Adresse I0/M A15 A14 M3 A12 A11 A10 H 9 0000 0 0 0 0 x=c x=c X=0 0 1 0FFF 1 I 1 1000 0 0 0 x=o x=o x = o 1 0 1FFF 1 1 1

CO c

Baustein

0 1 0 1

A7 A6 A5 A4 A3 A2 A1 AO 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1

Adreßplan einer Teildecodierung

Der A d r e ß p l a n e n t h ä l t die B e l e g u n g a l l e r 16 A d r e ß l e i t u n g e n und d i e sich d a r a u s e r g e b e n d e n h e x a d e z i m a l e n A d r e s s e n d e r B a u s t e i n e . F ü r d i e an d e n B a u s t e i n e n l i e g e n d e n A d r e s s e n AO bis A l l w e r d e n nur die o b e r e ( 1 1 1 1 1 1 1 1 1 1 1 ) und d i e u n t e r e (00000000000) G r e n z e a n g e g e b e n . A12 w ä h l t bei e i n e r 0 den B a u s t e i n I und bei e i n e r 1 den B a u s t e i n II a u s . Die L e i t u n g e n A I 3 , A14 und A I 5 h a b e n k e i n e n E i n f l u ß auf die A d r e s s i e r u n g und sind b e l i e b i g ( X ) w ä h l b a r . U m j e d o c h h e x a d e z i m a l e A d r e s s e n b i l d e n zu k ö n n e n , wird X z w e c k m ä ß i g e r w e i s e 0 g e s e t z t . D u r c h Z u s a m m e n f a s s u n g von vier Bit zu e i n e r H e x a d e z i m a l z i f f e r e n t s t e h e n d i e A d r e ß b e r e i c h e 0000 bis 0 F F F f ü r d e n B a u s t e i n I und 1000 bis 1 F F F f ü r d e n B a u s t e i n II. Bild 3 - 6 3 z e i g t d e n v o l l s t ä n d i g e n S p e i c h e r b e l e g u n g s p l a n .

Adreßbereich Baust I0/N M5 A14 AI 3Ali A11 A1C A9 A8 N A6 A5 A4 A3 A2 A1 A0 0 audrat»*l6

05H Leitungsstatusregister

0 0 0 0 0 0 0

I 8 Bit | 2 Stopbit ohne Pari tat ungerade Parlt. ohne Ausgl. Parlt. Sender frei DLAB=0: Datenregister OLABsi: Teilerregister «OS DOS TR OISIR

5
' Prompt ausgeben B,A Zeichen retten 05H Status lesen 0010 0000 Sender frei? 20H LOOP1 nein: warten A,B ja: Zeichen im Echo / 00H ausgeben 05H Status lesen 01H 0000 0001 Eapf. voll ? LOOP2 nein: warten 00H ja: abholen LOOP Schleife

Bild 3-88: Testprogramm für serielle Ein/Ausgabe

144

3 Hardware

3.9.3 Die Interruptsteuerung und der Timer Der in Bild 3-89 dargestellte Baustein hat die Aufgabe, von den Peripheriegeräten (z.B. 8250, 8253 oder 8255) ausgehende Interruptanforderungen zusammenzufassen und an den Prozessor weiterzureichen. Er hat daher Eingänge für acht Anforderungssignale und einen Ausgang INTR zum Prozessor; eine Erweiterung der Eingänge durch Kaskadierung mehrerer 8259 ist vorgesehen. Die Priorität der Eingänge ist programmierbar. Im Abschnitt 3.3.3 über den Interruptbetrieb wurde im Bild 3-30 gezeigt, daß ein INTR-Interrupt (iNTerrupt Request gleich Interrupt-Anforderung) im 8085 nach Beendigung des laufenden Befehls ein INTA-Signal (INTerrupt Acknowledge gleich Interrupt-Bestätigung) auslöst, das zum Lesen des nun auszuführenden Befehlscodes verwendet wird. Der 8259 liefert im 8085-Betrieb einen aus drei Bytes bestehenden CALL-Befehl. Die Zieladresse im 2. und 3. Byte wird bei der Programmierung des Bausteins festgelegt. Der High-Teil ist für alle Eingänge gleich; in den LOW-Teil wird die Nummer des auslösenden Eingangs eingesetzt. Jeder einen Interrupt auslösende Eingang wird zunächst gesperrt und muß durch ein Kommando wieder freigegeben werden. Wegen der Beschränkung auf ein Adreßbit zur Auswahl von nur zwei Registern erfolgt die Programmierung der Betriebsart durch mehrere Initialisierungs Commando Wörter (ICW), die in einer bestimmten Reihenfolge eingegeben werden müssen. In dem hier vorliegenden 8085-Betrieb enthält das ICW1 die

ACE

liaer

8250

8253

Kadtadierung SP/EN CAS2 CAS1 CASO -J I I—!_ Initialisierungs Co—andc Wort (8085) ICW1 nach 20H: [Ä7]~A6{»5T ' l »MM dar Low| kein ICVA (8085) Adresse I kein ICV3 (nur 1 8259) Intervall 0: 1=8 1: 1=4 0: Flarie 1 ¡Pegelauslösung ICke nach 21H: [High-Ädresse~des CALl ^Befehls | Operations Co—lahdo Wort : OCVt nach 21H: Hadt en [wI^|h^H^H3|h2ThT|ho1 OCkC nach 20H: Interruptbesjätlqung alle spez .

H »07 »06 »05 mo0

CS

A0

low iörF

Y2

A0

X 0 »00 . I 1 »07

07 06 OS 0« D3 02 01 00

"nm I«'« 8085

Bild 3-89: Der Interruptsteuerbaustein 8259 P1C

Ausgabefonat 8085 Intervall 1=8 110 0 110 1 A7A6 x x x|0 0 0 ICK OCDH CAIL-Code ICH 0 0 0 IR00 Kigh-Adresse 1 1 1 »07 Low-Adresse

3.9 Ein Testsystem für

PC-Bausteine

145

höchsten Bits der LOW-Zieladresse, die Auslösungsart (Flanke oder Zustand) und eine Intervallangabe. Für I = 8 sind die drei niedrigsten Bits der Zieladresse 0, die Zieladressen der auslösenden Eingänge liegen 8 Bytes voneinander e n t f e r n t . Das ICW2 legt den High-Teil der Zieladresse fest. Im Betrieb werden durch Operations Commando Wörter (OCW) die Eingänge durch Masken freigegeben oder gesperrt bzw. a u s g e f ü h r t e Interrupts b e s t ä t i g t und damit erneut freigegeben. Bild 3 - 9 0 zeigt als Beispiel die Auslösung eines pegelges t e u e r t e n IRQ4 durch das Modemsteuersignal DSR der Serienschnittstelle 8250 (Bild 3-87). Das Programm ist auf den in Abschnitt 6.4 beschriebenen T e r m i nalmonitor a b g e s t i m m t , der ab Adresse 0000 in einem Festwertspeicher liegt. Bei der Programmierung der Zieladresse werden die festen Anteile 0 gesetzt, so daß bei einem IRQ4 nach Einsetzen der IRQ-Nummer (Low-Byte 0010 0000 = 20H) der Befehl CALL 0020H vom Prozessor übernommen und ausgeführt wird. Dies entspricht dem Einsprungpunkt RST4, der vom Monitor auf die Adresse 0FF20H im RAM umgelenkt wird. Dort wird bei der Vorbereitung des Interrupts der Befehl JMP INTER abgelegt, der in das Interruptprogramm INTER f ü h r t . Als Antwort erscheint ein Zeichen * auf dem Terminal. Das Interruptprogramm löscht das DSR-Bit durch Lesen des Modemstatusregisters (8250), bestätigt die Annahme im 8259, gibt den Interrupt im Prozessor 8085 frei und kehrt mit RET in die Warteschleife LOOP JMP LOOP zurück. Bild 3-92 zeigt die Auslösung eines flankengesteuerten Interrupts durch den Timer.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29

0000 1000 1000 10192 1004 1006 1008 100A 100C 100E 1010 1012 1014 1017 101A 101D 101E 1021 1021 1023 1025 1028 102A 102C 102E 1030 1032 1033 1034

DB 3E D3 3E D3 3E D3 3E D3 3E 32 21 22 FB C3

06 08 01 1A 20 00 21 EF 21 C3 20 FF 21 10 21 FF

DB E6 CA 3E D3 DB 3E D3 FB C9

05 20 21 10 2A 00 06 64 20

IE 10

; Bild 3-90: PIC 8259 mit 8250-Interrupt DSR-Taste ORG 1000H Lade- und Startadresse Modem-Interruptanzeige loschen 06H START IH A,08H MV I 0000 1000 ModemOUT 01H Interruptfre igabe A, IAH MVI 0001 1010 PIC - ICW1 01JT 20H Pegel, Schrittweite 8 MVI A,00H 0000 0000 PIC - ICW2 OUT 21H High-Adresse 00H A.0EFH MVI 1110 1111 OUT 21H IRQ4 frei MVI A.0C3H Code JMP-Befehl STA 0FF20H Ualenkung RST4=IRQ4 H, INTER LXI Ziel JMP-Befehl SHLD 0FF21H Ualenkung RST4=IRQ4 EI 8085 Interrupt frei JMP LOOP LOOP warten auf Interrupt ; Intemiptprogram gestartet durch DSR - Flanke INTER IN 05H Status lesen 20H ANI 0010 0000 Sender frei? JZ INTER nein: warten MVI A,'*' ja: Stern als Antwort 00R OUT senden IN 06H Modeastatus löschen MVI A.64H IRQ4 i a PIC OUT 20H bestätigen EI Interruptfreigabe 8085 RET RUcksprung nach Warteschleife END

Bild 3-90: Interruptauslösung mit dem Modemsteuersignal DSR

146

3

Hardware

Ein Timer ist ein Hardwarezählerbaustein, der mit einem Anfangswert geladen wird und der dann durch programmunabhängige Taktimpulse a b w ä r t s zählt. Beim Zählernulldurchgang kann im Prozessor ein Interrupt ausgelöst werden. Bild 3-91 zeigt den Zählerbaustein (Timer) 8253. Er enthält drei voneinander unabhängige Timer Nr. 0 bis 2 und ein Steuerregister zur Festlegung der T i me rfunktionen. Jeder Timer besteht aus einem 16-bit-Abwärtszähler, einem Laderegister für den Zähleranfangswert und einem Leseregister, mit dem der augenblickliche Zählerstand ausgelesen werden kann. Der Zähltakt wird außen an den Clk-Anschluß angelegt, er läßt sich mit dem Steuereingang Gate s p e r ren und freigeben. Die Funktion des Ausgangs Out hängt von der eingestellten Betriebsart ab. In der hier als Beispiel programmierten Betriebsart 0 1 1 (Frequenzteiler) l i e f e r t er das herabgeteilte Rechtecksignal. Jeder Timer wird einzeln mit einem Steuerbyte programmiert. Es enthält die Nummer des T i mers, die Z u g r i f f s a r t auf die 1 6 - b i t - R e g i s t e r , die Betriebsart und die Zählart (dual oder BCD). In der Schaltung Bild 3-91 a r b e i t e t Timer 0 als Vorteiler f ü r den Timer 1, der mit seinem Out-Ausgang über den I n t e r r u p t s t e u e r b a u stein 8259 jede Sekunde einen Interrupt auslöst. Mit diesem periodischen Int e r r u p t lassen sich in RAM-Speicherstellen Zähler für Uhrzeit und Datum a u f b a u e n , die vom Hauptprogramm jederzeit ausgelesen werden können. Timer können nicht nur als Ersatz für Warteschleifen (Abschnitte 4.6.2 und 4.6.3), sondern auch als Ereigniszähler (Abschnitt 4.6.4) verwendet werden, wenn man die Signalflanken am Clk-Eingang anlegt und den Zählerstand am Ende der Meßzeit ausliest.

Betriebsart 000 001 010 011 100 101

8085

narice bei Zählerstand 0 Monoflop T e i l e r Iapulsausgang T e i l e r Rechtediausgang I n p u l s bei Zählerstand 0 v i e 100 a l t Gate t r i g g e r n

|0H

-S^Z-

TlnerO

- V

K}

V — T - V

1 Hz

Gate 1H

Out Tillerl

Leseregister

rimer 8253 CS

»

n

. AO

Bild 3 - ? l : Der Timer 8253

.4 0 0 0

ZB

M00A.

D3

0 0 FC J008

START

8B

NVX

Operand

Bemerkung

A 000H M B H

OUT

BB

04

B3

00

C3

04

LOOP

AO

INJ

0-1 W

OUT"

00H

^MP

LOOF^

ITMAV OUU^I^AAM S Ä J M ^

E N B

Bild 4 - 4 :

Handübersetztes Programm

R e c h t s s t e h t das Assemblerprogramm, links die hexadezimale Übersetzung mit den Adressen der B e f e h l e . Symbolische Namen (z.B. LOOP) werden in e i n e hexadezimale Adresse (z.B. 1004) ü b e r s e t z t , symbolische Befehle (z.B. JMP) in hexadezimalen Code (z.B. C3). Operanden können je nach Befehl aus ein oder zwei Bytes b e s t e h e n . Die Adressen der S c h n i t t s t e l l e n r e g i s t e r sind e i n Byte lang, Sprungziele wie z.B. 1004 für LOOP sind zwei Bytes lang. Die Befehle werden nun kurz e r k l ä r t . Zeile 1: Die Assembleranweisung ORG legt die Anfangsadresse des Programms f e s t . Im vorliegenden Beispiel ist es die Adresse des ersten Bytes des B e n u t z e r RAMs, die Adresse 1000 hexadezimal. Zeile 2: Der Befehl MVI bringt die im Operandenteil stehende K o n s t a n t e 8B h e x a d e zimal oder 10001011 binär in den Akkumulator. Zeile 3: Der Befehl OUT bringt den Inhalt des Akkumulators, also die Konstante 8B, in d a s S t e u e r r e g i s t e r der P a r a l l e l s c h n i t t s t e l l e 8255. Das R e g i s t e r hat in d e m Übungsgerät die Adresse 03. Mit diesem S t e u e r b y t e wird das A - R e g i s t e r der Parallelschnittstelle als Ausgang und das B - R e g i s t e r als Eingang p r o g r a m m i e r t . Zeile 4: Der Befehl IN bringt die a m Eingaberegister mit der Adresse 01 anliegenden Daten in den Akkumulator. Die Potentiale werden mit Kippschaltern e i n g e stellt. Zeile 5: Der Befehl OUT bringt den Inhalt das Akkumulators in d a s Ausgaberegister mit der Adresse 00. Die Ausgangspotentiale werden über Leuchtdioden a n g e zeigt.

155

4.2 Assemblerprogrammierung

Z e i l e 6: Der B e f e h l JMP springt zu dem im O p e r a n d e n a n g e g e b e n e n Sprungziel mit d e r symbolischen

A d r e s s e L O O P . Dadurch w e r d e n die b e i d e n B e f e h l e I N und O U T

e r n e u t a u s g e f ü h r t . Das P r o g r a m m a r b e i t e t in einer unendlichen S c h l e i f e . Nach

der

Übersetzung

über

die

Monitorschnittstelle

Übungsrechner

auf d e m

eingegeben

geht

die

4-5

dargestellt

Übersetzung

Vordruck

wurde das h e x a d e z i m a l e

(Hexadezimaltastatur

bzw.

Programm

Terminal)

in

den

und g e s t a r t e t . W e s e n t l i c h s c h n e l l e r und e i n f a c h e r

mit e i n e m

A s s e m b l e r , dessen Ü b e r s e t z u n g s l i s t e

in Bild

ist.

__

Meldung des Betriebssystems

8085-SYSTEM 1.0 >LASM"-Aufruf des

L1000 *1000 *1002 *1004 *1006 »1008 EOOOO

3E D3 DB D3 C3

Bild 4 - 5 :

Die

8B 03 01 00 04 10

Assemblers

0001 0002 0003 0004 0005 0006 0007 0008

>; BILD 4-5 EINFÜHRENDES BEISPIEL > ORG 1000H ; ADRESSZAEHLER A.8BH ; STEUERBYTE A=AUS, B=EIN >START MVI > OUT 03H ; NACH STEUERREGISTER IN 01H ; KIPPSCHALTER-EINGABE >L00P OUT 00H ; LEUCHTDIODEN-AUSGABE > JMP LOOP ; SCHLEIFE > END >

Ü b e r s e t z u n g s l i s t e eines

dargestellte

Assemblers

Übersetzungsliste

entstand

an e i n e m

Tischrechner, der

mit

einer S c h r e i b m a s c h i n e n t a s t a t u r und e i n e m Bildschirm ausgerüstet i s t . Zunächst wurde

das

Programm

mit

Hilfe

e i n e s E d i t o r s e i n g e g e b e n . Ein Editor

ist

ein

P r o g r a m m , das dem Benutzer das E i n g e b e n , L ö s c h e n und Ä n d e r n von P r o g r a m m Zeilen e r m ö g l i c h t . D e r Editor hat die Z e i l e n von 0001 bis 0008 d u r c h n u m e r i e r t . Das e d i t i e r t e dem

Programm

Bildschirm

w u r d e von e i n e m A s s e m b l e r ü b e r s e t z t und s o w o h l auf

als auch auf d e m D r u c k e r a u s g e g e b e n . Die L i s t e e n t h ä l t

links

d i e A d r e s s e n und den e r z e u g t e n C o d e z u s a m m e n mit den h e x a d e z i m a l e n

Ope-

randen. D e r binäre C o d e des P r o g r a m m s w u r d e zunächst in den A r b e i t s s p e i c h e r des T i s c h r e c h n e r s g e l a d e n und anschließend den Ü b u n g s r e c h n e r

D i e f o l g e n d e n B e i s p i e l e dieses spielen

und

Befehle, damit

die

Abschnitts unterscheiden zwischen

Programmbeispielen. ohne

über e i n e s e r i e l l e S c h n i t t s t e l l e in

übertragen.

zusätzliche

Befehlsbeispiele

Schleifenbefehle

enthalten

nicht

ablauffähig

einzelne sind

und

auch nicht g e t e s t e t w e r d e n können. P r o g r a m m b e i s p i e l e sind v o l l s t ä n d i g e

t e s t b a r e P r o g r a m m e . Sie e r h a l t e n e n t s p r e c h e n d Bild 4 - 6 einen Die

Befehlsbei-

nur

Assembleranweisung

ORG

ist

eine

Abkürzung

für

Origin

"Rahmen". gleich

Anfang

oder U r s p r u n g . Im O p e r a n d e n t e i l s t e h t d i e A n f a n g s a d r e s s e des P r o g r a m m s , auf die sich der END

Assembler

bei der A d r e s s i e r u n g b e z i e h t . D i e

Assembleranweisung

k e n n z e i c h n e t das Ende des P r o g r a m m s . Beide A n w e i s u n g e n sind l e d i g l i c h

Übersetzungshilfen bei d e r

und w e r d e n nicht

Handübersetzung e n t f a l l e n .

in M a s c h i n e n c o d e

ü b e r s e t z t . Sie

können

4 Einßhrung in die maschinenorientierte Programmierung

156

Adresse

Inhalt

adresse

Naae

Befehl Operand ORG

adresse

Befehle und Assembleranweisungen END

Bild 4 - 6 :

" R a h m e n " eines Assemblerprogramms

Innerhalb des Rahmens stehen Befehle und weitere Assembleranweisungen, die in den folgenden Abschnitten besprochen werden.

4.3

Einfache Datenübertragung

Eine der wichtigsten Aufgaben eines Programms besteht darin, Daten zu ü b e r tragen, z.B. Meßwerte von einem Eingaberegister in den Speicher oder E r g e b nisse aus dem Akkumulator in ein Ausgaberegister. Übertragen bedeutet in der Umgangssprache, Dinge von einem Ort wegzunehmen und an einen anderen Ort zu bringen. In der Rechnertechnik behält die abgebende Speicherstelle ihren alten Wert. Der a l t e Inhalt der aufnehmenden Speicherstelle wird durch die neuen Daten überschrieben. Daten übertragen heißt also Daten kopieren. Dieser Abschnitt erklärt die Datenübertragung zwischen den Registern des Mikroprozessors und Speicherstellen, deren Adressen direkt im Operandenteil des Befehls stehen. Der Abschnitt 4.7 behandelt Probleme der indizierten Adressierung, bei denen die Adresse der Datenspeicherstelle in einem R e g i s t e r paar enthalten ist. Bild 4 - 7 zeigt den Registersatz des Mikroprozessors 8 0 8 5 A . In Klammern stehen die amerikanischen Bezeichnungen. Die 1 6 - B i t - R e g i s t e r des Mikroprozessors sind mit dem Adreßbus verbunden und enthalten Adressen von Befehls- und Datenbytes im Speicher. Das Bild zeigt nur die dem Programmierer zugänglichen R e g i s t e r ; dazu kommen Hilfsregister für die Zwischenspeicherung von Adressen und Registerinhalten. Das B e f e h l s zählregister (Program Counter) enthält die Adresse des Programmbytes, das aus dem Programmspeicher in das Steuerwerk des Prozessors geholt wird. Der Stapelzeiger (Stack Pointer) adressiert einen R A M - B e r e i c h , den Stapel ( S t a c k ) , der Rücksprungadressen von Unterprogrammen und Programmunterbrechungen e n t h ä l t . Die drei Registerpaare BC, DE und HL können auch einzeln als 8 - B i t Register verwendet werden.

4 Einßhrung in die maschinenorientierte Programmierung

156

Adresse

Inhalt

adresse

Naae

Befehl Operand ORG

adresse

Befehle und Assembleranweisungen END

Bild 4 - 6 :

" R a h m e n " eines Assemblerprogramms

Innerhalb des Rahmens stehen Befehle und weitere Assembleranweisungen, die in den folgenden Abschnitten besprochen werden.

4.3

Einfache Datenübertragung

Eine der wichtigsten Aufgaben eines Programms besteht darin, Daten zu ü b e r tragen, z.B. Meßwerte von einem Eingaberegister in den Speicher oder E r g e b nisse aus dem Akkumulator in ein Ausgaberegister. Übertragen bedeutet in der Umgangssprache, Dinge von einem Ort wegzunehmen und an einen anderen Ort zu bringen. In der Rechnertechnik behält die abgebende Speicherstelle ihren alten Wert. Der a l t e Inhalt der aufnehmenden Speicherstelle wird durch die neuen Daten überschrieben. Daten übertragen heißt also Daten kopieren. Dieser Abschnitt erklärt die Datenübertragung zwischen den Registern des Mikroprozessors und Speicherstellen, deren Adressen direkt im Operandenteil des Befehls stehen. Der Abschnitt 4.7 behandelt Probleme der indizierten Adressierung, bei denen die Adresse der Datenspeicherstelle in einem R e g i s t e r paar enthalten ist. Bild 4 - 7 zeigt den Registersatz des Mikroprozessors 8 0 8 5 A . In Klammern stehen die amerikanischen Bezeichnungen. Die 1 6 - B i t - R e g i s t e r des Mikroprozessors sind mit dem Adreßbus verbunden und enthalten Adressen von Befehls- und Datenbytes im Speicher. Das Bild zeigt nur die dem Programmierer zugänglichen R e g i s t e r ; dazu kommen Hilfsregister für die Zwischenspeicherung von Adressen und Registerinhalten. Das B e f e h l s zählregister (Program Counter) enthält die Adresse des Programmbytes, das aus dem Programmspeicher in das Steuerwerk des Prozessors geholt wird. Der Stapelzeiger (Stack Pointer) adressiert einen R A M - B e r e i c h , den Stapel ( S t a c k ) , der Rücksprungadressen von Unterprogrammen und Programmunterbrechungen e n t h ä l t . Die drei Registerpaare BC, DE und HL können auch einzeln als 8 - B i t Register verwendet werden.

4.3

Einfache

Adreßbus

Datenübertragung

157

Datenbus

15 r-,

B e Lf e uh li s z a•• hu lir e g i-si t e r Stapelzeiger

(Program-

counter)

(stackpomter)

B-Register

C -Register

D-Register

E-Register

H-Register 7

Bild 4 - 7 :

Mikroprozessor

L-Register 0 7

8085A

0

Die Register des Mikroprozessors 8085A

Der 8 - B i t - A k k u m u l a t o r ( A c c u m u l a t o r ) ist das w i c h t i g s t e Register f ü r die Datenübertragung sowie f ü r die a r i t h m e t i s c h e n und logischen O p e r a t i o n e n . Das Bedingungsregister ( F l a g r e g i s t e r ) b e s t e h t aus a c h t Anzeigeflipflops (Flags), von denen vier als Sprungbedingungen verwendet werden. Die Bits werden entsprechend dem Ergebnis einer a r i t h m e t i s c h e n oder logischen Operation verändert (0 oder l ) ; bei jeder D a t e n ü b e r t r a g u n g bleiben sie e r h a l t e n . Das S-Bit (S f ü r Sign gleich Vorzeichen) speichert d a s Vorzeichen des Ergebnisses. Das Z-Bit (Z f ü r Zero oder Null) zeigt a n , ob das Ergebnis Null war oder nicht. Das H-Bit (H für Hilfsübertrag; original AC f ü r Auxiliary Carry) ist keine Sprungbedingung, sondern ein K o r r e k t u r ü b e r t r a g der BCDA r i t h m e t i k . Das P-Bit (P f ü r Parity oder P a r i t ä t ) kann zur Fehlerprüfung bei der Datenübertragung verwendet w e r d e n . Das C-Bit (C f ü r Carry gleich Ü b e r trag; original CY) zeigt a n , ob sich das Ergebnis im zulässigen Zahlenbereich b e f i n d e t . Zwei der drei restlichen Bitpositionen werden im Abschnitt 4.11 zusammen mit Sonderbefehlen b e h a n d e l t , die nicht zum o f f i z i e l l e n Befehlssatz gehören. Das I n t e r r u p t r e g i s t e r dient zusammen mit dem I n t e r r u p t f l i p f l o p zum Sperren und Freigeben von P r o g r a m m u n t e r b r e c h u n g e n .

158

4.3.1

4 Einföhrung

in die maschinenorientierte

Programmierung

Datenübertragung zwischen den 8-Bit-Registem des Prozessors

Operand regi ,reg2

Befehl MOV

Bild 4-8:

Wirkung Lade Register reg! mit Register

reg2

Datenübertragung zwischen 8-Bit-Registern

Bild 4-8 zeigt den MOV-Befehl, der Daten zwischen den 8-Bit-Registem des Prozessors überträgt. MOV bedeutet MOVe gleich bewege oder besser lade. Im Operandenteil des Befehls steht links vom Komma das Zielregister, rechts das Herkunftsregister. Als Registerbezeichnungen dienen die Buchstaben A , B, C, D, E, H und L. Der Befehl MOV A,B lädt den Akkumulator mit dem Inhalt des B-Registers.

Symbolisch

Binär 0

0 0 0 0 1 1 1 1

Bild 4-9:

0 0 1 1 0 0 1 1

1 d d

0 1 0 1 0 1 0 1

für für für für für für für für

MOV

d s s s

B-Register C-Register D-Register E-Register H-Register L-Register Memory Akkumulator

B C D E H L M A

r1,r2

für B - R e g i s t e r für C - R e g i s t e r für D - R e g i s t e r für E - R e g i s t e r für H - R e g i s t e r für L - R e g i s t e r für M e m o r y = S p e i c h e r für A k k u m u l a t o r

Aufbau der MOV-Befehle

Bild 4-9 zeigt rechts den Aufbau des MOV-Befehls in der symbolischen Assemblerschreibweise. Der Kennbuchstabe M steht für Memory gleich Speicher. Damit wird eine Speicherstelle adressiert, deren Adresse im HL-Registerpaar enthalten ist. Der Abschnitt 4.7 behandelt weitere Einzelheiten der Registerpaaradressierung.

159

4.3 Einfache Datenübertragung

Bild 4 - 9 z e i g t

links den Aufbau des binären Codes der M O V - B e f e h l e .

Alle

M O V - B e f e h l e haben die Bitkombination Ol in den beiden werthöchsten Bitpositionen. Dann f o l g e n drei Bits für das Z i e l r e g i s t e r Bits für das Herkunftsregister

( d = d e s t i n a t i o n ) und drei

(s = s o u r c e ) . Das Bild z e i g t auch die binären

Codierungen der Registeradressen, die auch in allen anderen B e f e h l e n v e r w e n det wird. Ein Assembler symbolischen lautet

muß also zur Ubersetzung des B e f e h l s M O V A , B zunächst den Befehl

Oldddsss.

Adressen Adresse

der

MOV

Nach

in

einer

Register

aus einer

111, das B - R e g i s t e r

Grundcode

mit

dem

für den B e f e h l

MOV

Codes zusammenbaut.

einer

Befehlstabelle

Untersuchung die

Adresse

suchen.

Operanden

Registertabelle.

Registeradressen A , B . Ein

der

Der

Der

Akkumulator

000. Der Assembler

zusammen zum

Grundcode

e r g e b e n sich hat

die die

baut nun den

Befehlscode

01111000

Assembler ist also ein M o n t i e r e r , der binäre

Bild 4-10 zeigt eine T a b e l l e der M O V - B e f e h l e , in der

die binären Codes hexadezimal zusammengefaßt wurden.

Bef . MOV MOV MOV MOV MOV MOV MOV MOV

Operand A, reg B, reg C, reg D, reg E, reg H, reg L, reg M, reg

Bild 4-10:

Die

W i rkung A OUT > JMP > 0RG >SBYTE DB > 0RG >WERT DS > END

P r o g r a m m b e i s p i e l mit

ASSEMBLERANWEISUNGEN 01H EINGABEREGISTER OOH AUSGABEREGISTER 03H STEUERREGISTER 1000H BEFEHLSBEREICH SBYTE STEUERBYTE LADEN NACH STEUERREGISTER SREG EIN KIPPSCHALTER-EINGABE NACH SPEICHER WERT AUS LEUCHTDIODEN-AUSGABE LOOP SCHLEIFE KONSTANTENBEREICH 1100H 8BH STEUERBYTE A=AUS B=EIN 1200H VARIABLENBEREICH 1 SPEICHERSTELLE FUER EINGABEWER

Assembleranweisungen

Bild 4 - 2 7 z e i g t das b e r e i t s b e k a n n t e P r o g r a m m b e i s p i e l mit sungen.

Die

Register wird

das

einem den

der

drei

EQU-Anweisungen

Parallelschnittstelle.

Steuerbyte

besonderen

Akkumulator

nicht

im

vereinbaren

Namen

Gegenüber

dem

ursprünglichen

Operandenteil

des

MVI-Befehls,

Konstantenspeicher geladen.

Assembleranwei-

symbolische

abgelegt

Um auch die

Arbeit

und

mit d e m

mit e i n e m

für d i e

Programm sondern

in

Befehl L D A

in

Variablenspeicher

zu z e i g e n , s p e i c h e r t der B e f e h l S T A den e i n g e l e s e n e n K i p p s c h a l t e r w e r t

in d i e

S p e i c h e r s t e l l e W E R T . Bild 4 - 2 8 z e i g t d i e S p e i c h e r a u f t e i l u n g des P r o g r a m m b e i spiels.

4.3 Einfache Datenübertragung

175

1000 Befehlsbereich 10FF 1100

Konstantenbereich 11 FF 1200

Variablenbereich 17FF

Bild 4-28: Speicheraufteilung des Programmbeispiels

Alle drei Bereiche liegen im Schreib/Lesespeicher des Übungssystems. In einem Anwendungsrechner liegen die Befehle und Konstanten in einem Festwertspeicher (EPROM). Für die variablen oder veränderlichen Daten ist ein Schreib/ Lesespeicher ( R A M ) erforderlich.

4.3.5

16-Bit-Datenübert ragung

PCHL Befehlszähler

L-RegisterXCHG

D-Register

E-Register

B-Register

C-Register

SPHL Stapelzeiger

Akkumulator

Bedingungsr.

]1 ZZH

H-Register

(PSW=Prozessor-Status-Word)

Mikroprozessor

Bild 4-29:

Die 16-Bit-Register des Prozessors 8085A

8085A

176

4 Einführung in die maschinenorientierte Programmierung

Bild 4 - 2 9 zeigt die 16-Bit-Register. Die Registerpaare BC, DE und HL setzen sich aus je zwei 8-Bit-Registern zusammen. Dabei nimmt das HL-Registerpaar eine Sonderstellung bei der Adressierung von Speicherbereichen und als 16-Bit Akkumulator ein. Bei der Verwendung als Adreßregister enthält das H-Register den High-Teil und das L-Register den Low-Teil einer Speicheradresse. Für das HL-Registerpaar gibt es Befehle für die Übertragung und Berechnung von 16Bit-Operanden. Die Register PC (Program Counter = Befehlszähler) und SP (Stack Pointer = Stapelzeiger) können nur als 16-Bit-Register verwendet werden. Bild 4 - 3 0 zeigt drei Befehle, die 16-Bit-Operanden innerhalb der Register des Prozessors übertragen. Es sind 1-Byte-Befehle ohne Operandenteil.

Bef. O p e r a n d XCHG PCHL SPHL Bild 4 - 3 0 :

W i rkung HL DE PC START MVI > OUT IN >L00P > 0RI > ANI > XRI > OUT > JMP > END

Programmbeispiel für logische Funktionen

X 1 1 1 1 0 1 Bild 4 - 1 1 3 :

LOGISCHE FUNKTIONEN 1000H ADRESSZAEHLER STEUERBYTE A=AUS B=EIN A.8BH 03H NACH STEUERREGISTER 01H KIPPSCHALTER LESEN KONSTANTE 1100 0000 0C0H 0CFH MASKE 1100 1111 00CH MASKE 0000 1100 00H AUF LEUCHTDIODEN AUSGEBEN LOOP NEUE EINGABE

X 1 1 1 1 0 1

X 0 X 0 0 0 0

X 0 X 0 0 0 0

X 0 X 1 X 1 X

X 0 X 1 X 1 X

X 0 X 1 X 0 X

X 0 X 1 X 0 X

Eingabemuster ODER-Konstante Zwischenergebnis UND-Maske Zwischenergebnis EODER-Maske Ausgabemuster

Ausführung des Programmbeispiels

Bild 4 - 1 1 3 zeigt die Wirkung der logischen B e f e h l e des Programmbeispiels. Die K o n s t a n t e 1 1 0 0 0 0 0 0 des O R I - B e f e h l s baut an den S t e l l e n , an denen sie Einerbits e n t h ä l t , diese in das Bitmuster ein und übernimmt den a l t e n Wert an den S t e l l e n , an denen Nullerbits s t e h e n . Auf diese Weise werden die B i t positionen B7 und B 6 immer als 1 ausgegeben, a l l e anderen bleiben unverändert. Die U N D - M a s k e 1 1 0 0 1 1 1 1 des A N l - B e f e h l s enthält in den Bitpositionen B5 und B4 Nullerbits und löscht das Bitmuster an diesen S t e l l e n . In allen anderen B i t positionen enthält die Maske Einerbits, die das B i t m u s t e r unverändert lassen. Die E O D E R - M a s k e 0 0 0 0 1 1 0 0 des X R I - B e f e h l s komplementiert durch die beiden Einerbits die Bitpositionen B3 und B 2 . In den restlichen Bitpositionen bleiben die a l t e n Zustände durch die Nullerbits der Maske unverändert e r h a l t e n . Die beiden letzten Positionen B 1 und B 0 des B i t m u s t e r s bleiben durch die l o g i schen B e f e h l e unberührt und werden unverändert ausgegeben.

245

4.8 Datenverarbeitung

4.8.2

Die Schiebebefehle

Funktion

Befehle

9 Bit zyklisch

links

Rotiere Akkumulator 9 Bit zyklisch

RAL

links

RRC

1

H

1 1 1 1 1 Akkumulator

1

1

h1

H Z ^ H i i i i i Cy Akkumulator

i

i

^

1 1 1 1 1 Akkumulator

1

1

h

-TV-I 1 1 1 1 1 Cy Akkumulator

1

1

1—o

H Cy

(LSL)

8 Bit logisch rechts

(LSR)

Logisch Schiebe Rechts (ASR)

Arithmetisch Schiebe Rechts

kj^ Cy

1

ADD A

Logisch Schiebe Links

Bild 4-114:

1

t

Rotiere Rechts ohne Carry

8 Bit arithm. rechts

1 1 1 1 1 Akkumulator

RLC

rechts

8 Bit logisch links

W Cy

RAR

rechts

Rotiere Links ohne Carry 8 Bit zyklisch

M

Links

Rotiere Akkumulator Rechts 8 Bit zyklisch

Schieberichtung

ANA A RAR

RLC RAR RAR

|

1

tao* Cy'

m Akkumulator

tniHvzi

M

M

i h

M

kl

Cy ' ^ A k k u m u l a t o r

Die Schiebebefehle

Die in Bild 4-114 dargestellten Befehle verschieben den Inhalt des Akkumulators bzw. des Akkumulators und des Carrybits um 1 Bit nach rechts oder links. Zum Verschieben um mehrere Bitpositionen sind auch mehrere Schiebebefehle e r f o r d e r l i c h . Der Befehlssatz des Prozessors 8085A

enthält nur B e f e h l e , die

zyklisch schieben oder rotieren. Dabei geht keine Bitposition des Akkumulators verloren. Entsprechend den Schiebebefehlen anderer Mikroprozessoren zeigt das Bild auch Möglichkeiten, mit den Befehlen des 8085A logisch und arithmetisch zu schieben. Beim logischen Schieben wird die f r e i werdende Stelle durch eine Null ersetzt; die herausgeschobene Stelle geht verloren. Beim logischen Schieben nach links wird der Inhalt des

Akkumulators

mit

2 multipliziert;

dies

wird durch

den

B e f e h l ADD A erreicht, der den Inhalt des Akkumulators mit sich selbst ad-

4 Einführung in die maschinenorientierte Programmierung

246

d i e r t . Beim l o g i s c h e n R e c h t s s c h i e b e n 2

dividiert.

ren.

Dazu

Der

Rest

gelangt

sind beim

8085A

wird e i n e v o r z e i c h e n l o s e Dualzahl durch

in das C a r r y b i t ; das a l t e C a r r y b i t geht zwei B e f e h l e

erforderlich.

Der

Befehl

verlo-

ANA

l ö s c h t das C a r r y b i t ; der B e f e h l R A R s c h i e b t die Null in die w e r t h ö c h s t e

A

Bit-

p o s i t i o n e n . Soll der A k k u m u l a t o r um m e h r e r e B i t p o s i t i o n e n logisch n a c h r e c h t s geschoben

w e r d e n , so ist e s g ü n s t i g e r , e r s t

mehrmals

zyklisch zu

schieben

( R A R ) und dann mit e i n e r U N D - M a s k e ( A N I ) die Nullen e i n z u b a u e n . Beim

arithmetischen

Rechtsschieben

wird e i n e v o r z e i c h e n b e h a f t e t e

Dualzahl

d u r c h 2 dividiert; j e d o c h muß das V o r z e i c h e n in der w e r t h ö c h s t e n B i t p o s i t i o n erhalten

bleiben.

Das

werthöchste

B i t ist a l s o in d i e r e c h t s s t e h e n d e

Stelle

zu k o p i e r e n ,

muß a b e r s e l b s t e r h a l t e n b l e i b e n . B e i m 8 0 8 5 A sind drei B e f e h l e

erforderlich.

Der B e f e h l R L C bringt das V o r z e i c h e n zunächst n a c h links in das

C a r r y b i t . D e r e r s t e R A R - B e f e h l hebt das L i n k s c h i e b e n w i e d e r a u f , der z w e i t e schiebt

wie g e f o r d e r t n a c h r e c h t s . D a b e i ist das V o r z e i c h e n b i t e r h a l t e n

ge-

b l i e b e n . Bild 4 - 1 1 5 zeigt die S c h i e b e b e f e h l e d e s Prozessors 8 0 8 5 A .

Bedingung Bef.

Operand

W i rkung

RLC

B

T

E7U-I 1 1 1 1 I I 1 U-l 0 7

1

4

OF

S Z) (HC

Cy X

RRC

M a 4 1111 11 i H

1

4

X

RAL

M ^ i — | 111 1 1 1 1 k 1 17 1 1 F 1 I n s i d i 111 i i i i uJ

4

X

4

X

RAR

Bild 4 - 1 1 5 :

RAL

OP

Tabelle der Schiebebefehle

bedeutet

Rotate

Accumulator

Left

g l e i c h v e r s c h i e b e den

Akkumulator

und das C a r r y b i t zyklisch n a c h links. R A R b e d e u t e t R o t a t e A c c u m u l a t o r R i g h t g l e i c h v e r s c h i e b e den A k k u m u l a t o r und das C a r r y b i t zyklisch n a c h r e c h t s . R L C bedeutet

Rotate Left

without Carry g l e i c h s c h i e b e den Akkumulator zyklisch

n a c h links o h n e das C a r r y b i t . R R C b e d e u t e t R o t a t e R i g h t without C a r r y g l e i c h s c h i e b e den A k k u m u l a t o r zyklisch nach r e c h t s ohne das C a r r y b i t . B e i d e B e f e h l e kopieren die herausgeschobene Inhalt

des

Carrybit

Carrybits

verändert,

geht alle

Bitposition zusätzlich in das C a r r y b i t ; der a l t e

verloren. anderen

Bei allen

Schiebebefehlen

Bedingungsbits,

auch

das

wird nur

das

Vorzeichenbit,

bleiben unverändert. Das

in B i l d 4 - 1 1 6 d a r g e s t e l l t e

Programmbeispiel

testet

die

Schiebebefehle.

Das a n den K i p p s c h a l t e r n e i n g e s t e l l t e B i t m u s t e r wird v e r z ö g e r t auf den L e u c h t dioden v e r s c h o b e n . In den e i n g e r a h m t e n

Teil

des

P r o g r a m m s können

die zu

t e s t e n d e n B e f e h l e e i n g e s e t z t werden. Die b e i d e n N O P - B e f e h l e dienen a l s P l a t z -

4.8 Datenverarbeitung

L1000 *1000 *1002 *1004 *1006 *1008 *100B *100C *100D *100E *1011 * 1012 *1015 * 1016 *1017 *1018 *1019 *101A *101D *101E EOOOO

3E D3 DB D3 CD 17 00 00 C3

8B 03 01 00 11 10

06 10

F5 21 24 F4 00 00 2B 7C B5 C2 15 10 Fl C9

Bild 4-116:

0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B OOOC 000D 000 E 000F 0010 0011 0012 0013 0014 0015 0016 0017

247

> ; BILD 4-116 SCHIEBEBEFEHLE 1000H ADRESSZSEHLER > 0RG STEUERBYTE A=AUS B=EIN >START MVI A.8BH NACH STEUERREGISTER OUT 03H > IN > 01H BITMUSTER EINGEBEN 00H >L00P OUT BITMUSTER AUSGEBEN UNTERPROGRAMM 1 SEK WARTEN CALL SEK1 > > RAL SCHIEBE LINKS PLATZ FUER WEITERE BEFEHLE > N0P > N0P PLATZ FUER WEITERE BEFEHLE LÖÖP ZUR AUSGABE > JMF> > ; UNTERPROGRAMM >SEK1 PUSH PSW AKKU RETTEN ZAEHLER ANFANGSWERT > LXI H,62500 >SEK11 N0P 4 TAKTE 4 TAKTE > N0P > DCX H 6 TAKTE A,H 4 TAKTE > MOV ORA 4 TAKTE > L > SEK11 10 TAKTE JNZ PSW > POP AKKU ZURUECK > RET RUECKSPRUNG > END

Programmbeispiel f ü r Schiebebefehle

h a l t e r für den Fall, daß die Befehle zum logischen und a r i t h m e t i s c h e n R e c h t s schieben eingesetzt werden, die aus zwei bzw. drei Befehlen b e s t e h e n . Man b e a c h t e , daß das Carrybit nicht angezeigt wird und daß das Programm in einer unendlichen Schleife schiebt. Beim logischen und a r i t h m e t i s c h e n Schieben ergibt sich nach a c h t Schritten ein k o n s t a n t e r Endzustand.

248

4 Einführung in die maschinenorientierte Programmierung

4.8.3

Die

Die arithmetischen B e f e h l e

in d i e s e m

subtrahieren

Abschnitt

Bitmuster

w e r d e n in g e s o n d e r t e n die

arithmetischen

dargestellten

arithmetischen

unabhängig von d e r

Befehle

addieren

A r t der Z a h l e n d a r s t e l l u n g .

und Diese

A b s c h n i t t e n m i t B e i s p i e l e n b e h a n d e l t . Bild 4 - 1 1 7 z e i g t

8-Bit-Befehle

für

den

Akkumulator

mit

unmittelbarer

Adressierung.

Bef. AOI ACI SUI SBI

Bild 4-117:

Der

Befehl

Operand konst konst konst konst

i rkung OP ß C6 2 A + konst A + kon+Cy CE 2 D6 2 A - konst A - kon-Cy DE 2

Die a r i t h m e t i s c h e n 8 - B i t - B e f e h l e m i t

AD1 a d d i e r t zum A k k u m u l a t o r

Berücksichtigung Carrybit

A A A A

W

0RG A.8BH >START MVI STEUERBYTE OUT 03H NACH STEUERREGISTER > IN 01H BEIDE OPERANDEN LESEN >L00P B.A NACH B-REGISTER RETTEN > MOV ANI 0FH > MASKE 0000 1111 FERTIG OPERAND NULL: ERGEBNIS NULL > JZ C,A 1. OPERAND NACH C-REGISTER > MOV > 2. OPERANDEN TRENNEN MOV A.B > RRC NACH RECHTS SCHIEBEN > NACH RECHTS SCHIE8EN RRC > RRC NACH RECHTS SCHIEBEN NACH RECHTS SCHIEBEN > RRC ANI 0FH > MASKE 0000 1111 > JZ FERTIG OPERAND NULL: ERGEBNIS NULL > MOV B ,A 2. OPERAND NACH B-REGISTER XRA A ERGEBNISREGISTER LOESCHEN > MULTIPLIKATIONSSCHLEIFE >MULT ADD B MULTIPLIKANDEN ADDIEREN > DCR C MULTIPLIKATOR -1 > JNZ MULT UNGLEICH NULL: WEITER 00H »FERTIG OUT PRODUKT AUSGEBEN JMP > LOOP NEUE EINGABE > END

Programmbeispiel:

Multiplikationsschleife

Das P r o g r a m m liest von den K i p p s c h a l t e r n zwei 4 - B i t - D u a l z a h l e n e i n und t r e n n t s i e d u r c h V e r s c h i e b e n und M a s k i e r e n . N a c h e i n e r Prüfung a u f d e n Wert Null e n t h ä l t das B - R e g i s t e r den Multiplikanden und das C - R e g i s t e r d e n M u l t i p l i k a tor.

In

einer

Schleife

wird

der

Multiplikand

so

lange

aufaddiert,

bis

der

M u l t i p l i k a t o r auf Null h e r a b g e z ä h l t i s t . D a s - P r o d u k t e r s c h e i n t auf den L e u c h t dioden. Das V e r f a h r e n d e r

m e h r f a c h e n Addition ist für den p r a k t i s c h e n G e b r a u c h o f t

zu l a n g s a m , da b e i e i n e m großen M u l t i p l i k a t o r d i e S c h l e i f e s e h r o f t d u r c h l a u fen w i r d . S c h n e l l e r ist das bei d e r Handrechnung g e b r ä u c h l i c h e V e r f a h r e n , das T e i l p r o d u k t e u n t e r B e r ü c k s i c h t i g u n g d e r S t e l l e n w e r t i g k e i t a d d i e r t . D a b e i kann man e n t s p r e c h e n d

Bild 4 - 1 3 8 sowohl

mit dem

wertniedrigsten als auch

dem w e r t h ö c h s t e n Bit d e s M u l t i p l i k a t o r s b e g i n n e n .

mit

263

4.8 Datenverarbeitung

0101 * 0101 0000—H • 0101-—1 •0000-— • 0101 — - 0011001 a. links

Bild 4-138:

0101 0101 +0000+ 0101 —

0101

+ 0 0 0 0 " —

- 0011001

beginnend

b. r e c h t s

beginnend

Multiplikationsverfahren

Im Gegensatz zur dezimalen Rechnung gibt es im Dualen nur zwei Möglichkeiten: ist die Stelle des Multiplikators

Null, so ist auch das Teilprodukt Null, ist

die Stelle des Multiplikators Eins, so ist das Teilprodukt gleich dem

Multi-

plikanden. Die Teilprodukte sind vor der Addition j e w e i l s um eine Stelle zu verschieben. Bei der

Multiplikation zweier 4-Bit-Dualzahlen kann ein 8 - B i t -

Produkt entstehen. Bild 4-139 zeigt den Ablaufplan einer Multiplikation

mit

einem Zahlenbeispiel.

Zahler Produkt 4 00000000 dboooodo

3

1 1 1l

00000000 +0101 00000101 2

Bemerkung Multiplikator 0101 •• Multiplikand: 0101 Produkt schieben 0101 Bit testen t 0: nicht a d d i e r e n Zähler - 1 Produkt schieben 0101 Bit testen 1: a d d i e r e n — t

!

/ 00001010

/ i i /

0101

1

t

00010100

0101 + 0101 00011001

-

- t -

0 (

fertig

)

Bild 4-139:

Für

die

00011001

Zähler - 1 Produkt schieben Bit testen 0: nicht a d d i e r e n Zähler - 1 Produkt schieben Bit testen 1: a d d i e r e n Zähler - 1 Ergebnis

Ablaufplan und Beispiel einer Multiplikation

Multiplikation vierstelliger

e r f o r d e r l i c h . Das Produktregister

Dualzahlen sind vier

Schleifendurchläufe

wird vor der Schleife gelöscht

und in der

264

4 Einführung in die maschinenorientierte Programmierung

S c h l e i f e zunächst um e i n Bit nach links g e s c h o b e n . Dann w i r d das w e r t h ö c h s t e Bit d e s M u l t i p l i k a t o r s u n t e r s u c h t . Ist e s 1, so w i r d d e r M u l t i p l i k a n d zum dukt

addiert,

sonst

nicht.

Bild

4-140 zeigt

ein

Programmbeispiel,

das

Pronach

d i e s e m V e r f a h r e n z w e i 8 - B i t - D u a l z a h l e n zu e i n e m 1 6 - B i t - E r g e b n i s m u l t i p l i z i e r t .

*8000 L1000 *1000 *1002 *1004 *1007 *100A

26 2E CD 22 C3

*100D *100E *100F *1010 *1011 *1012 * 1015 •1016 *1018 * 1019 *101A •101D * 101E *101F *1022 *1023 *1024 *1025 *1026 EOOOO

F5 05 C5 7C 5D 21 54 06 29 07 D2 19 05 C2 C1 DI Fl C9

12 10 00 10 26 10 00 00

00 00 08 I E 10 18 10

Bild 4-140:

Das

0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 0008 OOOC OOOD 000E 000F 0010 0011 0012 0013 0014 0015 0016 0017 0018 0019 001A 0018 001C 001D

Programmbeispiel: Multiplikation 8-Bit x 8-Bit

Hauptprogramm

L-Register

> ; BILD 4-140 MULTIPLIKATION 8 BIT X 8 BIT = 16 BIT OOOOH >M0NI EQU EINSPRUNG MONITOR 1000H > ORG ADRESSZAEHLER >START MVI H.12H TESTWERT FAKTOR 1 > MVI L.10H TESTWERT FAKTOR 2 > CALL MUL8 8 X 8 = 16 BIT MULTIPLIKATION > SHLD PR0D ERGEBNIS PRODUKT ABLEGEN JMP MONI > SPRUNG ZUM MONITOR > ; UNTERPROGRAMM PUSH PSW >HUL8 AKKUMULATOR RETTEN > PUSH D DE RETTEN PUSH B > BC RETTEN A,H > MOV 1. FAKTOR NACH AKKU > MOV 2. FAKTOR NACH E E.L > LXI H,OOOOH PRODUKT L0ESCHEN > MOV D,H D L0ESCHEN > MVI B ,8 BITZAEHLER DAD H PRODUKT 1 B I T L I N K S SCHIEBEN >MUL81 > RLC HOECHSTES B I T NACH CARRY > JNC MUL82 NULL: NICHT ADDIEREN > DAD D NICHT NULL: ADDIEREN >MUL82 DCR B BITZAEHLER - 1 > JNZ MUL81 UNGLEICH NULL: WEITER > POP B FERTIG: REGISTER ZURUECK > D POP > PSW POP > RET RUECKSPRUNG >PR0D DS 2 ERGBENISSPEICHER > END

mit d e m

HL-Registerpaar

lädt

das

H-Register

Multiplikator.

und

wird

in

den

mit

dem

Multiplikanden

und

das

Das E r g e b n i s e r s c h e i n t als 1 6 - B i t - Z a h l im Speicher

gebracht.

Das

Unterprogramm

M U L 8 führt d i e M u l t i p l i k a t i o n d u r c h . Es r e t t e t a l l e b e n u t z t e n R e g i s t e r . N a c h dem

Umspeichern

der

Faktoren

beiden

in das

DE-Registerpaar

und in

den

A k k u m u l a t o r d i e n t das H L - R e g i s t e r p a a r als P r o d u k t r e g i s t e r . D e r B e f e h l D A D H s c h i e b t e s um

1 Bit nach links; der B e f e h l D A D D a d d i e r t den

zum P r o d u k t . Mit d e m

Befehl

RLC

Multiplikanden

wird j e w e i l s das h ö c h s t e Bit d e s M u l t i p l i -

k a t o r s in das C a r r y b i t g e s c h o b e n und m i t d e m b e d i n g t e n Sprung JNC u n t e r s u c h t .

D i e Division kann im e i n f a c h s t e n F a l l auf e i n e m e h r m a l i g e S u b t r a k t i o n z u r ü c k g e f ü h r t w e r d e n . Dabei

wird der

bis sich

Differenz ergibt.

Divisor 1

-

eine im

3 =

Sonderfall

negative

Dividenden -2.

Der

Quotient

Unendlich.

sionsschleife.

enthalten Bild

ist

Dividend so l a n g e um den Divisor v e r m i n d e r t , ist.

Der

Quotient

Beispiel:

2; der

4-141 z e i g t

Rest ein

gibt

7 : 3 ergibt

ist

1. Ein

an,

wie

7 - 3

Divisor

Programmbeispiel

oft

der

= 4 -

3 =

Null g i b t

für eine

als

Divi-

4.8 Datenverarbeitung

*8000 L1000 *1000 *1002 *1004 *1005 *1006 *1009 *100A *100C *1000 *1010 *1011 * 1014 *1015 * 1016 *1017 *101A * 101D *1020 *1023 E0000

26 2E 7D B7 CA 7C 06 95 DA 04 C3 85 67 68 22 C3 21 C3

Bild 4-141:

45 10 10 10 00 14 10 OC 10

23 00 FF 17

10 00 FF 10

0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B oooc 0000 000E 000F 0010 0011 0012 0013 0014 0015 0016 0017

>; BILD 4-141 >M0NI EQU > 0RG >START MVI > MVI > MOV > 0RA > JZ > MOV > MVI >L00P SUB > JC INR > > JMP >FERT ADO > MOV > MOV >AUS SHLD > OMP >FEHL LXI > JMP >ERG DS > END

265

DIVISIONSSCHLEIFE OOOOH EINSPRUNG MONITOR 1000H ADRESSZAEHLER TESTWERT DIVIDEND H.45H TESTHERT DIVISOR L.10H A.L DIVISOR AUF NULL TESTEN A DIVISOR NULL: FEHLER FEHL A,H DIVIDEND LADEN B.OOH QUOTIENT LOESCHEN SUBTRAKTION DES DIVISORS L FERT NEGATIV: FERTIG QUOTIENT + 1 B LOOP HEITER LETZTE SUBTRAKTION ZURUECK L H,A REST NACH H-REGISTER QUOTIENT NACH B-REGISTER L.B ERG ERGEBNIS ABSPEICHERN MONI SPRUNG NACH MONITOR H.OFFFFH FEHLERMARKE AUSGEBEN AUS ERGEBNISSPEICHER 2

Programmbeispiel: Divisionsschleife

Das Programm lädt die beiden Operanden als Konstanten und prüft den Divisor. Im F e h l e r f a l l wird die Konstante F F F F als Fehlermarke in das Ergebnis g e bracht. In der eigentlichen Divisionsschleife enthält das B - R e g i s t e r den Q u o tienten als Zähler. Der Rest ergibt sich im Akkumulator. Quotient und Rest werden in das H L - R e g i s t e r p a a r umgespeichert.

deziaal:

43

dual:

00101011 - 0011 Aneg: ja!

:

3

:

0011

00101 Apos:

- 0011

0010

00100 - 0011

Apos:

0001 00011 -

0011

Apos:

0000 00001 -

Aneg: Rest:

Bild 4-142:

0011

0001 =>

Divisionsverfahren

= 1 4

Rest

1

= 1 1 1 0

Rest 0001 ~T~

266

4 Einführung in die maschinenorientierte Programmierung

Das S u b t r a k t i o n v e r f a h r e n ist f ü r den p r a k t i s c h e n Gebrauch zu langsam, da die Subtraktionsschleife bei kleinem Divisor sehr o f t d u r c h l a u f e n werden muß. Schneller ist das bei der Handrechnung gebräuchliche V e r f a h r e n e n t s p r e c h e n d Bild 4 - 1 4 2 , das u n t e r Berücksichtigung der S t e l l e n w e r t i g k e i t s u b t r a h i e r t . Das Beispiel dividiert einen 8 - B i t - D i v i d e n d e n durch einen 4-Bit-Divisor zu einem 4 - B i t - Q u o t i e n t e n und zu einem 4 - B i t - R e s t . Die e r s t e T e s t s u b t r a k t i o n der vier höchsten Dividendenstellen minus Divisor e n t s c h e i d e t , ob die Division ausführbar ist. Ist die D i f f e r e n z Null oder positiv, so ist sie nicht a u s f ü h r bar, da der Divisor Null oder zu klein ist. Bei allen folgenden T e s t s u b t r a k tionen wird jeweils ein n e u e s Bit des Dividenden dazugenommen. Ist die D i f f e renz positiv oder Null, so ergibt sich im Q u o t i e n t e n ein E i n e r b i t , sonst ein Nullerbit. Die Division läßt sich r e c h e n t e c h n i s c h auf T e i l s u b t r a k t i o n e n und Schiebebefehle e n t s p r e c h e n d Bild 4 - 1 4 S z u r ü c k f ü h r e n .

Zahler 4

c

Dividend Akku NQR Öp1Ö 1011

0

0101

f

/

011„

0

/

0100

Ol KD / 111 U

-0001 2 0

/

0011

0

/

0001

pos

1110

l

111,, pos

-0000 1

neg pos

=0010 3

A

11 ihi 11

i

neg 0001 0

Bild 4-143:

Ablauf einer Division

m g

00Ö1 m o Rest Quotient

Bemerkung D i v i s o r : 0011 Testsubtraktion Akku+MQR s c h i e b e n Testsubtraktion Divisor subtrahieren MQR ORG TESTWERT DIVIDEND H.45H >START MVI TESTWERT DIVISOR L.10H > MVI UNTERPROGRAffl DIVISION > CALL DIV8 DIVISION DURCH NULL: FEHLER > JC FEHL ERGEBNIS SPEICHERN SHLD ERG >AUS SPRUNG NACH MONITOR JHP MONI > FEHLERMARKE H.OFFFFH >FEHL LXI AUSGEBEN > JHP AUS >; UNTERPROGRAMM DIVISION PUSH PSW AKKU RETTEN >DIV8 BC RETTEN > PUSH B DIVISOR AUF NULL > MOV A.L TESTEN > ORA A DIV8F DIVISOR NULL: FEHLER > JZ DIVISOR NACH C-REGISTER > MOV C.L L,H DIVIDEND NACH L-REGISTER > MOV H.OOH MIT NULLEN AUSDEHNEN > MVI BITZAEHLER > B ,8 MVI QUOTIENT UND DIVISOR LINKS DAD H >01V81 TESTEN A,H > MOV MIT DIVISOR > CMP C KLEINER > DIV82 JC GROESSER > SUB C NACH H ZURUECK H,A > MOV ZAEHLEN > INR L BITZAEHLER - 1 B >DIV82 OCR > WEITER JNZ DIV81 FERTIG: REGISTER ZURUECK > POP B > PSW POP CARRY=0: ERGEBNIS GUELT1G > ORA A RUECKSPRUNG > RET FEHLER: DIVISION DURCH NULL >DIV8F POP B PSW REGISTER ZURUECK > POP FEHLERMARKE SETZEN CARRY = > STC RUECKSPRUNG > RET ERGEBNISSPEICHER >ERG OS 2 > END

P r o g r a m m b e i s p i e l : Division 8 - B i t / 8 - B i t

268

4 Einführung in die maschinenorientierte Programmierung

Das Hauptprogramm lädt den Dividenden in d a s H - R e g i s t e r und den Divisor in das L - R e g i s t e r . Der Quotient erscheint im L - R e g i s t e r , der Rest im H - R e g i s t e r . Bei einer Division durch Null ist d a s Carrybit 1. Das U n t e r p r o g r a m m DIV8 übernimmt die e i g e n t l i c h e Division. Das H L - R e g i s t e r p a a r e n t h ä l t den auf 16 Bit ausgedehnten Dividenden, der durch den Befehl DAD H jeweils um 1 Bit nach links geschoben wird. Da der höhere Teil im H - R e g i s t e r durch die Ausdehnung auf 16 Bit Null gesetzt wurde, kann beim Schieben kein Carry a u f t r e t e n ; in diesem Fall e n t f ä l l t die A b f r a g e auf Carry nach dem Schieben. Der Akkumulator übernimmt den Vergleich und die Subtraktion des Divisors im C - R e g i s t e r . Das Unterprogramm l i e f e r t das Ergebnis wieder in den Registern H und L zurück. Bei einer Division durch Null ist bei der Rückkehr das Carrybit als F e h l e r marke g e s e t z t . Bild 4 - 1 4 9 zeigt zwei U n t e r p r o g r a m m e zur Multiplikation mit dem F a k t o r 10 und zur Division durch 10. Sie werden f ü r die Umwandlung von Dezimalzahlen in Dualzahlen und u m g e k e h r t v e r w e n d e t .

4.8.8

Übungen zum Abschnitt D a t e n v e r a r b e i t u n g

Die Lösungen befinden sich im Anhang!

Bild 4 - 1 4 5 :

Befehl JMP JNZ J bed JM JNX JX CALL CNZ C bed CM

Operand adresse adresse adresse adresse adresse adresse adresse adresse adresse adresse

Code C3 C2

SHLO LHLD STA LDA

adresse adresse adresse adresse

22 2A 32 3A

00100010 00101010 00110010 00111010 OOIxxOlO

0F 0F 0F 0F 0F

LXI LXI LXI LXI LXI

B,kon D.kon H.kon SP.kon rep.kon

01 11 21 31

00000001 00010001 00100001 00110001 OOxxOOOl

F0 F0 F0 F0 F0

FA DD FD CD C4

te-

FC

Tabelle der 3 - B y t e - B e f e h l e

Codeaufbau 11000011 11000010 UxxxOlO 11111010 11011101 11111101 11001101 11000100 11XXX100 11111100

Ausqabe FF FF FF FF FF FF FF FF FF FF

4.8 Datenverarbeitung

1. Auf gäbe: An den Kippschaltern sind binäre Funktionscodes stellen. Es sind die Codes aller 3-Byte-Befehle und durch folgende hexadezimale Ausgaben auf scheiden: a. Alle Sprung- und Unterprogrammbefehle sollen

269

des Prozessors 8085A einzu(Bild 4-145) herauszusuchen den Leuchtdioden zu u n t e r auf den Ausgabe FF erzeugen.

b. Alle Befehle mit Datenspeicheradressen sollen OF erzeugen. c. Alle LXI-Befehle sollen FO erzeugen. d. Bei allen anderen Befehlen soll auf der Ausgabe 00 erscheinen.

2.Aufgabe: Auf den Leuchtdioden lasse man einen Zähler von 1 bis 49 (Lottozahlen!) im BCD-Code laufen, der nach dem Erreichen des Endwertes wieder von vorn beginnt. Der Zähler soll mit dem werthöchsten Kippschalter angehalten werden. Steht der Schalter auf LOW (unten), so läuft der Zähler; steht er auf HIGH (oben), so hält er an.

3.Aufgabe: Die auf den Kippschaltern eingestellte Dualzahl ist mit dem konstanten Faktor 10 zu multiplizieren und auf den Leuchtdioden anzuzeigen. Bei einem Überlauf sollen die Leuchtdioden mit ca. 1 Hz blinken.

4. Auf gäbe: Für den Test von Befehlen e n t w e r f e man ein Programm, das den Inhalt des Bedingungsregisters (Flagregisters) auf den Leuchtdioden anzeigt. Der zu testende Befehl stehe in einer Schleife.

270

4.9

4 Einführung in die maschinenorientierte

Programmierung

Unterprogrammtechnik

Unterprogramme sind Hilfsprogramme, die für Sonderaufgaben wie z.B. Multiplikation und Division eingesetzt werden. Sie werden von einem Hauptprogramm oder einem anderen Unterprogramm aufgerufen und kehren an die Stelle des Aufrufs zurück. Sie bieten viele Vorteile. Unterprogramme unterteilen die Aufgabe in Teilprobleme, die sich einzeln besser programmieren und testen lassen. Bei langen Programmen kann man leicht die Übersicht verlieren. O f t ist es von Vorteil, zuerst die Unterprogramme zu entwerfen und zu testen, bevor mit der Programmierung des Hauptprogramms begonnen wird. Unterprogramme liegen o f t bereits als f e r t i g e Lösungen in einer Bibliothek vor oder können der Literatur entnommen werden. Bei der Arbeit mit einem Monitor oder einem Betriebssystem sind bereits f e r t i g e Unterprogramme für die Ein/ Ausgabe und Zahlenumwandlung verfügbar. Unterprogramme

verkürzen

das

Hauptprogramm,

wenn

Programmteile,

die

mehrmals benötigt werden, nur einmal als Unterprogramm geschrieben werden. Unterprogramme verlagern beim Programmentwurf Teilprobleme und Sonderfälle, die erst dann programmiert werden, wenn das Hauptprogramm f e r t i g ist.

Hauptprogramm Adresse Inhalt 1000 CD 1001 00 1002 11 Code Rücksprung--» 1003 Adresse

1003 /

1100

Befehlszähler

CD

Unterprogramm Adresse Inhalt 1100 Code 1101

RET

11

00

17FE 17FF 1800

03 10

alt 1800/17FF/17FE

Adreßzwischenspeicher

Stapelzeiger

CALL 1100H

Befehlsregister

Bild 4-146:

Stapel - RAM Adresse Inhalt

Aufruf eines Unterprogramms

Mikroprozessor 8085A

4.9 Unterprogrammtechnik

271

Bild 4-146 zeigt, wie beim Aufruf eines Unterprogramms der Befehlszähler, der bereits auf den folgenden Befehl zeigt, durch den CALL-Befehl automatisch in den Stapel g e r e t t e t wird. Der Stapelzeiger wird dabei um 2 vermindert. Der Befehl RET des Unterprogramms holt den Befehlszähler wieder aus dem Stapel zurück und setzt damit das Programm an der Stelle des Aufrufs f o r t . Der Stapelzeiger wird wieder um 2 erhöht. Unterprogramme arbeiten mit dem gleichen Registersatz, der auch im Hauptprogramm verwendet wird. Daher sollte man im Unterprogramm zunächst alle vom Unterprogramm benötigten Register auf den Stapel retten und vor dem Rücksprung wieder zurückladen. Eine Ausnahme sind Register, die Parameter (Ergebnisse) dem Hauptprogramm übergeben. Bild 4-147 zeigt den Aufruf eines Unterprogramms, das zwei Adressen in DE und HL miteinander vergleicht und dabei nur die Bedingungsbits verändert.

*8000 L1000 *1000 * 1003 *1006 *1008 *100B *100E *100F *1010 * 1013 * 1014 *1015 * 1016 * 1017 *101A * 101B *101C * 101D *101E *101F EOOOO

21 11 3E CD DA 77 23 C3

00 FF 00 13 00

11 11 10 00

08 10

C5 47 7A BC CA 1D 10 78 C1 C9 7B BD C3 1A 10

0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B OOOC 0000 000E 000F 0010 0011 0012 0013 0014 0015 0016 0017 0018

>; BILD 4-147 16-BIT-VERGLEICH 0000H MONITORADRESSE >M0NI EQU 1000H ADRESSZAEHLER > ORG LXI H.1100H ANFANGSADRESSE >START > LXI D.11FFH ENDADRESSE > MVI A,00H KONSTANTE UNTERPROGRAMM VERGLEICH DE-HL CALL DEVHL >L00P MONI > JC DIFF NEGATIV: DE KLEINER HL > M,A DIFF POSITIV: SPEICHERN MOV > INX H LAUFENDE ADRESSE + 1 JMP > LOOP SCHLEIFE >; UNTERPROGRAMM DE - HL VERGLEICHEN BEDINGUNGEN SETZEN >DEVHL PUSH B BC RETTEN > MOV B,A AKKU RETTEN > MOV A,D HIGH-BYTES VERGLEICHEN CMP > H > JZ DEVHL2 GLEICH: LOW VERGLEICHEN >DEVHL1 MOV A ,8 AKKU ZURUECK > POP B BC ZURUECK > RET RUECKSPRUNG A,E >DEVHL2 MOV LOW-BYTES VERGLEICHEN CMP > L > JMP DEVHL1 END >

Bild 4-147: Programmbeispiel: 16-Bit-Vergleich Das HL-Registerpaar enthält die Anfangsadresse und wird laufend um 1 erhöht. Das DE-Registerpaar enthält die Endadresse. Das Unterprogramm DEVHL bildet die Differenz der beiden Registerpaare und verändert das Carrybit und das Nullbit, die vom Hauptprogramm ausgewertet werden können. Alle Register bis auf die Sprungbedingungen bleiben dabei unverändert. Da das Unterprogramm relativ langsam ist, kann es günstiger sein, die Differenz der beiden Adressen zu berechnen und dann einen Zähler auf Null herabzuzählen. Bild 4-148 zeigt ein Programmbeispiel, das an den Kippschaltern eingegebene vorzeichenbehaftete Dualzahlen verändert auf den Leuchtdioden ausgibt. Positive Zahlen werden um die Konstante 1 erhöht; negative Zahlen um die Konstante 1 vermindert. Bei einem Überlauf bzw. Unterlauf soll als Fehlermeldung das Bitmuster 55 erscheinen. Das Uberlaufbit der vorzeichenbehafteten Arith-

272

4 Einführung in die maschinenorientierte Programmierung

L1000 *1000 *1002 *1004 »1006 *1007 *100A *100C *100F * 1012 * 1014 *1017 * 1019 *101C *101E

3E D3 DB B7 FA C6 CD DA D3 C3 D6 C3 3E C3

*1021 *1022 *1023 *1024 *1025 *1026 *1027 *1028 *1029 *102A *102B EOOOO

8B 03 01 17 01 21 1C 00 04 01 OC 55 12

10 10 10 10 10 10

F5 E3 7D 1F 0F 17 17 6F E3 F1 C9

Bild 4-148:

0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B OOOC 0000 OOOE 000F 0010 0011 0012 0013 0014 0015 0016 0017 0018 0019 001A 001B 001C 001D

>; BILD 4-148 UEBERLAUFBIT (V-BIT) TRENNEN 0RG 1000H ADRESSZAEHLER >START A.8BH STEUERBYTE A-AUS B=EIN MV1 OUT 03H NACH STEUERREGISTER > >L00P IN 01h ZAHL LESEN ORA A > ZAHL TESTEN JM NEG ZAHL NEGATIV > 01H ZAHL POSITIV: +1 > ADI >P0S CALL VBIT V-BIT NACH CARRY-BIT > JC FEHL V=1: UEBERLAUF OUT 00H ERGEBNIS AUSGEBEN >AUS JMP NEUE ZAHL LESEN > LOOP >NEG SUI ZAHL NEGATIV: -1 01H > JMP POS V-BIT AUSWERTEN A,55H >FEHL MVI FEHLERMARKE AUSGEBEN > JMP AUS >; UNTERPROGRAMM V-BIT NAC H CARRYBIT SCHIEBEN >VBIT PUSH PSW AKKU UND BEDING. NACH STAPEL > XTHL BEDINGUNGEN NACH L-REGISTER BEDINGUNGEN NACH AKKU > MOV A,L > RAR NACH RECHTS SCHIEBEN > RRC NACH RECHTS OHNE CARRY > RAL NACH LINKS SCHIEBEN > RAL NACH LINKS SCHIEBEN > L,A V-BIT IST NACH CARRY GESCHOBEN MOV > XTHL NEUES BEDINGUNGEN NACH STAPEL PSW > POP AKKU UND BEDING. VOM STAPEL > RET RUECKSPRUNG > END

>

Programmbeispiel: Überlaufbit

(V-Bit)

m e t i k ist im B e d i n g u n g s r e g i s t e r zwischen dem P - B i t und d e m C - B i t v e r s t e c k t . D a es keinen b e d i n g t e n Sprungbefehl zur A u s w e r t u n g d i e s e s V - B i t s g i b t , w i r d es durch das U n t e r p r o g r a m m V B I T in das C - B i t g e s c h o b e n , das bei v o r z e i c h e n behafteter

Arithmetik

o h n e Bedeutung i s t . D a m i t

ist e s m ö g l i c h , auch beim

R e c h n e n mit v o r z e i c h e n b e h a f t e t e n Dualzahlen e i n e n Z a h l e n ü b e r l a u f

zuerkennen.

Bild 4 - 1 4 9 z e i g t z w e i U n t e r p r o g r a m m e zur M u l t i p l i k a t i o n und Division mit d e r Konstanten

10, d i e

beide

bei

der Umwandlung von D e z i m a l z a h l e n

verwendet

w e r d e n . Das T e s t - H a u p t p r o g r a m m lädt d i e K o n s t a n t e n in das H L - R e g i s t e r p a a r und b r i n g t d i e E r g e b n i s s e in d e n Speicher. Das M u l t i p l i k a t i o n s p r o g r a m m

M U L 1 0 m u l t i p l i z i e r t den Inhalt des H L - R e g i s t e r -

paares mit der D e z i m a l z a h l 10. Das Ergebnis e r s c h e i n t w i e d e r im paar;

der

Akkumulator

enthält

den Ü b e r t r a g .

Das

HL-Register-

Unterprogramm

arbeitet

nach dem V e r f a h r e n d e r T e i l a d d i t i o n und V e r s c h i e b u n g ( B i l d 4 - 1 3 9 ) . Das Divisionsprogramm die

Dezimalzahl

D I V I O dividiert den Inhalt des H L - R e g i s t e r p a a r e s durch

10. D e r Quotient e r s c h e i n t w i e d e r im H L - R e g i s t e r p a a r ,

der

A k k u m u l a t o r e n t h ä l t d e n Divisionsrest. Das U n t e r p r o g r a m m a r b e i t e t nach d e m V e r f a h r e n der

mehrmaligen

werden g e r e t t e t .

Subtraktion

in e i n e r S c h l e i f e . A l l e

Hilfsregister

4.9 Unterprogrammtechnik

*8000 L1000 *1000 *1003 *1006 *1009 *100C *100F *1012 *1015 *1018

21 CD 22 32 21 CD 22 32 C3

*101B *101C *101D * 101E *101F *1020 * 1021 *1022 *1023 *1024 * 1026 *1027 *1028 *1029

D5 AF 54 5D 29 17 29 17 19 CE 00 29 17 DI C9

*102A *102B *102C *102F *1032 *1033 *1036 *1037 *103A *103D *103E *103F *1040 *1041 *1042 *1043 * 1044 *1046 *1048 E0000

C5 D5 01 11 09 D2 13 C3 01 09 7D EB DI C1 C9

64 1B 44 43 E9 2A 46 48 00

00 10 10 10 03 10 10 10 00

F6 FF 00 00 3A 10 32 10 0A 00

0001 0002 0003 0004 0005 0006 0007 0008 0009 000A OOOB OOOC 000D OOOE 000F 0010 0011 0012 0013 0014 0015 0016 0017 0018 0019 001A 001B 001C 001D 001E 001F 0020 0021 0022 0023 0024 0025 0026 0027 0028 0029 002A 002B 002C 002D 002E 002F 0030

273

>; BILD 4-149 MULTIPLIKATION UND DIVISION MIT 10 >M0NI EQU 0000H MONITORADRESSE 1000H ; ADRESSZAEHLER > ORG LXI DEZIMALZAHL MULTIPLIKAND >START H,100 > CALL MUL10 MAL 10 DEZIMAL SHLD PROD > PRODUKT SPEICHERN STA UEB UEBERTRAG SPEICHERN > LXI > DIVIDEND DEZIMAL H.1001 DURCH 10 DEZIMAL > CALL DIVIO QUOTIENTEN SPEICHERN > SHLD QUOT > STA REST REST SPEICHERN JMP MONI NACH MONITOR > >; UNTERPROGRAMM (AKKU + HL) MUL10 A > XRA UEBERTRAG LOESCHEN > D ,H MULTIPLIKAND NACH DE MOV > MOV E,L > DAD H MAL 2 UEBERTRAG NACH AKKU > RAL > DAD H MAL 2 = MAL 4 > RAL UEBERTRAG NACH AKKU > DAD D + MUL = MAL 5 > ACI 00 UEBERTRAG NACH AKKU > DAD H MAL 2 = MAL 10 > RAL UEBERTRAG NACH AKKU > POP D DE ZURUECK > RET >; UNTERPROGRAMM (HL=QU0T + (AKKU=REST) DIV10 PUSH B BC RETTEN > PUSH D DE RETTEN > LXI B.0FFF6H -10 DEZIMAL > LXI D,0000H QUOTIENTEN LOESCHEN >DIV101 DAD B 10 SUBTRAHIEREN > JNC DIV102 CY = 0: DIFF NEG: FERTIG > INX D QUOTIENT +1 > JMP DIV101 DIFF POS: WEITER >DIV102 LXI B ,0010 +10 DEZIMAL WIEDER ADDIEREN > DAD B LETZTE SUBTRAKTION AUFHEBEN > MOV A.L REST NACH AKKU > XCHG HL = QUOTIENT > D POP DE ZURUECK > POP B BC ZURUECK > RET >UEB DS 1 UEBERTRAG >PR0D DS 2 PRODUKT >QU0T DS 2 QUOTIENT >REST DS 1 REST > END

Bild 4-149: Programmbeispiel: Multiplikation und Division mit 10

Die zwischen dem Haupt- und dem Unterprogramm zu übertragenden Adressen und Daten werden normalerweise in den Registern übergeben. Reichen diese nicht aus, so können sie entsprechend Bild 4-150 hinter dem U n t e r p r o g r a m m aufruf abgelegt werden. In dem Beispiel soll das Unterprogramm in die Speicherstelle mit der Adresse 1100H die Konstante 55H bringen. Das U n t e r programm holt sich mit Hilfe der im Stapel liegenden Rücksprungadresse die Datenadresse und die Daten. Bei entsprechender Definition des Unterprogramms könnte die Liste der Adressen und Daten beliebig lang sein.

274

4 Einßhrung

*8000 11000 *1000 *1003 *1006 *1008 »1009 *100C *100D *100E *100F *1010 *1011 * 1012 * 1013 * 1014 *1015 * 1016 *1017 * 1018 * 1019 *101A *101B *101C * 101D EOOOO

CD C3 00 55 C3

0C 10 09 10 11 00 00

E3 E5 D5 F5 23 23 23 5E 23 56 23 7E 12 F1 D1 E1 E3 C9

Bild 4 - 1 5 0 :

Bild 4 - 1 5 1 :

0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B OOOC OOOD OOOE 000F 0010 0011 0012 0013 0014 0015 0016 0017 0018 0019 001A 001B 001C

Programmierung

> ; BILD 4-150 ADRESS- UND >M0NI OOOOH EQU 1000H > 0RG >START CALL MOVE JMP > NEXT > DM 1100H > DB 55H JMP MONI >NEXT > ; UNTERPROGRAMM HOLT SICH >M0VE XTHL > PUSH H > PUSH D > PUSH PSW > INX H > INX H > INX H E,M > MOV > INX H > D,M MOV > INX H > A,M MOV > STAX D > POP PSW > POP D > POP H > XTHL > RET > END

DATENUEBERGABE MONITORADRESSE ADRESSZAEHLER UNTERPROGRAMM SPEICHERN L I S T E UEBERSPRINGEN ADRESSE ABLEGEN DATEN ABLEGEN ENDE DER L I S T E ADRESSE UND DATEN AUS LISTE RUECKSPRUNGADRESSE NACH STAPEL DE RETTEN AKKU RETTEN JMP-BEFEHL UEBERGEHEN LOW-TEIL DER ADRESSE HOLEN HI GH-TEIL DER ADRESSE HOLEN DATEN AUS L I S T E HOLEN UEBERTRAGUNG AUSFUEHREN AKKU ZURUECK DE ZURUECK RUECKSPRUNGADRESSE ZURUECK NACH STAPEL

Programmbeispiel: Adreß- und Datenübergabe

*8000 L1000 *1000 CD 09 10 *1003 22 OC 10 *1006 C3 00 00 *1009 E1 *100A E5 *100B C9 *100C EOOOO

in die maschinenorientierte

0001 0002 0003 0004 0005 0006 0007 0008 0009 OOOA OOOB OOOC

> ; B I L D 4-151 BEFEHLSZAEHLER LADEN MONITORADRESSE >MONI OOOOH EQU ADRESSZAEHLER 1000H > ORG BEFEHLSZAEHLER LADEN CALL PC >START NACH SPEICHER > SHLD TEST MONI NACH MONITOR JMP > > ; UNTERPROGRAMM LAEDT PC NACH HL PC AUS STAPEL POP H >PC HEBT POP H AUF > PUSH H > RET SPEICHER FUER PC 2 >TEST DS > END

Programmbeispiel: Befehlszähler laden

Durch das Retten der Rücksprungadresse in den Stapel ist es möglich, den augenblicklichen Stand des Befehlszählers zu erfahren. Im Beispiel 4 - 1 5 0 wurden auf diese Art Werte aus dem Hauptprogramm übernommen. Das Unterprogramm PC des Bildes 4 - 1 5 1 lädt den Stand des Befehlszählers in das HLRegisterpaar und übergibt ihn an das Hauptprogramm.

4.9 Unterprogrammtechnik

275

Alle Sprungadressen und U n t e r p r o g r a m m a d r e s s e n des Prozessors 8085A müssen als a b s o l u t e 1 6 - B i t - Z a h l e n a n g e g e b e n w e r d e n . Das b e d e u t e t , daß die P r o g r a m me i m m e r an d e r S t e l l e im Speicher liegen müssen, f ü r die sie ü b e r s e t z t w u r d e n . Andere Mikroprozessoren k e n n e n die relative Adressierung, bei der nur d e r Abstand zum Sprungziel a n g e g e b e n wird. Ein A d r e ß r e c h e n w e r k a d d i e r t d e n Abstand zum a u g e n b l i c k l i c h e n Stand d e s Befehlszählers und bildet so d e n neuen B e f e h l s z ä h l e r s t a n d . Diese P r o g r a m m e k ö n n e n beliebig im Speicher verschoben w e r d e n . Bild 4 - 1 5 2 z e i g t , wie mit Hilfe d e r U n t e r p r o g r a m m t e c h n i k relative Sprünge a u c h beim 8085A möglich sind.

*8000 L1000 *1000 *1002 *1004 *1005 *1007 *100A *100B *100C *100F

3E D3 AF D3 CD 3C D5 11 CD

8B 03 00 00 17 F3 FF 0E 17

*1012 D1 * 1013 C3 00 00 L1700 * 1700 * 1701 *1702 *1705 * 1706 * 1707 *1708 *170B *17X * 170D

E5 F5 21 C2 A2 2B 7C B5 C2 05 17 F1 E1 C9

*170E *170F * 1710 *1711

E1 19 D1 E9

* 1712 * 1713 * 1714 * 1715 * 1716 * 1717 EOOOO

E3 19 D1 E3 EB C9

0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B OOOC 000D 000E 000F 0010 0011 0012 0013 0014 0015 0016 0017 0018 0019 001A 00 IB 001C 001D 00 IE 001F 0020 0021 0022 0023 0024 0025 0026 0027 0028

>; BILD 4-152 RELATIVE SPRUNGADRESSIERUNG >M0NI 0000H ; MONITORADRESSE EQU 1000H > ORG ; ADRESSZAEHLER A.8BH >START MVI ; STEUERBYTE A=AUS B=EIN > OUT 03H ; NACH STEUERREGISTER > XRA A ; ZAEHLER L0ESCHEN >L00P OUT 00H ; ZAEHLER AUSGEBEN > CALL WAIT ; ZAEHLER VERZ0EGERN INR > A ; ZAEHLER + 1 > PUSH D ; DE RETTEN > LXI D.0FFF3H ; LOOP - NEXT = -13 > CALL BRA1 ; ODER BRA2: RELATIVER SPRUNG >; NUR BEI BEDINGTEM SPRUNG ERFORDERLICH; HIER NICHT !!! >NEXT POP D ; DE ZURUECK WENN NICHT GESPR. JMP > MONI ; WEITER WENN NICHT GESPRUNGEN >; UNTERPROGRAMME LIEGEN AUF FESTEN ADRESSEN > ORG 1700H ; ADRESSZAEHLER FUER UNTERPROGR PUSH H >WAIT ; HL RETTEN > PUSH PSW ; AKKU RETTEN > LXI H.41666 ; ZAEHLERANFANGSWERT DCX >WAIT1 H ; ZAEHLER - 1 > MOV A,H ; ZAEHLER AUF NULL TESTEN > ORA L ; NULL ? > JNZ WAIT1 ; NEIN: WEITER ZAEHLEN > POP PSW ; AKKU ZURUECK > POP H ; HL ZURUECK ; > RET >; 1. VERSION RELATIVER SPRUNG ZERSTOERT HL >BRA1 POP H ; LAUFENDE ADRESSE AUS STAPEL > DAD D ; ABSTAND DAZU > POP D ; DE ZURUECK > PCHL ; RELATIVER SPRUNG AUS (HL) >; 2. VERSION RELATIVER SPRUNG HL BLEIBT ERHALTEN >BRA2 XTHL ; HL GERETTET, ADRESSE NACH HL > DAD D ; ABSTAND DAZU > POP D ; DE ZURUECK > XTHL ; NEUE ADRESSE NACH STAPEL > XCHG ; DE UND HL VERTAUSCHT > RET ; RELATIVER RUECKSPRUNG > END

Bild 4 - 1 5 2 : P r o g r a m m b e i s p i e l : relative Sprungadressierung Das H a u p t p r o g r a m m b e s t e h t aus e i n e r Z ä h l s c h l e i f e , d e r e n Wert verzögert ( U n t e r p r o g r a m m WAIT) auf den L e u c h t d i o d e n a u s g e g e b e n w i r d . Einem U n t e r p r o g r a m m BRA, das den relativen Sprung a u s f ü h r t , wird d e r Abstand zum Sprungziel als v o r z e i c h e n b e h a f t e t e Dualzahl im D E - R e g i s t e r p a a r ü b e r g e b e n . Das D E - R e g i s t e r p a a r wird mit einem P U S H - B e f e h l in den Stapel g e r e t t e t und

276

4 Einführung in die maschinenorientierte Programmierung

vom Unterprogramm mit einem P O P - B e f e h l wieder zurückgeladen. Für den F a l l , daß bedingte Sprünge verwendet werden, muß das Hauptprogramm mit einem P O P - B e f e h l s e l b s t für das Zurückladen des D E - R e g i s t e r p a a r e s sorgen; bei dem unbedingten Sprung bzw. CALL ist es nicht e r f o r d e r l i c h . Das D E R e g i s t e r p a a r muß die D i f f e r e n z der Adressen des Sprungziels ( L O O P ) zum nächsten B e f e h l ( N E X T ) e n t h a l t e n . Vorwärtssprünge e r g e b e n positive 1 6 - B i t Dualzahlen; Rückwärtssprünge negative Zahlen im Z w e i e r k o m p l e m e n t . Das Hauptprogramm kann beliebig im Speicher verschoben werden; die U n t e r p r o g r a m m e WAIT und B R A müssen auf f e s t e n Adressen liegen. Das U n t e r p r o gramm B R A 1 z e r s t ö r t das H L - R e g i s t e r p a a r ; das Unterprogramm B R A 2 r e t t e t das H L - R e g i s t e r p a a r , ist a b e r länger. Die U n t e r p r o g r a m m e holen die Adresse des Aufrufs (Rücksprungadresse) aus dem S t a p e l , addieren dazu den Abstand aus dem D E - R e g i s t e r p a a r , holen das a l t e D E - R e g i s t e r p a a r aus dem Stapel und springen relativ zum Befehlszählerstand. Bild 4 - 1 5 3 z e i g t , daß auch e i n e relative Datenadressierung möglich i s t .

*8000 L1000 *1000 *1002 *1004 *1006 *1007 *100A *100D *100E *100F * 1012 L1700 *1700 * 1701 *1702 *1703 E0000

3E D3 DB D5 11 CD D1 77 C3

E1 E5 19 C9

Bild 4 - 1 5 3 :

8B 03 01 05 00 00 17

00 00

0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B OOOC 000D 000E 000F 0010 0011 0012 0013 0014

> ; B I L D 4-153 RELATIVE DATENADRESSIERUNG >M0NI EQU 0000H MONITORADRESSE > ORG 1000H ADRESSZAEHLER >START MVI A.8BH STEUERBYTE A=AUS B=EIN > OUT 03H NACH STEUERREGISTER 01H DATENBYTE VON KIPPSCHALTERN > IN > PUSH D DE RETTEN > LXI D ,5 ABSTAND DATA - NEXT > CALL PCREL LADE HL MIT DATENADRESSE >NEXT POP D DE ZURUECK > MOV M,A DATEN RELATIV SPEICHERN MONI > JMP SPRUNG NACH MONITOR >DATA DS 1 DATENSPEICHERSTELLE >; UNTERPROGRAMM RELATIVE DATENADRESSE NACH HL > 0RG 1700H ADRESSZAEHLER UNTERPROGRAMME >PCREL POP H BEFEHLSZAEHLER LADEN > PUSH H RUECKSPRUNGADRESSE ZURUECK > DAD D ABSTAND DAZU ADDIEREN > RET RUECKSPRUNG > END

Programmbeispiel: relative Datenadressierung

Die relative Datenadressierung legt die Adressen der D a t e n s p e i c h e r s t e l l e n relativ zum Befehlszähler und damit zur augenblicklichen L a g e des Programms an. In dem vorliegenden Beispiel soll die D a t e n s p e i c h e r s t e l l e DATA unmittelbar hinter dem Programm liegen. Dem Unterprogramm PCREL wird wieder im D E - R e g i s t e r p a a r der Abstand der D a t e n s p e i c h e r s t e l l e zur Rücksprungadresse übergeben. Das Unterprogramm PCREL addiert den Abstand zum Befehlszähler und übergibt die a b s o l u t e Adresse im H L - R e g i s t e r p a a r , das mit indizierter Adressierung die Datenübertragung vornimmt. Alle Adressen von Peripherieregistern (Ports) müssen bei der Programmierung als K o n s t a n t e n in den IN- und O U T - B e f e h l e n angegeben werden; eine indizierte Registeradressierung

wie für Speicherstellen ist bei Portadressen nicht

mög-

lich. Bild 4 - 1 5 4 zeigt die Möglichkeit, Portadressen mit Hilfe von U n t e r p r o grammen variabel zu m a c h e n .

4.9 Unterprogrammtechnik

L1000 *1000 *1002 *1004 *1007 *1009 *100C *100E *1011

3E 26 CD 26 CD 26 CD C3

8B 03 00 01 0F 00 00 07

17 10

L1700 *1700 *1702 *1705 * 1708 *170B *170E *170F *1711

2E 22 21 22 CD C9 2E C3

D3 50 C9 52 50

17 C9 17 17

L1750 * 1750 E0000

17 17

DB 02 17

0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B OOOC 000D 000E 000F 0010 0011 0012 0013 0014 0015 0016 0017 0018

277

>; BILD 4-154 VARIABLE PERIPHERIEADRESSIERUNG 1000H ADRESSZAEHLER HAUPTPROGRAfW > ORG >START A,8BH STEUERBYTE A=AUS B=EIN MVI H.03H ADRESSE STEUERREGISTER > MVI > CALL AUS NACH PERIPHERIE H.01H ADRESSE EINGABEREGISTER >L00P MVI VON PERIPHERIE LESEN > CALL EIN H.00H ADRESSE AUSGABEREGISTER > MVI > CALL AUS NACH PERIPHERIE JMP SCHLEIFE > LOOP >; UNTERPROGRAMME 1700H ADRESSZAEHLER UNTERPROGRAMME > ORG L.0D3H CODE FUER 0UT-BEFEHL >AUS MVI SHLD RAM NACH RAM-BEREICH >AUS1 H.0C9C9H > LXI 2 MAL CODE FUER RET-BEFEHL SHLD RAM+2 NACH RAM-BEREICH > > CALL RAM GESPEICHERTES UPR0 AUFRUFEN > RET RUECKSPRUNG >EIN L.0DBH CODE FUER IN-BEFEHL MVI JMP AUS1 PROGRAMM AUFBAUEN > >; RAM-BEREICH FUER UNTERPROGRAMM > ORG 1750H ADRESSZAEHLER VARIABLES UPRO >RAM DS 4 VIER BYTES RESERVIEREN > END

Bild 4-154: Programmbeispiel: variable Peripherieadressierung

Das Hauptprogramm übergibt dem Unterprogramm AUS im Akkumulator die Daten und im H-Register die Peripherieadresse. Das Unterprogramm lädt den Code des OUT-Befehls in das L - R e g i s t e r und speichert ihn zusammen mit der Registeradresse in einen RAM-Bereich. Dann folgt der Code f ü r den RET-Befehl. Der RAM-Bereich, der nun als Unterprogramm RAM aufgerufen wird, enthält die beiden Befehle OUT mit variabler Registeradresse und den RET-Befehl. Das Beispiel zeigt auch, daß ein Unterprogramm weitere Unterprogramme a u f rufen kann. Die Rücksprungadressen liegen hintereinander im Stapel und werden in der richtigen Reihenfolge durch die RET-Befehle wieder zurückgeholt.

278

4.10

4 Einßhrung in die maschinenorientierte

Programmierung

Programmunterbrechungen (Interrupt)

a. A b f r a g e s c h l e i f e Bild 4 - 1 5 5 :

b.

Interrupt

A b f r a g e s c h l e i f e und Interrupt

B e i d e r E i n g a b e von S t e u e r s i g n a l e n in den M i k r o r e c h n e r u n t e r s c h e i d e t man zwei Verfahren: Die

A b f r a g e s c h l e i f e e n t s p r e c h e n d Bild 4 - 1 5 5 a l i e s t d i e E i n g a b e l e i t u n g ,

prüft

den W e r t und v e r z w e i g t in e i n P r o g r a m m s t ü c k , das auf das Signal r e a g i e r t . Sind sehr v i e l e E i n g a b e n zu k o n t r o l l i e r e n oder B e r e c h n u n g e n vorzunehmen, so kann es v o r k o m m e n , d a ß die L e i t u n g nur in s e h r g r o ß e n Z e i t a b s t ä n d e n ( z . B . S e k u n den) überprüft

werden k a n n . Bei s e h r w i c h t i g e n S i g n a l e n wie z . B . N o t - A u s ist

d i e s e Zeit zu l a n g .

279

4.10 Programmunterbrechungen (Interrupt!

Bei e i n e r P r o g r a m m u n t e r b r e c h u n g - auch I n t e r r u p t genannt - nach Bild 4 - 1 5 5 b wird

das

Signal

angeschlossen.

an

e i n e n der

fünf

Interrupteingänge

d e s Prozessors

Wird das Signal aktiv, s p r i c h t a l s o z . B . der

8085A

Not-Aus-Schalter

an, so wird das laufende Programm s o f o r t u n t e r b r o c h e n und es wird e i n I n t e r ruptprogramm g e s t a r t e t , das den F a l l b e h a n d e l t . Wie b e i e i n e m U n t e r p r o g r a m m ist e s m ö g l i c h , das u n t e r b r o c h e n e

Programm an der S t e l l e der U n t e r b r e c h u n g

f o r t z u s e t z e n . Die P r o g r a m m u n t e r b r e c h u n g asynchron

zum P r o z e s s o r t a k t

auf.

t r i t t zu einem b e l i e b i g e n Z e i t p u n k t

Da der a u g e n b l i c k l i c h

bearbeitete

Befehl

noch b e e n d e t wird, b e t r ä g t die R e a k t i o n s z e i t zwischen 1 und 20 p s . Bild 4 - 1 5 6 zeigt die I n t e r r u p t a n s c h l ü s s e des Prozessors 8 0 8 5 A .

R E S IN -

RESET:

RESOUT-

Start

bei

OOOOH

TRAP-Flankenflipflop TRAP

_

&

TRAP:

Start

RST-7.5-Flankenflipflop RST

7.5

ifl-H

RST7.5

Start

bei

003CH

T RST

bei

0024H

6.5

RST6.5

Start

bei

0034H RST

5.5

RST5.5

Start

bei

002CH INTR

INTR:

RST-Befeh 1

INTA

ei n g e b e n

-SID • SÖD

7.5

6.5

5.5

anzeigen

INTE

7.5

6.5

5.5

INTE

maskieren

F T

Interruptregi ster

EI

DI

- L ö s c h e n (Sperren) durch: RESET TRAP Annahme eines RST-Interrupts Annahme von INTR Befehl DI

8085 Bild 4 - 1 5 6 :

I n t e r r u p t s t e u e r u n g des 8 0 8 5 A

Der z e i t l i c h e V e r l a u f der Interruptzustände wurde b e r e i t s im A b s c h n i t t erklärt.

Ein

Reset

(Zurücksetzen)

bricht

mit

einer

fallenden

Flanke

3.3.3 den

laufenden B e f e h l a b . Mit e i n e r s t e i g e n d e n F l a n k e wird d e r B e f e h l s z ä h l e r mit

280

4 Einführung in die maschinenorientierte

Programmierung

der Startadresse 0000 geladen. Dort muß sich der erste Befehl des Programms befinden. Ein Reset sperrt (löscht) das INTE-Flipflop und sperrt (setzt) die drei Masken des Interruptregisters. Jeder Interrupt sperrt (löscht) das INTEFlipflop; die drei Masken des Interruptregisters bleiben jedoch unverändert. Damit sind alle Interrupts mit Ausnahme des TRAP gesperrt. Der TRAP-Interrupt ist nicht sperrbar. Zum Schutz gegen kurzzeitige Impulse sind zwei Auslösebedingungen erforderlich. Das interne TRAP-Flipflop muß durch eine steigende Flanke gesetzt sein, und zum Zeitpunkt der Abfrage am Ende eines Befehls muß der Eingang auf HIGH liegen. Das bedeutet, daß der Auslöseimpuls mindestens 18 Takte anliegen muß, um im ungünstigsten Fall wirken zu können. Bei einem Reset und bei einer Bedienung des TRAP-Interrupts wird das Flankenflipflop automatisch gelöscht. Ein TRAP-Interrupt r e t t e t den Befehlszähler mit der Adresse des nächsten Befehls in den Stapel und s t a r t e t ein Programm, das mit der Adresse 0024 beginnen muß. Dort steht in den meisten Fällen ein Sprungbefehl in das eigentliche Interruptprogramm. Jeder TRAP-Interrupt löscht das INTE-Flipflop und sperrt damit alle anderen Interrupts. Es ist Aufgabe des Programms, die Interrupts mit dem Befehl EI wieder frei zu geben. Steht am Ende des Interruptprogramms der Rücksprungbefehl RET, so wird das Programm an der unterbrochenen Stelle fortgesetzt. Der RST-7.5-Interrupt kann durch das INTE-Flipflop und das Maskenbit M7.5 des Interruptregisters gesperrt werden. Das Flankenflipflop wird durch eine steigende Flanke am Eingang RST-7.5 gesetzt. Es wird durch ein Reset oder das Schreiben einer 1 nach Bit B4 des Interruptregisters gelöscht. Bei Annahme des Interrupts werden der Befehl beendet, die Rücksprungadresse g e r e t t e t , das INTEund Flankenflipflop gelöscht und ein Programm ab Adresse 003C g e s t a r t e t . Die RST-6.5- und RST-5.5-Interrupts können durch das INTE-Flipflop und die Maskenbits M6.5 bzw. M5.5 gesperrt werden. Sie sind zustandsgesteuert. Bei der Annahme werden der Befehl beendet, die Rücksprungadresse g e r e t t e t , das INTE-Flipflop gelöscht und ein Programm ab Adresse 0034 bzw. 002C g e s t a r t e t . Der INTR-Interrupt wird nur durch das INTE-Flipflop gesperrt. Er ist zustandsgesteuert. Bei der Annahme werden der Befehl beendet und das INTE-Flipflop gelöscht. Das INTA-Signal holt über den Datenbus den Code eines Befehls. Dieser wird ausgeführt. Bild 4-157 zeigt die RST-Befehle, die die Rücksprungadresse retten und ein Programm von einer festgelegten Adresse s t a r t e n . RST bedeutet ReSTart gleich erneuter Programmbeginn bei bestimmten Adressen, die im Bereich von 0000 bis 0040 liegen. Der Befehl EI Enable Interrupt gleich Freigabe der Interrupts setzt das INTE-Flipflop auf 1 und gibt damit eine der Interruptbedingungen frei. Der Befehl wirkt im Gegensatz zu allen anderen Befehlen nicht sofort, sondern erst nach Ablauf des folgenden Befehls. Beendet man ein Interruptprogramm mit der Befehlsfolge EI und RET, so kann ein erneuter Interrupt erst nach dem Rücksprung in das unterbrochene Programm erfolgen. Der Befehl DI Disable Interrupt gleich sperre die Inter-

4.10 Programmunterbrechungen (Interrupt)

281

Bed i ngung Bef.

Operand

RST RST RST RST RST RST RST RST

0

Start

bei

1 2 3 4 5 6 7

Start

bei

0008

Start

bei

0010

Start

bei

0018

Start

bei

0020

Start

bei

0028

Start

bei

0030

Start

bei

0038

PC

Stapel

Alle

EI DI RET HLT RIN SIN Bild 4 - 1 5 7 :

RST-Bef:

Wirkung

=>

0000

0P

B

C7 CF D7 DF E7 EF F7 FF

1 12

T

1 12 1 12

1 12 1 12

1 12 1 12

1 12

Interrupt

frei

FB 1

4

Interrupt

g e s p . F3 1

4

Rückk. Proz.

aus

SZxHOPvCy

I n t . C9 1 10

anhalten

A

Int.Reg.

76 1 20 1 30 1

5 4 4

Interruptbefehle des 8085A

rupts löscht das INTE-Flipflop und sperrt damit alle sperrbaren Interrupts. Er dient dazu, wichtige Programmteile wie z.B. Zeitschleifen gegen U n t e r b r e chungen zu schützen. Der R E T - B e f e h l kehrt wie bei einem Unterprogramm in das unterbrochene Programm zurück. Der Befehl HLT gleich HaLT bringt den Prozessor in einen Wartezustand, aus dem e r nur durch ein Reset oder einen Interrupt wieder g e s t a r t e t werden kann. Der Befehlszähler enthält dabei schon die Adresse des folgenden Befehls. Der T R AP-Interrupt beendet immer den Halt-Zustand, die sperrbaren Interrupts nur, wenn sie freigegeben sind. Dabei ist entsprechend Bild 4 - 1 6 0 zu b e a c h t e n , daß der Interrupt sowohl vor dem H L T B e f e h l als auch in dem Interruptprogramm freigegeben werden muß. Der B e f e h l SIM Store Interrupt Mask gleich speichere die Interruptmaske speichert den Inhalt des Akkumulators in das Interruptregister. Der Befehl RIM Read I n t e r rupt Mask liest den Inhalt des Interruptregisters in den Akkumulator. Bild 4 - 1 5 8 zeigt den Aufbau des Interruptregisters. Ein Teil der Bits des Interruptregisters hat beim Lesen ( R I M - B e f e h l ) eine andere Bedeutung als beim Schreiben ( S I M - B e f e h l ) . Für das Schreiben gilt: Die Bitposition 6 unterscheidet zwischen der seriellen Ausgabe ( B 6 = l ) einer Adressierung des Interruptregisters ( B 6 = 0 ) .

und

Die Bitpositionen 0, 1 und 2 sind die Maskenbits, die mit einer 1 den I n t e r rupt sperren und ihn mit einer 0 freigeben. Nach einem R e s e t sind sie 1; damit sind alle drei RST-Interrupts g e s p e r r t .

282

4 Einßhrung

Bit SIM-Befehl

Bit RIM-Befehl

Bild 4 - 1 5 8 :

in die maschinenorientierte

7

6

5

4

(SOD)

0

X

R7.5

7

6

5

4

Programmierung

3

2

0

1

MSE M7.5 MS.5 M5.5

3

2

1

schreiben

0

SID 17.5 16.5 15.5 INTE M7.5 M6.5 M5.5

lesen

Aufbau des Interruptregisters

Die B i t p o s i t i o n 3 muß 1 s e i n , d a m i t d i e B i t p o s i t i o n e n 0, 1 und 2 b e i e i n e m S I M - B e f e h l W e r t e a u s d e m A k k u m u l a t o r ü b e r n e h m e n k ö n n e n . Ist d i e B i t p o s i t i o n 3 g l e i c h 0, so b l e i b e n d i e M a s k e n b i t s u n v e r ä n d e r t . Die B i t p o s i t i o n 4 d i e n t zum L ö s c h e n d e s R S T - 7 . 5 - F l a n k e n f l i p f l o p s . Eine l ö s c h t d a s F l i p f l o p ; e i n e 0 l ä ß t es u n v e r ä n d e r t .

1

Die B i t p o s i t i o n e n 6 und 7 d i e n e n zur s e r i e l l e n D a t e n a u s g a b e ü b e r d e n A u s g a n g SOD d e s P r o z e s s o r s . Die B i t p o s i t i o n 6 m u ß 1 s e i n , d a m i t d a s w e r t h ö c h s t e Bit d e s A k k u m u l a t o r s (Bit 7) in d i e B i t p o s i t i o n 7 ü b e r n o m m e n w i r d . F ü r d a s L e s e n mit d e m R I M - B e f e h l h a b e n d i e B i t s d e s I n t e r r u p t r e g i s t e r s f o l gende Bedeutung: Die B i t p o s i t i o n e n 0, 1 und 2 z e i g e n d e n Z u s t a n d d e r M a s k e n b i t s a n , d i e m i t dem SIM-Befehl eingeschrieben wurden. 1 bedeutet gesperrt; 0 bedeutet f r e i gegeben. Die B i t p o s i t i o n 3 z e i g t d e n Z u s t a n d gesperrt, 1 bedeutet freigegeben.

des

INTE-Flipflops

an.

0

bedeutet

Die B i t p o s i t i o n e n 4, 5 und 6 zeigen a n , ob R S T - I n t e r r u p t s a n s t e h e n . D a b e i z e i g t Bit 6 d e n Z u s t a n d d e s R S T - 7 . 5 - F l a n k e n f l i p f l o p s an; d i e a n d e r e n B i t p o s i t i o n e n z e i g e n d e n a u g e n b l i c k l i c h e n Z u s t a n d d e r R S T - 6 . 5 - und R S T - 5 . 5 Leitungen. Die B i t p o s i t i o n 7 d i e n t zur s e r i e l l e n D a t e n e i n g a b e ü b e r d e n S I D - A n s c h l u ß d e s P r o z e s s o r s . Zur A u s w e r t u n g w i r d d a s I n t e r r u p t r e g i s t e r mit e i n e m R I M - B e f e h l in den Akkumulator gelesen. Das Bild 4 - 1 5 9 z e i g t e i n P r o g r a m m b e i s p i e l , das d a s V e r h a l t e n d e s I n t e r r u p t r e g i s t e r s t e s t e t . Die a n d e n K i p p s c h a l t e r n e i n g e s t e l l t e B i t k o m b i n a t i o n wird in d a s I n t e r r u p t r e g i s t e r g e s c h r i e b e n . A n s t e l l e d e r N O P - B e f e h l e k a n n z.B. e i n E I - B e f e h l e i n g e b a u t w e r d e n , um s e i n e Wirkung zu t e s t e n . A n s c h l i e ß e n d wird d a s I n t e r r u p t r e g i s t e r mit d e m B e f e h l RIM g e l e s e n und zur K o n t r o l l e auf d e n Leuchtdioden ausgegeben.

4.10 Programmunterbrechungen

11000 *1000 *1002 *1004 * 1006 *1007 *1008 *1009 *100A *100C EOOOO

3E D3 DB 30 00 00 20 D3 C3

8B 03 01

00 04 10

0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B OOOC

>; BILD 4-159 > ORG >START MVI > OUT IN >L00P > SIM > NOP > NOP > RIM > OUT > JMP > END

(Interrupt)

283

INTERRUPTREGISTER 1000H ADRESSZAEHLER A.8BH STEUERBYTE A=AUS B=EIN 03H NACH STEUERREGISTER 01H BYTE LESEN NACH INTERRUPTREGISTER FREIER PLATZ FUER BEFEHLE FREIER PLATZ FUER BEFEHLE INTERRUPTREGISTER LESEN 00H NACH LEUCHTDIODEN AUSGEBEN LOOP NEUE EINGABE

Bild 4-159: Progiammbeispiel: Interruptregister

L003C *003C C3 3C 08 L083C *083C *083D *083F *0840

3C D3 00 FB C9

L1000 *1000 *1002 *1004 *1006 * 1007 *1008 *100A

3E D3 3E 30 AF D3 FB

8B 03 1B 00

*100B 00 *100C 76 *100D C3 0B 10 EOOOO

0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B OOOC 000D 000E 000F 0010 0011 0012 0013 0014 0015 0016 0017

>; BILD 4-160 HLT-BEFEHL UND RST7.5-INTERRUPT EPR0M-BEREICH IM MONITOR > ORG 003CH >RST75 JMP RST75R SPRUNG NACH RAM-BEREICH 083CH RAM-BEREICH IM MONITOR-RAM > ORG >; RST7.5 INTERRUPTPROGRAMM A >RST75R INR ZAEHLER + 1 00 H NACH LEUCHTDIODEN AUSGEBEN > OUT INTERRUPT FREIGEBEN > EI > RET ZURUECK NACH P R O G R A M >; LAUFENDES HAUPTPROGRAMM > 0RG 1000H ADRESSZAEHLER A,8BH STEUERBYTE A=AUS B=EIN >START MVI NACH STEUERREGISTER > OUT 03H > MVI 0001 1011 RST 7.5 FREI A.1BH NACH INTERRUPTREGISTER > SIM A > XRA ZAEHLER LOESCHEN 00 H NACH LEUCHTDIODEN > OUT > EI INTERRUPTFLIPFLOP FREIGEBEN >; ARBEITSSCHLEIFE WIRD DURCH RST7.5 UNTERBROCHEN LEERBEFEHL >L00P NOP HALTEN UND WARTEN AUF RST7.5 > HLT > JMP LOOP WEITER > END

Bild 4-160: Programmbeispiel: HLT-Befehl und RST-7.5-Interrupt

Bei der Arbeit mit Übungssystemen liegt der Speicherbereich ab Adresse 0000 meist in einem Festwertspeicher (EPROM). Befinden sich auf den Einsprungpunkten der Interrupts Sprungbefehle, die in einen Schreib/Lesespeicher (RAM) f ü h ren, so kann der Benutzer dort eigene Interruptprogramme ablegen. So könnte auf der EPROM-Adresse 003CH (Einsprung RST-7.5) der Befehl "JMP 083CH" liegen, der zur RAM-Adresse 083CH springt. Das Beispiel Bild 4-160 legt auf diese Adresse ein Interruptprogramm, das im Falle eines RST-7.5-Interrupts einen Zähler auf den Leuchtdioden um 1 erhöht, das INTE-Flipflop mit EI w i e der freigibt und in das Hauptprogramm zurückspringt. Das Hauptprogramm ab Adresse 1000H programmiert die Parallelschnittstelle, gibt die RST-7.5-Maske und das INTE-Flipflop frei und löscht den Ausgabezähler. Die Warteschleife mit dem HLT-Befehl wird nur durch einen RST-7.5-Interrupt kurzzeitig u n t e r b r o chen. Die Freigabe des durch den Interrupt gesperrten INTE-Flipflops erfolgt im Interruptprogramm, sonst würde der Halt-Zustand nicht beendet werden.

284

4.11

4 Einführung in die maschinenorientierte

Programmierung

Erweiterungen des Befehlssatzes

Bild 4-161 zeigt E r w e i t e r u n g e n des Befehlssatzes, die von den Herstellern nicht d o k u m e n t i e r t sind, aber in der ELEKTRONIK 1978 H.15 S.66 beschrieben w u r d e n . Bitposition 1 des Bedingungsregisters (englisch F l a g r e g i s t e r ) enthält das Overflowbit der v o r z e i c h e n b e h a f t e t e n Dualarithmetik; Bitpostion 5 ein C a r r y b i t , das nur bei den 16-Bit-Zählbefehlen INX und DCX w i r k t . Zu diesem Bit gibt es auch bedingte Sprungbefehle. Da die Hersteller die g e n a n n t e n B i t positionen und Befehle verschweigen, könnte es möglich sein, d a ß es Versionen des Prozessors 8085A gibt, die diese B e f e h l e nicht oder mit anderen Funktionen e n t h a l t e n . Die dem V e r f a s s e r verfügbaren Prozessoren vom Typ 8085A verhielt e n sich jedoch e n t s p r e c h e n d Bild 4-161.

Bit Bedingungsregister

7 S

5

4

3

2

1

Z X H O —,—' Carry bei INX und DCX Befehlen

P

W i rkung HL < = HL - BC HL s c h i e . a r . r e . DE s c h i e . z y . 1 i . DE < = HL + k o n . DE < = SP + k o n . V = 1: S t a r t 40H V = 0: weiter HL = > ( D E ) HL < = ( D E ) s p r i n g e b e i X=1 s p r i n g e b e i X=0

OP 08 10 18 28 38 CB CB D9 ED FD DD

I — I

B e f . Operand DSUB ASRH RLDE LDEH konst. LDES konst RST V RST V SHLX LHLX JX adresse JNX ad r e s s e

Bild 4-161:

6

Erweiterungen des Befehlssatzes

0

V C —, Überlauf ( o v e r f l o w ) bei D u a l z a h l e n mit Vorzeichen

B 1 1 1 2 2 1 1 1

1 3 3

Bed i n g u n g T S Z X h 0 P Vp y XXXX XXX 10 7 X 10 XX 10 10 12 6 10 10 7/10 7/10

5

Parallele Datenübertragung

Bei der Datenübertragung muß man die eigentlichen Daten auf den Datenleitungen und Steuersignale auf Steuerleitungen unterscheiden, die z.B. anzeigen, daß die Daten gültig sind oder daß sie übernommen wurden. Die D a t e n - und S t e u e r leitungen werden über Peripheriebausteine an den Datenbus angeschlossen. Peripheriebausteine übertragen Daten zwischen dem Mikrorechner und seiner Umwelt. Verwendet man TTL-Bausteine, so liegen die Funktionen dieser Schnittstellen f e s t . Ein 8-Bit-Bustreiber 74LS244 kann z.B. nur als Eingang dienen oder ein 8-Bit-Speicher 74LS373 wird fest als Ausgaberegister geschalt e t . Eine Änderung der Übertragungsrichtung ist nur durch Änderung der Hardware möglich. Wie bereits im Abschnitt 3.5.3 gezeigt gibt es besonders f ü r den Prozessor 8085A zugeschnittene Peripheriebausteine oder Schnittstellen, deren Funktionen programmierbar sind. Das bedeutet, daß die Richtung der Datenübertragung durch ein Steuerbyte bestimmt wird, das durch einen Programmbefehl in ein Kommandoregister geschrieben wird. Dieser Abschnitt b e schreibt nur die wichtigsten Programmiermöglichkeiten, die auch in den f o l genden Programmbeispielen verwendet werden. Als Ergänzung sollten die D a t e n bücher der Hersteller (z.B. Siemens oder Intel) herangezogen werden.

5.1

Programmierung des Mehrzweckbausteins 8155

Der Mehrzweckbaustein 8155 enthält einen Schreib/Lesespeicher (RAM) von 256 Bytes, einen 14-Bit-Zähler (Zeitgeber oder Timer) und eine Parallelschnittstelle mit 22 Leitungen, die zur Eingabe oder Ausgabe von Daten dienen. Bild 5-1 zeigt das Programmiermodell mit den Registern der Parallelschnittstelle und des Timers. Die Schnittstelle 8155 enthält sechs Register, die unter bestimmten Adressen durch Eingabe- und Ausgabebefehle angesprochen werden können. Diese Peripherieregister werden in der Literatur auch als Ports, Kanäle oder Seiten b e zeichnet. Die drei niederwertigen Bits der Adresse werden durch die Adreßleitungen AO bis A2 bestimmt; die fünf höherwertigen Bits ergeben sich aus dem Anschluß des Freigabeeingangs CE an den Adreßdecoder des Systems. Bild 5-2 zeigt die Registeradressen.

286

5 Parallele

Datenübertragung

Datenbus

Bild 5 - 1 :

Bild 5 - 2 :

P r o g r a m m i e r m o d e l l der P a r a l l e l s c h n i t t s t e l l e 8155

Adresse

Register

xxxxxOOO xxxxxOOO xxxxxOO1 xxxxxOl0 xxxxx011 xxxxx100 XXXXX101 x x x x x l 10 xxxxx111

lesen: Z u s t a n d s r e g i s t e r schreiben: Kommandoregister Datenregister A-Port Datenregister B-Port Datenregister C-Port Zählregister LOW-Teil Zählregister HIGH-Teil nicht verwendet nicht verwendet

R e g i s t e r a d r e s s e n d e r P a r a l l e l s c h n i t t s t e l l e 8155

Auf d e r u n t e r s t e n A d r e s s e liegen zwei v o n e i n a n d e r u n a b h ä n g i g e R e g i s t e r . Das Z u s t a n d s r e g i s t e r kann nur g e l e s e n w e r d e n . Es e n t h ä l t Z u s t a n d s i n f o r m a t i o n e n d e r E i n / A u s g a b e und d e s T i m e r s . Beim S c h r e i b e n wird e i n S t e u e r b y t e in d a s K o m m a n d o r e g i s t e r g e s c h r i e b e n , das d i e B e t r i e b s a r t der S c h n i t t s t e l l e f e s t l e g t . Die h i n e i n g e s c h r i e b e n e n W e r t e können j e d o c h n i c h t z u r ü c k g e l e s e n w e r d e n , da b e i m L e s e n d a s Z u s t a n d s r e g i s t e r a n g e s p r o c h e n w i r d . In d e r B e t r i e b s a r t 1 w e r d e n ü b e r a l l e d r e i K a n ä l e d e r S c h n i t t s t e l l e D a t e n ü b e r t r a g e n . Bild 5 - 3 z e i g t d i e S t e u e r b y t e s zur P r o g r a m m i e r u n g d e r Ü b e r t r a g u n g s r i c h t u n g .

5.1 Programmierung des Mehrzweckbausteins

A-Kanal AUS AUS AUS AUS EIN EIN EIN EIN Bild 5 - 3 :

B-Kanal AUS AUS EIN EIN AUS AUS EIN EIN

C-Kanal AUS EIN AUS EIN AUS EIN AUS EIN

8155

287

Steuerbyte OF 03 OD 01 0E 02 OC 00

S t e u e r b y t e s der B e t r i e b s a r t 1

Alle a c h t B i t s e i n e s K a n a l s müssen f ü r e i n e U b e r t r a g u n g s r i c h t u n g p r o g r a m m i e r t w e r d e n ; eine E i n z e l b i t p r o g r a m m i e r u n g wie b e i a n d e r e n S c h n i t t s t e l l e n ist n i c h t m ö g l i c h . Bild

5 - 4 z e i g t ein

Beispiel,

das den A - K a n a l und den B - K a n a l

als

Ausgang und den C - K a n a l als Eingang p r o g r a m m i e r t . Auf dem A - K a n a l w e r d e n a c h t Nullen a u s g e g e b e n . Das P r o g r a m m ü b e r t r ä g t in e i n e r S c h l e i f e die a u f dem C - K a n a l a n k o m m e n d e n D a t e n m i t e i n e r M a s k e a u f den B - K a n a l .

L1000 *1000 *1002 *1004 *1006 *1008 *100A *100C *100E E0000 Bild 5 - 4 :

3E D3 3E D3 DB E6 D3 C3

03 08 00 09 OB 30 0A 08 10

0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B

>; BILD 5-4 8155 - PROGRAMMIERUNG > 0RG 1000H ADRESSZAEHLER A.03H >START A=AUS B=AUS C=EIN MVI > OUT 08H NACH STEUERREGISTER > A,00H MVI AUSGABEWERT L0ESCHEN > OUT 09H NACH A-KANAL IN 0BH LESEN C-KANAL >L00P ANI > 3 0H MASKE 0011 0000 0AH AUSGEBEN B-KANAL > OUT > JMP LOOP SCHLEIFE > END

P r o g r a m m b e i s p i e l : P r o g r a m m i e r u n g der P a r a l l e l s c h n i t t s t e l l e

8155

Das B e i s p i e l a r b e i t e t mit den R e g i s t e r a d r e s s e n 08 ( K o m m a n d o r e g i s t e r ) bis OB ( C - K a n a l ) . Sie e r g e b e n s i c h aus dem Adreßplan des Ü b u n g s s y s t e m s n a c h Bild 3-82. B e i der e i n f a c h e n

Ein/Ausgabe der

Betriebsart

1 werden die

auszugebenden

D a t e n in A u s g a b e f l i p f l o p s g e s p e i c h e r t und s t e h e n bis zu e i n e r Änderung d u r c h das P r o g r a m m am Ausgang zur V e r f ü g u n g . B e i der Eingabe wird d e r a u g e n b l i c k liche L e i t u n g s z u s t a n d g e l e s e n . Im G e g e n s a t z dazu s p e i c h e r n die

Betriebsarten

2 und 3 die E i n g a b e d a t e n in den D a t e n e i n g a b e r e g i s t e r n d e r K a n ä l e A und B . Die L e i t u n g e n der C - S e i t e dienen dabei a l s S t e u e r l e i t u n g e n . F ü r die P r o g r a m mierung

d i e s e r beiden B e t r i e b s a r t e n und d e s T i m e r s sind die U n t e r l a g e n

Hersteller

heranzuziehen.

der

288

5 Parallele Datenübertragung

Mit einem Reset werden alle Register der Schnittstelle gelöscht. Damit sind alle Peripherieleitungen als Eingang geschaltet und in der Betriebsart 1. Die Ausgangstreiber befinden sich im t r i s t a t e Zustand und sind hochohmig. Will man sie später als Ausgänge betreiben, so müssen sie auf ein festes Potential gelegt werden. Legt man sie mit Pull-up-Widerständen auf HIGH-Potential, so nehmen sie in dem Augenblick, in dem sie über das Kommandoregister als Ausgang programmiert werden, zunächst LOW-Potential an. Erst nach der Programmierung als Ausgang sind die Datenausgaberegister beschreibbar. Das Umschalten der Ausgänge im Moment der Programmierung läßt sich nur durch Pull-down-Widerstände verhindern, indem man die Ausgangsleitungen über Widerstände auf LOW-Potential legt, das dann auch nach der Programmierung erhalten bleibt. Die Widerstände müssen so dimensioniert werden, daß sich der Ausgang bei der Ausgabe einer 1 auf HIGH-Potential bringen läßt.

5.2

Programmierung der Parallelschnittstelle 8255

C-Kanal

Datenbus

Bild 5-5: Programmiermodell der Parallelschnittstelle 8255

Die Parallelschnittstelle 8255 entsprechend Bild 5-5 enthält 24 Peripherieleitungen verteilt auf die drei Kanäle oder Seiten A, B und C. Die beiden niederwertigen Bits der Registeradressen werden durch die Adreßleitungen AO und AI gebildet; die sechs höherwertigen Bits ergeben sich aus dem Anschluß der Auswahlleitung CS an den Adreßdecoder des Systems. Bild 5 - 6 zeigt die Verteilung der Adressen.

288

5 Parallele Datenübertragung

Mit einem Reset werden alle Register der Schnittstelle gelöscht. Damit sind alle Peripherieleitungen als Eingang geschaltet und in der Betriebsart 1. Die Ausgangstreiber befinden sich im t r i s t a t e Zustand und sind hochohmig. Will man sie später als Ausgänge betreiben, so müssen sie auf ein festes Potential gelegt werden. Legt man sie mit Pull-up-Widerständen auf HIGH-Potential, so nehmen sie in dem Augenblick, in dem sie über das Kommandoregister als Ausgang programmiert werden, zunächst LOW-Potential an. Erst nach der Programmierung als Ausgang sind die Datenausgaberegister beschreibbar. Das Umschalten der Ausgänge im Moment der Programmierung läßt sich nur durch Pull-down-Widerstände verhindern, indem man die Ausgangsleitungen über Widerstände auf LOW-Potential legt, das dann auch nach der Programmierung erhalten bleibt. Die Widerstände müssen so dimensioniert werden, daß sich der Ausgang bei der Ausgabe einer 1 auf HIGH-Potential bringen läßt.

5.2

Programmierung der Parallelschnittstelle 8255

C-Kanal

Datenbus

Bild 5-5: Programmiermodell der Parallelschnittstelle 8255

Die Parallelschnittstelle 8255 entsprechend Bild 5-5 enthält 24 Peripherieleitungen verteilt auf die drei Kanäle oder Seiten A, B und C. Die beiden niederwertigen Bits der Registeradressen werden durch die Adreßleitungen AO und AI gebildet; die sechs höherwertigen Bits ergeben sich aus dem Anschluß der Auswahlleitung CS an den Adreßdecoder des Systems. Bild 5 - 6 zeigt die Verteilung der Adressen.

5.2 Programmierung der Parallelschnittstelle

Adresse xxxxxxOO xxxxxxO1 xxxxxx10 xxxxxx11 xxxxxx 1 1

8255

289

Register Datenregister A-Port Datenregister B-Port Datenregister C-Port lesen: schreiben: Kommandoregister

Bild 5-6: Registeradressen der Parallelschnittstelle 8255

Das auf der höchsten Adresse liegende Kommandoregister kann nur mit einem Steuerbyte beschrieben werden. Es legt die Betriebsart der Schnittstelle fest. In der Betriebsart 0 dienen alle Kanäle zur Datenübertragung über die Peripherieanschlüsse. Das Steuerbyte legt dabei die Richtung der Datenübertragung (Eingang oder Ausgang) fest. Nach einem Reset befindet sich der Baustein in der Betriebsart 0; alle Kanäle sind als Eingänge geschaltet. Bild 5 - 7 zeigt die Steuerbytes des Betriebsart 0, mit denen sich die Kanäle auch als Ausgänge programieren lassen.

A-Kanal AUS AUS AUS AUS AUS AUS AUS AUS EIN EIN EIN EIN EIN EIN EIN EIN

B-Kanal AUS AUS AUS AUS EIN EIN EIN EIN AUS AUS AUS AUS EIN EIN EIN EIN

C-HIGH AUS AUS EIN EIN AUS AUS EIN EIN AUS AUS EIN EIN AUS AUS EIN EIN

C-LOW AUS EIN AUS EIN AUS EIN AUS EIN AUS EIN AUS EIN AUS EIN AUS EIN

Steuerbyte 80 81 88 89 82 83 8A 8B 90 91 98 99 92 93 9A 9B

Bild 5-7: Steuerbytes der Betriebsart 0

In der Betriebsart 0 werden die auszugebenden Daten in Flipflops gespeichert und stehen bis zum nächsten Ausgabebefehl an den Peripherieanschlüssen zur Verfügung; bei der Dateneingabe wird direkt der Zustand der Peripherieanschlüsse gelesen. Bild 5-8 zeigt ein einfaches Beispiel für die Programmierung der Schnittstelle in der Betriebsart 0. In den Betriebsarten 1 und 2 kann die Übernahme der Daten in die Eingabe- bzw. Ausgabespeicher durch die Leitungen der C-Seite gesteuert werden, die auch Bestätigungs- und Anforderungssignale für einen Quittungsbetrieb (Handshake) liefern.

290

5 Parallele

L1000 *1000 *1002 *1004 *1006 *1008 E0000

3E D3 DB D3 C3

Bild 5 - 8 :

8B 03 01 00 0 4 10

Datenübertragung

0001 0002 0003 0004 0005 0006 0007 0008

>; B I L D 5 - 8 8 2 5 5 - PROGRAMMIERUNG > 1000H ; ADRESSZAEHLER 0RG >START MVI A.8BH ; A=AUS B=EIN CH=EIN > OUT 03H ; NACH STEUERREGISTER IN >L00P ; B - K A N A L LESEN 01H > OUT 00H ; A-KANAL AUSGEBEN JMP > LOOP ; SCHLEIFE > END

CL=EIN

Programmbeispiel: Programmierung der Parallelschnittstelle 8255

In dem Beispiel haben die Register die Adressen 00 bis 03. Die T a b e l l e Bild 5 - 7 l i e f e r t das Steuerbyte 8B für den A - K a n a l als Ausgang und den B - K a n a l sowie beide T e i l e des C-Kanals als Eingang. In der Schleife werden die auf der B - S e i t e anliegenden

Daten auf der A - S e i t e wieder ausgegeben. Nach einem

Reset werden alle Register der Schnittstelle gelöscht. Damit befindet sie sich in der Betriebsart 0. A l l e Kanäle sind als Eingang geschaltet. Die Peripherieausgangstreiber befinden sich im tristate Zustand und müssen durch Widerstände auf ein f e s t e s Potential gelegt werden, wenn sie als Ausgang verwendet werden sollen. Darf sich das Potential bei der Programmierung der Schnittstelle nicht verändern, so sind Widerstände gegen Ground vorzusehen, die den Ausgang auf L O W - P o t e n t i a l legen. Bei jeder Neuprogrammierung der Betriebsart werden die Ausgabedatenregister gelöscht, auch wenn die Richtung eines der Kanäle e r halten bleibt.

5.3

Dateneingabe mit Schaltern und Tastern

Schalter und Taster können direkt an die Eingänge von TTL-Bausteinen oder von Parallelschnittstellen angeschlossen werden. Dabei ist jedoch zu beachten, daß unbeschaltete ( o f f e n e ) MOS-Eingänge sehr hochohmig sind und daher durch Einstreuungen leicht beeinflußt werden können. Sie müssen daher entsprechend Bild 5 - 9 auf ein f e s t e s Potential gelegt werden. MOS-Eingang

+ + +

n

~

ffl MOS-Eingang

o.e. a.

Pul1-Up-Widerstand

Bild 5 - 9 :

Eingabeschaltungen

b.

Entprel lschaltung

290

5 Parallele

L1000 *1000 *1002 *1004 *1006 *1008 E0000

3E D3 DB D3 C3

Bild 5 - 8 :

8B 03 01 00 0 4 10

Datenübertragung

0001 0002 0003 0004 0005 0006 0007 0008

>; B I L D 5 - 8 8 2 5 5 - PROGRAMMIERUNG > 1000H ; ADRESSZAEHLER 0RG >START MVI A.8BH ; A=AUS B=EIN CH=EIN > OUT 03H ; NACH STEUERREGISTER IN >L00P ; B - K A N A L LESEN 01H > OUT 00H ; A-KANAL AUSGEBEN JMP > LOOP ; SCHLEIFE > END

CL=EIN

Programmbeispiel: Programmierung der Parallelschnittstelle 8255

In dem Beispiel haben die Register die Adressen 00 bis 03. Die T a b e l l e Bild 5 - 7 l i e f e r t das Steuerbyte 8B für den A - K a n a l als Ausgang und den B - K a n a l sowie beide T e i l e des C-Kanals als Eingang. In der Schleife werden die auf der B - S e i t e anliegenden

Daten auf der A - S e i t e wieder ausgegeben. Nach einem

Reset werden alle Register der Schnittstelle gelöscht. Damit befindet sie sich in der Betriebsart 0. A l l e Kanäle sind als Eingang geschaltet. Die Peripherieausgangstreiber befinden sich im tristate Zustand und müssen durch Widerstände auf ein f e s t e s Potential gelegt werden, wenn sie als Ausgang verwendet werden sollen. Darf sich das Potential bei der Programmierung der Schnittstelle nicht verändern, so sind Widerstände gegen Ground vorzusehen, die den Ausgang auf L O W - P o t e n t i a l legen. Bei jeder Neuprogrammierung der Betriebsart werden die Ausgabedatenregister gelöscht, auch wenn die Richtung eines der Kanäle e r halten bleibt.

5.3

Dateneingabe mit Schaltern und Tastern

Schalter und Taster können direkt an die Eingänge von TTL-Bausteinen oder von Parallelschnittstellen angeschlossen werden. Dabei ist jedoch zu beachten, daß unbeschaltete ( o f f e n e ) MOS-Eingänge sehr hochohmig sind und daher durch Einstreuungen leicht beeinflußt werden können. Sie müssen daher entsprechend Bild 5 - 9 auf ein f e s t e s Potential gelegt werden. MOS-Eingang

+ + +

n

~

ffl MOS-Eingang

o.e. a.

Pul1-Up-Widerstand

Bild 5 - 9 :

Eingabeschaltungen

b.

Entprel lschaltung

5.3 Dateneingabe mit Schaltern und Tastern

291

In der Schaltung Bild 5-9a liegt der Eingang mit einem Widerstand auf HIGHPotential. Er kann mit einem Schalter oder Taster auf LOW gebracht werden. Da mechanische Kontakte prellen können, werden vor allem flankengesteuerte Interrupteingänge mit Schaltungen entsprechend Bild 5-9b entprellt. Zwei Inverter mit o f f e n e m Kollektor (z.B. 7416) bilden ein RS-Flipflop, das bereits bei der ersten Berührung des Kontaktes umkippt und stabil bleibt, selbst wenn die Kontaktgabe mehrmals unterbrochen wird. Bild 5-10 zeigt Prellungen beim Umschalten; die Prellzeiten können zwischen 0,1 und 10 ms liegen.

Abfragetakt

ca.

1 -

10 ms

Ai HIGH LOW

Prellzeit

Prellzeit

Bild 5-10: Prellen mechanischer Kontakte

Ein Kontakt kann auch softwaremäßig entprellt werden. Dazu wird die Leitung in Zeitabständen a b g e f r a g t , die größer sind als die Prellzeit. Bild 5-11 zeigt ein Programmbeispiel, mit dem Prellzeiten gemessen werden können. In der Schaltung Bild 5-9a wird der zu untersuchende Kontakt an den Eingang PB7 einer Parallelschnittstelle 8255 gelegt.

*8000 L1000 *1000 *1002 *1004 *1007 *1009 *100B *100C *100F *1010 *1011 *1013 *1014 * 1017 EOOOO

3E D3 21 06 DB B7 FA

8B 03 00 11 FF 01 09 10

77 23 DB 01 05 C2 0F 10 C3 00 0 0

0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B OOOC OOOD 000E OOOF 0010 0011 0012

>; BILD 5 - 1 1 MESSUNG VON P R E L L Z E I T E N >M0NI MONITORADRESSE EQU OOOOH 1000H ADRESSZAHELER > 0RG >START A.8BH STEUERBYTE A=AUS B=EIN MVI > OUT 03H NACH STEUERREGISTER > LXI H.1100H ANFANGSADRESSE SPEICHER > B.0FFH MVI ZAHL DER SPEICHERBYTES IN >L00P1 01H 10 TAKTE : LEITUNG LESEN ORA A > 4 TAKTE : WERT TESTEN > JM L00P1 10 TAKTE : LEITUNG HIGH >; ERSTE FALLENDE FLANKE ERKANNT: SPEICHERN >L00P2 M,A MOV 7 TAKTE : NACH S P E I C H E R H > INX 6 TAKTE : ADRESSE +1 > IN 01H 10 TAKTE : LEITUNG LESEN > DCR B 4 TAKTE : ZAEHLER -1 > JNZ L00P2 10 TAKTE : S P E I C H E R S C H L E I F E JMP MONI > F E R T I G : SPRUNG NACH MONITOR > END

Bild 5-11: Programmbeispiel: Messung von Prellzeiten

292

Der

5 Parallele

Eingang

Datenübertragung

liegt zunächst auf HIGH und stellt beim Lesen einen negativen

Wert dar. Die erste Schleife tastet den Eingang in einem Zyklus von 24 Takten ab. Bei einem Systemtakt von 2 MHz (Quarz 4 MHz) beträgt die A b f r a g e z e i t 12 JJS. Wird die erste fallende Flanke erkannt, so beginnt eine z w e i t e Schleif e , die den laufenden Leitungszustand in einem Bereich von 255 Bytes f o r t l a u fend abspeichert. A l l e 37 T a k t e oder 18,5 JJS wird ein neuer Wert gelesen und gespeichert. Die Speicherzeit beträgt c a . 4,7 ms. Danach springt das Programm in den Monitor, mit dessen H i l f e der Speicherbereich ausgegeben werden kann.

Adresse 1 100 1110 1 120 1130

0 1 00 00 00 00

00 00 |80 00

2 00 00 80 00

3

00 00 00 00 80|00 00 00

4

5

00 00 00 00

80 80 00 00

6

7

80 80 00 00

8

80 80 00 00

9 80 80 00 00

A 80 80 00 00

B 80 80 00 00

C 80 80 00 00

D 80 |00 00 00

E

F

80 00 00 00

8Ol 00 00 00

P r e l l z e i t 36x18,5 = 666 >js

f

6x

Bild 5-12:

10x

6x

7x

4x

3x

Auswertung der Messungen

Bild 5-12 zeigt die Ausgabe des Speicherbereiches und die Auswertung einer Messung. Der Wert 00 z e i g t , daß der Eingang auf LOW liegt; der Wert 80 z e i g t , daß

der

Kontakt

wieder auf ausgewertet

wieder

zurückgeprellt

ist

und daß die Leitung

kurzzeitig

HIGH liegt. Der Speicherbereich könnte auch durch ein Programm werden, das entweder die Zahl der Prellungen oder die Prellzeit

ermittelt. Bei der Eingabe unterscheidet

man aktive und passive Steuersignale. Aktive

Signale lösen einen Interrupt aus; passive Signale müssen vom Programm p e r i o disch a b g e f r a g t werden. Bild 5-13 zeigt eine aus 16 Tasten bestehende T a s t a tur, die mit fünf Leitungen und einem l - a u s - 1 6 - D e c o d e r kontrolliert wird. Läßt

man auf den vier Ausgängen PCO bis PC3 einer Parallelschnittstelle 8255

einen Zähler von 0 bis 15 laufen, so werden die Ausgänge 0 bis 15 des D e c o ders nacheinander auf LOW gelegt. Auf der anderen Seite sind alle Kontakte über einen Pull-up-Widerstand

mit dem Eingang PC7 der Schnittstelle verbun-

den. Ist keine Taste gedrückt, so bleibt der Eingang auf HIGH; ist eine Taste gedrückt, so geht der Eingang auf L O W . Der Abschnitt 5.5 beschreibt ein Auswertungsprogramm für eine Tastatur, die noch eine w e i t e r e Tastenzeile enthält.

5.3

Dateneingabe

Zähler von

!oooo - H i l l I Bild 5 - 1 3 :

J

T a s t a t u r für den A b f r a g e b e t r i e b

Interrupt aktiv HIGH

Bild 5 - 1 4 :

T a s t a t u r für Auslösebetrieb

mit Schaltern und

Tastern

293

294

5 Parallele

Datenübertragung

Bild 5 - 1 4 zeigt eine T a s t a t u r , die im Auslösebetrieb a r b e i t e t . Eine Matrix von 4 x 4 = 16 Tasten wird von acht Leitungen k o n t r o l l i e r t . L e g t man alle vier Ausgänge dauernd auf LOW, so liegen die Zeilen auf HIGH, und der Ausgang der NAND-Schaltung hält den Interrupteingang auf LOW. Wird nun eine T a s t e g e d r ü c k t , so geht ein Eingang des NAND auf LOW. Damit wird der NANDAusgang HIGH und löst einen Interrupt aus. Das Interruptprogramm kann durch Lesen der Eingänge s o f o r t die Zeile e r k e n n e n . Zur Bestimmung der Spalte werden Eingang und Ausgang v e r t a u s c h t . Legt man alle Zeilen auf LOW, so kann die Spalte an den Spalteneingängen e r k a n n t werden.

5.4

Datenausgabe mit Leuchtdioden und Siebensegmentanzeigen

Leuchtdioden und Siebensegmentanzeigen dienen zur Ausgabe von Signalen und Zahlen. Für die s t a t i s c h e Ansteuerung einer Leuchtdiode bzw. eines S e g m e n t e s ist je nach Helligkeit ein Strom zwischen 5 und 20 mA e r f o r d e r l i c h . Im M u l t i p l e x b e t r i e b , bei dem jede Diode nur zeitweise im Wechsel mit anderen L e u c h t dioden e i n g e s c h a l t e t i s t , können bis zu 100 mA fließen. S c h a l t e t man eine Leuchtdiode direkt a n die MOS-Ausgänge einer P a r a l l e l s c h n i t t s t e l l e , so ergeben sich ausreichende L e u c h t d i c h t e n . Am Ausgang PA7 einer Parallelschnittstelle 8255A wurde eine Leuchtdiode (5 mm Durchmesser, Typ u n b e s t i m m t ) kurzzeitig direkt gegen Ground b e t r i e b e n . Bei HIGH-Potential flössen 15 mA. Im Kurzzeitbetrieb gegen + 5V ohne Vorwiderstand flössen 38 mA; bei 750 Ohm waren es ca 3,8 mA. Die D a t e n b l ä t t e r der Hersteller e n t h a l t e n keine Angaben über zulässige D a u e r s t r ö m e . Zur Ansteuerung von Darlingtont ransistoren nimmt eine 8 2 5 5 - S c h n i t t s t e l l e laut D a t e n b l a t t max. 4 mA Strom bei einer Spannung von 1,5 Volt a u f . Dies scheint auch der Grenzwert f ü r eine Dauerbelastung zu sein. Bild 5 - 1 5 zeigt die übliche Zwischenschaltung von T T L - T r e i b e r n .

*

MOS-Ausgang

LED

TTL-Treiber (7416) O.C.

Bild 5-15:

Ansteuerung von Leuchtdioden

MOS-Ausgang

294

5 Parallele

Datenübertragung

Bild 5 - 1 4 zeigt eine T a s t a t u r , die im Auslösebetrieb a r b e i t e t . Eine Matrix von 4 x 4 = 16 Tasten wird von acht Leitungen k o n t r o l l i e r t . L e g t man alle vier Ausgänge dauernd auf LOW, so liegen die Zeilen auf HIGH, und der Ausgang der NAND-Schaltung hält den Interrupteingang auf LOW. Wird nun eine T a s t e g e d r ü c k t , so geht ein Eingang des NAND auf LOW. Damit wird der NANDAusgang HIGH und löst einen Interrupt aus. Das Interruptprogramm kann durch Lesen der Eingänge s o f o r t die Zeile e r k e n n e n . Zur Bestimmung der Spalte werden Eingang und Ausgang v e r t a u s c h t . Legt man alle Zeilen auf LOW, so kann die Spalte an den Spalteneingängen e r k a n n t werden.

5.4

Datenausgabe mit Leuchtdioden und Siebensegmentanzeigen

Leuchtdioden und Siebensegmentanzeigen dienen zur Ausgabe von Signalen und Zahlen. Für die s t a t i s c h e Ansteuerung einer Leuchtdiode bzw. eines S e g m e n t e s ist je nach Helligkeit ein Strom zwischen 5 und 20 mA e r f o r d e r l i c h . Im M u l t i p l e x b e t r i e b , bei dem jede Diode nur zeitweise im Wechsel mit anderen L e u c h t dioden e i n g e s c h a l t e t i s t , können bis zu 100 mA fließen. S c h a l t e t man eine Leuchtdiode direkt a n die MOS-Ausgänge einer P a r a l l e l s c h n i t t s t e l l e , so ergeben sich ausreichende L e u c h t d i c h t e n . Am Ausgang PA7 einer Parallelschnittstelle 8255A wurde eine Leuchtdiode (5 mm Durchmesser, Typ u n b e s t i m m t ) kurzzeitig direkt gegen Ground b e t r i e b e n . Bei HIGH-Potential flössen 15 mA. Im Kurzzeitbetrieb gegen + 5V ohne Vorwiderstand flössen 38 mA; bei 750 Ohm waren es ca 3,8 mA. Die D a t e n b l ä t t e r der Hersteller e n t h a l t e n keine Angaben über zulässige D a u e r s t r ö m e . Zur Ansteuerung von Darlingtont ransistoren nimmt eine 8 2 5 5 - S c h n i t t s t e l l e laut D a t e n b l a t t max. 4 mA Strom bei einer Spannung von 1,5 Volt a u f . Dies scheint auch der Grenzwert f ü r eine Dauerbelastung zu sein. Bild 5 - 1 5 zeigt die übliche Zwischenschaltung von T T L - T r e i b e r n .

*

MOS-Ausgang

LED

TTL-Treiber (7416) O.C.

Bild 5-15:

Ansteuerung von Leuchtdioden

MOS-Ausgang

und Siebensegmentanzeigen

295

7 4 1 6 und 7 4 1 7 s t e l l e n e i n e

Standard-

5.4 Datenausgabe mit Leuchtdioden

Die

in F r a g e k o m m e n d e n T T L - T r e i b e r

T T L - L a s t dar und h a b e n Ausgänge m i t o f f e n e n K o l l e k t o r e n , die 4 0 mA S t r o m g e g e n Ground a u f n e h m e n k ö n n e n . Die linke S c h a l t u n g d e s B i l d e s 5 - 1 5 ist a k t i v HIGH. L i e g t der M O S - A u s g a n g auf H I G H - P o t e n t i a l , so ist der

TTL-Ausgang

auf LOW und n i m m t den S t r o m der e i n g e s c h a l t e t e n L e u c h t d i o d e a u f . Ist d e r MOS-Ausgang

L O W , so wird d e r T T L - A u s g a n g

HIGH.

Damit

liegen

Katode

und Anode der L e u c h t d i o d e auf g l e i c h e m P o t e n t i a l . F ü r e i n e n Ausgang a k t i v LOW k o m m t e n t w e d e r ein n i c h t i n v e r t i e r e n d e r T r e i b e r ( 7 4 1 7 ) oder die S c h a l tung n a c h Bild 5 - 1 5 r e c h t s in F r a g e . Siebensegmentanzeigen Acht

angeordnet

bestehen

aus s i e b e n L e u c h t d i o d e n , die in F o r m

einer

sind. Eine a c h t e L e u c h t d i o d e b i l d e t den D e z i m a l p u n k t .

Bei

Anzeigen m i t g e m e i n s a m e r K a t o d e (CC = Common C a t h o d e ) müssen die A n o d e n treiber

den

Segmentstrom

liefern.

Die

Anzeigen

mit

gemeinsamer

Anode

(CA = Common A n o d e ) sind e i n f a c h e r zu b e s c h ä l t e n . D e r g e m e i n s a m e A n o d e n a n s c h l u ß wird f e s t an die positive Versorgungsspannung g e l e g t oder über e i n e n Transistor steinen

geschaltet.

mit

offenem

Die einzelnen Kollektor,

die

Katodenanschlüsse den

Segmentstrom

liegen an

TTL-Bau-

aufnehmen.

Zahlen

müssen zur Ausgabe aus dem b i n ä r e n Code ( z . B . B C D ) in den S i e b e n s e g m e n t c o d e u m g e w a n d e l t w e r d e n . Bild 5 - 1 6 zeigt d i e b e i d e n h ä u f i g s t e n

BC

212

BC

327

Verfahren.

i 'mm, Anoden

-OH5a

gemeinsame Anode

(7447)

.ttnitt Decoder

gemeinsame Anode

i

h

h

h

Decoder

a. B C D / S i e b e n s e g m e n t d e c o d e r Bild 5 - 1 6 :

,f

?

Y

o.e.

(7416)

b. direkte

Segmentansteuerung

Ansteuerung und U m c o d i e r u n g von S i e b e n s e g m e n t a n z e i g e n

296

5 Parallele

Datenübertragung

Die handelsüblichen BCD-zu-Siebensegmentdecoder (z.B. 7447) haben o f f e n e Kollektoren und können standardmäßig 40 mA bei einer Versorgungsspannung von 15 Volt aufnehmen. Sie wandeln den BCD-Code der Ziffern 0 bis 9 über Logikschaltungen in den Siebensegmentcode um. Sonderausführungen wie z.B. der Baustein 9370 zeigen die Codes 1010 bis 1111 zusätzlich als Hexadezimalziffern A bis F an. Uber Vorwiderstände läßt sich der Strom und damit die Helligkeit einstellen. Bild 5-16a zeigt eine zweistellige statische Anzeigeeinheit für den Zahlenbereich von 00 bis 99. Mit sieben Segmenten lassen sich teilweise aber auch Buchstaben (H, P, L) und Sonderzeichen ( - , = ) darstellen. Dazu ist eine Schaltung nach Bild 5-16b erforderlich, die jedes Segment einzeln ansteuert. Ein Schalttransistor schaltet den gemeinsamen Anodenanschluß an die Versorgungsspannung. Die Umcodierung der Ziffern und eventuell Buchstaben und Sonderzeichen muß von einem Programm erfolgen. Mehrstellige Siebensegmentanzeigen werden meist entsprechend Bild 5-17 im Multiplexverfahren betrieben.

+

Bild 5-17:

Mehrstellige Multiplexanzeige

5.5 Tastatur und neunstellige Multiplexanzeige

297

Ein l - a u s - 1 6 - D e c o d e r steuert die Schalttransistoren an, mit denen jede Stelle e i n - bzw. ausgeschaltet werden kann. Der Decoder sorgt d a f ü r , daß immer nur eine Stelle angesteuert wird. Die entsprechenden Segmente aller Stellen sind parallel geschaltet. Das Bild zeigt nur die Schaltung der a - S e g m e n t e . Bei einem Zähltakt von 1 ms ist jede Stelle nur 1 ms eingeschaltet und 15 ms dunkel. Die dadurch verminderte Helligkeit muß durch einen erhöhten Strom ausgeglichen werden. Die zweistellige Anzeige des Bildes 5-16a arbeitet statisch; die Ausgangsspeicher der Schnittstelle speichern die auszugebende Zahl. Im Gegensatz dazu muß die Multiplexanzeige dauernd durch ein Programm angesteuert werden. Der folgende Abschnitt zeigt den Betrieb einer neunstelligen Multiplexanzeige zusammen mit der Abfrage eines Tastenfeldes.

5.5

Tastatur und neunstellige Multiplexanzeige

Bild 5-18 zeigt den Schaltplan. Er ist ein Teil des im Abschnitt 3.8 e n t w o r fenen Übungssystems. Die Parallelschnittstelle 8155 hat die Adressen 08 bis OFH. An den Ausgängen PAO bis PA3 (Adresse 09H) liegt ein l - a u s - 1 6 - D e c o d e r , der sowohl die neun Anzeigeeinheiten als auch die Tastaturspalten a n s t e u e r t . Die sieben Segmente und der Dezimalpunkt liegen über TTL-Treiber mit o f f e nem Kollektor an den Ausgängen PBO bis PB7 (Adresse OAH). Der C-Kanal (Adresse OBH) ist als Eingang geschaltet. PC4 und PC5 liegen über Widerstände auf HIGH-Potential und werden bei Betätigung einer Taste auf LOW gebracht. Das Steuerbyte dieser Betriebsart lautet 03H.

5.5 Tastatur und neunstellige Multiplexanzeige

297

Ein l - a u s - 1 6 - D e c o d e r steuert die Schalttransistoren an, mit denen jede Stelle e i n - bzw. ausgeschaltet werden kann. Der Decoder sorgt d a f ü r , daß immer nur eine Stelle angesteuert wird. Die entsprechenden Segmente aller Stellen sind parallel geschaltet. Das Bild zeigt nur die Schaltung der a - S e g m e n t e . Bei einem Zähltakt von 1 ms ist jede Stelle nur 1 ms eingeschaltet und 15 ms dunkel. Die dadurch verminderte Helligkeit muß durch einen erhöhten Strom ausgeglichen werden. Die zweistellige Anzeige des Bildes 5-16a arbeitet statisch; die Ausgangsspeicher der Schnittstelle speichern die auszugebende Zahl. Im Gegensatz dazu muß die Multiplexanzeige dauernd durch ein Programm angesteuert werden. Der folgende Abschnitt zeigt den Betrieb einer neunstelligen Multiplexanzeige zusammen mit der Abfrage eines Tastenfeldes.

5.5

Tastatur und neunstellige Multiplexanzeige

Bild 5-18 zeigt den Schaltplan. Er ist ein Teil des im Abschnitt 3.8 e n t w o r fenen Übungssystems. Die Parallelschnittstelle 8155 hat die Adressen 08 bis OFH. An den Ausgängen PAO bis PA3 (Adresse 09H) liegt ein l - a u s - 1 6 - D e c o d e r , der sowohl die neun Anzeigeeinheiten als auch die Tastaturspalten a n s t e u e r t . Die sieben Segmente und der Dezimalpunkt liegen über TTL-Treiber mit o f f e nem Kollektor an den Ausgängen PBO bis PB7 (Adresse OAH). Der C-Kanal (Adresse OBH) ist als Eingang geschaltet. PC4 und PC5 liegen über Widerstände auf HIGH-Potential und werden bei Betätigung einer Taste auf LOW gebracht. Das Steuerbyte dieser Betriebsart lautet 03H.

298

5 Parallele

Datenübertragung

schieben

LI IJ AUS+O

AUS+1

AUS+2

AUS+3

AUS+4

AUS+5

AUS+6

Ausgabespeicher



AUS+7

AUS+8 Tastenwert anzeigen

L IT7

"pre

H

r

IT5

[14



% Hexadezimalziffern

Bild 5 - 1 9 :

Anordnung d e r T a s t e n und Anzeigen

Bild 5-20:

Blockplan des P r o g r a m m b e i s p i e l s

Zeichen

5.5 Tastatur und neunstellige

Multiplexanzeige

299

Bild 5-19 zeigt die Anordnung der Tasten und Anzeigen für ein Testprogramm, mit dem die eingegebenen Tastenwerte auf der Anzeige erscheinen sollen. Die an PC4 liegenden 16 Tasten dienen zur Eingabe der Hexadezimalziffern 0 bis F; mit den acht an PC5 liegenden Tasten sollen Zeichen eingegeben werden. Der zuletzt eingegebene Tastenwert soll rechts auf der Anzeige erscheinen; der Rest der Anzeige rückt eine Stelle nach links. Jeder Stelle der Anzeige ist ein Byte im Arbeitsspeicher (Anfangsadresse AUS) zugeordnet, das die auszugebende Stelle im Siebensegmentcode e n t h ä l t . Bild 5-20 zeigt das Struktogramm (Blockplan) des Programmbeispiels. Nach dem Start programmiert das Programm die Parallelschnittstelle und löscht die Anzeige. Dazu wird der RAM-Ausgabebereich aus neun Bytes mit Nullen gefüllt. Jedes Bytes enthält ein Zeichen der Anzeige im Siebensegmentcode. Das Byte auf der Adresse AUS entspricht der ganz links stehenden Stelle; das Byte mit der Adresse AUS+1 der rechts folgenden. Das eigentliche T a s t a t u r und Anzeigeprogramm läuft in einer Schleife ohne Abbruchbedingung. Auf einen Anzeigezyklus, in dem jede der neun Stellen 2 ms lang angezeigt wird, folgt ein Tastaturabfragezyklus, der jede Tastaturspalte nacheinander auf LOW legt und die Eingänge PC4 und PC5 p r ü f t . Wurde keine Taste gedrückt, so folgt ein neuer Anzeige- und Abfragezyklus. Wurde eine Taste erstmals als gedrückt erkannt, so wird das ihr zugeordnete Zeichen auf der Anzeige ausgegeben. Das Programm wartet in einer Schleife, bis die Taste wieder freigegeben ist. Das gesamte Programm wird nun zur besseren Übersicht in vier Teilprogrammen erklärt.

*8000 *8000 *8000 *8000 L1000 *1000 *1003 *1006 *1008 *100A *100B *100C *100F *1011

31 21 06 36 23 05 C2 3E D3

08 10 03 08

* 1013 *1016 *1019 *101C *101F

CD CD D2 CD C3

22 55 13 6B 13

00 18 00 17 09 00

10 10 10 10 10

0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B 000C 000D 000E 000F 0010 0011 0012 0013 0014 0015

>; BILD 5-21 HAUPTPROGRAMM TASTATUR >SREG EQU 08H STEUEREGISTER >AP0RT EQU 09H A-P0RT 1-AUS-16-DEC0DER >BP0RT EQU 0AH B-PORT 7-SEGMENT-C0DE >CP0RT EQU 0BH C-P0RT TASTENZEILEN > ORG 1000H ADRESSZAEHLER >START LXI SP,STAPEL STAPELZEIGER LADEN > LXI H.AUS ANFANGSADRESSE AUSGABE > MVI B ,9 STELLENZAEHLER >L00P1 MVI M,OOH AUSGABE L0ESCHEN > INX H NAECHSTE STELLE > DCR B ZAEHLER - 1 > JNZ LOOP 1 SCHLEIFE > MVI A,03H STEUERBYTE A=AUS B=AUS C=E1N > OUT SREG NACH STEUERREGISTER >; VERARBEITUNGSSCHLEIFE >L00P2 CALL ANZ ANZEIGEZYKLUS > CALL TEST TASTATUR PRUEFEN > JNC LOOP2 C=0: KEINE TASTE > CALL WERT C=1: TASTE AUSWERTEN > JMP LOOP 2 NEUER DURCHLAUF

Bild 5-21: Programmbeispiel: Hauptprogramm Der Vorspann des Hauptprogramms (Bild 5-21) lädt den Stapelzeiger, löscht die Ausgabe-RAM-Speicher und programmiert die Parallelschnittstelle. Die Schleife ohne Endebedingung ruft drei Unterprogramme a u f , die in den f o l g e n den Bildern erklärt werden. Das Unterprogramm ANZ gibt alle Stellen einmal

300

5 Parallele Datenübertragung

a u s . Das U n t e r p r o g r a m m T E S T u n t e r s u c h t die T a s t a t u r und s e t z t bei d e r R ü c k k e h r das C a r r y b i t 1, wenn e i n e T a s t e g e d r ü c k t i s t . Nur in d i e s e m F a l l wird das U n t e r p r o g r a m m W E R T a u f g e r u f e n , das die e i n g e g e b e n e T a s t e a u s w e r t e t .

*1022 *1023 *1024 * 1025 *1028 *102B *102C *102E *102F *1031 *1032 *1033 *1035 *1038 *1039 *103B *103C *103F *1040 *1041 *1042

F5 C5 E5 21 01 79 D3 7E D3 23 OC 3E CD AF D3 05 C2 E1 C1 F1 C9

*1043 *1044 *1047 *1048 *104A * 104B *104E *104F *1050 * 1051 * 1054

B7 CA F5 3E 3D C2 F1 00 3D C3 C9

Bild 5 - 2 2 :

Das

00 17 00 09 09 0A 02 43 10 0A 2B 10

54 10 8B 4A 10

43 10

0016 0017 0018 0019 001A 001B 001C 001D 001E 001F 0020 0021 0022 0023 0024 0025 0026 0027 0028 0029 002A 002B 002C 002D 002E 002F 0030 0031 0032 0033 0034 0035 0036 0037

>; BILD 5-22 ANZEIGEUNTERPROGRAMM >ANZ PUSH PSW AKKU RETTEN > PUSH B BC RETTEN > PUSH H HL RETTEN > LXI H.AUS ANFANGSADRESSE AUSGABEBEREICH > LXI B ,0900H ZAEHLER UND STELLENADRESSE >ANZ1 MOV A,C ADRESSE DER STELLE > OUT APORT NACH 1-AUS-16-DEC0DER > A,M MOV RAM-BYTE LADEN > OUT BPORT NACH SEGMENTANZEIGE > INX H RAM-ADRESSE + 1 > INR C STELLENADRESSE + 1 > MVI A,2 2 MS ANZEIGEN > CALL MS1 UNTERPROGRAMM WARTEN > XRA A AKKU L0ESCHEN > OUT BPORT ANZEIGE DUNKEL TASTEN > B DCR STELLENZAEHLER - 1 > JNZ ANZ1 UNGLEICH NULL: NEUE STELLE > POP H REGISTER ZURUECK > POP B > POP PSW > RET RUECKSPRUNG >; UNTERPROGRAMM N X 1MS WARTEN N IN AKKU UEBERGEBEN A >MS1 ORA AKKU TESTEN > JZ MS12 ZAEHLER NULL: FERTIG > PUSH PSW AKKU RETTEN > MVI A,139 ZAEHLERANFANGSWERT >MS11 A DCR ZAEHLER - 1 > JNZ MS11 UNGLEICH NULL: WEITER ZAEHLEN > PSW POP GLEICH NULL: AKKU ZURUECK > N0P ZEITABGLEICH > A N = N -1 DCR > JMP MS1 AUF NULL PRUEFEN >MS12 RET FERTIG

Programmbeispiel:

Anzeigeunterprogramm

in Bild 5 - 2 2 d a r g e s t e l l t e

Anzeigeunterprogramm

ANZ hat die

Aufgabe,

den S i e b e n s e g m e n t c o d e d e s A u s g a b e s p e i c h e r s A U S auf die Anzeige zu b r i n g e n . Jede

Stelle

wird

angezeigt.

Ein

rungszeit,

so

mit

H i l f e des

Anzeigezylus kann

man

Verzögerungsprogramms

MSI

dauert c a . 18 ms. V e r l ä n g e r t

beobachten,

wie

die

Anzeige

ca.

man die

2 ms lang Verzöge-

von S t e l l e zu

Stelle

s p r i n g t . Während des U m s c h a l t e n s der S t e l l e wird die Anzeige g e l ö s c h t , um zu verhindern, daß kurzzeitig auf der n e u e n S t e l l e der Code der a l t e n S t e l l e a n g e z e i g t wird. Dem U n t e r p r o g r a m m M S I muß die W a r t e z e i t in ms im A k k u m u l a t o r ü b e r g e b e n werden. Es gilt nur für einen P r o z e s s o r t a k t von 2 MHz ( Q u a r z 4 MHz). Auf e i n e n Anzeigezyklus f o l g t e i n T a s t a t u r a b f r a g e z y k l u s durch das in Bild 5 - 2 3 d a r g e s t e l l t e U n t e r p r o g r a m m Das T a s t a t u r u n t e r p r o g r a m m aufgerufen.

Dadurch

e i n e n Zähler und den

TEST.

T E S T wird n a c h e i n e m

Anzeigezyklus von 18 ms

w e r d e n die T a s t e n e n t p r e l l t . Das P r o g r a m m l e g t durch l - a u s - 1 6 - D e c o d e r die Tastaturspalten nacheinander auf

5.5

Tastatur

und neunstellige

Multiplexanzeige

301

LOW und untersucht dabei den auf Eingang geschalteten C-Kanal. Wurde keine Taste gedrückt, so ist beim Rücksprung das Carrybit gelöscht. Wurde eine Taste gedrückt, so ist das Carrybit gesetzt. Das B-Register enthält beim Rücksprung die Spaltennummer von 0 bis 15; der Akkumulator enthält Angaben über die Tastenzeile. Bei einer Funktionstaste lautet das Muster 00010000 oder 10 hexadezimal, bei einer Hexadezimaltaste 00100000 oder 20 hexadezimal. Das in Bild 5-24 dargestellte Unterprogramm WERT wertet den Tastencode aus.

*1055 *1057 * 1058 * 105A *105C *105E *1060 * 1063 * 1064 *1067 *1068 *1069 *106A

06 78 D3 DB E6 FE C2 05 F2 B7 C9 37 C9

OF 09 OB 30 30 69 10 57 10

0038 0039 003A 003B 003C 003D 003E 003F 0040 0041 0042 0043 0044 0045

>; BILD 5 - 2 3 >TEST MVI >TEST1 MOV > OUT IN > > ANI > CPI > JNZ > DCR > JP > ORA > RET >TEST2 STC > RET

TASTATURUNTERPROGRAMM SPALTENZAEHLER B,0FH A,B NACH AKKUMULATOR APORT NACH 1-AUS-16-DEC0DER ZEILENLEITUNGEN LESEN CP0RT MASKE 0011 0000 30H 30H ZEILENLEITUNG LOW ? TEST2 JA: TASTE GEDRUECKT B NEIN: NAECHSTE SPALTE TEST1 WEITER A CARRY = 0: KEINE TASTE RUECKSPRUNG CARRY = 1: TASTE GEDRUECKT RUECKSPRUNG

Bild 5-23: Programmbeispiel: Tastaturunterprogramm 0046 > ; BILD 5 - 2 4 AUSWERTUNGSUNTERPROGRAW 0047 >WERT CPI 10H Z E I L E HEXADEZIMALTASTEN ? 0048 > JA: UMCODIEREN JZ WERT1 NEIN: NULL EINSETZEN 0049 > XRA A 004A >WERT1 ORA B SPALTENWERT EINBAUEN 004B > C,A MOV SPALTENCODE NACH C-REGISTER 00 004C > B,00H HIGH-BYTE LOESCHEN MVI 00 11 004D > LXI H.COTAB ANFANGSADRESSE CODETABELLE 004 E > DAD B SPALTENCODE DAZUADDIEREN 004 F > MOV B,M SIEBENSEGMENTCODE NACH B 00 17 0050 > LXI H.AUS ANFANGSADRESSE AUSGABEBEREICH 08 0051 > MVI C ,8 ZAEHLER ANFANGSWERT 0052 >WERT2 INX H ADRESSE + 1 A,M 0053 > MOV WERT NACH AKKU 0054 > DCX H ADRESSE - 1 0055 > MOV M,A WERT NACH L I N K S VERSCHOBEN 0056 > INX H NAECHSTE STELLE 0057 > DCR C ZAEHLER - 1 7F 10 0058 > JNZ WERT2 NOCH KEIN ENDE: WEITER 0059 > MOV M,B NEUES ZEICHEN RECHTS EINBAUEN 22 10 005A >WERT3 CALL ANZ ANZEIGEZYKLUS 55 10 005B > CALL TEST TASTATUR ABFRAGEN 89 10 005C > JC WERT3 NOCH GEDRUECKT 005D > RET TASTATUR F R E I : RUECKSPRUNG 005E > ; DATENBEREICH L1100 005F > 1100H ORG KONSTANTEN 0060 >C0TAB DB 7EH,30H,6DH,79H,33H,5BH,5FH,72H ; CODETABE 1100 7E 30 SD 79 33 5B 5F 72 0061 > DB 7FH,7BH,77H,1FH,4EH,3DH,4FH,47H 1108 7F 7B 77 1F 4E 3D 4F 47 0062 > DB 1CH ,00H, 15H ,67H,05H ,37H,09H ,0EH 1110 1C 00 15 67 05 37 09 OE L1700 0063 > ORG 1700H VARIABLEN *1700 0064 >AUS 9 DS 9 STELLEN AUSGABE *1709 0065 >STAPEL EQU 1800H STAPEL EOOOO 0066 > END

*106B *106D *1070 *1071 *1072 *1073 *1075 »1078 * 1079 *107A *107D *107F *1080 *1081 *1082 *1083 *1084 *1085 * 1088 * 1089 *108C *108F *1092

FE CA AF BO 4F 06 21 09 46 21 OE 23 7E 2B 77 23 OD C2 70 CD CD DA C9

10 71 10

Bild 5-24: Programmbeispiel: Auswertungsunterprogramm

302

5 Parallele

Datenübertragung

Das Auswertungsprogramm hat die Aufgabe, den T a s t e n c o d e in den Siebens e g m e n t c o d e umzusetzen, die Anzeige zu verschieben, das neue Zeichen r e c h t s einzufügen und auf die Freigabe der T a s t e zu w a r t e n . Die Umcodierung geschieht mit Hilfe d e r Codetabelle COTAB, die die Siebensegmentcodes der T a s t e n n u m m e r n von 0 bis 17 hexadezimal e n t h ä l t . Zur Umcodierung wird durch Mischen der Spaltennummer ( B - R e g i s t e r ) und des Z e i l e n m u s t e r s (Akkumulator) die T a s t e n n u m m e r von 0 bis 17 hexadezimal gebildet, die zur Anfangsadresse der Codetabelle a d d i e r t wird. Die Summe ist die Adresse des S i e b e n s e g m e n t c o d e s . Das Schieben des Anzeige nach links l ä u f t in einer Schleife; in die r e c h t s f r e i werdende Stelle schreibt das Programm den Code der neuen Stelle. Eine Warteschleife r u f t das Anzeigeunterprogramm u n d d a s T a s t a t u r u n t e r p r o g r a m m a u f , bis die T a s t e f r e i g e g e b e n wird. Bild 5 - 2 5 zeigt die Codetabelle.

Tastencode 00000000 00000001 00000010 00000011 00000100 00000101 000001 10 000001 1 1 00001000 00001001 00001010 0000101 1 00001100 00001101 00001 1 10 00001 1 1 1 00010000 00010001 00010010 0001001 1 00010100 00010101 00010110 00010111 Bild 5-25:

Zeichen 0 1 2 3 4 5 6 7 8 9 A B c D E F u n

P r

H =

L

Anzeigecode 01111110 00110000 01101101 01111001 00110011 01011011 01011111 01110010 01111111 01111011 01110111 0001 1 1 1 1 01001 110 00111101 01001 1 1 1 010001 1 1 00011100 00000000 00010101 0110011 1 00000101 0011011 1 00001001 00001 1 10

Programmbeispiel: Codetabelle

hexa 7E 30 6D 79 33 5B 5F 72 7F 7B 77 1F 4E 3D 4F 47 1C 00 15 67 05 37 09 0E

303

5.6 Entwurf eines Tastenmonitors

5.6

Entwurf eines Tastenmonitors

Unter

einem

Monitor versteht

wachungsprogramm,

man in der

Mikrocomputertechnik

mit dem der Entwickler von Mikrocomputern

ein

Über-

Programme

in den Rechner eingeben und diese starten und testen kann. Bei Entwicklungssystemen

ist

der

Monitor

Teil

des

Betriebssystems,

das

zusätzlich

einen

Editor, A s s e m b l e r , C o m p i l e r , Binder ( L i n k e r ) , L a d e r und P r o g r a m m e zur D a t e i verwaltung e n t h ä l t . Für den B e t r i e b ist ein Datensichtgerät ( T e r m i n a l ) e r f o r derlich. E i n f a c h e Übungsgeräte arbeiten mit einer in Bild 5-18 d a r g e s t e l l t e n hexadezimalen

Eingabe und A n z e i g e . Dieser Abschnitt erklärt nur die beiden

Grundfunktionen Programm eingäbe und P r o g r a m m s t a r t . Bild 5-26 zeigt die B e deutung der A n z e i g e und der Eingabetasten.

]000

Status Adresse Inhalt n 1 1 ci G 1

12 3 4

A A

12

3 4

A A

12 3 4

A A

3

E l

0000 SO 0000 00 0

a. neunstellige Anzeige Bild 5-26:

00

0

0

0

b. Hexadezinaltasten

c.Funktionstasten

T a s t e n m o n i t o r : A n z e i g e und Eingabe

Nach dem Start des Monitors wird die A n z e i g e zunächst g e l ö s c h t . Die

Hexa-

dezimaltasten 0 bis F dienen e n t w e d e r zur Eingabe von Datenadressen oder zur Eingabe von Daten oder zur Eingabe e i n e r Startadresse. Mit den Funktionstasten A D R , D A T und PC wird eine der drei Betriebsarten ausgewählt. Auf der links stehenden A n z e i g e s t e l l e

wird der Status der Eingabe ( A , D oder P ) a n g e z e i g t .

Dann f o l g e n eine h e x a d e z i m a l e Adresse und rechts der Inhalt des adressierten Bytes.

Die

Funktionstaste

GO

startet

das

Programm

bei der

eingestellten

Befehlszähleradresse. Mit den Tasten + und - wird die laufende Adresse um 1 erhöht oder um 1 vermindert. Z w e i Tasten bleiben f r e i . Das Hauptprogramm und d i e bis

Unterprogramme

5 - 2 3 . Bild

A N Z und TEST entsprechen denen der Bilder 5 - 2 1

5-27 z e i g t den Blockplan des

Auswertungsprogramms

das an die S t e l l e des Auswertungsprogramms Bild 5 - 2 4 t r i t t .

WERT,

304

-5 Parallele

T a s t e n m o n i t o r : Blockplan der

Bild 5-27:

*106B FE 10 *106D C2 B1 10 *1070 *1071 *1073 *1076 *1078 * 107B *107E *1080 *1083 *1085 *1088 *108B *108D *1090 * 1092 *1095 *1098 *109A *109D *109E *10A1 *10A3 * 10A6 * 10A7 *10AA *10AC *10AF *10B0 Bild 5 - 2 8 :

Datenübertragung

78 FE C2 3E 32 C3 FE C2 3E 32 C3 FE C2 3E 32 C3 FE C2 1B C3 FE C2 13 C3 FE C2 EB E9

07 7E 77 00 D1 06 8B 3D 00 DI 03 98 67 00 D1 01 AI

10 17 10 10 17 10 10 17 10 10

DI 10 00 AA 10 DI 10 04 D1 10

0046 0047 0048 0049 004A 004B 004C 004D 004E 004F 0050 0051 0052 0053 0054 0055 0056 0057 0058 0059 005A 005B 005C 005D 005E 005 F 0060 0061 0062 0063 0064 0065

Tastenauswertung

>; BILD 5-28 TASTENMONITOR FUNKTIONSTASTEN FUNKTIONSTASTE ? 10H >WERT CPI NEIN: HEXADEZIMALTASTE WERTH > JNZ >; FUNKTIONSTASTEN AUSWERTEN CODE IN B > A,B CODE NACH AKKU MOV 07H A-TASTE ? > CPI > JNZ NEIN: WERTF1 JA: ZEICHEN A > A.77H MVI STA AUS NACH STATUS > JMP ADRESSE UND INHALT AUSGEBEN > WERAUS >WERTF1 CPI 06H D-TASTE ? NEIN: > JNZ WERTF2 A,3DH JA: ZEICHEN D > MVI > STA AUS NACH STATUS ADRESSE UND INHALT AUSGEBEN > JMP WERAUS >WERTF2 CPI 03H P-TASTE ? NEIN: > JNZ WERTF3 A.67H JA: ZEICHEN P > MVI STA NACH STATUS > AUS > JMP WERAUS ADRESSE UND INHALT AUSGEBEN 01H - TASTE ? >WERTF3 CPI > JNZ WERTF4 NEIN: LAUFENDE ADRESSE - 1 > DCX D JMP ADRESSE UND INHALT AUSGEBEN > WERAUS >WERTF4 CPI OOH + TASTE ? NEIN: > JNZ WERTF5 INX D LAUFENDE ADRESSE + 1 > JMP WERAUS ADRESSE UND INHALT AUSGEBEN > 04H G-TASTE ? >WERTF5 CPI NEIN: KEINE WIRKUNG > JNZ WERAUS > XCHG LAUFENDE ADRESSE NACH HL PCHL STARTADRESSE NACH PC UND START >

T a s t e n m o n i t o r : A u s w e r t u n g der

Funktionstasten

S. 6 Entwurf eines Tastenmonitors

305

Das Auswertungsprogramm unterscheidet zwischen den Hexadezimal- und den Funktionstasten. Je nach Betriebsart (A, D oder P) wird eine neue Stelle einer Datenadresse, eines Datenbytes oder einer Startadresse eingegeben; der r e s t liche Inhalt wird dabei eine Stelle nach links gerückt. Die Funktionstasten schalten eine neue Betriebsart ein, erhöhen oder vermindern die laufende Adresse oder s t a r t e n das Programm. Das Auswertungsprogramm wird nun in vier Teilen e r k l ä r t . Bild 5-28 zeigt die Auswertung der Funktionstasten. Vergleichsbefehle (CPI) unterscheiden die sechs Funktionen. Die laufende Adresse wird während des gesamten Programms im DE-Registerpaar gehalten. Das Programmstück WERAUS (Bild 5-30) gibt die neu eingestellten Werte aus. Für den Programmstart wird der Befehlszähler mit der Startadresse geladen (Befehl PCHL). Bild 5-29 zeigt die Auswertung der Hexadezimaltasten.

*10B1 3A 00 17 *10B4 FE 3D *10B6 C2 C5 10 *10B9 *10BA *10BB *10BC *10BD *10BE *10C0 *10C1 *10C2

1A 07 07 07 07 E6 F0 BO 12 C3 D1 10

*10C5 *10C6 *10C7 *10C8 *10C9 *10CA *10CB *10CC *10CD *10CE

EB 29 29 29 29 7D B0 6F EB C3 D1 10

0066 0067 0068 0069 006A 006B 006C 006D 006E 006F 0070 0071 0072 0073 0074 0075 0076 0077 0078 0079 007A 007B 007C 007D 007E

BILD 5-29 HEXADEZIMALTASTEN AUSWERTEN STATUS LESEN >WERTH LDA AUS > CPI 3DH DATEN-STATUS ? NEIN: JNZ WERTH 1 > JA: INHALT DES VON DE ADRESSIERTEN BYTES AENDERN BYTE HOLEN > LDAX D 4 BIT LINKS SCHIEBEN RLC > RLC > RLC > > RLC MASKE 1111 0000 ANI 0F0H > NEUE BITS DAZU ORA B > NEUES BYTE SPEICHERN > STAX D JMP WERAUS ADRESSE UND INHALT AUSGEBEN > ADRESSE IN DE AENDERN >WERTH1 XCHG ADRESSE NACH HL DAD H > 4 BIT LINKS SCHIEBEN > DAD H DAD > H > DAD H LETZTE STELLE NACH AKKU > MOV A,L > ORA B NEUE BITS DAZU NACH L ZURUECK > MOV L.A > XCHG NACH DE ZURUECK JMP WERAUS ADRESSE UND INHALT AUSGEBEN >

Bild 5-29: Tastenmonitor: Auswertung der Hexadezimaltasten

Das Programm unterscheidet zwischen einer Dateneingabe und einer Adreßeingabe. Bei einer Dateneingabe wird das durch das DE-Registerpaar a d r e s sierte Datenbyte verändert; bei einer Adreßeingabe die im DE-Registerpaar enthaltene Adresse. In beiden Fällen wird der alte Inhalt um vier Bit nach links geschoben, bevor die eingegebene Stelle rechts eingefügt wird. Das in Bild 5-30 dargestellte Programmstück WERAUS gibt die neuen Werte aus.

306

5 Parallele Datenübertragung

* 10D 1 1A *10D2 CD *10D5 22 *10D8 7B *10D9 CD *10DC 22 *10DF 7A *10E0 CD *10E3 22 *10E6 CD *10E9 CD *10EC DA *10EF C9 Bild 5 - 3 0 :

007F 0080 0081 0082 0083 0084 0085 0086 0087 0088 0089 008A 008B 008C

F0 10 06 17 F0 10 03 17 F0 01 22 55 E6

10 17 10 10 10

>; BILD 5-30 ADRESSE UND INHALT AUSGEBEN >WERAUS LDAX D INHALT LADEN > CALL UMCOD NACH SIEBENSEGMENTCODE > SHLD AUS+6 ZUR ANZEIGE > MOV A,E L0W-ADRESSE LADEN > NACH SIEBENSEGMENTCODE CALL UMCOD > SHLD AUS+3 ZUR ANZEIGE > MOV A,D HIGH-ADRESSE LADEN > CALL UMCOD NACH SIEBENSEGMENTCODE > SHLD AUS+1 ZUR ANZEIGE >WERAU1 CALL ANZ ANZEIGEZYKLUS > CALL TEST TASTATUR PRUEFEN > JC WERAU1 NOCH GEDRUECKT > RET TASTE FREI: FERTIG

T a s t e n m o n i t o r : Ausgabe von Adresse und Inhalt

A d r e s s e und Inhalt

werden

mit

Hilfe

des

Unterprogramms

UMCOD aus d e r

b i n ä r e n D a r s t e l l u n g in den S i e b e n s e g m e n t c o d e u m g e s e t z t . Das U n t e r p r o g r a m m ü b e r n i m m t im A k k u m u l a t o r die binäre D a r s t e l l u n g und l i e f e r t im H L - R e g i s t e r p a a r den S i e b e n s e g m e n t c o d e zurück. Das L - R e g i s t e r e n t h ä l t die h ö h e r w e r t i g e S t e l l e , das beide

H - R e g i s t e r e n t h ä l t dabei die n i e d e r w e r t i g e S t e l l e . D a m i t

Stellen

mit

dem

Befehl

SHLD

in

der

richtigen

können

Reihenfolge

in d e n

S p e i c h e r g e s c h r i e b e n w e r d e n . Bild 5 - 3 1 z e i g t das U m c o d i e r p r o g r a m m . Das

Unterprogramm

UMRE

UMCOD

a u f , die e i n m a l

Die

Umcodierung

der

4-Bit-Codes

das

ruft

selbst erfolgt zur

wieder

zwei

Unterprogramme

linke und dann das r e c h t e H a l b b y t e

UMLI

mit Hilfe e i n e r C o d e t a b e l l e . Durch

Anfangsadresse

der T a b e l l e

und

umwandeln. Addition

wird der T a b e l l e n p l a t z

mit

dem S i e b e n s e g m e n t c o d e b e r e c h n e t . Das v o r l i e g e n d e

B e i p i e l e i n e s Monitors kann l e d i g l i c h die b e i d e n

Grundfunktionen

P r o g r a m m e i n g a b e und P r o g r a m m s t a r t

tionen

sind

Haltepunktvergabe,

Registerverwaltung,

V e r ä n d e r u n g von S p e i c h e r b e r e i c h e n .

wichtigsten

zeigen. Weitere

Funk-

Einzelschrittbetrieb

und

5.6 Entwurf eines Tastenmonitors

307

008D BILD 5-31 UMCODIERUNG UND DATENBEREICH 008E >UMC0D PUSH PSW AKKU RETTEN 008F > CALL UMRE RECHTES HALBBYTE UMWANDELN 0090 > H,A NACH H-REGISTER MOV 0091 > POP PSW AKKU ZURUECK 0092 > CALL UMLI LINKES HALBBYTE UMWANDELN 0093 > L.A NACH L-REGISTER MOV 0094 > RET FERTIG 0095 LINKES HALBBYTE UMWANDELN *10FB 0F 0096 >UMLI RRC 4 B I T NACH RECHTS SCHIEBEN *10FC 0F 0097 > RRC *10FD OF 0098 > RRC *10FE OF 0099 > RRC 009A RECHTES HALBBYTE UMWANDELN *10FF E6 OF 009B >UMRE ANI OFH MASKE 0000 1111 *1101 E5 009C > PUSH H HL RETTEN *1102 C5 009D > PUSH B BC RETTEN * 1103 21 80 11 009E > LXI H.COTAB ADRESSE CODETABELLE *1106 4F 009F > MOV C ,A HALBBYTE NACH C-REGISTER *1107 06 00 00 AO > MVI B ,0 B-REGISTER LOESCHEN * 1 1 0 9 09 00 A1 > DAD B TABELLENADRESSE BERECHNEN *110A 7E 00A2 > A,M MOV CODE LADEN *110B C1 00A3 > B POP BC ZURUECK *110C E1 00A4 > POP H HL ZURUECK *110D C9 00A5 > RET FERTIG 00A6 DATENBEREICH L1180 1180H OOA7 > ORG KONSTANTEN 00A8 >C0TAB DB 7EH,30H,6DH,79H,33H,5BH,5FH,72H ; CODETABE 1180 7E 30 6D 79 33 5B 5F 72 00A9 > DB 7FH ,7BH ,77H,1FH,4EH,3DH,4FH,47H 1188 7F 7B 77 1F 4E 3D 4F 47 L I 700 00 AA > 1700H ORG VARIABLEN * 1700 00 AB >AUS DS 9 9 STELLEN AUSGABE *1709 00 AC >STAPEL EQU 1800H STAPEL E0000 OOAD > END *10F0 *10F1 *10F4 *10F5 *10F6 *10F9 *10FA

F5 CD FF 10 67 F1 CD FB 10 6F C9

Bild 5 - 3 1 : Tastenmonitor: Umcodierung Binär nach Siebensegmentcode

308

5.7

-5 Parallele Datenübertragung

Parallele Datenübertragung mit Steuersignalen

Bei d e r Ü b e r t r a g u n g von D a t e n zwischen e i n e m Sender und einem E m p f ä n g e r sind n e b e n den e i g e n t l i c h e n Daten a u c h S t e u e r s i g n a l e e r f o r d e r l i c h , d i e a n g e ben, ob d e r E m p f ä n g e r b e r e i t ist o d e r d a ß der Sender gültige Daten a u s g i b t . Die f o l g e n d e n P r o g r a m m b e i s p i e l e können mit e i n e r Schaltung e n t s p r e c h e n d Bild 5 - 3 2 g e t e s t e t w e r d e n .

Cn6

GND

H GND

1 Parallelschnittstelle Bild 5 - 3 2 :

rst7.s

Universelle E i n / A u s g a b e s c h n i t t s t e l l e

Der Port e i n e r P a r a l l e l s c h n i t t s t e l l e (8155 oder 8255) soll wahlweise a l s E i n gang o d e r a l s Ausgang v e r w e n d e t w e r d e n . Da die S c h n i t t s t e l l e selbst p r o g r a m m i e r b a r i s t , muß auch die ä u ß e r e Schaltung f ü r e i n e D a t e n ü b e r t r a g u n g in b e i den R i c h t u n g e n g e e i g n e t s e i n . Der P e r i p h e r i e a n s c h l u ß wird über e i n e n W i d e r s t a n d zunächst auf HIGH gelegt und kann mit einem S c h a l t e r auf LOW g e b r a c h t w e r d e n . Der in d e r Leitung liegende W i d e r s t a n d b e g r e n z t d e n Strom des A u s g a n g s t r e i b e r s f ü r den Fall, daß die S c h n i t t s t e l l e versehentlich a l s Ausgang p r o g r a m m i e r t ist und ein H I G H - P o t e n t i a l a b g i b t , während d e r ä u ß e r e S c h a l t e r d i e L e i t u n g auf LOW legt. Die L e u c h t d i o d e liegt am Ausgang e i n e s T r e i b e r s mit o f f e n e m Kollektor (z.B. 7416) und z e i g t den Leitungszustand a n . Bei der D a t e n a u s g a b e muß der Schalter o f f e n s e i n ! Mit einem e n t p r e l l t e n T a s t e r kann ein R S T - 7 . 5 - I n t e r r u p t ausgelöst w e r d e n . Bild 5 - 3 3 zeigt e i n e Anordnung zur D a t e n e i n g a b e , bei der die Ü b e r n a h m e d e r D a t e n in den E m p f ä n ger d u r c h e i n e n I n t e r r u p t ausgelöst w i r d . An d e n a c h t D a t e n s c h a l t e r n des B-Ports ( A d r e s s e 01H) w e r d e n die a c h t Bits eines D a t e n b y t e s e i n g e s t e l l t . Eine s t e i g e n d e F l a n k e d e s S i g n a l t a s t e r s m e l d e t , daß gültige D a t e n a n l i e g e n . Der Rechner b e s t ä t i g t d i e Ü b e r n a h m e , indem e r eine Q u i t t u n g s m e l d u n g auf dem A-Port ( A d r e s s e 00H) a u s s e n d e t . In dem v o r -

5.7 Parallele Datenübertragung

8

8 Leuchtdioden

SignalTaster

Datenschalter

Adreßanzeige H

TTTTTTTT B - P o r t A d r e s s e 01H

Daten wechseln Daten DO - D7

1

x

y

309

mit Steuersignalen

.

f

.

l

.

l

.

M

A - P o r t A d r e s s e 00H

RST-7.5

Daten wechseln

Daten wechseln y

y

Daten bereit

Quittung Adresse

Bild 5-33:

L1000 *1000 *1002 *1004 * 1007 *1008 *100A *100C *100D *100E *100F L003C *003C *003E *003F *0040 *0041 *0043 *0044 EOOOO

Bild 5-34:

'

Adresse + 1

Adresse + 1

1

Adresse + 1

G e t a s t e t e Dateneingabe

3E D3 21 7D D3 3E 30 FB 00 C3

8B 03 00 11 00 1B

0E 10

DB 01 77 23 7D D3 00 FB C9

0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B OOOC 000D 000E 000F 0010 0011 0012 0013 0014 0015 0016

> ; BILD 5 - 3 4 GETASTETE DATENEINGABE > ORG 1000H ADRESSZAEHLER > MVI A.8BH A=AUS b=EIN C = E I N > OUT 03 H NACH STEUEREGISTER > LXI ANFANGSADRESSE H.1100H > MOV LOW-TEIL DER ADRESSE A,L > OUT 00 H ANZEIGEN > MVI 0001 1011 R S T - 7 . 5 FREI A.1BH SIM NACH INTERRUPTREGISTER > > EI INTERRUPTS FREIGEBEN >L00P NOP WARTESCHLEI FE > JMP LOOP > ; INTERRUPTPROGRAMM > ORG 003CH RST-7.5-INTERRUPT IN >RST75 01H BYTE ABHOLEN > MOV M,A ABSPEICHERN > INX H ADRESSE + 1 > MOV A,L NEUER LOW-TEIL DER ADRESSE > OUT 00 H ALS QUITTUNG AUSGEBEN > EI INTERRUPT FREIGEBEN > RET NACH HAUPTPROGRAMM > END

Progiammbeispiel: G e t a s t e t e Dateneingabe

liegenden Beispiel wird der niederwertige Teil der Adresse ausgesendet, die das nächste Zeichen a u f n i m m t . Nach dieser Bestätigung können an den Eingabeschaltern neue Daten eingestellt werden. Bild 5-34 zeigt das Programm.

310

S Parallele

Datenübertragung

Nach der Programmierung der Parallelschnittstelle wird das Maskenbit des RST-7.5-Interrupts im Interruptregister gelöscht. Der Befehl EI gibt alle Interrupts f r e i . Die folgende Schleife w a r t e t auf einen Interrupt. Das RST-7.5-Interruptprogramm liegt in dem Programmbeispiel auf der Adresse 003CH. In dem vorliegenden Übungssystem liegt in diesem Adreßbereich jedoch ein EPROM, das den RST-7.5-Interrupt auf die RAM-Adresse 083CH umlenkt, so daß das Beispiel auf der RAM-Adresse 083CH g e t e s t e t wurde. In dem Beispiel der g e t a s t e t e n Dateneingabe übernimmt der Empfänger die Daten aufgrund eines Eingabesignals und meldet die Übernahme mit einem Bestätigungssignal. Das folgende Beispiel Bild 5-35 zeigt einen Sender, der einem Empfänger - z.B. einem Drucker - Daten übergibt. BUSY LOW I laufen

I HIGH warten

'•'I'M' J ì cm Datenausgabe

DS

PC7 I C - P o r t

A-Port

PB7

f

B-Port

A d r e s s e 00H

»warten

• ausgeben •

BUSY

DS

Daten DO - D7

Daten

Daten

Daten

gültig

gültig

gültig

n—nn

Daten wechseln

Bild 5-35:

m

Daten wechseln

nr

I

Datenausgabe mit Steuersignalen

Mit dem BUSY-Signal meldet der Empfänger, ob er bereit ist, Daten anzunehmen. Busy bedeutet besetzt oder b e s c h ä f t i g t . Ist die Leitung HIGH, so muß der Sender warten, da der Empfänger besetzt ist; für BUSY gleich LOW kann der Empfänger Daten annehmen. Zusammen mit den Daten (A-Port) liefert der Sender das Signal DS gleich Data Strobe am Anschluß PC7, der im LOW-Zustand anzeigt, daß die Daten gültig sind. Bild 5 - 3 6 zeigt das Ausgabeprogramm.

5.7 Parallele Datenübertragung mit Steuersignalen

L1000 *1000 *1002 *1004 *1006 *1008 *100B *100C *100D *1010

3E D3 3E D3 21 7E 23 CD C3

* 1013 *1014 *1016 * 1017 * 101A *101B * 101D *101E * 1020 *1023 * 1025 *1027

F5 DB B7 FA F1 D3 AF 03 CD 3E D3 C9

* 1028 *102B *102C *102F *1030 * 1033 E 0000

11 00 80 1D C2 2B 10 15 C2 2B 10 C9

Bild 5 - 3 6 :

82 03 80 02 00 11

13 10 OB 10

01 14 10 00 02 28 10 80 02

0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B OOOC 000D 000E 000F 0010 0011 0012 0013 0014 0015 0016 0017 0018 0019 001A 001B 001C 001D 001E 001F 0020

>; BILD 5-36 DATENAUSGABE > 0RG 1000H > A,82H MVI > OUT 03 H > A.80H MVI > OUT 02 H > LXI H.1100H >L00P MOV A ,M > INX H > CALL AUS > JMP LOOP >; AUSGABE - JNTERPROGRAMf PUSH PSW >AUS >AUS1 IN 01H > ORA A > JM AUS1 > PSW POP > OUT 00 H > XRA A > OUT 02 H > CALL TIME > MVI A.80H > OUT 02 H > RET >; WARTE - UNTERPROGRAMM >TIME LXI D ,8000H >TIME1 DCR E > JNZ TIME1 > DCR D > JNZ TIME1 > RET > END

311

ADRESSZAEHLER A=AUS B=EIN C=AUS NACH STEUERREGISTER DS = HIGH NACH C-P0RT ANFANGSADRESSE ZEICHEN LADEN ADRESSE + 1 AUSGEBEN

ZEICHEN RETTEN BUSY-EINGANG LESEN TESTEN NICHT BEREIT: WARTEN BEREIT: ZEICHEN ZURUECK AUSGEBEN B7 = 0 DS = LOW WARTEN B7 = 1 DS = HIGH ZAEHLERANFANGSWERT -1 BIS NULL - 1 BIS NULL BEIDE REGISTER NULL

Programmbeispiel: Datenausgabe mit Steuersignalen

Das Ausgabe-Unterprogramm prüft zunächst den BUSY-Eingang, ob der Empfänger bereit ist. Nach der Ausgabe der Daten wird das Steuersignal DS auf LOW gelegt. Das Unterprogramm TIME hält diesen Zustand einige Zeit f e s t , so daß der Empfänger die Daten übernehmen kann. Die Wartezeit des Senders muß größer sein als die Ubernahmezeit des Empfängers. Vor der R ü c k kehr in das Hauptprogramm wird die DS-Leitung wieder auf HIGH gebracht. Bild 5 - 3 7 zeigt die Anschlußbelegung einer parallelen Druckerschnittstelle, die nach einem Hersteller von Druckern auch Centronics-Schnittstelle genannt wird. Bild 5 - 3 8 zeigt das Zeitdiagramm der Daten- und Steuersignale. Der Drucker meldet mit BUSY gleich LOW, daß er bereit ist, Zeichen aufzunehmen. Im Zustand BUSY gleich HIGH ist er belegt. Der Sender gibt über einen T T L Treiber (z.B. 7404) die sieben oder acht Bits eines ASCII-Zeichens parallel aus und legt dabei die Signalleitung DS auf LOW. Diese Signale müssen je nach Drucker 1 bis 500 fus anliegen. Der Drucker quittiert die Übernahme mit dem Bestätigungssignal ACK gleich ACKnowledge. Für den Betrieb eines Druckers sollten die Unterlagen des Herstellers herangezogen werden, die genaue Anweisungen über die Stiftbelegung und den zeitlichen Verlauf der Signale e n t halten.

312

5 Parallele

Datenübertragung

Sender

Treiber

Drucker

Bild 5-37: Parallele Druckerschnittstelle

BUSf

Daten D0-D7

^i

'

y

DS

ACK

Bild 5-38: Zeitdiagramm einer parallelen Druckerausgabe

6

Serielle Datenübertragung

Bei einer seriellen Datenübertragung werden die acht Bits eines Bytes n a c h e i n ander (seriell) über eine Leitung ü b e r t r a g e n . Bild 6 - 1 zeigt die in der Mikroc o m p u t e r t e c h n i k vorwiegend verwendete asynchrone Übertragung. Sende- und Empfangstakt

A

f

Ruhezustand

I iStart

M

BO

B1

J

I

I

J

M

B2

B3

B4

B5

B6

I B7

Par

I

i

Ruhezustand

~p7:

STOP STOP

Bild 6 - 1 : Serielle asynchrone D a t e n ü b e r t r a g u n g (TTL-Pegel)

Die Leitung befindet sich zunächst im Ruhezustand (HIGH). Die f a l l e n d e Flanke des S t a r t b i t s zeigt den Beginn eines Zeichens a n . Das Startbit ist i m mer LOW und synchronisiert Sender und E m p f ä n g e r . Es folgen je nach V e r f a h ren fünf bis a c h t Datenbits; das Beispiel zeigt acht Datenbits, die HIGH oder LOW sein können. Zur Datensicherung kann ein Paritätsbit folgen. Ein oder zwei Stopbits, die immer HIGH sind, schließen das Zeichen a b . Sie gehen in den Ruhezustand der Leitung ü b e r . Zum Senden sind ein serielles S c h i e b e r e g i ster und Zusatzschaltungen e r f o r d e r l i c h , die die S t e u e r - und Kontrollbits ( S t a r t , Parität und Stop) hinzufügen. Auf der Empfangsseite muß eine S t e u e r logik diese Bits wieder von den Daten t r e n n e n , die in einem seriellen S c h i e b e register a u f g e n o m m e n und dann parallel w e i t e r g e r e i c h t werden.

6.1

Die V.24-Schnittstelle

Die S e n d e - und Empfangsschaltungen a r b e i t e n mit TTL-Pegel, der sich jedoch nicht f ü r die Übertragung über längere Strecken eignet. Dazu verwendet man zwei V e r f a h r e n . Die S t r o m s c h n i t t s t e l l e (Current Loop) a r b e i t e t mit einem Steuerstrom von 20 mA für eine Eins und mit einem unterbrochenen Strom für die Null. Die Spannungsschnittstelle (V.24, RS-232-C) stellt eine Eins als Spannung zwischen - 3 V und und negativer Betriebsspannung (z. B. - 12 V) dar; eine Null als Spannung zwischen + 3 V und positiver Betriebsspannung (z.B. + 12 V). Die Schnittstelle nach der V.24-Norm a r b e i t e t mit der in Bild 6 - 2 d a r g e s t e l l t e n Stiftbelegung eines 25poligen N o r m s t e c k e r s .

314

6 Serielle

Der

Sender

Datenübertragung

sendet über einen invertierenden P e g e l u m s e t z e r über den S t i f t

2

an den E m p f ä n g e r , der d i e Daten an S t i f t 3 übernimmt und über einen e b e n f a l l s invertiert arbeitenden Pegelumsetzer einer

Übertragung

und einem

w i e d e r auf T T L - P e g e l umsetzt. Bei

in beiden Richtungen z.B. zwischen einem

Datensichtgerät

Mikrocomputer

sind die Leitungen 2 und 3 zu kreuzen, da b e i d e

G e r ä t e als Sender a r b e i t e n . Die S t i f t e 4 und 5 dienen zum Ein- und Ausschalten des Senders. Mit den Leitungen 6 und 20 können zusätzliche Steuersignale übertragen

werden.

Länge

Impulse b e s t i m m t die Übertragungsgeschwindigkeit.

die

der

Baudraten

Am

Stift

( B i t r a t e n ) von

7 liegt die 50 , 75,

Betriebserde

(Signal Ground). Die Genormt sind

110, 300 , 600, 1200, 2400, 4800, 9600

und 19200 Baud (Bit/sek). Rechnet man mit durchschnittlich 10 Bit ( S t a r t b i t , Datenbits, S t o p b i t ) pro Z e i c h e n , so werden bei 4800 Baud e t w a 480 Zeichen (Buchstaben, Z i f f e r n , Sonderzeichen) in der Sekunde übertragen. Bild

6-3

zeigt

eine

Sender/Empfänger Verbindung, die

für

Übertragungsstrecke beide

gleichzeitig

V o l l d u p l e x v e r f a h r e n . Beim umgeschaltet

werden.

Richtungen,

mit

Ground

vier und

Verbindungsleitungen: Senderfreigabe.

Eine

senden und e m p f a n g e n kann, arbeitet nach dem

Halbduplexverfahren

müssen Sender und E m p f ä n g e r

6.2 Programmierung der Serienschnittstelle

a. serielles Obertragungsprogramn

b.

8251A

315

Serienschnittstelle

Bild 6-3: Serielle Datenübertragung nach V.24 Die Schaltung nach Bild 6-3a benutzt die Anschlüsse S1D (Serial Input Data) und SOD (Serial Output Data) des Prozessors 8085A. Anstelle der Prozessoranschlüsse könnte man auch zwei Leitungen einer Parallelschnittstelle verwenden. Da die Signale durch ein Übertragungsprogramm erzeugt werden, ist der Mikrocomputer ausschließlich mit der Datenübertragung beschäftigt. Da dies in den meisten Anwendungen zu zeitlichen Engpässen führt, setzt man vorwiegend besondere Serienschnittstellen nach Bild 6-3b ein, die die zu ü b e r t r a genden Daten parallel mit dem Prozessor austauschen und dann selbständig seriell übertragen.

6.2

Programmierung der Serienschnittstelle 8251A

Bild 6 - 4 zeigt das Programmiermodell einer Serienschnittstelle 8251A, die gleichzeitig senden und empfangen kann. Die Sendeseite besteht aus einem Sendeschieberegister (Sender) und einem Sendedatenregister als Zwischenspeicher, in das das auszugebende Byte geschrieben wird. TxD ist der Datenausgang. An den Sendetakt TxC wird ein Taktgeber angeschlossen, der die Übertragungsgeschwindigkeit (Baudrate gleich Bit/sek) bestimmt. Der Sender wird hardwaremäßig durch den Senderfreigabeeingang CTS (Clear To Send) eingeschaltet. Der Dateneingang RxD führt auf das Empfangsschieberegister, das durch den Empfangstakt RxC getaktet wird. Die seriell empfangenen Daten werden in das Empfangsdatenregister übertragen und dort parallel mit einem Lesebefehl abgeholt. Der Buchstabe T bedeutet Transmitter gleich Sender. R bedeutet Receiver gleich Empfänger.

6.2 Programmierung der Serienschnittstelle

a. serielles Obertragungsprogramn

b.

8251A

315

Serienschnittstelle

Bild 6-3: Serielle Datenübertragung nach V.24 Die Schaltung nach Bild 6-3a benutzt die Anschlüsse S1D (Serial Input Data) und SOD (Serial Output Data) des Prozessors 8085A. Anstelle der Prozessoranschlüsse könnte man auch zwei Leitungen einer Parallelschnittstelle verwenden. Da die Signale durch ein Übertragungsprogramm erzeugt werden, ist der Mikrocomputer ausschließlich mit der Datenübertragung beschäftigt. Da dies in den meisten Anwendungen zu zeitlichen Engpässen führt, setzt man vorwiegend besondere Serienschnittstellen nach Bild 6-3b ein, die die zu ü b e r t r a genden Daten parallel mit dem Prozessor austauschen und dann selbständig seriell übertragen.

6.2

Programmierung der Serienschnittstelle 8251A

Bild 6 - 4 zeigt das Programmiermodell einer Serienschnittstelle 8251A, die gleichzeitig senden und empfangen kann. Die Sendeseite besteht aus einem Sendeschieberegister (Sender) und einem Sendedatenregister als Zwischenspeicher, in das das auszugebende Byte geschrieben wird. TxD ist der Datenausgang. An den Sendetakt TxC wird ein Taktgeber angeschlossen, der die Übertragungsgeschwindigkeit (Baudrate gleich Bit/sek) bestimmt. Der Sender wird hardwaremäßig durch den Senderfreigabeeingang CTS (Clear To Send) eingeschaltet. Der Dateneingang RxD führt auf das Empfangsschieberegister, das durch den Empfangstakt RxC getaktet wird. Die seriell empfangenen Daten werden in das Empfangsdatenregister übertragen und dort parallel mit einem Lesebefehl abgeholt. Der Buchstabe T bedeutet Transmitter gleich Sender. R bedeutet Receiver gleich Empfänger.

316

6 Serielle Datenübertragung

TxRDY

Bild 6 - 4 :

D

P r o g r a m m i e r m o d e l l der S e r i e n s c h n i t t s t e l l e

bedeutet

Data

gleich

Daten

und

C bedeutet

RxRDY

8251A

Clock

gleich Takt. Die

d e u t u n g d e r übrigen Anschlüsse kann den U n t e r l a g e n d e r

Hersteller

Be-

entnom-

men w e r d e n . Da

der

Baustein

Datenverarbeitung

für

die

wichtigsten

geeignet

ist,

seriellen

sind s e i n e

r e g i s t e r p r o g r a m m i e r b a r . Es l e g t z.B. die

Übertragungsverfahren

Funktionen

mit d e m

der

Betriebsart-

Anzahl der D a t e n b i t s f e s t . Das auf

der gleichen Adresse liegende K o m m a n d o r e g i s t e r übernimmt Steuerkommandos w i e z . B . E m p f ä n g e r und Sender f r e i g e b e n . Das S t a t u s r e g i s t e r kann nur g e l e s e n werden

und z e i g t

z.B.

an,

ob e m p f a n g e n e

Daten

abgeholt

g e s e n d e t w e r d e n können. Bild 6 - 5 z e i g t d i e A d r e s s e n der

Adresse xxxxxxxO

RD/WR lesen

Register Empfangsdaten

xxxxxxxO

schreiben

Sendedaten

xxxxxxx1

lesen

xxxxxxxl

schreiben

Status nach RESET:

xxxxxxx!

schreiben

Betriebsart nach Betriebsart: Kommando Bild 6 - 5 :

Registeradressen der Serienschnittstelle

8251A

o d e r neue

Register.

Daten

6.2 Programmierung der Serienschnittstelle 8251A

317

Da dem Baustein nur die Adreßleitung AO zur Auswahl der fünf Register zur Verfügung s t e h t , sind die beiden Adressen m e h r f a c h b e l e g t . AO b e s t i m m t d a s n i e d e r w e r t e Bit der Adresse, die restlichen sieben Bits ergeben sich aus dem Anschluß des Freigabeeingangs CS an den Adreßdecoder des Systems. Das E m p f a n g s d a t e n r e g i s t e r kann nur gelesen, das Sendedatenregister kann nur beschrieben werden; ein Zurücklesen der eingeschriebenen Daten ist nicht möglich. Das S t a t u s r e g i s t e r kann nur gelesen werden; die beiden anderen auf der gleichen Adresse liegenden Register müssen in einer b e s t i m m t e n R e i h e n folge beschrieben werden. Nach einem Reset ist zunächst das B e t r i e b s a r t register e i n g e s c h a l t e t , das mit dem e r s t e n Schreibbefehl (OUT) p r o g r a m m i e r t wird. Der folgende Schreibbefehl (OUT) adressiert dann das K o m m a n d o r e g i s t e r . Das Bit 6 des K o m m a n d o r e g i s t e r s legt f e s t , ob der n ä c h s t e S c h r e i b befehl das B e t r i e b s a r t r e g i s t e r oder das Kommandoregister adressieren soll. B e t r i e b s a r t - und Kommandoregister müssen also in einer b e s t i m m t e n R e i h e n folge angesprochen werden! Bild 6 - 6 zeigt die Programmierung der B e t r i e b s art f ü r den überwiegend verwendeten Asynchronbetrieb.

B7

B6

Stopbits 0 1: 1 0: 11:

1 Bit 1 1/2 2 Bit

Beispiel: Clock * 16 : Länge: 8 Bit: Ohne Parität: 2 Stopbit: Steuerbyte Bild 6 - 6 :

B4

B5

B3

B2

B1

B0

Parität Parität

Zeichenlänge

Betriebsart

0: ung. 0:ohne 1: ger. 1 :mit

0 0 1 1

0 1: Clock * 1 1 0: Clock * 16 1 1: Clock * 64

j

0: 1: 0: 1:

5 6 7 8

Bit Bit Bit Bit

1 |

110 0 1 1 1 0

= CEH

Programmierung des B e t r i e b s a r t r e g i s t e r s

Die Bits 0 und 1 legen einen Teilungsfaktor f e s t , mit dem der a n den T a k t eingängen TxC und RxC anliegende Ü b e r t r a g u n g s t a k t h e r u n t e r g e t e i l t wird. Die meisten B a u d r a t e n g e n e r a t o r e n liefern den l ö f a c h e n Ü b e r t r a g u n g s t a k t . Die Bits 2 und 3 legen die Zahl der D a t e n b i t s f e s t . Obwohl der ASCII-Code s t a n d a r d m ä ß i g ein 7 - B i t - C o d e ist, können in einem a c h t e n Bit zusätzliche I n f o r m a t i o n e n wie z.B. eine besondere S c h r i f t a r t u n t e r g e b r a c h t w e r d e n . Die Bits 4 und 5 legen die Parität f e s t . Gerade Parität b e d e u t e t , daß die Anzahl der Einerbits eine g e r a d e Zahl (0, 2, 4, 6 oder 8) ist. Soll ein D a t e n b y t e mit einer ungeraden Zahl von Einerbits ü b e r t r a g e n werden, so wird d a s Paritätsbit 1 gesetzt, damit eine g e r a d e Gesamtzahl e n t s t e h t .

318

6 Serielle

Datenübertragung

Die Bits 6 und 7 legen die Anzahl der Stopbits f e s t , die den Abschluß des zu übertragenden Zeichens bilden. Das Betriebsartbyte für 2 Stopbits, kein Paritätsbit, 8 Datenbits und den Teilungsfaktor 16 lautet 11001110 hexadezimal CE.

B7

B6 es f o l g t neues 0: Koirm. 1: Betr.

B5

B4

Ausgang FehlerRTS Bits löschen 0:HIGH 0:nein 1: LOW 1:Ja

B3 BREAK Ausqabe 0:nein 1:ja

B2

B1

B0

Empfän- Ausgang ger DTR

Sender

0:gesp. 0:HIGH 1:frei 1 :L0W

0:gesp. 1 :frei

Beispiel:

Sender f r e i : DTR = HIGH: Empfänger f r e i : kein BREAK: F e h l e r b i t s löschen: RTS = HIGH: es f o l g t Kommando:ohne Bedeutung: j Steuerbyte

0 0 0 10 10 1

= 15H

Bild 6-7: Programmierung des Kommandoregisters

Bild 6-7 zeigt die Programmierung des Kommandoregisters für den Asynchronbetrieb, die nach der Festlegung der Betriebsart vorgenommen werden muß. Die Bits 0 und 2 schalten den Sender bzw. den Empfänger ein und aus. Der Sender muß zusätzlich durch ein LOW-Potential am Steuereingang CTS f r e i g e g e ben werden. CTS bedeutet Clear To Send gleich freigeben des Senders. Die Bits 1 und 5 legen die Steuerausgänge DTR (Data Terminal Ready) und RTS (Request To Send) auf LOW oder HIGH. Sie dienen zur Steuerung eines Modems (Modulator/Demodulators) oder der Gegenstation. Durch das Bit 3 kann die Datenausgangsleitung TxD in den BREAK-Zustand d.h. dauernd auf LOW gebracht werden. Im Betrieb ist der Ruhezustand der Leitung HIGH. Mit dem Bit 4 können die Fehlerbits des Statusregisters wieder gelöscht werden, wenn z.B. ein Fehler erkannt und entsprechend korrigiert worden ist.

6.2 Programmierung der Serienschnittstelle 8251A

319

Bit 6 legt f e s t , ob beim folgenden Schreibbefehl das Betriebsartregister oder das Kommandoregister angesprochen werden soll. In besonderen Fehlerfällen kann es nötig sein, mit der Programmierung der Betriebsart neu zu beginnen, ohne den augenblicklichen Zustand (Betriebsart oder Kommando) zu kennen. Überträgt man nacheinander die Steuerbytes 00 und 40 hexadezimal, so gelangt man in jedem Fall zurück in das Betriebsartregister. Das Steuerbyte 00010101 Empfänger ein, löscht die BREAK-Zustand, legt DTR gende Steuerbyte wieder in

B7 Eingang DSR 0:HIGH 1:L0W Bild 6 - 8 :

B6

oder 15 hexadezimal schaltet z.B. Sender und Fehlerbits, bringt den Datenausgang nicht in den und RTS auf HIGH und sorgt d a f ü r , daß das f o l das Kommandoregister gelangt.

B5

BREAK Fehler Empf. STOPBits 0: nein 0:nein 1:ja 1: ja

B4

B3

B2

Fehler Empf. Überl. 0:nein 1: ja

Fehler Parit. Bit 0:nein 1: ja

Sendedaten Sender 0:voll 1: leer

B1

B0

Empfangs Sendedaten daten 0:leer 1: vol1

0:vol1 1: leer

Aufbau des Statusregisters

Bild 6 - 8 zeigt den Aufbau des Statusregisters (Zustandsregisters) im Asynchronbetrieb. Es kann nur gelesen werden und zeigt den Zustand der Serienschnittstelle an. Die Bits 0, 1 und 2 zeigen an, ob das Sendedaten- bzw. Empfangsdatenregister frei ist und ob neue Daten gesendet oder empfangene Daten gelesen werden können. Eine 0 bedeutet in beiden Fällen, daß keine neuen Daten übertragen werden können; eine 1 bedeutet in beiden Fällen, daß neue Daten gesendet bzw. abgeholt werden können. Die Bits 3, 4 und 5 enthalten Fehlermeldungen des Empfängers für den Fall eines P a r i t ä t s - , Überlauf- oder Stopbitfehlers. Bit 6 meldet den Ruhezustand des Dateneinganges RxD. BREAK bedeutet, daß die Leitung auf LOW liegt und unterbrochen ist. Bit 7 meldet den Zustand der Steuerleitung DSR für Data Set Ready gleich Betriebsbereitschaft. Das Programmbeispiel des Bildes 6 - 9 zeigt ein Testprogramm, das die Serienschnittstelle mit den bereits erklärten Steuerbytes programmiert und dann in einer unendlichen Schleife Daten empfängt und sofort wieder sendet. Die

320

6 Serielle

L1000 *1000 *1002 *1004 *1006 *1008 *100B * 100E *1011 * 1013 * 1015 *1018 *101A * 101B *101C *101E *1020 *1023 *1024 *1026 EOOOO

3E D3 3E D3 CD CD C3

CE 11 15 11 11 10 1B 10 08 10

DB E6 CA DB C9 F5 DB E6 CA F1 D3 C9

11 02 11 10 10 11 01 1C 10 10

Datenübertragung

0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B OOOC OOOD 000E 000F 0010 0011 0012 0013 0014 0015 0016 0017

>; BILD 6-9 EMPFANGEN UND > 0RG 1000H >START A.0CEH MVI > OUT 11H > A.15H MVI > OUT 11H >L00P CALL EIN > CALL AUS JMP LOOP > >; UEBERTRAGUNGSPROGRAMME >EIN IN 11H ANI 02H > > EIN JZ IN > 10H > RET PUSH PSW >AUS >AUS1 IN 11H ANI > 01H > JZ AUS1 > POP PSW > OUT 10H > RET > END

SENDEN IM ECHO ADRESSZAEHLER 1100 1110 BETRIEBSART NACH STEUERREGISTER 0001 0101 KOMMANDO NACH STEUERREGISTER EMPFANGSPROGRAMM SENDEPROGRAMM SCHLEIFE STATUS LESEN MASKE 0000 0010 EMPFANGSREGISTER LEER ZEICHEN ABHOLEN RUECKSPRUNG BYTE RETTEN STATUS LESEN MASKE 0000 0001 SENDEREGISTER VOLL BYTE ZURUECK ZEICHEN NACH SENDER RUECKSPRUNG

Bild 6-9: Programmbeispiel: Empfangen und senden im Echo

Steuerregister (Betriebsart, Kommando und Status) haben Adresse 11, die beiden Datenregister (Empfangen und Adresse 10. Die beiden Unterprogramme zum Empfangen jeweils in einer Schleife, bis das entsprechende Bit zeigt, daß Sender bzw. Empfänger bereit sind.

in dem Beispiel die Senden) haben die und Senden warten des Statusregisters

Für den Betrieb einer Serienschnittstelle ist ein Ubertragungstakt e r f o r d e r lich, der einer der genormten Bitraten entspricht. I n d e n meisten Anwendungen liefert der Bitratengenerator den löfachen Ubertragungstakt, der durch den Teilungsfaktor 16 der Serienschnittstelle heruntergeteilt wird. Bild 6 - 1 0 zeigt zwei Schaltungsmöglichkeiten, bei denen verschiedene Bitraten über Brücken eingestellt werden können. Die Schaltung Bild 6-10a verwendet einen Bitratengenerator, an den ein Quarz von 1,8432 MHz angeschlossen wird. An den Ausgängen stehen alle genormten Bit raten zur Verfügung. Über zwei Steuereingänge läßt sich ein Faktor (z.B. x 16) einstellen. Die Schaltung Bild 6-10b erzeugt mit einer Oszillatorschaltung einen Takt von 2,4576 MHz, der durch einen Binärteiler (74LS393) heruntergeteilt wird. Es stehen die häufigsten Bitraten von 9400 bis 600 Baud mit dem Faktor 16 zur Verfügung. Inzwischen gibt es Bitratengeneratoren, die Quarz und Teiler auf einem Baustein vereinen.

6.2 Programmierung der Serienschnittstelle 8251A

321

2,4576 MHz

1,8432 MHz Faktor x 16 + 5 ÄND

1 T

b

68 pF

IUI

&

ü l r

n

ßitratengenerator (MC 14411)

ITT

9600

1(800

2WO

Q Q O

68 pF 100 PF

1200

600

150

75

x

& ^

1

1K

1K

(74LS393) 16:1

300

(74LS04)

I

^2:1 ii:1 8:1 16:1

H TTTT 9600

16

Q

A800

Q

2W0

TxC RxC a. B i t r a t e n g e n e r a t o r Bild 6 - 1 0 :

1200

TxC RxC b. B i n ä r t e i l e r

Erzeugung des Übertragungstaktes

600

Q O

x

16

322

6.3

6 Serielle

Datenübertragung

Softwaregesteuerte serielle Datenübertragung

Die in Bild 6 - 1 d a r g e s t e l l t e n Signale lassen sich auch durch ein Programm erzeugen und e n t s p r e c h e n d Bild 6 - 3 a über einen Ausgang des Prozessors (SOD) oder einer Parallelschnittstelle senden. Umgekehrt ist es möglich, serielle an einem Eingang des Prozessors (SID) oder einer Parallelschnittstelle a n k o m mende Signale mit einem Programm zu erkennen und zu einen D a t e n b y t e zusammenzusetzen. Das folgende Programmbeispiel a r b e i t e t mit dem im Abschnitt 3.8 e n t w o r f e n e n Übungssystem; die Prozessorleitungen SID und SOD sind nach Bild 6 - 3 a b e s c h a l t e t .

L1000 * 1 0 0 0 3 E 3F * 1 0 0 2 CD 35 1 0 * 1 0 0 5 CD 0 E 10 * 1 0 0 8 CD 35 1 0 *100B C 3 05 10

Bild 6 - 1 1 :

0001

>;

0002 0003 0004 0005 0006 0007

> >START

BILD 6-11 HAUPTPROGRAMM UEBERTRAGUNGSPROGRAMME ADRESSZAEHLER 1000H ORG ? AUSGEBEN A,"?' MVI SEND CALL > Z E I C H E N EMPFANGEN EMPF >LOOP CALL Z E I C H E N SENDEN CALL SEND > SCHLEIFE JMP LOOP >

Programmbeispiel: Hauptprogramm

Bild 6 - 1 1 zeigt das H a u p t p r o g r a m m , das zunächst ein Fragezeichen ausgibt und dann in einer Schleife das e m p f a n g e n e Zeichen im Echo wieder a u s s e n d e t . Die U n t e r p r o g r a m m e EMPF und SEND übergeben das e m p f a n g e n e bzw. zu s e n dende Byte im A k k u m u l a t o r . Bild 6 - 1 2 zeigt das E m p f a n g s p r o g r a m m .

*100E *100F *1011 * 1013 * 1014 *1015

C5 0 6 00 0E 0 8 20 B7 FA 13 1 0

*1018 *101A * 101B * 101E *101F *1020

3E 0F 3D C 2 1A 1 0 20 B7 F A 13 1 0

*1023 * 1026 * 1027 *1028 *1029 *102A *102B *102C

CD 5A 1 0 20 07 78 1F 47 0D C 2 23 10

* 1 0 2 F CD *1032 78 * 1 0 3 3 C1 *1034 C9

Bild 6-12:

5A

10

0008 0009 000A 000B 000C 000D 000 E 000 F 0010 0011 0012 0013 0014 0015 0016 0017 0018 0019 001A 001B 001C 001D 001E 001F 00 2 0 0021 0022 0023

EMPFANGSUNTERPROGRAMM F U E R 4 8 0 0 BD >; B I L D 6 - 1 2 >EMPF PUSH B B C - R E G I S T E R RETTEN > B.00H DATENBYTE L0ESCHEN MVI B I T Z A E H L E R ANFANGSWERT > MVI C ,8 >EMPF1 RIM SID LESEN 4 TAKTE TESTEN > ORA A 4 TAKTE > JM EMPF1 WARTEN B I S LOW 10 T A K T E >; L E I T U N G LOW : F A L L E N D E F L A N K E S T A R T B I T ERKANNT > H A L B E B I T Z E I T WARTEN MVI A,15 7 TAKTE >EMPF2 DCR A 4 TAKTE ZAEHLER - 1 > JNZ EMPF2 B I S NULL ZAEHLEN 10 T A K T E STARTBIT ? > RIM 4 TAKTE > ORA A TESTEN 4 TAKTE JM > EMPF1 10 T A K T E WAR K E I N S T A R T B I T >; S C H L E I F E 52 T A K T E + 3 6 4 T A K T E B I T Z E = 4 1 6 T A K T E >EMPF3 CALL BITZE 18 T A K T E 3 6 4 T A K T E WARTEN > RIM 4 TAKTE BIT LESEN > RLC B I T NACH CARRY 4 TAKTE > M0V A,B B Y T E HOLEN 4 TAKTE > RAR 4 TAKTE NEUES B I T DAZU > MOV B,A 4 TAKTE NEUES B Y T E NACH B > DCR C 4 TAKTE BITZAEHLER -1 > JNZ EMPF3 10 T A K T E NEUES B I T L E S E N >; 8 B I T S EMPFANGEN S T O P - B I T S ABWARTEN > CALL BITZE 1 . S T O P - B I T ABWARTEN > A,B MOV BYTE NACH A K K U > POP B B C - R E G I S T E R ZURUECK > RET RUECKSPRUNG

Programmbeispiel: Empfangsprogramm

6.3 Softwaregesteuerte

serielle Datenübertragung

323

Das Empfangsprogramm e r w a r t e t acht Bit lange Daten mit zwei Stopbits ohne Paritätsbit mit einer f e s t e n Bitrate von 4800 Bit/sek. Die Bitrate wird durch einen Softwarefrequenzteiler (Unterprogramm BITZE) aus dem Prozessortakt von 2 MHz (Quarz 4 MHz) abgeleitet. Die Eingabe erfolgt über das werthöchste Bit des Interruptregisters mit dem Befehl RIM. Das Programm wartet in einer Schleife auf die fallende Flanke des Signals und beginnt dann nach einer halben Bitzeit mit dem Abtasten der Leitung.

*1035 *1036 *1037 * 1038 *1039 *103B *103D

F5 C5 D5 47 0E 40 16 09 79

*103E *103F * 1042 *1043 »1044 *1045 *1046 *1047

30 CD 5A 10 78 OF 47 B1 15 C2 3E 10

*104A * 104C *104D *1050 *1053 *1056 *1057 *1058 *1059

3E 30 CD CD CD D1 C1 F1 C9

CO 5A 10 5A 10 5A 10

0024 0025 0026 0027 0028 0029 002A 002B 002C 002D 002 E 002 F 0030 0031 0032 0033 0034 0035 0036 0037 0038 0039 003A 003B 003C 003D 003E

BILD 6-13 SENDEUNTERPROGRAMM FUER 4800 BD ZEICHEN RETTEN PUSH PSW >SEND BC-REGISTER RETTEN > PUSH B DE-REGISTER RETTEN > PUSH D ZEICHEN NACH B-REGISTER > MOV B,A C.40H 0100 0000 AUSGABE-MASKE > MVI > MVI D ,9 BITZAEHLER STARTBIT = 0 LADEN > MOV A,C SCHLEIFE 52 TAKTE + 36' TAKTE BITZE = 4 1 6 TAKTE >SEND1 SIM 4 TAKTE: B I T NACH S0D > CALL BITZE 18 TAKTE: 364 TAKTE WARTEN > MOV A,B 4 TAKTE: BYTE NACH AKKU 4 TAKTE: B I T NACH B7 > RRC B,A 4 TAKTE: BYTE NACH B-REGISTER > MOV 0RA > C 4 TAKTE: MASKE DAZU B6 = 1 4 TAKTE: BITZAEHLER - 1 > DCR D > JNZ SEND1 10 TAKTE: BIT AUSGEBEN 2 STOP-BITS AUSGEBEN > MVI A.0C0H 1100 0000 STOP-BIT = 1 SIM AUSGEBEN NACH S0D > > CALL BITZE 1. STOP-BIT 2. STOP-BIT > CALL BITZE > CALL BITZE 3. STOP-BIT > POP DE-REGISTER ZURUECK D > POP B BC-REGISTER ZURUECK PSW AKKU ZURUECK > POP > RET RUECKSPRUNG

Bild 6-13: Programmbeispiel: Sendeprogramm

Das in Bild 6 - 1 3 dargestellte Sendeprogramm sendet acht Datenbits mit zwei Stopbits ohne Paritätsbit mit einer festen Bitrate von 4800 Bit/sek. Die Ausgabe erfolgt über das werthöchste Bit des Interruptregisters mit dem SODAnschluß. Für die serielle Ausgabe enthält das werthöchste Bit des Akkumulators (Bit 7) das auszugebende Bit, Bit 6 muß 1 sein; die restlichen Bitpositionen werden 0 gesetzt.

*105A *105B *105D *105E *1061 * 1062 *1063 *1064 E0000

F5 3E 17 3D C2 5D 10 00 00 F1 C9

003 F 0040 0041 0042 0043 0044 0045 0046 0047 0048

>; BILD 6-14 UNTERPROGRAMM >BITZE PUSH PSW > MVI A,23 >BITZE1 DCR A > JNZ BITZE1 > NOP > NOP > POP PSW > RET > END

BITZEIT 364 TAKTE FUER 4800 BD 12 TAKTE AKKU RETTEN 7 TAKTE SCHLEIFENZAEHLER 4 TAKTE ZAEHLER - 1 10 TAKTE 23 x 14 - 3 = 319 4 TAKTE AUSGLEICH 4 TAKTE AUSGLEICH 10 TAKTE AKKU ZURUECK 10 TAKTE RUECKSPRUNG

Bild 6-14: Programmbeispiel: Warteprogramm Bitzeit

324

6 Serielle Datenübertragung

Das in Bild 6 - 1 4 d a r g e s t e l l t e Warteprogramm ist f ü r eine Bitrate von 4800 Bit/sek und einen Prozessortakt von 2 MHz (Quarz 4 MHz) p r o g r a m m i e r t . Bei 4800 Bit/sek (Baud) b e t r ä g t die Bitzeit 1/4800 = 208,3 ms. Bei 2 MHz Prozess o r t a k t sind dies gerundet 416 Takte. Die fallende Flanke des S t a r t b i t s synchronisiert Sender und Empfänger bei jedem Zeichen neu, so daß geringfügige Abweichungen zwischen dem Sende- und dem Empfangstakt zulässig sind.

6.4

Ein Terminalmonitor für das Testsystem

Das in Bild 6 - 1 5 vollständig abgedruckte Monitorprogramm befindet sich ab Adresse OOOOH im Festwertspeicher des Testsystems (Abschnitt 3.9). Als Bedienungsterminal diente ein Personal Computer (PC). Der Anhang zeigt ein Pascalprogramm für die Eingabe und Ausgabe von Daten über die Serienschnittstelle 8250 des PC sowie für die Dateiverwaltung und Druckerausgabe. Nach dem Start des Monitorprogramms mit Reset erscheint eine Eingabemarke, hinter der der Benutzer Kommandobuchstaben und Steuergrößen eingibt. Das Kommando F (Fill, fülle) e r w a r t e t die Anfangs- und die Endadresse eines Speicherbereiches sowie ein Byte, das in den Bereich gespeichert wird. Das Kommando D (Display, Dump) gibt den Inhalt eines Bereiches von einer Anfangsadresse bis zu einer Endadresse aus. Es erscheinen 16 Bytes auf einer Zeile, einmal hexadezimal und dann nochmals als ASCII-Zeichen. Das Kommando G (Go, gehe) s t a r t e t ein Programm von einer S t a r t a d r e s s e . Das Kommando S (Substitute, schreibe) dient zum Anzeigen und Ändern von Speicherbytes ab einer Anfangsadresse. Ein Leerzeichen erhöht die Adresse, ein Minuszeichen vermindert sie. Nach der Eingabe eines neuen Bytes wird die Adresse automatisch um 1 erhöht. Das Kommando P (Port, Peripherie) g r e i f t mit IN- und OUT-Befehlen auf die Ports zu und dient zum Lesen und Ausgeben von Peripheriedaten. Das Kommando L (Load, lade) liest Daten aus einer Datei in einem H e x a f o r mat vom Terminal und legt sie im Speicher ab. Das Kommando A (Abspeichern) sendet einen Speicherbereich im H e x a f o r m a t an das Terminal; dort können die Daten als Datei abgelegt werden.

324

6 Serielle Datenübertragung

Das in Bild 6 - 1 4 d a r g e s t e l l t e Warteprogramm ist f ü r eine Bitrate von 4800 Bit/sek und einen Prozessortakt von 2 MHz (Quarz 4 MHz) p r o g r a m m i e r t . Bei 4800 Bit/sek (Baud) b e t r ä g t die Bitzeit 1/4800 = 208,3 ms. Bei 2 MHz Prozess o r t a k t sind dies gerundet 416 Takte. Die fallende Flanke des S t a r t b i t s synchronisiert Sender und Empfänger bei jedem Zeichen neu, so daß geringfügige Abweichungen zwischen dem Sende- und dem Empfangstakt zulässig sind.

6.4

Ein Terminalmonitor für das Testsystem

Das in Bild 6 - 1 5 vollständig abgedruckte Monitorprogramm befindet sich ab Adresse OOOOH im Festwertspeicher des Testsystems (Abschnitt 3.9). Als Bedienungsterminal diente ein Personal Computer (PC). Der Anhang zeigt ein Pascalprogramm für die Eingabe und Ausgabe von Daten über die Serienschnittstelle 8250 des PC sowie für die Dateiverwaltung und Druckerausgabe. Nach dem Start des Monitorprogramms mit Reset erscheint eine Eingabemarke, hinter der der Benutzer Kommandobuchstaben und Steuergrößen eingibt. Das Kommando F (Fill, fülle) e r w a r t e t die Anfangs- und die Endadresse eines Speicherbereiches sowie ein Byte, das in den Bereich gespeichert wird. Das Kommando D (Display, Dump) gibt den Inhalt eines Bereiches von einer Anfangsadresse bis zu einer Endadresse aus. Es erscheinen 16 Bytes auf einer Zeile, einmal hexadezimal und dann nochmals als ASCII-Zeichen. Das Kommando G (Go, gehe) s t a r t e t ein Programm von einer S t a r t a d r e s s e . Das Kommando S (Substitute, schreibe) dient zum Anzeigen und Ändern von Speicherbytes ab einer Anfangsadresse. Ein Leerzeichen erhöht die Adresse, ein Minuszeichen vermindert sie. Nach der Eingabe eines neuen Bytes wird die Adresse automatisch um 1 erhöht. Das Kommando P (Port, Peripherie) g r e i f t mit IN- und OUT-Befehlen auf die Ports zu und dient zum Lesen und Ausgeben von Peripheriedaten. Das Kommando L (Load, lade) liest Daten aus einer Datei in einem H e x a f o r mat vom Terminal und legt sie im Speicher ab. Das Kommando A (Abspeichern) sendet einen Speicherbereich im H e x a f o r m a t an das Terminal; dort können die Daten als Datei abgelegt werden.

6.4 Ein Terminalmonitor für das Testsystem

LOOOO LOOOO LOOOO LOOOO 00 LOOOl 31 L0004 C3 L0007 FF LOOOS C3 LOOOB FF LOOIO C3 LOO 13 FF 1,0018 C3 L001B FF L0020 C3 L0023 FF L0024 C3 L0027 FF L0028 C3 L002B FF L002C C3 L002F FF L0030 C3 L0033 FF L0034 C3 L0037 FF L0038 C3 L003B FF L003C C3 L003F FF L0040 3E L0042 21 L0045 36 L0047 23 L0048 36 L004A 23 L004B 36 L004D 23 L004E 36 L0050 23 L0051 3D L0052 C2 L0055 LOO 5 5 CD L0058 CD L005B 3E L005D CD L0060 CD L0063 FE L0065 CR L0068 FE L006A CR L006D FE L006F CR L0072 FE L0074 CA L0077 FE L0079 CA L007C FE L007E CA L0081 FE L0083 CA L0086 3E L0088 CD L008B C3 LOOSE L008E CD L0091 DA L0094 E5

00 FF 40 00 08 FF 10 FF 18 FF 20

FF FF FF FF

24 FF 28 FF 2C FF 30 FF 34 FF 38 FF 3C FF 10 00 FF 00 C3 00 00

45 00 6B 2C 3E 89 95 46 8E 44 AC 47 OF 53 17 50 4F 4C 92 41 F6 3F 89 58

03 03 03 03 00 00 Ol Ol Ol Ol Ol 03 00

OE 03 86 00

; STARTADRESSE #001 > ORG OH #002 > LOAD 1000H I. ADEADRESSE #003>; BILD 6-15 TERllINALtlONITOR FUER PC-SYSTEH 3 . 9 #004>RST0 NOP TU NIX #005> LXI SP,OFFOOH STAPEL ANLEGEN #006> JHP START INTERRUPTTABELLE #007 > DB OFFH UEBERSPRINGEN #008>RST1 JHP OFFO8H UHLEITUNG NACH RAH #009 > DB OFFH, OFFH, OFFH, OFFH, OFFH #010>RST2 UHLEITUNG NACH RAH JHP 0FF10H #011> DB OFFH, OFFH, OFFH, OFFH, OFFH #012>RST3 JHP 0FF18H UHLEITUNG NACH RAH #013> DB OFFH, OFFH, OFFH, OFFH, OFFH #014>RST4 JHP UHLEITUNG NACH RAH 0FF20H #015> DB OFFH #016>TRAP UHLEITUNG NACH RAH JHP 0FF24H #017> DB OFFH 0FF28H UHLEITUNG NACH RAH #018>RST5 JHP #019> OFFH DB #020>RST55 JHP 0FF2CH UHLEITUNG NACH RAH #021 > DB OFFH #022>RST6 JHP 0FF30H UHLEITUNG NACH RAH #023> DB OFFH #024>RST65 JHP 0FF34H UHLEITUNG NACH RAH #025 > DB OFFH #026>RST7 UHLEITUNG NACH RAH JHP 0FF38H #027> DB OFFH #028>RST75 JHP 0FF3CH UMLEITUNG NACH RAH #029> DB OFFH #030>START HVI A, 16 ZAEHLER 16 INTERRUPTEINSPR H,OFFOOH ADRESSE UHLEITUNGSBEREICH #031> LXI #032>STRRT1 n v i H.OOH CODE NOP #033> INX H #034> HVI H.0C3H CODE JHP #035> INX H H.OOH ZIELADRESSE LOW #036> HVI #037> INX H HVI H,OOH ZIELADRESSE HIGH #038 > H #039 > INX ZAEHLER - 1 #040> DCR A #041> JNZ START1 #042>; HONITOR - HAUPTSCHLEIFE FUEHRT KOHHANBOS AUS INIT 8250 INITIALISIEREN #043 > CALL NEUE ZEILE #044> LOOP CALL NZEI EINGABEHARKE HVI A, •>' #045 > CALL SEND AUSGEBEN #046 > #047 > ZEICHEN LESEN HIT ECHO CALL EHPFE ,F, FUELL-FUNKTION? #048 > CPI #049> FFUN JA JZ DUHP-FUNKTION? CPI #050> 'D' #051> JZ DFUN JA GO-fUNKTION? •G' #052> CPI JR #053> JZ GFUN SPEICHER-FUNKTION? #054> CPI 'S' JR JZ SFUN #055> , p . PORT-FUNKTION? CPI #056> #057> JZ PFUN JA LADE-FUNKTION? #058> CPI •L' #059> JZ LFUN JA CPI AUSGABE-FUNKTION? #060> 'A' JZ AFUN #061> FEHLERMELDUNG #062>ERROR HVI A, ' ? ' #063 > CALL SEND ? AUSGEBEN TESTSCHLEIFE JHP LOOP #064> #065>; FUELLEN EINES SPEICHERBEREICHES HIT BYTES DE = ENDE HL = ANFANG #066>FFUN CALL EBER #067> JC ERROR C=L: EINGABEFEHLER PUSH II HL HIT ADRESSE RETTEN #06 8 >

325

326

6 Serielle Datenübertragung L0095 L0098 L009B L009C L009D L009E L009F L00A2 L00A5 LOOA8 L00A9 LOOAC LOOAC LOOAF LOOB2 LOOB3 LOOB5 L00B6 L00B7 L00B9 LOOBA LOOBC LOOBF LOOCl L00C2 LOÛC5 L00C6 L00C7 LOOCA LOOCB LOOCD LOOCE LOODO LOODl LOOD3 L00D6 L00D8 LOODB LOODD LOOEO LOOE1 LÛOE3 L00E6 L00E8 LOOEB LOOEC I.OOED LOOFO LOOF1 L00F4 L00F7 LOOF8 L00F9 LOOFC LOOFF L0101 LOI 04 L0107 LOI 09 LOIOC L010F LOI OF LOI 12 LOllS L0116 L0117 LOI 17 LOUA

CD DA 7D El 77 BE C4 CD CA 23 C3 CD DA 7D E6 6F 7B F6 5F 06 CD OE 7E CD 23 OD C2 2B OE 7D E6 6F 3E CD 3E CD 3E CD 7E FE D2 3E CD 23 OD C2 2B CD CA 23 05 C2 CD 3E CD CD FE CA C3 CD DA E5 C9 CD DA

AA 02 #069> CALL EINH FUELLBYTE 86 00 #070 > JC ERROR C=l: EINGABEFEHLER #071> HOV A,L A = BYTE #07 2 > POP H HL HIT ADRESSE ZURUECK #073>FFUN1 HOV H,A BYTE SPEICHERN #074> CUP H GESPEICHERT? 1C 03 #07 5 > NEIN: SPEICHERFEHLER CNZ RAHER 81 02 #076>FFfJN2 CALL DEVHL ENDWERT - LAUFWERT 58 00 #07 7 > JZ LOOP GLEICH: FERTIG #078> INX UNGLEICH: ADRESSE + 1 H 9D 00 #079> JHP FFUN1 WEITER #080>; DUHP EINES SPEICHERBEREICHES HIT ANHALTEN OE 03 #081>DFUN DE = ENDE HL = ANFANG CALL EBER 86 00 #08 2 > JC ERROR C=l: FEHLER #08 3 > nov A,L LOW-ANFANG BEGRADIGEN FO #084> AN1 OFOH HASKE; 1111 0000 #085> HOV L,A XXXX XXXX XXXX 0000 #066 > HOV LOW-ENDE 1 SETZEN A,E #087 > OF ORI OFH KONSTANTE 0000 1111 #088> HOV E,A XXXX XXXX XXXX 1111 10 #089>DFUN1 HVI 16 ZEILEN/SEITE B, 16 4F 03 #090>DFUN2 CALL NADD NEUE ZEILE UND ADRESSE 10 #091 > 16 BYTES/ZEILE HVI C, 16 #092>DFUN3 HOV A,H BYTE LESEN 39 03 #093 > CALL LBYT LZ UND BYTE AUSGEBEN #094> INX H NAECHSTE ADRESSE #095 > DCR ZEICHENZ AEHLER - 1 C Cl 00 #096> DFUN3 16 BYTES AUF EINER ZEILE JNZ #097 > DCX ADRESSE ZURUECK H 10 #098 > HVI 16 ZEICHEN/ZEILE HINTER BYTES C, 16 #099> HOV A,L ADRESSE ZURUECK #100> FO ANI OFOH HASKE 1111 0000 #101> HOV L,A ADRESSE XXXX XXXX XXXX 0000 #102> LEERZEICHEN 20 HVI A, ' ' 03 #103> 89 CALL SEND 2D #104> HVI A, TRENNZEICHEN 89 03 #105> CALL SEND 20 #106> HVI A, ' ' LEERZEICHEN 89 03 #107> CALL SEND #108>DFUN4 HOV BYTE LESEN A,H ' ' #109> 20 CPI STEUERZEICHEN ? ES 00 #110> JNC DFUN5 NEIN: BLEIBT HVI 2E JA: DURCH PUNKT ERSETZT #111> A, ' . ' 89 03 #112>DFUN5 CALL SEND ALS ZEICHEN AUSGEBEN INX #113> H NAECHSTE ADRESSE #114> DCR C ZEICHENZAEHLER - 1 EO 00 #115> JNZ DFUN4 16 ZEICHEN AUF EINER ZEILE #116> DCX H ADRESSE KORRIGIEREN 81 02 #117> CALL DEVHL ENDADRESSE - LAUFADRESSE 58 00 #118> JZ LOOP GLEICH: FERTIG #119>DFUN6 INX H ADRESSE + 1 #120> DCR B ZEILENZAEHLER - 1 BC 00 #121 > JNZ DFUN2 16 BYTES AUF EINER SEITE 2C 03 #122) CALL NZEI NEUE ZEILE 2D #123) HVI A, '-' EINGABEHARKE 89 03 #124> CALL SEND AUSGEBEN 7F 03 #125> CALL ETLPF ANTWORT LESEN • ' 20 #126> CPI LEERZEICHEN ? BA 00 #127> JZ DFUN1 JA: WEITER 58 00 #128> JHP LOOP NEIN: ABBRUCH #129>; GO = PROGRAHH STARTEN OHNE REGISTERVERWALTUNG AA 02 #130>GFUH CALL EINH STARTADRESSE LADEN 00 86 #131/ JC ERROR EINGABEFEHLER #132> PUSH H STARTADRESSE AUF STAPEL #133> RET POP PC: PROGRAHH STARTEN #134> ; SPEICHERBYTES ANZEIGEN UND AENDERN AA 02 #135>SFUN CALL EINH ANFANGSADRESSE LADEN 86 00 #136> JC ERROR EINGABEFEHLER

6.4 Ein Terminalmonitor

L011D LO 120 L0121 LO 124 L0126 L0129 L012C L012F L0131 L0134 L0136 L0139 L013A LOI 3D L013F L0142 L0143 LO 146 L0147 L0148 L014B L014C L014F L014F L0152 LOI 55 L0158 L0159 L015C L015E L0161 L0164 L0167 L0169 L016C L016E L0171 L0172 L0175 L0177 L017A L017B L017E LO 180 L0183 L0186 LOI 89 L018C LO 18F L0192 L0192 L0195 L0197 L019A L019D L01A0 LOI A3 L01A6 L01A7 L01AA L01AD L01AE L01B1 L01B4 L01B5 L01B8 LO IBA L01BD

CD 7E CD 3E CD CD D2 FE CA FE C2 23 C3 FE C2 2B C3 77 BE C4 23 C3

4F 03 #137>SFUN1 #138> 39 03 #139> 2D #140> 89 03 #141> F5 02 #142> 46 01 #143> OD #144> 58 00 #145> 20 #146> 3D 01 #147> #148> 1D 01 #149> 2D #150>SFUN2 86 00 #151> #152> 1D 01 #153> #154>SFUN3

CD DA CD 7D CD 3E CD CD D2 FE CA FE C2 2C C3 FE C2 2D C3 FE C2 CD CD C3 CD C3

AA 02 86 00 2C 03

CD FE C2 CD CD CD DA 47 CD DA 67 CD DA 6F CD FE C2 78

1C 03 1D 01

40 2D 89 F5 8C OD 58 2B 75

03 03 02 01 00 01

55 01 2D 7E 01 55 20 86 90 39 55 97 55 7F 3A 92 2C 89 F5 EO

01 00 02 03 01 02 01 03 (11 03 03 02 01

F5 02 EO 01 F5 02 EO 01 F5 02 00 DB 01

fir

das Testsystem

CALL NADD NEUE ZEILE UND ADRESSE ALTEN INHALT LADEN HOV A,H CALL LBYT LZ UND BYTE AUSGEBEN EINGABEHARKE nvi A, AUSGEBEN CALL SEND CALL EBYT ANTWORT LESEN MIT ECHO C=0: WERT GELESEN JNC SFUN3 ODH CR = WAGENRUECKLAUF? CPI LOOP JA: ENDE DES FUNKTION JZ ' ' LEERZEICHEN ? CPI NEIN: WEITER JNZ SFUN2 JA: ADRESSE + 1 INX H JMP SFUN1 WEITER i _ i HINUSZEICHEN ? CPI ERROR NEIN: EINGABEFEHLER JNZ JA: ADRESSE - 1 DCX H WEITER JHP SFtJNl M,A BYTE SPEICHERN nov PRUEFEN #155> CUP M RAHER UNGLEICH: KEIN RAH #156> CNZ GLEICH: ADRESSE + 1 #157> INX H #158> JHP SFUN1 WEITER #159>; PORTBYTES ANZEIGEN UND AUSGEBEN PORTADRESSE NACH L LESEN #160>PFUN CALL EINH JC ERROR C=l: FEHLER #161> #162>PFUH1 CALL NZEI NEUE ZEILE #163> MOV A,L PORTADRESSE CALL BYTE AUSGEBEN #164> EINGABEHARKE #165> MVI A, '-' #166> CALL SEND AUSGEBEN #167> CALL EBYT ANTWORT LESEN ECHO #168> JNC PFUN4 C=0: WERT #169> CPI ODH CR ? #170> LOOP JZ JA: ABBRUCH ' + ' CPI PLUSZEICHEN ? #171> #172> JNZ PFUN2 NEIN: WEITER #173> INR L JA: ADRESSE + 1 PFUN1 #174> JHP ' -1 #175>PFUH2 CPI HINUSZEICHEN ? #176> JNZ PFUN3 NEIN: WEITER #177> DCR L ADRESSE - 1 #178> JMP PFUN1 ' ' #179>PFUN3 CPI LEERZEICHEN ? #180> ERROR JNZ NEIN: EINGABEFEHLER #181> CALL IN JA: PORT LESEN #182> CALL LBYT LZ UND INHALT AUSGEBEN PFUN1 #183> JHP PORTADRESSE BLEIBT #184>PFUK4 CALL OUT AUSGEBEN #185> JMP PFUN1 PORTADDRESSE BLEIBT #186> ; LADEN EINES SPEICHERBEREICHES VOH TERMINAL #187>LFIJN CALL EHPF ZEICHEN LESEN #188> CPI ' : ' SATZANFANGSHARKE ? #189> JNZ LFUN NEIN: WARTEN #190> CALL NZEI NEUE ZEILE CALL SEND ECHO #191 > ZAHL DER BYTES #192> CALL EBYT EINGABEFEHLER #193> JC LFUN5 #194> MOV B,A B = BYTEZAEHLER #195> HIGH-ADRESSE CALL EBYT #196> LFUN 5 EINGABEFEHLER JC #197) MOV H,A #198> LOW-ADRESSE CALL EBYT EINGABEADRESSE JC LFUN5 #199> #200> MOV L,A #201 > CALL EBYT SATZTYP CPI #202> OOH DATENSATZ? JNZ #203> LFUN4 NEIN: WEITER A.B JA: SCHLEIFENKONTROLLE #204>LFUN1 HOV

327

328

6 Serielle

L01BE L01BF L01C2 L01C5

Datenübertragung

#205> B7 CA D2 O l # 2 0 6 > CD F 5 0 2 # 2 0 7 > DA EO O l # 2 0 8 >

L01C8 77 #209> #210> L01C9 BE L O I C A C4 I C 0 3 # 2 1 1 > LOICD 23 #212>LFUN2 #213> LOICE 05

ORA

A

JZ CALL

LFUN3 EBYT LFUN5

JC HOV

FERTIG N E I N : BYTE LESEN EINGABEFEHLER

H,A

SPEICHERN

CI1P CNZ

H

KONTROLLE

RAHER

INX

SPEICHERFEHLER ADRESSE + 1

DCR

H B

L O I C F C3 BD O l # 2 1 4 > L01D2 CD F 5 0 2 # 2 1 5 > L F U H 3

JHP CALL

LFUN1 EBYT

WEITER PRUEFSUHHE N I C H T AUSWERTEN

L01D5 DA EO O l L01D8 C3 9 2 O l

#216> #217>

JC JHP

LFUN5 LFUN

EINGABEFEHLER

L01DB FE O l

#218>LFUN4 #219>

CPI

01H

ENDES A T Z ?

JZ

LFUN6

JA:

mri

A, • ? •

CALL JHP CALL

SEND LFUN

EINGABEFEHLERHARKE AUSGEBEN

EBYT

NEUEN SATZ L E T Z T E PRUEFSUHHE LESEN EINGABE BEENDET: FEHLERHARKE

LOIDD CA E8 O l LOIEO 3E 3F #220>LFUN5 L01E2 CD 8 9 0 3 # 2 2 1 > L01E5 C3 9 2 O l # 2 2 2 > L01E8 CD F5 0 2 # 2 2 3 > L F U N 6 LOIEB D2 58 0 0 # 2 2 4 >

JNC

LOIEE 3E 3F #225> LOIFO CD 8 9 0 3 # 2 2 6 > L 0 1 F 3 C3 58 0 0 # 2 2 7 > #228>; L01F6

HVI

LOOP A, • ? '

CALL

SEND

L 0 2 0 1 CD 7F 0 3 # 2 3 3 > L 0 2 0 4 FE OD #234>

CALL CPI

L 0 2 0 6 C2 86 0 0 # 2 3 5 > L 0 2 0 9 CD 2C 0 3 # 2 3 6 > L020C E5 #237>

CALL PIJSH

L020D 7C L020E 2F

#238> #239>

HOV CHA

L 0 2 0 F 67 L 0 2 1 0 7D

#240>

HOV HOV

2F

#241 > #242>

L 0 2 1 2 6F L 0 2 1 3 23

#243> #244>

L 0 2 1 4 19

#245>

L 0 2 1 5 EB L 0 2 1 6 13 L0217 E l

ZAEHLER -

1

NEUER SATZ PRUEFSUHHE LESEN

HAUPTSCHLEIFE

JHP LOOP F E R T I G : HAUPTSCHLEIFE AUSSENDEN EINES SPEICHERBEREICHES ZUH TERHINAL CALL L 0 1 F 6 CD OE 0 3 # 2 2 9 > A F Ü N EBER DE = ENDE HL = ANFANG JC ERROR L 0 1 F 9 DA 86 0 0 # 2 3 0 > EINGABEFEHLER L O I F C 3E 2D #231 > HVI A, EINGABEHARKE L O I F E CD 8 9 03 # 2 3 2 > CALL SEND AUSGEBEN

L0211

JNZ

EHPF ODH ERROR NZEI H A,H

AUF START H I T CR WARTEN CR = START K E I N S T A R T : ABBRUCH NEUE Z E I L E HL RETTEN H 1ER KOHPLEHENT

H, A A,L

L

INX DAD

L,A H D

HL = 2ER KOHPLEHENT - H L t DE => ENDE - ANFANG

#246 > #247>

XCHG INX

D

DE = ZAHL DER BYTES DIFFERENZ + 1

#248>

POP

CHA HOV

1ER KOHPLEHENT

L 0 2 1 8 3E 3A #249>AFUN1 L021A CD 89 0 3 # 2 5 0 >

HVI

H A, ' : 1

CALL

SEND

SATZANFANGSHARKE AUSGEBEN

L021D 7A L021E B3

HOV ORA

A,D E

TEST AUF ENDE B E I BYTEZAEHLER =

JZ HVI

AFUN4 B, 16

ENDESATZ AUSGEBEN

C,0

ZAEHLER FUER SATZ PRUEFSUHHE DE PRUEFEN UND VERHINDERN

#251>

#252> L 0 2 1 F CA 5E 0 2 # 2 5 3 > L 0 2 2 2 06 10 #254> L 0 2 2 4 OE 0 0

#255 >

HVI

L 0 2 2 6 7B L 0 2 2 7 D6 10 1.0229 5F L022A 7A

#256> #257>

HOV SUI

A,E 16

#258>

HOV

E,A

#259> #260>

HOV

A,D 0

L022B DE 0 0 L022D 57 L 0 2 2 E D2 38 0 2 L 0 2 3 1 7B L 0 2 3 2 C6 10 L 0 2 3 4 47 L 0 2 3 5 16 0 0 L 0 2 3 7 5A L0238 78 L 0 2 3 9 CD 7 9 0 2 L023C 7C L023D CD 7 9 02 L 0 2 4 0 7D

#261>

SBI HOV

#262> #263>

JNC HOV

#264> #265 > #266> #267 > #268>AFUN2 #269> #270> #271> #272>

ADI HOV HVI HOV HOV CALL HOV CALL HOV

HL

= LAUFENDE BYTEADRESSE

0

CARRY ABZIEHEN

D,A AFUN2 A,E 16

NICHT LETZTER LETZTER SATZ

SATZ

B, A D, 0 E,D

BYTEZAEHLER LETZTER ZAEHLER LOESCHEN DE = 0

A,B AFUN6

SATZLAENGE

A,H AFUN6

HIGH-ADRESSE

A,L

I.OW-ADRESSE

SATZLAENGE KORRIGIEREN SATZ

6.4 Ein Terminalmonitor fur das L0241 L0244 L0246 L0249 L024A L024D L024E L024F L0252 L0253 L0254 L0255 L0258 L025B L025E L0260 L0262 L0265 L0266 L0269 LÛ26B L026E L0270 L0273 L0276 L0279 L027A L027B L027C L027D L0280 L0281 L0281 L0282 L0283 L0284 L0285 LÛ288 L0289 L028A L028B L028C L028D L0290 L0290 L0291 L0292 L0294 L0297 L0298 L0299 L029B L029C L029D L029E LÛ2AÛ L02A2 L02A3 L02A6 L02A7 L02A8 L02A9 L02AA L02AA L02AC LÛ2AF L02B1 L02B4

CD 3E CD 7E CD 23 05 C2 79 2F 3C CD CD C3 16 3E CD 15 C2 3E CD 3E CD CD C3 F5 81 4F Fl CD C9 C5 47 7A BC CA 78 CL C9 7B BD C3 E5 65 2E C3 E5 65 2E E5 E5 El 2E 26 E3 21 39 33 33 E9 3E CD 3E CD 3E

Testsystem

79 02 #273> CALL AFUN6 00 #274> nvi A, 0 DATENSATZTYP 79 02 #275> CALL AFUN6 #276>AFUN3 MOV A,n DATENBYTE 79 02 #277> CALL AFUN6 #278> INX H ADRESSE + 1 #279> DCR B BYTEZAEHLER - 1 49 02 #280> JNZ AFUN3 #281 > tiov A,C PRUEFSUMME *282> CMA 1ER KOMPLEMENT #283> I MR A 2ER KOMPLEMENT 40 03 #284> CALL BYTE AUSGEBEN 2C 03 #285> CALL NZEI CR LF ANHAENGEN 18 02 #286> JHP AFUN1 NAECHSTER SATZ 06 #287>AFIJN4 BVI D,6 6 NULLEN 30 #286> nvi A, '0' 89 03 #289>AFUN5 CALL SEND LAENGE 00 #290> DCR D ADRESSE 00 00 62 02 #291 > JNZ AJUN5 01 #292 > HVI A.01H SATZTYP ENDEHARKE 40 03 #293 > CALL BYTE FF #294/ HVI PRUEFSUMME A, OFFH 40 03 #295 > CALL BYTE AUSGEBEN 2C 03 #296> CALL NZEI CR LF 58 00 #297> JHP LOOP FERTIG #298>AFUN6 PUSH PSW BYTE RETTEN #299> ADD C ZUR PRUEFSUMME #300> nov C,A PRUEFSUMME ZURUECK #301> POP PSW BYTE ZURUECK 40 03 #302 > CALL BYTE SENDEN #303 > RET #304> ; VERGLEICH DE - HL: C LJND Z VERAENDERT #305>DEVHL PUSH B BC RETTEN #306> HOV B,A AKKU RETTEN #307> nov A,D HIGH-BYTES VERGLEICHEN #308> CUP H D - H 8B 02 #309> JZ DEVHL2 GLEICH: LOW VERGLEICHEN #310>DEVHL1 nov A, B AKKU ZURUECK #311> POP B BC ZURUECK #312> RET C UND Z VERGLEICHEN DE #313>DEVHL2 nov A,E LOW-BYTES VERGLEICHEN #314> CMP L E - L 88 02 #315> JHP DEVHL1 #316>; IN- UND OUT-BEFEHLE AUSFUEHREN L = PORTADRESSE #317>IN PUSH H HL RETTEN #318> nov H,I. H = PORTADRESSE DB #319> nvi L.ODBH L = CODE IN-BEFEHL 9B 02 #320> JHP 0UT1 #321>OUT PUSH H HL RETTEN #322> nov H, L H = PORTADRESSE D3 #323> MVI L.0D3H L = CODE OUT-BEFEHL #324>0UT1 PUSH H PORT + CODE #325> PUSH H PORT + CODE #326 > POP H SP - 2 El #327> MVI L.0E1H L = CODE POP H #328) C9 MVI H.0C9H H = CODE RET #329> RET + POP H XTIIL FE FF #330> LXI H,-2 #331> SP HL = SP ZEIGT AUF CODE DAD #332> INX SP #333> SP SP ZEIGT AUF HL IM STAPEL INX #334> START DER 4 BEFEHLE PCHL #335>; HEXADEZIMALE EINGABEU11TERPR0GRAMBE 20 #336>EINH MVI A, ' ' HL = HEXAZAHL OL:FEHLER LEESZEICHEN AUSGEBEN 89 03 #337> CALL SEND 2D #338> nvi A, EINGABEMARKE 89 03 #339> AUSGEBEN CALL SEND 3E #340> nvi EINGABEMARKE A, ' > '

329

330

6 Serielle

L02B6 L02B9 L02BC L02BF L02C1 L02C4 L02C6 L02C9 L02CA L02CB L02CE L02D1 L02D2 L02D3 L02D4 L02D5 L02D6 L02D7 L02D8 L02DB L02DD L02DE L02EO L02E3 L02E5 L02E6 L02E8 L02EA L02EB L02ED L02F0 L02F2 L02F3 L02F4 L02F5 L02FÖ L02FB L02FC L02FD L02FE L02FF L0300 L0301 L0302 L0305 L0308 I.030B L030C L030D L030E L0311 L0312 L0313 L0316 L0317 L0318 L031B L031C L031F L0320 L0322 LÜ325 L0327 L032A L032B I.032C L032C L032D

CD 21 CD FE D2 3E CD B7 C9 CD CD D8 29 29 29 29 85 6F C3 FE D8 FE D2 D6 C9 E6 FE D8 FE D2 D6 C9 37 C9 CD CD D8 07 07 07 07 C5 47 CD CD DA B0 C1 C9 CD D8 EB CD D8 EB CD C9 CD F5 3E CD 3E CD Fl C9

89 00 7F 21 CB 20 89 89 DB

BC 30 3A E6 30 DF 41 47 F3 37

95 DB

95 DB OC

AA AA 81 4F 23 89 3F 89

F5 3E OD

Datenübertragung

03 #341 > CALL SEND 00 #342> H,0 LXI 03 #343>EINH1 CALL EIIPF #344> CPI 21H JNC EINH2 02 #345> #346> «VI A, ' ' 03 #347 > CALL SEND #348 > A ORA #349 > RET 03 #350>EINH2 CALL SEND 02 #351> CALL DECOD #352> RC #353> H DAD #354> DAD H #355> DAD H #356> DAD H #357> ADD L #358> MOV L,A 02 #359> EINH1 JHP #360>DECOD CPI '0' #361> RC ' : ' #362> CPI 02 #363> JNC DECOD1 #364> SUI 30H #365> RET #366>DEC0D1 ANI ODFH CPI #367> 'A' #368> RC CPI 'G' #369> JNC 02 #370> DEC0D2 #371> SUI 37H #372> RET #373>DECOD2 STC #374> RET 03 #375>EBYT CALL EHPFE 02 #376> CALL DECOD #377> RC #378) RLC #379> RLC #380> RLC #381> RLC #382> PUSH B #383> 110V B,A 03 #384> CALL EHPFE CALL DECOD 02 #385> 03 #386> JC EBYT1 #387> ORA B #388>EBYT1 POP B #389> RET 02 #3 90 > EBER CALL EINH #391> RC #392> XCHG 02 #393> CALL EINH #394> RC #395> XCHG 02 #396> CALL DEVHL #397> RET 03 #398>RAHER CALL NADD #399) PUSH PSW #400> nvi A, '#' 03 #401 > CALL SEND #402 > MV I A, '?' CALL SEND 03 #403 > #404> POP PSW #405 > RET #406 > ; AUSGABEUNTERPROGRAHHE #407>NZEI PUSH PSW A.ODH tivi #408 >

AUSGEBEN HL HIT NULL VORBESETZEN ZEICHEN LESEN ENDE: LZ ODER STEUERZEICHEN NEIN: AUSWERTEN JA: LZ ALS ECHO AUSGEBEN C = 0: KEIN FEHLER ZEICHEN IH ECHO AUSGEBEN ZEICHEN DECODIEREH C = 1: FEHLERABBRUCH ZAHL 4 BIT LINKS SCHIEBEN

4 NEUE BITPOSITIONEN LINKS EINBAUEN NAECHSTES ZEICHEN LESEN ZEICHEN IH AKKU DECODIEREN KLEINER ALS '0': C=l: FEHLER GROESSER ALS '9'? JA: BUCHSTABEN UNTERSUCHEN ZIFFER DECODIEREN C=0: KEIN FEHLER 1101 1111 KLEIN NACH GROSS KLEINER ALS 'A'? JA: C=1: FEHLERAUSGANG GROESSER ALS F? JA: EINGABEFEHLER GROSSBUCHSTABE DECODIEREN C=0: KEIN FEHLES C=1: FEHLERAUSGANG 1. ZEICHEN ECHO DECODIEREN EINGABEFEHLER 4 BIT LINKS

BC RETTEN 2. ZEICHEN ECHO DECODIEREN EINGABEFEHLER BYTE ZUSAMMENSETZEN BC ZURUECK FERTIG HL = ANFANGSADRESSE EINGABEFEHLER HL = ENDADRESSE EINGABEFEHLER DE = ENDE HL = ANFANG ENDE - ANFANG AUSWERTUNG BEI AUFRUF RAH-FEHLEHADRESSE AKKU RETTEN FEHLERHARKE

AKKU ZURUECK NEUE ZEILE: AKKU RETTEN CR

6.4 Ein Terminalmonitor

L032F CD L0332 3E L0334 CD L0337 Fl L0338 C9 L0339 F5 L033A 3E L033C CD L033F Fl L0340 F5 LÓ341 CD L0344 CD L0347 Fl LO 348 CD L034B CD L034E C9 L034F CD L0352 F5 L0353 7C L0354 CD L0357 7D L0358 CD L035B Fl L035C C9 L035D OF L035E OF L035F OF L0360 OF L0361 E6 L0363 C6 L0365 FE L0367 D8 L0368 C6 L036A C9 L036B L036B 3E L036D D3 L036F 21 L0372 7D L0373 D3 L0375 7C L0376 D3 L0378 3E L037A D3 L037C DB L037E C9 L037F DB L0381 E6 L0383 CA L0386 DB L0388 C9 L0389 F5 L038A DB L038C E6 L038E CA L0391 Fl L0392 D3 L0394 C9 L0395 CD L0398 CD L039B C9 L039C

89 03 #409> OA #410> 89 03 #411> #412> #413 > #414>LBYT 20 #415 > 89 03 #416> #417> #418>BYTE 5D 03 #419> 89 03 #420> #421 > 61 03 #422> 89 03 #423> #424> 2C 03 #425>NADD #426> #427> 39 03 #428> #429> 40 03 #430> #431> #432 > #433>ULI #434> #435> #436> OF #437>URE 30 #438 > #439> 3A #440> 07 #441> #442) #443>; 8250 80 #444 >INIT 03 #445 > 18 00 #446> #447 > 00 #448 > #449 > 01 #450> 07 #451> 03 #452> 00 #453> #454> 05 #455>EHPF 01 #456> 7F 03 #457 > 00 #458> #459> #460>SEND 05 #461>SEND1 20 #46 2 > 8A 03 #463 > #464> 00 #46 5 > #466> 7F 03 #467>EBPFE 89 03 #46 8 > #469> #470 >

CALL SEND nvi A, OAH CALL SEND POP PSW RET PUSH PSW nvi A, ' ' CALL SEND POP PSW PUSH PSW CALL ULI CALL SEND POP PSW CALL URE CALL SEND RET CALL NZEI PUSH PSW MOV A,H CALL LBYT 110V A,L CALL BYTE POP PSW RET RRC RRC RRC RRC AN I OFH ADI 3 OH CP I 3 AH RC ADI 07H RET INITIALISIEREN FIVI A, 80H OUT 03H LXI H, 24 nov A.L OUT OOH 110V A,H OUT 01H HVI A, 07H OUT 03H IN OOH RET IN 05H AN I 01H JZ EUPF IN OOH RET PUSH PSW IN 05H AN I 2 OH JZ SEND1 POP PSW OUT OOH RET CALL EHPF CALL SEND RET END

für das

Testsystem

AUSGEBEN LF AUSGEBEN AKKU ZURUECK LEERZEICHEN UND BYTE AUSG. AUSGEBEN BYTE AUSGEBEN LINKES HALBBYTE CODIEREN UND AUSGEBEN RECHTES HALBBYTE CODIEREN UND AUSGEBEN NEUE ZEILE UND ADRESSE HL AKKU RETTEN HIGH-BYTE LEERZEICHEN UND BYTE LOW-BYTE NUR BYTE AUSGEBEN AKKU ZURUECK LINKES HALBBYTE CODIEREN

RECHTES HALBBYTE CODIEREN ZIFFER BEREICH A - F ? NEIN: FERTIG JA: ZEICHEN EIN/AUSGEBEN DLAfi = 1: TEILERREGISTER STEUERREGISTER TEILER 4800 BAUD LOVI-TEIL HIGH-TEIL DLAB = 0 2 STOP 8 DATEN STEUERREGISTER EHPF. LEEREN STATUS LESEN 0000 0001 EHPF. VOLL? NEIN: WARTEN JA: ZEICHEN ABHOLEN AKKU RETTEN STATUS LESEN 0010 0000 SENDER FREI? NEIN: MARTEN JA: AKKU ZURUECK ZEICHEN SENDEN LESEN 11 IT ECHO

Bild 6-15: Ein Terminalmonitor für das Testsystem

331

7

Verarbeitung analoger Daten

Analoge Daten t r e t e n in der Meß- und Regelungstechnik als Spannungen oder Ströme bzw. als veränderliche Widerstände auf. Sie müssen zur Verarbeitung im Mikrocomputer aus der analogen in die digitale Darstellung umgesetzt werden. Umgekehrt ist es nötig, digitale Ergebnisse wieder in analoge Größen zu verwandeln. Der folgende Abschnitt zeigt die wichtigsten Umwandlungsverfahren.

7.1

Widerstands-Frequenz-Umsetzung

Bild 7-1:

Temperatur-Frequenz-Umsetzung

Viele Meßaufgaben lassen sich auf Sensoren (Fühler) zurückführen, deren Widerstandswert von der zu messenden Größe (Temperatur, Strahlung, Magnetfeld, Druck) abhängt. Ein Beispiel ist der NTC-Widerstand, dessen Wider-

7.1

Widerstands-Frequenz-Umsetzung

333

standswert mit steigender Temperatur abnimmt. Bringt man den Meßwiderstand als frequenzbestimmende Größe in eine Oszillatorschaltung, so wird die Temperatur in eine Frequenz umgesetzt, die mit einem Programm gemessen werden kann. Dieser Abschnitt zeigt als Beispiel die Messung einer Temperatur mit einem NTC-Widerstand. Als Mikrocomputer dient das im Abschnitt 3.8 entworfene Übungsgerät. Bild 7-1 zeigt als Meßfühler einen NTC-Widerstand, der die Frequenz am Ausgang eines Multivibrators bestimmt. Mit den gewählten Bauteilen liefert der Temperatur-Frequenz-Umsetzer bei Raumtemperatur eine Rechteckfrequenz von ca. 1 kHz. Dieses TTL-Signal wird dem Eingang PC5 einer Parallelschnittstelle zugeführt. Bild 7 - 2 zeigt den Zusammenhang zwischen der zu messenden Temperatur, dem Widerstand des Meßfühlers und der Ausgangsfrequenz.

Bild 7-2: Zusammenhang Widerstand-Frequenz-Temperatur

Mit steigender Temperatur nimmt der Widerstand des Fühlers ab und die F r e quenz steigt an; Temperatur und Frequenz sind in einem gewissen Bereich p r o portional. Bei einer genauen Messung des Zusammenhanges zwischen T e m p e ratur und Frequenz zeigen sich besonders an den Grenzen des Meßbereiches Nichtlinearitäten, die besonders berücksichtigt werden müssen. Die Frequenz kann mit einem der in Abschnitt 4.6.4 beschriebenen Programme bestimmt werden. Bild 7-3 zeigt ein Verfahren, das innerhalb einer vorgegebenen Meßzeit die Flanken des zu messenden Rechtecksignals zählt. Das Verfahren arbeitet mit zwei Zählern: einem Durchlaufzähler, der die Zahl der Abtastungen bestimmt und einem Ereigniszähler, der die Zahl der Flanken des zu messenden Signals zählt. Beide Zähler laufen in 16-Bit-Registerpaaren mit dem größtmöglichen dezimalen Wert 65 535. Die Programmschleife benötigt 73 Prozessortakte. Dies entspricht bei einem 4-MHz-Quarz und damit einem Prozessortakt von 2 MHz einer Abtastzeit von 36,5 ps. Innerhalb dieser Zeit darf höchstens eine Flanke des Signals a u f t r e t e n . Damit liegt die Grenzfrequenz bei etwa 14 kHz. Bild 7 - 4 zeigt den Programm blockplan.

334

7 Verarbeitung analoger Daten

Start

Ende

Flankenzähler löschen Leitungszustand lesen (Punkt a) Leitungszustand lesen (Punkt b) b i s 1. Flanke DurchlaufZähler vermindern Leitungszustand lesen Flanke ?

^

nein

^

ja Flankenzähler erhöhen

Zeit ausgleichen

bis Durchlaufzähler = 0

Bild 7 - 4 :

Nach

dem

B l o c k p l a n d e r Frequenzmessung

Löschen

Das P r o g r a m m Signals

des Flankenzählers

wartet

und beginnt

wird der

Leitungszustand

gemessen.

in e i n e r S c h l e i f e a u f d i e e r s t e Änderung ( F l a n k e ) des

dann mit der Zählung. In j e d e m S c h l e i f e n d u r c h l a u f

wird

die L e i t u n g g e p r ü f t . B e i e i n e r Änderung d e s L e i t u n g s z u s t a n d e s g e g e n ü b e r dem v o r h e r g e h e n d e n W e r t wird der F l a n k e n z ä h l e r um 1 e r h ö h t . Wurde k e i n e F l a n k e e r k a n n t , so f i n d e t ein Z e i t a u s g l e i c h s t a t t , um d i e Meßzeit unabhängig von der Zahl der F l a n k e n zu m a c h e n . Bild 7 - 5 zeigt das V e r f a h r e n als U n t e r p r o g r a m m . Als H a r d w a r e d i e n t messende

Signal

d a s in Abschnitt

liegt

am

Eingang

4.8

PC5

C - P o r t hat die h e x a d e z i m a l e Adresse 0 2 H .

e n t w o r f e n e Ü b u n g s s y s t e m . Das zu der

Parallelschnittstelle

8255.

Der

7.1

* 101F *1020 * 1021 *1022 *1023 *1026 *1028 *102A *102B *102D *102F *1030

F5 C5 D5 EB 21 OB E6 47 DB E6 B8 CA

*1033 *1034 *1035 *1036 *1039 *103A *103C *103E *103F

47 7A B3 CA 1B DB E6 B8 CA

01 00 02 20 02 20 2B 10

4C 10 02 20 47 10

*1042 23 *1043 00 *1044 C3 33 10 *1047 FE 00 *1049 C3 33 10 *104C *104D *104E *104F E0000

Bild 7-5:

D1 C1 F1 C9

0012 0013 0014 0015 0016 0017 0018 0019 001A 001B 001C 001D 001E 001F 0020 0021 0022 0023 0024 0025 0026 0027 0028 0029 002A 002B 002C 002D 002E 002F 0030 0031 0032 0033 0034 0035

Widerstands-Frequenz-Umsetzung

335

BILD 7-5 UNTERPROGRAMM FLANKEN ZAEHLEN PUSH PSW ; AKKU RETTEN >MESS PUSH B > ; BC-REGISTER RETTEN > PUSH D ; DE-REGISTER RETTEN DE = DURCHLAUFZAEHLER > XCHG LXI > H ,0001 ; HL = FLANKENZAEHLER IN > 02H ; ANFANGSZUSTAND LESEN ANI > 20H ; MASKE 001C 0000 > MOV B,A ; B= LEITUNGSZUSTAND IN >MESS1 02H ; WARTEN AUF 1. FLANKE > ANI 20H ; MASKE 0010 0000 CMP > B ; MIT ALTEM ZUSTAND VERGLEICHEN > JZ MESS1 ; GLEICH: KEINE FLANKE 1.FLANKE ERKANNT: MESS-SCHLEIFE >MESS2 MOV B.A ; 4 TAKTE: LEITUNGSZUSTAND IN B > MOV A,D ; 4 TAKTE: DURCHLAUFZAEHLER > 0RA E ; 4 TAKTE: AUF NULL TESTEN > JZ MESS4 ; 7 TAKTE: NULL: FERTIG! > DCX D ; 6 TAKTE: ZAEHLER -1 > IN 02H ; 10 TAKTE: LEITUNG LESEN ANI > 20H ; 7 TAKTE: MASKE 0010 0000 CMP > B ; 4 TAKTE: MIT ALT VERGLEICHEN > JZ MESS3 ; 7 TAKTE ODER 10 TAKTE: GLEICH FLANKE ERKANNT > INX H ; 6 TAKTE: FLANKENZAEHLER + 1 > NOP 4 TAKTE: ZEITAUSGLEICH > JMP MESS2 ; 10 TAKTE: NEUE MESSUNG KEINE FLANKE >MESS3 CPI 00H ; 7 TAKTE: ZEITAUSGLEICH > JMP MESS2 ; 10 TAKTE: NEUE MESSUNG MESSUNG BEENDET >MESS4 POP D ; DE ZURUECK > POP B ; BC ZURUECK > POP PSW ; AKKU ZURUECK > RET > END

Unterprogramm zum Messen der Frequenz

Beim Aufruf muß das Hauptprogramm im HL-Registerpaar den Durchlaufzähler übergeben. Beim Rücksprung enthält das HL-Registerpaar die Zahl der g e m e s senen Flanken. Die Meßschleife benötigt f ü r einen Durchlauf 73 Takte oder 36,5 ps. Da bei einem Durchlauf höchstens eine Flanke a u f t r e t e n kann, ist der Flankenzähler immer kleiner oder höchstens gleich dem Durchlaufzähler; ein Uberlauf kann nicht a u f t r e t e n . Der vorgegebene Durchlaufzähler ist proportional der Meßzeit; er bestimmt die Genauigkeit und den Bereich der Messung. Die Umwandlung der gezählten Flanken in einen Anzeigewert kann mit Hilfe einer Tabelle erfolgen. Bild 7 - 6 zeigt eine Möglichkeit, ohne Umrechnung einen Zusammenhang zwischen der Zahl der gemessenen Flanken (Frequenz) und der anzuzeigenden Temperatur herzustellen. In dem Beispiel liegt eine Tabelle im Bereich der Adressen 1100H bis 11FFH; sie enthält also 256 Anzeigewerte. Die Zahl der Flanken innerhalb einer vorgegebenen Meßzeit bildet den niederwertigen Teil der Adresse, unter der der auszugebende Anzeigewert zu finden ist. Mit Hilfe dieser Tabelle lassen sich nichtlineare Kennlinien des Meßwiderstandes

336

7 Verarbeitung

analoger

Meßwert Adresse 1100 1101 1102 1103 1104 1105 1106 1104

Anzeigewert Inhalt 01 01 01 02 02 02 03 03





11FF

Daten

Anzeigewert (Temperatur) Inhalt 03-02"

01

99 00 01 02 Adresse

Bild 7 - 6 :

Tabelle

03

-4-

Oi.

05

_L 06

Meßwert (Flankenzähler)

Meßwert-Anzeigewert

l i n e a r i s i e r e n . Ebenso e n t f ä l l t e i n e Umwandlung d e s dualen Z ä h l e r w e r t e s in e i n e B C D - Z a h l o d e r g e g e b e n e n f a l l s eine C o d e u m w a n d l u n g . Bild 7 - 7 z e i g t e i n T e s t programm,

mit

dem

der

vorzugebende

Wert

d e s D u r c h l a u f z ä h l e r s und d a m i t

d i e Z a h l d e r A b t a s t u n g e n b e s t i m m t w e r d e n kann.

L1000 *1000 *1002 *1004 *1006 *1007 *1009 *100C *100D *100F * 1012 * 1014 *1016 * 1019 * 101A *101C Bild 7 - 7 :

3E D3 DB 67 2E CD 7C FE CA 3E D3 C3 7D D3 C3

8B 03 10 00 1F 10 00 19 10 FF 18 04 10 18 04 10

0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B 000C 000D 000E 000 F 0010 0011

> ; BILD 7-7 ZAEHLER BESTIMMEN 0RG 1000H > ADRESSZAEHLER >START A.8BH MVI STEUERBYTE A=AUS B=EIN > 03H NACH STEUERREGISTER OUT >L00P IN 10H HIGH-TEIL DES ZAEHLERS LADEN > H,A NACH H-REGISTER MOV > L.00H MVI L0W-TEIL KONSTANT NULL FLANKEN ZAEHLEN > CALL MESS > MOV A,H HIGH-ZAEHLER UNTERSUCHEN > CPI 00H NULL ? > JA: MESSUNG GUELTIG JZ L00P1 > A.0FFH NEIN: FEHLERMARKE UEBERLAUF! MVI > AUSGEBEN OUT 18H > JMP LOOP NEUE MESSUNG >L00P1 MOV A,L LOW-ZAEHLER 18H > OUT AUSGEBEN > JMP LOOP NEUE MESSUNG

T e s t p r o g r a m m zum B e s t i m m e n d e s D u r c h l a u f z ä h l e r s

Das P r o g r a m m

programmiert

die Parallelschnittstelle

8255 und liest dann den

h ö h e r w e r t i g e n T e i l des Durchlaufzählers von den S c h i e b e s c h a l t e r n der 10H

ein;

diesem

der n i e d e r w e r t i g e

Durchlaufzähler

T e i l des Z ä h l e r s wird konstant

wird das M e ß u n t e r p r o g r a m m

Adresse

Null g e s e t z t .

des Bildes 7 - 5

Mit

aufgeru-

f e n , das im H L - R e g i s t e r p a a r d i e Zahl der F l a n k e n z u r ü c k l i e f e r t . Da d i e T a b e l le nur 256 W e r t e e n t h ä l t , muß die M e ß z e i t so g e w ä h l t w e r d e n , daß d e r h ö h e r wertige

Teil

des

Flankenzählers

Null ist. Für den F a l l , daß diese

Bedingung

7.1 Widerstands-Frequenz-Umsetzung

337

nicht eingehalten wird, wird als Fehlermarke FF ausgegeben. Für einen neuen Durchlauf muß die Meßzeit vermindert werden. Der niederwertige Teil des F l a n kenzählers wird hexadezimal auf den Siebensegmentanzeigen der Adresse 18H angezeigt. In dem vorliegenden Beispiel ergab sich bei einem Durchlaufzähler von 0400H ein Flankenzähler von 0080H. Mit diesem Durchlaufzähler wurde eine Tabelle mit dem niederwertigen Teil des Flankenzählers als Adresse und der mit einem Thermometer gemessenen Temperatur als Inhalt a u f g e s t e l l t . Bild 7 - 8 zeigt das Auswertungsprogramm.

L1000 *1000 *1002 »1004 *1006 *1007 * 1009 *100C *100D *100F *1012 *1014 * 1016 *1019 *101A * 101D *101E * 101F * 1021

3E D3 DB 67 2E CD 7C FE CA 3E D3 C3 7D 01 09 7E D3 C3

8B 03 10 00 24 10 00 19 10 FF 18 04 10 00 11 18 04 10

0001 0002 0003 0004 0005 0006 0007 0008 0009 000A OOOB 000C 000D 000E 000 F 0010 0011 0012 0013 0014

>; BILD 7-8 TEMPERATUR MESSEN ADRESSZAEHLER 1000H > ORG STEUERBYTE A=AUS B=EIN >START A,8BH MVI 03H NACH STEUERREGISTER > OUT HIGH-TEIL DES ZAEHLERS LADEN IN >L00P 10H H,A NACH H-REGISTER > MOV L.00H L0W-TEIL KONSTANT NULL > MVI FLANKEN ZAEHLEN > CALL MESS A.H HIGH-ZAEHLER UNTERSUCHEN > MOV > CPI 00H NULL ? JA: MESSUNG GUELTIG > JZ L00P1 NEIN: FEHLERMARKE UEBERLAUF! > A.0FFH MVI AUSGEBEN > 18H OUT NEUE MESSUNG > JMP LOOP L0W-ZAEHLER >L00P1 A,L MOV B.1100H ANFANGSADRESSE TABELLE > LXI ADDIERE MESSWERT > DAD B ANZEIGEWERT LADEN > A,M MOV AUSGEBEN 18H > OUT > JMP NEUE MESSUNG LOOP

Bild 7-8: Testprogramm zur Messung der Temperatur

Das Auswertungsprogramm programmiert die Parallelschnittstelle 8255 und holt sich dann den höherwertigen Teil des Durchlaufzählers von den Schiebeschaltern der Adresse 10H. Mit Hilfe der Tabelle wird der Flankenzähler in einen Anzeigewert für die Temperatur umgesetzt und ausgegeben. Bei einem Überlauf erscheint als Fehlermarke der Wert FF. Das vorliegende Beispiel für eine Temperaturmessung mit Hilfe eines NTCWiderstandes setzt das Ergebnis eines Flankenzählers über eine Tabelle direkt in einen zweistelligen dezimalen Anzeigewert um. Absolute Werte für die Meßzeit, den Widerstandswert und die Frequenz müssen nicht bekannt sein.

338

7.2

7 Verarbeitung analoger Daten

Beispiel eines Analog/Digitalwandlers

+5 V

Bild 7-9: Blockschaltplan des A/D-Wandlers ZN 427

Bild 7-9 zeigt als Beispiel für einen Analog/Digitalwandler den Blockschaltplan des A/D-Wandlers ZN 427, dessen Funktionsweise bereits im Abschnitt 3.5.5 besprochen wurde. Er wandelt eine analoge Eingangsspannung im Bereich von 0 bis 2,55 Volt in einen digitalen 8-Bit-Wert von 00000000 bis 11111111 um. Der Wandler arbeitet nach dem Verfahren der schrittweisen Näherung. Die Umwandlung beginnt mit einem negativen Impuls am Eingang SC. SC b e deutet Start of Conversion gleich Beginn der Umwandlung. Die von außen anzulegenden Taktsignale (CLK gleich Clock) wandeln mit ihrer fallenden Flanke jeweils ein Bit um; nach neun Takten ist die Umwandlung beendet. Die F r e quenz des Umwandlungstaktes muß unter 1 MHz liegen. Bild 7-10 zeigt die Startbedingungen. Die steigende Flanke des Startimpulses leitet die Umwandlung ein; die fallende Flanke des Taktsignals muß mindestens 200 ns vor und hinter dieser Flanke liegen. Bild 7-11 zeigt das Impulsdiagramm für den Betrieb des Wandlers mit dem Mikroprozessor 8085A.

7.2 Beispiel eines Analog/Digitalwandlers

339

Wandlertakt

CLK

f

v max

>200ns-,' >200ns,-

= 1 MHz

-1

SC (WE)

Startimpuls

1



>250ns

— J

® Bild 7 - 1 0 :



©

S t a r t b e d i n g u n g e n d e s A / D - W a n d l e r s Z N 427

M3 (OUT) Prozessortakt

Mi (NOP) •

MI (NOP)

-7'

.1 Taktf

CLK

RD Wandlertakt

RD = CLK

-4,5 Takte-3 TakteWR = SC

Star t i m p u l s

-1,5 Takte-'

Bild 7 - 1 1 :

Der

-4 Takte -

B e t r i e b des A / D - W a n d l e r s Z N 427 mit d e m Prozessor

8085A

U m w a n d l u n g s t a k t C L K d e s W a n d l e r s w i r d a b g e l e i t e t vom n e g i e r t e n

Lese-

signal R D . Ein O U T - B e f e h l , der j e d o c h k e i n e D a t e n a u s g i b t , b i l d e t den S t a r t impuls einen

mit d e m

S C - S i g n a l . Es f o l g e n mindestens s i e b e n N O P - B e f e h l e , d i e

Umwandlungstakt

Leseimpuls

am

erzeugen.

Freigabeeingang

talen Daten abgeholt.

E

Mit

einem

erzeugt,

IN-Befehl,

der

je

einen positiven

werden die umgewandelten

digi-

340

7 Verarbeitung analoger Daten

+5V

a. ZN 427

unipolarer

Betrieb

Bild 7 - 1 2 :

A n a l o g t e i l d e s A / D - W a n d l e r s Z N 427

b. ZN 427

bipolarer

Betrieb

Der in Bild 7 - 1 2 d a r g e s t e l l t e A n a l o g t e i l d e s W a n d l e r s h a t e i n e n E r s a t z - I n n e n w i d e r s t a n d von 4 K O h m ; d e r E r s a t z - A u ß e n w i d e r s t a n d soll e b e n f a l l s 4 KOhm b e t r a g e n . Im u n i p o l a r e n B e t r i e b n a c h Bild 7 - 1 2 a liegt a m Eingang e i n S p a n n u n g s t e i l e r , d e r d i e E i n g a n g s p a n n u n g auf 2,55 Volt h e r u n t e r t e i l t ; d i e s e n t s p r i c h t d e r auf d e m B a u s t e i n e r z e u g t e n V e r g l e i c h s s p a n n u n g . Die S c h a l t u n g n a c h Bild 7 - 1 2 b ist f ü r b i p o l a r e n B e t r i e b b e s t i m m t . B e s o n d e r e r H i n w e i s zu Bild 7 - 9 : Der E i n g a n g s k o m p a r a t o r d e s A n a l o g e i n g a n g s b e n ö t i g t e i n e n e g a t i v e V o r s p a n n u n g m i t V o r w i d e r s t a n d a m E i n g a n g R e x t ( S t i f t 5). N a c h A n g a b e n d e s H e r s t e l l e r s sind f o l g e n d e W i d e r s t ä n d e e r f o r d e r l i c h : V o r s p a n n u n g : - 5V W i d e r s t a n d 82 K O h m V o r s p a n n u n g : - 1 2 V W i d e r s t a n d 180 KOhm V o r s p a n n u n g : - 1 5 V W i d e r s t a n d 220 KOhm

341

7.3 Beispiel eines DigitalI Analogwandlers

7.3

Beispiel eines Digital/Analogwandlers

Bild 7 - 1 3 :

B l o c k s c h a l t p l a n d e s D / A - W a n d l e r s Z N 428

Bild 7 - 1 3 z e i g t als B e i s p i e l e i n e s D i g i t a l / A n a l o g w a n d l e r s den des

Bausteins Z N 428, dessen F u n k t i o n s w e i s e b e r e i t s im

sprochen w u r d e . Er w a n d e l t e i n e n d i g i t a l e n bis

11111111 in e i n e a n a l o g e

Baustein e n t h ä l t e i n e n

Blockschaltplan

Abschnitt

3.5.5

be-

8 - B i t - E i n g a n g s w e r t von 00000000

Ausgangsspannung von 0 bis 2,55 V o l t u m .

Der

E i n g a n g s s p e i c h e r , der d i e d i g i t a l e n D a t e n bis zum E i n -

s c h r e i b e n n e u e r W e r t e f e s t h ä l t . Bei e i n e r i n t e r n e r z e u g t e n

Vergleichsspannung

von 2,55 V o l t l i e g t d i e Ausgangsspannung e b e n f a l l s b e i m a x i m a l 2,55 V o l t . D e r Analogteil 7-14

zeigt

des

W a n d l e r s hat e i n e n E r s a t z - I n n e n w i d e r s t a n d von 4 K O h m .

zwei

Ausgangsschaltungen

unter V e r w e n d u n g e i n e s

für

bipolaren

und unipolaren

Bild

Betrieb

Operationsverstärkers. +5V 390

V r e ,

in

A

V r e i

1 pF

out

ZN 428 D/A-Handler £NQ_

+5V

a. ZN 428 unipolarer Betrieb Bild 7 - 1 4 :

T

b. ZN 428 bipolarer Betrieb

A n a l o g t e i l des D / A - W a n d l e r s Z N 428

342

7 Verarbeitung analoger Daten

7.4

Beispiel einer Analogperipherie

Für d a s im Abschnitt 3.8 beschriebene Übungssystem wurde eine Analogperip h e r i e k a r t e mit je einem A / D - und einem D/A-Wandler e n t w i c k e l t . Bild 7 - 1 5 zeigt den Adreßplan.

Baustein Adresse

ZN428 ZN427 Bild 7-15:

80H 81 H

IO/M 1

1

A7 1

1

A6

A5

A4

A3

A2

AI

x = 0 x = 0 x = 0 x = 0 x=0 x=0 x=0 x=0 x=0 x=0 x=0 x=0

AO 0 1

Adreßplan der Analogperipherie

Da d a s Übungssystem b e r e i t s volldecodiert ist, genügt eine TeiIdecodierung mit der Adreßleitung A7=l; die Adreßleitung AO wählt die beiden Wandlerbausteine aus. Bild 7 - 1 6 zeigt den Schaltplan. DatenbusTreiber

Bild 7-16:

Schaltplan der Analogperipherie

7.4 Beispiel einer Analogperipherie

343

Der bidirektionale Datenbustreiber 74LS245 verbindet den Datenbus des Übungssystems mit dem Datenbus der Erweiterungskarte. Der Treiber wird nur freigegeben, wenn die Erweiterung angesprochen wird. Der D/A-Wandler ZN 428 liegt auf der Peripherieadresse 80H. Der Befehl OUT 80H schreibt den Inhalt des Akkumulators in die Speicher des Bausteins; am Ausgang erscheint der umgewandelte analoge Wert mit einer Ausgangsspannung von maximal 2,55 Volt. Eine Treiberschaltung entsprechend Bild 7-14 setzt diese Spannung um in eine unipolare oder bipolare Ausgangsspannung. Der A/D-Wandler ZN 427 liegt auf der Peripherieadresse 81H. Beim Schreiben mit dem Befehl OUT 81H wird die Umwandlung g e s t a r t e t ; beim Lesen mit dem Befehl IN 81H wird der umgewandelte digitale Wert in den Akkumulator geladen. Zwischen den beiden Befehlen müssen mindestens 9 Takte f ü r die Umwandlung liegen. Der Umwandlungstakt wird vom Lesesignal abgeleitet. Jeder NOP-Befehl benötigt einen Lesetakt. Am Analogeingang des Wandlers liegt ein Eingangsspannungsteiler entsprechend Bild 7-12, der die Eingangsspannung auf maximal 2,55 Volt herunterteilt.

L1000 *1000 *1002 *1004 *1006 E0000

DB D3 D3 C3

10 80 18 00 10

0001 0002 0003 0004 0005 0006 0007

>; BILD 7-17 0RG > IN >START OUT > > OUT JMP > END >

ABGLEICH DES D/A-WANDLERS 1000H ; ADRESSZAEHLER ; DIGITALWERT LESEN 10H 80H ; ANALOG AUSGEBEN ; DIGITAL AUSGEBEN 18H START ; SCHLEIFE

Bild 7-17: Programmbeispiel: Abgleich des D/A-Wandlers

Bild 7-17 zeigt ein Programmbeispiel zum Abgleich des Digital/Analogwandlers. Der an den Schiebeschaltern eingestellte digitale Wert wird analog am Wandlerausgang ausgegeben. Die hexadezimale Ausgabe auf der Siebensegmentanzeige der Adresse 18H dient zur Kontrolle. Mit diesem Programm können Nullpunkt und Verstärkung der Ausgangsschaltung eingestellt werden.

L1000 *1000 *1002 *1004 *1006 *1007 E0000

3E D3 D3 3C C3

00 80 18 02 10

0001 0002 0003 0004 0005 0006 0007 0008

>; BILD 7-18 > 0RG >START MVI OUT >L00P OUT > INR > JMP > END >

AUSGABE SAEGEZAHN ADRESSZAEHLER 1000H ANFANGSWERT A.00H ANALOGE AUSGABE 80H DIGITALE AUSGABE 18H A ZAEHLER + 1 SCHLEIFE LOOP

Bild 7-18: Programmbeispiel: Ausgabe einer Sägezahnkurve

Mit dem Programmbeispiel Bild 7-18 kann die Linearität der Ausgangsspannung mit einem Oszilloskop kontrolliert werden. Es muß eine sägezahnförmige Ausgangsspannung erscheinen.

344

7 Verarbeitung analoger Daten

L1000 *1000 *1002 *1003 *1004 *1005 *1006 *1007 *1008 *1009 *100B *100D *100F E0000

D3 00 00 00 00 00 00 00 DB D3 D3 C3

Bild 7 - 1 9 :

0001 0002 0003 0004 0005 0006 0007 0008 0009 OOOA OOOB OOOC OOOD OOOE 000F

81

81 80 18 00 10

>; BILD 7-19 > ORG >START OUT > NOP > NOP > NOP > NOP > NOP > NOP > NOP > IN > OUT > OUT > JMP > END

ABGLEICH DES A/D-WANDLERS ; ADRESSZAEHLER 1000H ; START DER UMWANDLUNG 81H 1. SCHRITT 2. SCHRITT 3. SCHRITT 4. SCHRITT 5. SCHRITT 6. SCHRITT 7. SCHRITT 8. UND 9. SCHRITT UND LESEN 81H ANALOGE AUSGABE 80H DIGITALE AUSGABE 18H SCHLEIFE START

P r o g r a m m b e i s p i e l : A b g l e i c h des

A/D-Wandlers

M i t d e m in Bild 7 - 1 9 d a r g e s t e l l t e n T e s t p r o g r a m m läßt s i c h d i e

Eingangsschal-

tung d e s A n a l o g / D i g i t a l w a n d l e r s a b g l e i c h e n . D i e am E i n g a n g a n l i e g e n d e a n a l o ge

Spannung

18H

wird

ausgegeben.

hexadezimal Die

analoge

auf

den

Siebensegmentanzeigen

Ausgabe

auf d e m

der

Adresse

Digital/Analogwandler

dient

d e r K o n t r o l l e . L e g t man an d e n Eingang d e s A / D - W a n d l e r s e i n e z e i t l i c h v e r ä n derliche so

Spannung, z.B. d i e s i n u s f ö r m i g e

kann am

Ausgang

des

m i t e i n e m Oszilloskop b e o b a c h t e t

Das

in

eine

Analogperipherie

Abschnitt

programm,

das

3.9

in

Spannung e i n e s

D/A-Wandlers

Funktionsgenerators,

der zurückgewandelte analoge

Wert

werden.

beschriebene Testsystem

mit P C - B a u s t e i n e n

wurde

um

e r w e i t e r t . Bild 7 - 2 0 z e i g t d i e S c h a l t u n g und e i n T e s t -

einer

S c h l e i f e D a t e n vom A n a l o g / D i g i t a l w a n d l e r

liest

und

auf d e m D i g i t a l / A n a l o g w a n d l e r w i e d e r a u s g i b t . Der

Ausgang Y T der Peripherieauswahlschaltung

dient

zur A d r e s s i e r u n g

IOWR

wird

analog chert. dem

ein

Byte

ausgegeben. Der

des T e s t s y s t e m s

der beiden Wandler. Zusammen in

den

Es b l e i b t

mit dem

Digital/ Analog wandle r Z N

(Bild

3-84)

Schreibsignal

428 g e s c h r i e b e n

bis zum S c h r e i b e n e i n e s neuen W e r t e s

und

gespei-

A n a l o g / D i g i t a l w a n d l e r Z N 427 w i r d mit d e m A u s w a h l s i g n a l Y 7 und

Lesesignal

IORD

ausgelesen.

Man

beachte,

daß

der

Freigabeeingang

E

des B a u s t e i n s aktiv H i g h i s t ! Der IN

Befehl OUT

70H g i b t e i n B y t e auf d e m D / A - W a n d l e r 428 aus, d e r B e f e h l

70H l i e s t ein B y t e v o m

gleich,

wenn

der

analoge

A/D-Wandler Ausgang

und w e n n b e i d e W a n d l e r auf

mit

ZN dem

427. B e i d e analogen

Werte

sind nur dann

E i n g a n g verbunden

ist

i h r e r A n a l o g s e i t e g e n a u a b g e g l i c h e n sind. In den

m e i s t e n F ä l l e n z e i g e n s i c h durch Einstreuungen und I n s t a b i l i t ä t e n

Abweichun-

345

7.4 Beispiel einer Analogperipherie gen in den l e t z t e n b e i d e n S t e l l e n . B e i e i n e m ( f e h l e r f r e i e n ) R A M - S p e i c h e r

da-

g e g e n w e r d e n die h i n e i n g e s c h r i e b e n e n

Der

Analog/Digitalwandler

Werte auch wieder zurückgelesen.

wird dem S t a r t i m p u l s SC g e s t a r t e t , der aus dem A u s -

wahlsignal Y?T und dem L e s e s i g n a l l O R D g e b i l d e t wird. Man b e a c h t e , d a ß die g l e i c h e A u s w a h l l e i t u n g Y 6 z u s a m m e n mit I O W R in B i l d 3 - 8 5 dazu v e r w e n d e t wird,

den

Ausgabeport

74374

freizugeben.

Der

Befehl

IN 60H

startet

den

A / D - W a n d l e r , der B e f e h l O U T 60H g i b t den Inhalt d e s A k k u m u l a t o r s a u f dem TTL-Peripheriebaustein ganz v e r s c h i e d e n e

74374

aus.

Die Portadresse 60H adressiert auch

hier

Bausteine!

Als U m w a n d l u n g s t a k t

für den A n a l o g / D i g i t a l w a n d l e r

dient der

Prozessortakt,

der m i t e i n e m F l i p f l o p 7 4 7 4 auf 1 MHz h e r u n t e r g e t e i l t wird. Ein z w e i t e s F l i p flop s y n c h r o n i s i e r t den S t a r t i m p u l s SC ( S t a r t o f C o n v e r t i o n ) lertakt,

so

daß

die

Wandlers eingehalten

in

Bild

7-10

dargestellten

mit dem

Startbedingungen

Kurs t e c h n i s c h o r i e n t i e r t

21 DB DB D3 E9

03 10 60 70 70

; Bild 7-20: ORG STAKT LXI LOOP IN IN OUT PCHL END

Test analog ein nach analog aus 1000H Lade- und Startadresse H,LOOP HL = Sprungadresse für PCHL 10 Takte: SC = Start A/D 60H 10 Takte: Wert lesen 7 0H 70H 10 Takte: Wert ausgeben 6 Takte: schneller als JHP 36 Takte « 0.5 = 18 us

TSchaitung '

leiler 2 : 1

SC-Synchr.

"Pascal-

B a n d 2: A n w e n d u n g e n " z e i g t die M ö g l i c h k e i t ,

und D / A - W a n d l e r an den D r u c k e r p o r t ( ! ) a n z u s c h l i e ß e n .

0000 1000 1000 1003 1005 1007 1009 100A

A/D-

werden.

D e r PC h a t k e i n e A n a l o p e r i p h e r i e . D a s im K a p i t e l 9 e r w ä h n t e B u c h

X 2 3 4 5 6 7 8

Wand-

des

^SchaitungT

10RD li

I IORD

? Y7

T synch. | TÜWÜ I

Bild 7 - 2 0 : Die A n a l o g p e r i p h e r i e des T e s t s y s t e m s

1 L

A/D-

8

Lösungen der Übungsaufgaben

Abschnitt 2.8 Grundlagen

1.Aufgabe: dual: 0 1 1 0 0 1 0 0 hexadezimal: 64 BCD: 0001 0 0 0 0 0 0 0 0

2.Auf gäbe: dual: 1 0 0 1 1 1 0 0 hexadezimal: 9C

3.Aufgabe: hexadezimal: 58 ASCII-Zeichen: X als Dualzahl: 88 als B C D - Z a h l : 58

4.Auf gäbe: DU A F F E !

5.Auf gäbe:

X 0 0 0 0 1 1 1 1

Y 0 0 1 1 0 0 1 1

z 0 1 0 1 0 1 0 1

u 0 0 0 1 0 1 1 1

s 0 1 1 0 1 0 0 1

8 Lösungen der Übungsaufgaben

ö.Aufgabe: S u m m e : 01001011 D i f f e r e n z : 11010011 U N D : 00001100 O D E R : 00111111 E O D E R : 00110011

7.Auf gäbe: Es w i r d d e r Ausgang Y 5 a u s g e w ä h l t .

c 0 0 0 0

B A

70 0 1 1 1

Y1

0 1 0 1

1

0 0

1

0

1 1

Y3

Y4

Y5

Y6

1 1

1 1 0 1

1 1 1 0

1 1 1

1 1 1

1 1 1

77 1 1 1

1

1

1

1

1

1

1

1

0

1

1

1

1

1

1

1

1

1

0

1

1

1

0

1

1

1

1

1

1

0

1

1

1

1

1

1

1

1

1

1

0

0 0 1 1

1

Y2

8.Aufgabe:

X1-

>2-

>1

Ausgang

XI

Ausgang

t

347

8 Lösungen

348

der

Übungsaufgaben

Abschnitt 4.3.6 Datenübertragung

1.Aufgabe:

L1000 *1000 *1002 *1004 *1007 *1009 L1100 *1100 E0000

3E D3 3A D3 C3

8B 03 0 0 11 00 0 9 10

55

0001 0002 0003 0004 0005 0006 0007 0008 0009 000A

> ; UEBUNGEN 4 3 . 6 AUFGABE 1000H > ORG A . 8 B H >START MVI 03H > OUT LDA KONST > > OUT 00H JMP LOOP >L00P 1100H > ORG 55H >K0NST OB END >

1 ADRESSZAEHLER STEUERBYTE A=AUS B = E I N NACH S T E U E R R E G I S T E R KONSTANTE AUS S P E I C H E R AUSGEBEN WARTESCHLEIFE KONSTANTENBEREICH 0101 0101 BINAER

0001 0002 0003 0004 0005 0006 0007 0008 0009 OOOA OOOB OOOC

>;

2 ADRESSZAEHLER STEUERBYTE A=AUS B = E I N NACH S T E U E R R E G I S T E R LAUTER N U L L E N 0 0 0 0 0 0 0 0 AUSGEBEN SCHALTER LESEN SPEICHERN SCHLEIFE VARIABLENBEREICH 1 B Y T E FUER DATEN B E R E I T

2.Aufgabe:

L1000 *1000 *1002 *1004 *1006 *1008 *100A *100D L1200 *1200 EOOOO

3E D3 3E D3 DB 32 C3

8B 03 00 00 01 0 0 12 0 8 10

UEBUNGEN 4 3 . 6 AUFGABE ORG 1000H >START MVI A.8BH > 03H OUT > MVI A,OOH > OUT OOH IN 01H >LOOP DATEN > STA > JMP LOOP > ORG 1200H >DATEN DS 1 > END

>

3. Auf g ä b e :

L1000 *1000 *1003 *1006 *1009 *100C *100F *1012 L1100 *1100 *1101 *1102 L1200 * 1200 EOOOO

3A 32 3A 32 3A 32 C3 64 8B 58

00 00 01 01 02 02 12

11 12 11 12 11 12 10

0001 0002 0003 0004 0005 0006 0007 0008 0009 OOOA OOOB OOOC OOOD 000E OOOF 0010

>;

UEBUNGEN • ORG LDA >START > STA > LDA > STA > LDA > STA JMP >LOOP > ORG >DAT1 DB DB >DAT2 DB >DAT3 > ORG >SPE I DS > END

>

3.6 3.AUFGABE 1000H ADRESSZAEHLER DAT1 E R S T E KONSTANTE LADEN SPEI NACH S P E I C H E R DAT2 Z W E I T E KONSTANTE LADEN NACH S P E I C H E R ADRESSE + 1 SPEI+1 D R I T T E KONSTANTE LADEN DAT 3 SPEI+2 NACH S P E I C H E R ADRESSE + 2 LOOP WARTESCHLEIFE KONSTANTENBEREICH 11 OOH 100 DEZIMALZAHL 8BH HEXADEZIMAL 'X' BUCHSTABE X 1200H VARIABLENBEREICH 3 3 BYTES RESERVIERT

8 Lösungen der Übungsaufgaben

Abschnitt 4.4.5 Bedingte Sprünge 1.Aufgabe: LOOOO *0000 C3 00 00 E0000

0001>; UEBUNG 4 . 4 . 5 AUFGABE 1 0002> ORG 0000H ; ADRESSZAEHLER 0003>L00P JMP LOOP ; UNENDLICHE SCHLEIFE 0004> END JMP

000 D

>

nnnr nnr nnr r , 00

00

00

C3

Ol -

00

00

02 — 00

r

2.Aufgabe: L1000 *1000 *1002 *1004 *1006 EOOOO

3E D3 DB C3

8B 03 01 04 10

0001 >; UEBUNG 4 . 4 . 5 AUFGABE 2 0002 > ORG 1000H ; ADRESSZAEHLER 0003 >START MVI ; STEUERBYTE A=AUS B=EIN A.8BH 0004 > OUT 03H ; NACH STEUERREGISTER 0005 >LOOP IN 01H ; EINGABE JMP 0006 > LOOP ; SCHLEIFE 0007 > END

IN

01 M2

- J M P 1004

Innnr n n r n n r nnnr i u l

1n

34g

350

8 Lösungen der Übungsaufgaben

3.Aufgabe:

L1000 *1000 3E 55 *1002 32 00 11 *1005 C3 02 10 E0000

0001 0002 0003 0004 0005 0006

>; UEBUNG 4.4.5 AUFGABE > 0RG 1000H >START MVI A,55H >L00P STA 1100H > JMP LOOP > END

3 ; ; ; ;

ADRESSZAEHLER TESTWERT 0101 0101 ADRESSE DES RAM-BAUSTEINS SCHLEIFE

1 ; ; ; ; ; ; ;

ADRESSZAEHLER STEUERBYTE A=AUS B=EIN NACH STEUERREGISTER SCHALTER LESEN WERT TESTEN NULL: SPRUNG NACH NULL HIGH=MINUS: SPRUNG NACH MIN

Abschnitt 4.5.4 Programmverzweigungen

1.Auf gäbe:

L1000 *1000 *1002 *1004 *1006 *1007 *100A

3E D3 DB B7 CA FA

8B 03 01 1B 10 14 10

*100D 3E OF *100F D3 00 *1011 C3 04 10 *1014 3E FO * 1016 D3 00 * 1018 C3 04 10 * 101B 3E 00 * 101D D3 00 * 101F C3 04 10 E0000

0001 0002 0003 0004 0005 0006 0007 0008 0009 OOOA 000B OOOC OOOD 000E OOOF 0010 0011 0012 0013 0014 0015

>; UEBUNG 4.5.4 AUFGABE > ORG 1000H >START MVI A,8BH > OUT 03H IN >L00P 01H > ORA A > NULL JZ > JM MIN >; B7=L0W: > A,OFH MVI > OOH OUT > JMP LOOP >; B7=HIGH >MIN A.OFOH MVI > OUT OOH > JMP LOOP >; ALLE SCHALTER LOW >NULL A,OOH MVI > OOH OUT > JMP LOOP > END

; BITMUSTER 0000 1111 ; AUSGEBEN ; NEUE EINGABE ; BITMUSTER 1111 0000 ; AUSGEBEN ; NEUE EINGABE ; BITMUSTER 0000 0000 ; AUSGEBEN ; NEUE EINGABE

8 Lösungen der Übungsaufgaben

2.Aufgabe:

*8000 L1000 *1000 *1002 *1004 *1006 *1008 *100B *100D *1010 *1012 *1014 *1017 *1019 *101C * 101E *1020 *1023 *1025 *1028 *102A *102D *102F * 1031 EOOOO

3E D3 DB FE CA FE C2 3E D3 C3 FE C2 3E D3 C3 FE C2 D3 C3 3E D3 C3

8B 03 01 55 00 OF 17 FO 00 04 FO 23 OF 00 04 00 2D 00 04 FF 00 04

00 10 10 10 10 10 10 10

0001 0002 0003 0004 0005 0006 0007 0008 0009 OOOA OOOB OOOC OOOD OOOE 000F 0010 0011 0012 0013 0014 0015 0016 0017 0018 0019 001A

>; UEBUNGEN 4 5.4 AUFGABE >MONI OOOOH EQU > ORG 1000H >START A ,8BH MVI 03H > OUT 01H >LOOP IN 55H > CPI MONI > JZ OFH > CPI L00P1 > JNZ A.OFOH > MVI 00 H > OUT LOOP > JHP OFOH >L00P1 CPI JNZ > L00P2 A.OFH > MVI OOH > OUT JMP > LOOP OOH >L00P2 CPI > JNZ L00P3 OOH > OUT > JMP LOOP A.OFFH >L00P3 MVI OOH > OUT > JMP LOOP > END

2 MONITORADRESSE ADRESSZAEHLER STEUERBYTE A=AUS B= EIN NACH STEUERREGISTER KIPPSCHALTER LESEN BITMUSTER 0101 0101 ? JA: SPRUNG NACH MONITOR BITMUSTER 0000 1111 ? NEIN: WEITER JA: MUSTER 1111 0000 LADEN AUSGEBEN NEUE EINGABE BITMUSTER 1111 0000 ? NEIN: WEITER JA: MUSTER 0000 1111 LADEN AUSGEBEN NEUE EINGABE BITMUSTER 0000 0000 ? NEIN: FEHLER MUSTER AUSGEBEN NEUE EINGABE FEHLER: MUSTER 1111 1111 AUSGEBEN NEUE EINGABE

0001 0002 0003 0004 0005 0006 0007 0008 0009 OOOA OOOB OOOC OOOD OOOE OOOF 0010 0011 0012 0013 0014 0015 0016 0017 0018 0019 001A 001B 001C 001D

>; UEBUNG 4.5.4 AUFGABE 3 1000H > ORG ADRESSZAEHLER >START A.8BH STEUERBYTE A=AUS B=EIN MVI > 03H NACH STEUERREGISTER OUT IN >L00P 01H KIPPSCHALTER LESEN > RAL B7 NACH CARRY > JNC L00P1 B7=0: WEITER > A.OCOH MVI MUSTER 1100 0000 LADEN > OOH AUSGEBEN OUT > JMP LOOP NEUE EINGABE >L00P1 RAL B6 NACH CARRY > JNC L00P2 B6=0: WEITER > A.OFOH MVI MUSTER 1111 0000 LADEN > OUT OOH AUSGEBEN > JMP LOOP NEUE EINGABE >L00P2 RAL B5 NACH CARRY > JNC L00P3 B5=0: WEITER > A.OFCH MVI MUSTER 1111 1100 LADEN > OOH OUT AUSGEBEN > JMP LOOP NEUE EINGABE >L00P3 RAL B4 NACH CARRY > JNC L00P4 B4=0: FEHLER > A.OFFH MVI MUSTER 1111 1111 LADEN > OOH OUT AUSGEBEN > JMP LOOP NEUE EINGABE >L00P4 A,OOH MVI FEHLER: MUSTER 0000 0000 > OUT OOH AUSGEBEN > JMP LOOP NEUE EINGABE > END

3.Auf g ä b e :

L1000 *1000 *1002 *1004 *1006 *1007 *100A *100C *100E *1011 * 1012 *1015 * 1017 *1019 *101C *101D *1020 *1022 *1024 *1027 *1028 *102B *102D *102F *1032 * 1034 * 1036 EOOOO

3E D3 DB 17 D2 3E D3 C3 17 D2 3E D3 C3 17 D2 3E D3 C3 17 D2 3E D3 C3 3E D3 C3

8B 03 01 11 10 CO 00 04 10 1C 10 FO 00 04 10 27 10 FC 00 04 10 32 10 FF 00 04 10 00 00 04 10

351

352

8 Lösungen der Übungsaufgaben

Abschnitt 4.6.5 Programmschleifen

1. Auf gäbe:

L1000 *1000 *1002 *1004 *1006 *1007 *1009 *100C * 100D *1010 *1013 *1014 * 1015 *1016 * 1019 E0000

3E D3 06 78 D3 CD 04 C3

8B 03 00 00 10 10 06 10

21 8C 20 2B 7C B5 C2 13 10 C9

0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B OOOC 000D 000E 000F 0010 0011 0012

>; UEBUNGEN 4.6.5 AUFGABE 1 > ORG 1000H ADRESSZAEHLER >START A.8BH STEUERBYTE A=AUS B=EIN MVI > OUT 03H NACH STEUERREGISTER > MVI B.OOH ZAEHLER ANFANGSWERT ZAEHLER NACH AKKU >100P MOV A,B > OUT OOH ZAEHLER AUSGEBEN > CALL WARTE 100 MS WARTEN > INR B ZAEHLER + 1 JMP > SCHLEIFE LOOP >; UNTERPROGRAMM 100 MS ODER 200 000 TAKTE BEI 2 MHZ >WARTE LXI H.8332 10 TAKTE: ANFANGSWERT >WARTE1 DCX H 6 TAKTE: ZAEHLER - 1 > MOV A,H 4 TAKTE: AUF NULL TESTEN > ORA L 4 TAKTE: > JNZ WARTE1 10 TAKTE: BEI UNGLEICH WEITER > RET 10 TAKTE: RUECKSPRUNG > END

0001 0002 0003 0004 0005 0006 0007 0008 0009 OOOA OOOB OOOC OOOD OOOE 000F 0010

>; UEBUNG 4.6 5 AUFGABE 2 ADRESSZAEHLER 1000H > ORG STEUERBYTE A=AUS B=EIN A.8BH >START MVI NACH STEUERREGISTER 03 H > OUT A.01H ANFANGSWERT >LOOP MVI AUSGEBEN OOH OUT >LOOP1 B,A ZAEHLER RETTEN > MOV SCHALTER LESEN IN 01H >L00P2 TESTEN A ORA > HIGH: WARTEN JM LOOP2 > A,B ZAEHLER ZURUECK > MOV 06H ENDWERT 6 ? > CPI JA: MIT 1 WIEDER BEGINNEN > JZ LOOP INR NEIN: ZAEHLER ERHOEHEN + > A JMP ZAEHLER AUSGEBEN > L00P1 END >

2.Auf gäbe:

L1000 *1000 *1002 *1004 *1006 »1008 *1009 *100B *100C *100F *1010 *1012 * 1015 *1016 EOOOO

3E D3 3E D3 47 DB B7 FA 78 FE CA 3C C3

8B 03 01 00 01 09 10 06 04 10 06 10

8 Lösungen der Übungsaufgaben

353

3.Aufgabe:

L1000 *1000 3E 8B *1002 D3 03 *1004 *1006 *1007 *1009 *100B *100D

0E 79 D3 DB E6 47

00

*100E *1010 *1012 *1013 *1016 *1017 *1018 *1019 *101B E0000

DB E6 BS CA 47 OC 79 D3 C3

01 01

00 01 01

OE 10

00 OE 10

0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B OOOC 000D OOOE 000F 0010 0011 0012 0013 0014 0015 0016

>; UEBUNG 4.6.5 AUFGABE 3 ORG 100 OH ADRESSZAEHLER > >START A.8BH STEUERBYTE A=AUS B=EIN MVI > OUT 03H NACH STEUERREGISTER >; ANFANGSWERTE LADEN C,0 > MVI ANFANGSWERT ZAEHLER > MOV A,C NACH AKKU AUSGEBEN OUT OOH > IN 01H > KIPPSCHALTER LESEN ANI 01H MASKE 0000 0001 > B,A ZUSTAND NACH B-REGISTER > MOV >; ZAEHLSCHLEIFE IN 01H >LOOP KIPPSCHALTER LESEN ANI > 01H MASKE 0000 0001 CMP MIT ALTEM ZUSTAND VERGLEICHEN > B > JZ LOOP KEINE AENDERUNG > MOV B,A NEUER ZUSTAND NACH B-REGISTER INR > C ZAEHLER + 1 > MOV A,C NACH AKKU OUT OOH AUSGEBEN > JMP > LOOP SCHALTER NEU LESEN END >

Abschnitt 4.7.5 Bereichsadressierung

1.Auf gäbe:

*8000 L1000 *1000 *1002 *1004 *1007 *100A *100C *100D *100E *100F *1010 *1013 *1014 *1015 *1018 *1019 *101C EOOOO

3E D3 21 11 DB 47 70 7C BA C2 7D BB CA 23 C3 C3

8B 03 00 12 FF 17 01

18 10 1C 10 OD 10 00 00

0001 0002 0003 0004 0005 0006 0007 0008 0009 OOOA OOOB OOOC OOOD OOOE 000F 0010 0011 0012 0013 0014

>; UEBUNG 4.7.5 AUFGABE >MONI EQU OOOOH > ORG 1000H >START A.8BH MVI > OUT 03H > LXI H .1200H > LXI D.17FFH > IN 01H > MOV B,A >LOOP M,B MOV > MOV A,H > CMP D > JNZ L00P1 > MOV A,L CMP > E > JZ L00P2 >L00P1 INX H > JMP LOOP JMP MONI >L00P2 > END

MONITORADRESSE ADRESSZAEHLER STEUERBYTE A=AUS B=EIN NACH STEUERREGISTER ANFANGSADRESSE ENDADRESSE MUSTER LESEN NACH B-REGISTER MUSTER NACH SPEICHER HIGH-ENDADRESSE TESTEN UNGLEICH: LOW-ENDADRESSE TESTEN BEIDE ADRESSEN GLEICH: FERTIG ADRESSE + 1 SCHLEIFE FERTIG: NACH MONITOR

354

8 Lösungen der

Übungsaufgaben

2.Aufgabe:

*8000 L1000 *1000 *1002 *1004 *1006 * 1009 *100C *100D *100E *100F *1012 *1013 *1014 *1017 *1018 *1019 *101C *101D *1020 *1021 *1024 *1027 *1029 *102B *102E *102F * 1032 *1035 *1036 *1039 *103A *103D *103E E0000

3E D3 06 21 11 70 78 BE C2 7C BA C2 7D BB CA 23 C3 04 C3 22 3E D3 CD 2F C3 21 25 C2 2D C2 C9

8B 03 00 00 12 FF 17

24 10 1C 10 20 10 OC 10 06 10 3E 10 00 00 32 10 29 10 00 00 35 10 35 10

0001 0002 0003 0004 0005 0006 0007 0008 0009 OOOA OOOB OOOC OOOD 000E 000F 0010 0011 0012 0013 0014 0015 0016 0017 0018 0019 001A 001B 001C 001D 001E 001F 0020 0021 0022 0023 0024

>; UEBUNG 4.7 5 AUFGABE 2 >M0NI OOOOH EQU MONI TORADRESSE 1000H > ORG ADRESSZAEHLER >START A.8BH STEUERBYTE A=AUS B=EIN MVI > OUT 03H NACH STEUERREGISTER > B.OOH MVI ANFANGS - TESTWERT >NEU LXI H.1200H ANFANGSADRESSE > D.17FFH LXI ENDADRESSE MUSTER NACH SPEICHER >LOOP MOV M,B > MOV MUSTER NACH AKKU A.B > CMP M MIT SPEICHER VERGLEICHEN > JNZ FEHL UNGLEICH: FEHLER > MOV A,H HIGH-ENDADRESSE TESTEN > CMP D > JNZ L00P1 UNGLEICH: > LOW-ENDADRESSE TESTEN MOV A,L > CMP E > JZ L00P2 BEIDE ADRESSEN GLEICH: FERTIG >L00P1 INX ADRESSE + 1 H > JMP SCHLEIFE LOOP INR >L00P2 B TESTWERT ERHOEHEN > JMP NEUER DURCHLAUF NEU >FEHL SHLD ADDR FEHLER: ADRESSE NACH ADDR > MVI A,00 AUSGABEMUSTER 0000 0000 >FEHL1 OUT OOH AUSGEBEN > CALL WARTE WARTEN CMA AUSGABE UMSCHALTEN > > JMP FEHL1 LXI H, OOOOH >WARTE ANFANGSWERT >WARTE1 DCR H H - 1 > JNZ WARTE1 BIS H = NULL > DCR L L - 1 JNZ WARTE 1 BIS L = NULL > > RET >ADDR DS FEHLERADRESSE 2 > END

0001 0002 0003 0004 0005 0006 0007 0008 0009 OOOA OOOB

>; UEBUNG 4.7.5 AUFGABE 3 > ORG 1000H ADRESSZAHELER A,8BH >START MVI STEUERBYTE A=AUS B=EIN > OUT 03H NACH STEUERREGISTER > MVI H.OOH HIGH-ADRESSE KONSTANT 00 IN >LOOP 01H LOW-ADRESSE LESEN > MOV L.A NACH L-REGISTER > MOV A,M SPEICHER NACH AKKU > OOH AUSGEBEN OUT > JMP LOOP SCHLEIFE > END

3.Aufgabe:

L1000 *1000 *1002 *1004 *1006 *1008 *1009 *100A *100C EOOOO

3E D3 26 DB 6F 7E D3 C3

8B 03 00 01 00 06 10

8 Lösungen

der Übungsaufgaben

355

Abschnitt 4.8.8 Datenverarbeitung

1. A u f g ä b e :

L1000 *1000 *1002 *1004 *1006 *1007 *1009 *100C *100E *1011 *1013 * 1016 *1018 *101B *101D *101F * 1022 *1024 *1027 *1028 *102A *102C *102F *1030 *1032 * 1034

3E D3 DB 47 FE CA FE CA FE CA FE CA E6 FE CA FE CA 78 E6 FE CA 78 E6 FE CA

8B 03 01 C3 3E CD 3E DD 3E FD 3E C7 C2 3E C4 3E

10 10 10 10

10 10

E7 22 45 10 CF 01 4C 10

* 1 0 3 7 3 E 00 * 1 0 3 9 D3 00 * 1 0 3 B C 3 04 10 * 1 0 3 E 3E FF * 1 0 4 0 D3 00 * 1 0 4 2 C3 04 10 * 1 0 4 5 3 E OF * 1 0 4 7 D3 00 * 1 0 4 9 C3 04 10 * 1 0 4 C 3 E FO * 1 0 4 E D3 00 * 1 0 5 0 C 3 04 10 E0000

0001 0002 0003 0004 0005 0006 0007 0008 0009 OOOA OOOB OOOC OOOD 000E OOOF 0010 0011 0012 0013 0014 0015 0016 0017 0018 0019 001A 001B 001C 001D 00 I E 001F 0020 0021 0022 0023 0024 0025 0026 0027 0028 0029 002A 002B 002C

UEBUNGEN 4.Î3.8 AUFGABE 1 ADRESSZAEHLER 1000H > ORG STEUERBYTE A=AUS B = E I N A.8BH >START MVI NACH STEUERREGISTER 03H > OUT IN 01H CODE LESEN >L00P NACH B - R E G I S T E R RETTEN B,A > MOV 0C3H CODE C3 FUER JMP ? > CPI SPRG J A : SPRUNGBEFEHLE > JZ OCDH CODE CD FUER CALL ? > CPI SPRG J A : SPRUNGBEFEHLE > JZ ODDH CODE DD FUER JNX ? > CPI J A : SPRUNGBEFEHLE SPRG > JZ OFDH CODE FD FUER JX ? > CPI J A : SPRUNGBEFEHLE SPRG > JZ ANI 0C7H MASKE 1100 0 1 1 1 > 0C2H MUSTER 11XXX010 J BED ? > CPI J A : BEDINGTER SPRUNG SPRG > JZ 0C4H MUSTER 11XXX100 C BED ? > CPI SPRG J A : BEDINGTER UNTERPROGR.AUFR > JZ A,B CODE NEU NACH AKKU > MOV ANI 0E7H MASKE 1110 0 1 1 1 > > 22 H MUSTER 001X X010 DATENSP. CPI DATA J A : D I R E K T E DATENADRESSIERUNG > JZ A,B CODE NEU NACH AKKU > MOV ANI OCFH MASKE 1100 1111 LXI > > 01H MUSTER OOXX 0 0 0 1 LXI ? CPI LXIB JA: LXI-BEFEHL > JZ K E I N 3 - B Y T E -BEFEHL > A.OOH 0 0 0 0 0 0 0 0 LADEN UND MVI OOH AUSGEBEN > OUT NEUEN CODE LESEN > JMP LOOP SPRUNG- UND UNTERPR0GRAW1 BEFEHLE A.OFFH >SPRG 1111 1111 LADEN UND MVI OOH AUSGEBEN > OUT JMP LOOP NEUEN CODE LESEN > D I R E K T E DATENADRESSIERUNG LDA STA LHLD SHLD >DATA A.OFH 0 0 0 0 1111 LADEN UND MVI AUSGEBEN > OUT OOH > JMP LOOP NEUEN CODE LESEN LXI B D H SP L X I - BEFEHLE A.OFOH >LX I B 1111 0000 LADEN UND MVI > OOH AUSGEBEN OUT JMP NEUEN CODE LESEN > LOOP > END

8 Lösungen der Übungsaufgaben

356

2.Auf gäbe: L1000 *1000 *1002 *1004 *1006 *1008 *1009 *100B *100C * 100F *1010 »1012 *1015 * 1017 *1018 E0000

3E D3 3E D3 47 OB B7 FA 78 FE CA C6 27 C3

8B 03 01 00 01 09 10 49 04 10 01 06 10

0001 0002 0003 0004 0005 0006 0007 0008 0009 OOOA OOOB OOOC OOOD 000E 000F 0010 0011

>; UEBUNG 4.8.8 AUFGABE 2 > ORG 1000H AORESSZAEHLER >START A.8BH MVI STEUERBYTE A=AUS B=EIN 03H > OUT NACH STEUERREGISTER >L00P A.01H MVI ANFANGSWERT OOH >L00P1 OUT AUSGEBEN > B,A MOV ZAEHLER RETTEN >L00P2 IN 01H SCHALTER LESEN TESTEN > ORA A > JM L00P2 HIGH: WARTEN A,B > MOV ZAEHLER ZURUECK > 49H CPI ENDWERT 49 ? > JA: MIT 1 WIEDER BEGINNEN JZ LOOP > ADI 01H NEIN: 1 ADDIEREN > DAA DEZIMALKORREKTUR > JMP L00P1 ZAEHLER AUSGEBEN > END

0001 0002 0003 0004 0005 0006 0007 0008 0009 OOOA OOOB OOOC OOOD 000E 000F 0010 0011 0012 0013 0014 0015 0016 0017 0018 0019 001A 001B 001C 001D

>; UEBUNG 4.( .8 AUFGABE 3 1000H ADRESSZAEHLER > ORG STEUERBYTE A=AUS B=EIN A,8BH >START MVI 03H NACH STEUERREGISTER > OUT IN 01H ZAHL LESEN >LOOP B,A > MOV ZAHL NACH B-REGISTER ADD A MAL 2 > > JC FEHL CARRY = 1: UEBERLAUF ADD A MAL 2 > CARRY = 1: UEBERLAUF > JC FEHL > ADD B + ZAHL = MAL 5 FEHL > JC CARRY = 1: UEBERLAUF > ADD A MAL 2 = MAL 10 > JC FEHL CARRY = 1: UEBERLAUF OOH PRODUKT AUSGEBEN > OUT > JMP LOOP NEUE EINGABE BLINKZAEHLER >FEHL MVI C,10 > XRA A AKKU LOESCHEN OOH AUSGEBEN >FEHL1 OUT > LXI H ,0000 WARTEZAEHLER H >FEHL2 DCR HI GH-TEIL - 1 > JNZ FEHL2 ' BIS NULL ZAEHLEN L LOW-TEIL - 1 > DCR FEHL2 BIS NULL ZAEHLEN > JNZ > CMA AKKU KOMPLEMENTIEREN C BLINKZAEHLER - 1 > DCR FEHL1 UNGLEICH NULL: WEITER > JNZ LOOP GENUG GEBLINKT: WEITER > JMP > END

0001 0002 0003 0004 0005 0006 0007 0008 0009 OOOA OOOB OOOC

>; UEBUNG 4.8.8 AUFGABE 4 ADRESSZAEHLER > ORG 100 OH A.8BH STEUERBYTE A=AUS B=EIN >START MVI > OUT 03H NACH STEUERREGISTER IN 01H >LOOP VARIABLE LESEN > ADI 80H KONSTANTE ADDIEREN > PUSH PSW BEDINGUNGSREGISTER NACH IM L-REGISTER ZURUECK > POP H NACH AKKU > MOV A ,L > OUT OOH AUSGEBEN JMP > LOOP NEUE VARIABLE LESEN > END

3.Aufgabe: L1000 *1000 *1002 * 1004 *1006 *1007 *1008 *100B *100C *100F »1010 *1013 *1014 * 1017 * 1019 *101C * 101E * 101F * 1021 *1024 »1025 *1028 *1029 *102C *102D *102E * 1031 EOOOO

3E D3 DB 47 87 DA 87 DA 80 DA 87 DA D3 C3 OE AF D3 21 25 C2 2D C2 2F OD C2 C3

8B 03 01 1C 10 1C 10 1C 10 1C 10 00 04 10 OA 00 00 00 24 10 24 10 1F 10 04 10

4. A u f g ä b e : L1000 »1000 *1002 *1004 * 1006 * 1008 *1009 *100A * 10OB *100D EOOOO

3E D3 DB C6 F5 E1 7D D3 C3

8B 03 01 80

00 04 10

9

Ergänzende und weiterführende Literatur

Siemens Datenbücher Mikrocomputer Bausteine Mikroprozessor-System SAB 8085 Datenbuch Mikroprozessor-System SAB 8080 Band 3: Peripheriebausteine F i r m e n s c h r i f t e n Siemens AG Intel Microprocessor and Peripheral Handbook Volume I - Microprocessor Volume !I - Peripheral F i r m e n s c h r i f t e n Intel National Semiconductor Corporation Series 32000 Databook S.255: NS16450 / INS 8250A ACE Firmenschrift National Semiconductor H.J. Blank, H. Bernstein PC-Schaltungstechnik in der Praxis Markt & Technik Verlag AG Haar bei München 1989 G. Schmitt Pascal-Kurs, technisch orientiert Band 2: Anwendungen Oldenbourg Verlag München 1991 c ' t Magazin f ü r Computertechnik H e f t e 1 bis 12 des Jahrgangs 1988 Aufsatzreihe PC - Bausteine Verlag H. Heise Hannover

Zahlentabellen

mg 2

3

4

5

6

7

8

9

A

B

c

D

E

F

0002 0018 0034 0050 0066 008 2 0098 0114

0003 0019 0035 0051 006 7 008 3 0099 0115

0004 0020 0 0 36 0052 006 8 0084 0100 0116

000 5 0021 0037 0053 0069 008 5 0101 0117

0006 0007 0022 0 0 2 3 0 0 3 8 0 0 39 0054 0 0 5 5 0070 0 0 7 1 0086 0 0 8 7 0102 0 1 0 3 0118 0 1 1 9

0008 0024 0040 0056 0072 0088 0104 0120

0009 0010 0025 0026 0041 004 2 0057 0058 0073 0074 0089 0090 0105 0106 0121 0122

0011 0027 004 3 0059 007 5 0091 0107 0123

0012 0028 0044 0060 007 6 0092 0108 0124

0013 0029 004 5 0061 0077 0093 0109 0125

0014 0 0 30 004 6 0062 0078 0094 0110 0126

0130 0146 0162 0178 0194 0210 0226 0242

0131 0132 0147 0148 0163 0164 0179 0180 0195 0196 0211 0212 0227 0228 0243 0244

0133 0149 0165 0181 0197 0213 0229 0245

0134 0 1 3 5 0150 0151 0166 0 1 6 7 0182 0 1 8 3 0198 0 1 9 9 0214 0 2 1 5 0230 0 2 3 1 0246 0247

0136 0152 0168 0184 0200 0216 0232 0248

0137 0138 0153 0154 0169 0170 0185 0186 0201 0202 0217 0218 0233 0234 0249 0250

0139 0155 0171 0187 0203 0219 0235 0251

0140 0156 0172 0188 0204 0220 0236 0252

0141 0157 0173 0189 0205 0221 0237 0253

0142 014 3 0158 0159 0174 0175 0190 0191 0206 0207 0222 0223 0238 0239 0254 0255

0258 0274 0290 0306 0322 0338 0354 0370

0259 0260 0275 0276 0291 0292 0307 0308 0323 0324 0339 0340 0355 0366 0371 0372

0261 0277 0293 0309 0325 0341 0357 037 3

0262 0278 0294 0310 0326 0342 0358 0374

0263 0264 0279 0280 0295 0296 0311 0312 0327 0328 0343 0344 0369 0360 0375 0376

0265 0266 0281 0282 0297 0298 0313 0314 0329 0330 0345 0346 0361 0362 0377 0378

0267 0268 0283 0284 0299 0300 0315 0316 0331 0332 0347 0348 0363 0364 0379 0380

0269 0270 0271 0285 0286 0287 0301 0302 0303 0317 0318 0319 0333 0334 0335 0349 0350 0361 0365 0366 0367 0381 0382 0383

0386 0402 0418 0 4 34 0450 0466 0482 0498

0387 0403 0419 0 4 35 0451 04 6 7 048 3 0499

0388 0404 0420 0 4 36 0452 0468 0484 0500

0389 0405 0421 0437 0453 0469 0485 0501

0390 0406 0422 0438 0454 0470 0486 0502

0391 0407 0423 0439 0455 0471 0487 0503

0392 0408 0424 0440 0456 04 7 2 0488 0504

0393 0394 0409 0410 0425 0426 0441 0442 0457 0458 0473 0474 0 4 8 9 04 9 0 0505 0506

0395 0396 0411 0412 0427 0428 0443 0444 0459 0460 0475 0476 0 4 9 1 04 92 0507 0508

0397 0413 0429 0445 0461 0477 0493 0509

6

2

0514 0530 0546 0562 0578 0594 0610 0626

3

0515 0531 0547 056 3 0579 0595 0611 0627

0642 0643 0658 0659 0674 0675 0690 0691 0706 0707 0722 0723 0 7 3 8 07 39 0754 0755 0770 0786 0802 0818 0 8 34 0850 0866 0882

0398 0414 0 4 30 0446 0462 0478 0 4 94 0510

0 5 1 6 0517 0518 0 5 3 2 0 5 3 3 0534 0548 0549 0550 0564 0565 0566 0 5 8 0 0 5 8 1 0582 0596 0597 0598 0 6 1 2 0 6 1 3 0614 0 6 2 8 0 6 2 9 06 30

u

5

0519 0535 0551 0567 0583 0599 0615 0 6 31

0520 0536 0552 0568 0584 0600 0616 0632

0521 0522 0537 0538 0553 0554 0569 0570 0585 0586 0601 0602 0617 0618 0 6 3 3 06 34

0523 0539 0555 0571 0587 0603 0619 0635

0524 0540 0556 0572 0588 0604 06 20 0636

0525 0541 0557 0573 0589 0605 0621 0637

0526 0527 0542 0543 0558 0569 0574 0575 0590 0591 0606 0607 0622 0623 0638 0639

06 4 4 0660 0676 0692 0708 0724 0740 0756

0645 0661 0677 0693 0709 0725 0741 0757

0646 0662 0678 0694 0710 07 26 0742 0758

0647 0663 0679 0695 0711 0727 0743 0759

0648 0664 0680 0696 0712 0728 0744 0760

0 6 4 9 06 50 0665 0666 0681 0682 0697 0698 0713 0714 0 7 2 9 07 30 0745 0746 0761 0762

0651 0667 0683 0699 0715 0731 0747 0763

0652 0668 0684 0700 0716 0732 0748 0764

0653 0669 0685 0701 0717 0733 0749 0765

0654 0670 0686 0702 0718 0 7 34 0750 0766

07 07 08 08 08 08 08 08

0774 0790 0806 0822 0838 0854 0870 0886

0775 0791 0807 0823 0 8 39 0855 0871 0887

0776 0792 0808 0824 0840 0856 0872 0888

0777 0778 0793 0794 0809 0810 0825 0826 0841 0842 0857 0858 0873 0874 0889 0890

0779 0780 0795 0796 0811 0812 0827 0828 0843 0844 0859 0860 0875 0876 0891 0892

0781 0797 0813 0829 0845 0861 0877 0893

0782 0798 0814 0830 0846 0862 0878 0894

0 9 0 0 0 9 0 1 0902 0915 0917 0918 0 9 3 2 0 9 3 3 0934 0948 0949 0950 0 9 6 4 0 9 6 5 0966 0 9 8 0 0 9 8 1 0982 0 9 9 6 0997 0998 1 0 1 2 1 0 1 3 1014

0903 0919 0935 0951 0967 098 3 0999 1015

0904 0920 0936 0952 0968 0984 1000 1016

0905 0906 0907 0921 0922 0923 0937 0938 0939 0953 0954 0955 0969 0970 0971 0985 0986 0987 1001 1002 1003 1017 1018 1019

0908 0924 0940 0956 0972 0988 1004 1020

0909 0925 0941 0957 097 3 0989 1005 1021

0910 0911 0926 0927 0942 0943 0958 0959 0974 0975 0990 0991 1006 1007 1022 1023

0 7 7 1 07 72 0 7 8 7 07 8 8 0 8 0 3 08 04 0 8 1 9 08 20 0 8 3 5 0 8 36 0 8 5 1 08 52 0 8 6 7 0 8 68 0 8 8 3 0 8 84

0898 0899 0914 0915 0930 0931 0946 0947 0 9 6 2 096 3 0978 0979 0994 0995 1010 1011

0015 0031 004 7 006 3 0079 0095 Olii 0127

73 89 05 21 37 53 69 85

7

8

9

A

B

c

D

E

F

359

ASCII-Zeichen-Tabelle

HEX ASCII HEX ASCII HEX ASCII HEX ASCII HEX ASCII HEX ASCII HEX ASCII HEX ASCII 00

NUL

10

DLE

20

01

SOH

11

DC1

21

02

STX

12

DC2

03

ETX

1 3

04

EOT

14

@ 5

50

41

2

42

33

3

$

34

4

30

0

40

p

60

1

31

i

A

51

0

61

22

tt

32

B

52

R

62

DC3

23

«

43

C

53

S

63

DC4

24

44

0

54

T

64

\

v

70

p

a

71

q

b

72

r

c

73

s

d

74

t

05

ENQ

15

NAK

25

i

35

5

45

E

55

U

65

e

75

u

06

ACK

16

SYN

26

«

36

6

46

F

56

V

66

1

76

V

07

BEL

17

ETB

27



37

7

47

G

57

w

67

9

77

w

08

BS

18

CAN

28

(

38

8

48

H

58

X

68

h

78

X

09

HT

19

EM

29

)

39

9

49

1

59

Y

69

:

79

Y

0A

LF

1A

SUB

2A

*

3A

4A

J

5A

z

6A

j

7A

z



3B

;

4B

K

5B

3C




4E

N

5E

A '

3F

?

4F

0

5F

OB

VT

1B

ESC

2B

OC

FF

1C

FS

2C

OD

CR

10

GS

2D

OE

SO

1E

RS

2E

OF

S 1

tF

US

2F

-

/

t * \



0 o

6B

k

7B

{a

6C

1

7C

1

6D

m

7D

6E

n

7E

~

6F

o

7F

DEL a

A S C I l-Zeichen-Tabelle DEZ HEX KPL 00 00 00 01 01 FF FE 02 02 FD 03 03 04 04 FC 05 FB 05 06 06 FA 07 07 F9 08 08 F8 F7 09 09 F6 10 OA F5 1 1 OB F4 12 OC F3 1 3 OD 14 OE F2 15 FI OF 16 10 FO 17 EF 11 EE 16 12 ED 19 13 20 14 EC EB 21 15 16 EA 22 17 23 E9 18 24 E8 E7 25 19 E6 26 1A 27 1 B E5 E4 28 1C 29 1 D E3 IE E2 30 1 F E1 31

DEZ HEX KPL 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63

20 21 22 23 24 25 26 27 28 29 2A 2B 2C 20 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F

EO DF DE OD DC DB DA D9 D8 D7 D6 D5 04 D3 02 DI DO CF CE CD CC CB CA C9 C8 C7 C6 C5 C4 C3 C2 CI

DEZ HEX KPL 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 "93 94 95

40 CO 41 BF 42 BE 43 BD 44 BC 45 BB 46 BA 47 B9 48 B8 B7 49 4A B6 4B B5 B4 4C 4 D B3 4E B2 B1 4F BO 50 51 AF 52 AE 53 AD 54 AC 55 AB 56 AA 57 A9 58 A8 A7 59 bA A6 5B " A5 A4 5C 5D A3 5E A2 5 F Al

DEZ HEX KPL 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 1 11 1 12 1 1 3 114 115 1 16 117 1 18 1 19 120 121 122 123 1 24 125 126 127 1 28

60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71

12

73 74 75 76 77 78 79 /A 7B 7C 7D 7E 7F

AO 9F 9E 9D 9C 9B 9A 99 98 97 96 95 94 93 92 91 90 8F 6E 8D 8C 8B 8A 89 88 87 86 85 84 83 82 81 80

1

0 « 13

359

ASCII-Zeichen-Tabelle

HEX ASCII HEX ASCII HEX ASCII HEX ASCII HEX ASCII HEX ASCII HEX ASCII HEX ASCII 00

NUL

10

DLE

20

01

SOH

11

DC1

21

02

STX

12

DC2

03

ETX

1 3

04

EOT

14

@ 5

50

41

2

42

33

3

$

34

4

30

0

40

p

60

1

31

i

A

51

0

61

22

tt

32

B

52

R

62

DC3

23

«

43

C

53

S

63

DC4

24

44

0

54

T

64

\

v

70

p

a

71

q

b

72

r

c

73

s

d

74

t

05

ENQ

15

NAK

25

i

35

5

45

E

55

U

65

e

75

u

06

ACK

16

SYN

26

«

36

6

46

F

56

V

66

1

76

V

07

BEL

17

ETB

27



37

7

47

G

57

w

67

9

77

w

08

BS

18

CAN

28

(

38

8

48

H

58

X

68

h

78

X

09

HT

19

EM

29

)

39

9

49

1

59

Y

69

:

79

Y

0A

LF

1A

SUB

2A

*

3A

4A

J

5A

z

6A

j

7A

z



3B

;

4B

K

5B

3C




4E

N

5E

A '

3F

?

4F

0

5F

OB

VT

1B

ESC

2B

OC

FF

1C

FS

2C

OD

CR

10

GS

2D

OE

SO

1E

RS

2E

OF

S 1

tF

US

2F

-

/

t * \



0 o

6B

k

7B

{a

6C

1

7C

1

6D

m

7D

6E

n

7E

~

6F

o

7F

DEL a

A S C I l-Zeichen-Tabelle DEZ HEX KPL 00 00 00 01 01 FF FE 02 02 FD 03 03 04 04 FC 05 FB 05 06 06 FA 07 07 F9 08 08 F8 F7 09 09 F6 10 OA F5 1 1 OB F4 12 OC F3 1 3 OD 14 OE F2 15 FI OF 16 10 FO 17 EF 11 EE 16 12 ED 19 13 20 14 EC EB 21 15 16 EA 22 17 23 E9 18 24 E8 E7 25 19 E6 26 1A 27 1 B E5 E4 28 1C 29 1 D E3 IE E2 30 1 F E1 31

DEZ HEX KPL 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63

20 21 22 23 24 25 26 27 28 29 2A 2B 2C 20 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F

EO DF DE OD DC DB DA D9 D8 D7 D6 D5 04 D3 02 DI DO CF CE CD CC CB CA C9 C8 C7 C6 C5 C4 C3 C2 CI

DEZ HEX KPL 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 "93 94 95

40 CO 41 BF 42 BE 43 BD 44 BC 45 BB 46 BA 47 B9 48 B8 B7 49 4A B6 4B B5 B4 4C 4 D B3 4E B2 B1 4F BO 50 51 AF 52 AE 53 AD 54 AC 55 AB 56 AA 57 A9 58 A8 A7 59 bA A6 5B " A5 A4 5C 5D A3 5E A2 5 F Al

DEZ HEX KPL 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 1 11 1 12 1 1 3 114 115 1 16 117 1 18 1 19 120 121 122 123 1 24 125 126 127 1 28

60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71

12

73 74 75 76 77 78 79 /A 7B 7C 7D 7E 7F

AO 9F 9E 9D 9C 9B 9A 99 98 97 96 95 94 93 92 91 90 8F 6E 8D 8C 8B 8A 89 88 87 86 85 84 83 82 81 80

1

0 « 13

360

10

Anhang

Sinnbilder für Ablaufpläne und Struktogramme

Befehlstabellen des 8085A

361

Befehlstabellen des 8085A

Befehl ACI ADC ADD ADI ANA ANI CALL CC CM CMA CMC CMP CNC CNZ CP CPE CPI CPO CZ DAA DAD DCR DCX DI EI HLT IN INR INX JC JM JMP JNC JNZ JP JPE JPO JZ LDA LDAX

Operand konstante register register konstante register konstante adresse adresse adresse

register adresse adresse adresse adresse konstante adresse adresse reg.-paar register reg.-paar

Wirkung addiere zum Akku die Konstante und das Carrybit addiere zum Akku ein Register und das Carrybit addiere zum Akku ein Register addiere zum Akku die Konstante bilde das logische UND des Akkus mit einem Register bilde das logische UND des Akkus mit der Konstanten rufe ein Unterprogramm unbedingt rufe Unterprogramm nur, wenn das Carrybit 1 ist rufe Unterprogramm nur, wenn das Vorzeichenbit(S) 1 ist komplementiere den Akku (Einerkomplement) komplementiere das Carrybit vergleiche den Akku mit dem Register (Testsubtraktion) rufe Unterprogramm nur, wenn das Carrybit 0 ist rufe Unterprogramm nur, wenn Ergebnis ungleich Null ist rufe Unterprogranm nur, wenn Vorzeichenbit (S) 0 ist rufe Unterprogramm nur, wenn Paritätsbit 1 ist vergleiche Akku mit der Konstanten (Testsubtraktion) rufe Unterprogramm nur, wenn Paritätsbit 0 ist rufe Unterprogramm nur, wenn Ergebnis gleich Null ist korrigiere den Akku im BCD-Code addiere Registerpaar zum HL-Registerpaar (16 Bit) vermindere Reqister um 1 vermindere Registerpaar um 1 (16 Bit) sperre alle Interrupts (Interrupt-Flipflop = 0) gib alle Interrupts frei (Interrupt-Flipflop = 1) anhalten und auf Interrupt warten lade den Akku mit einem Eingabeport erhöhe Register um 1 erhöhe Registerpaar um 1 (16 Bit)

port register reg.-paar adresse springe nur, wenn adresse springe nur, wenn adresse springe immer adresse springe nur, wenn adresse springe nur, wenn adresse springe nur, wenn adresse springe nur, wenn adresse springe nur, wenn adresse springe nur, wenn adresse lade den Akku mit B oder D lade den Akku mit

das Carrybit 1 ist das Vorzeichenbit (S-Bit) 1 ist das das das das das

Carrybit 0 ist Ergebnis ungleich Null ist (Z=0) Vorzeichenbit (S-Bit) 0 ist Paritätsbit 1 ist Paritätsbit 0 ist

das Erqebnis qleich Null ist (Z=1) dem Inhalt eines Speicherbytes Speicherbyte (Adresse in BC oder DE)

362

10 Anhang

Befehl Operand LHLD adresse LXI rp.konst regl ,reg2 MOV MVI reg,konst NOP ORA register ORI konstante OUT port PCHL POP reg.-paar PUSH reg.-paar RAL RAR RC RET RIM RLC RM RNC RNZ RP RPE RPO RRC RST 0 - 7 RZ SBB register SBI konstante SHLD adresse SIM SPHL STA adresse STAX B oder D STC SUB register SUI konstante XCHG XRA register XRI konstante XTHL

Wirkung lade L mit adressiertem Byte, H mit folgendem Byte lade Registerpaar mit einer 16-Bit-Konstanten lade Register regl mit Register reg2 lade Register mit der Konstanten tu nichts (Zeitverzögerung oder Platzhalter) bilde das logische ODER des Akkus mit einem Register bilde das logische ODER des Akkus mit der Konstanten speichere den Akku in den Ausgabeport lade den Befehlszähler mit dem HL-Registerpaar (Sprung) hole das Registerpaar aus dem Stapel , Stapelzeiger + 2 bringe das Registerpaar in den Stapel , Stapelzeiger -2 schiebe den Akku mit dem Carrybit zyklisch links schiebe den Akku mit dem Carrybit zyklisch rechts Rücksprunq nur, wenn das Carrybit 1 ist springe immer aus dem Unterprogramm zurück lade den Akku mit dem Interruptregister schiebe den Akku ohne das Carrybit zyklisch links Rücksprung nur, wenn Vorzeichenbit (S) 1 ist Rücksprunq nur, wenn Carrybit 0 ist Rücksprung nur, wenn Ergebnis ungleich Null ist (Z=0) Rücksprung nur, wenn Vorzeichenbit (S) 0 ist Rücksprung nur, wenn Paritätsbit 1 ist Rücksprung nur, wenn Paritätsbit 0 ist schiebe den Akku ohne Carrybit zyklisch rechts starte Interruptprograirm , Befehlszähler nach Stapel Rücksprung nur, wenn Ergebnis gleich Null (Z=1) subtrahiere Register und Carrybit vom Akku subtrahiere Konstante und Carrybit vom Akku speichere L nach adressiertem Byte, H nach folgendem speichere den Akku in das Interruptregister lade den Stapelzeiger mit dem HL-Registerpaar speichere den Akku in das adressierte Byte speichere Akku nach Speicherbyte (Adresse in BC oder DE) setze das Carrybit 1 subtrahiere Register vom Akku subtrahiere Konstante vom Akku vertausche HL-Registerpaar mit dem DE-Registerpaar bilde das logische EODER des Akkus mit einem Register bilde das logische EODER des Akkus mit der Konstanten vertausche HL-Registerpaar mit den beiden Stapelbytes

Befehlstabellen des 8085A

363

364

10

•> n n r

O T

>

> >> ••-» < > +-» < > C C c +-» IS) + o O o ^ c o o o (i +-J f> CL o: m c «/) •/) z Ci o Z3 C C + + =3 O X X o o U X X < < < < < < < < i >

C 1= c 4-> l/l r r

i/ì w

e 0)

in

cr c

>

CT Ì S T C 2L X T3 3 1 t i CD i n

Ol • z r c i •o JS. a> IbL CD c o

H- M CSI CSJ cs» CSJ CSI CSI CSI

h-

2

CQ



_

a. o

n

•s. Li. r s . Lk r». r>» u . o UJ UJ u_ Li. U D o o o o o

C7) c 3 ai c n > CTI a . C

t-

$

ffi

4-> •M U u «o +J m LO

CM r o


X z CD —1

•>

n V

u ai +-» io

X 3 L) Q O


»

c o f O CO r o

a> 1 + a «a j 4-» L. X c o

u u. a» 4-» 4-> vo

o


a i

n

cn u Q. LO

o

o

rv


> o o m a> 0) a i . Q JD

ri

c n o > CD U u u Q . Q. O. l/l in ut

ai

co a> u TD a» a i ut M i/>

a> a i a> a> a» u t a "O "O • o "O

C fa u 4> Q. O

o

ai c 3 > CTI i r C s X "O X ai r-j CO

a

+-»

a i Ti 1 c -O



o> m

r o CD o O o

a

C7> fca. LO

a» LO i/i 0) c. TP >T3

o

o

CO a .

a.

4J

ai ^

n

DI U ex LO

o> u Q. l/>

a» i_ Q. IO

«

a> a i ut

a> a» u u "O • o

(V c o .o J3 A 4-> 4-» 4-» 4-> II t_

-> TIN

3

38

PC1

< - SOD

4

37

CLK ->

-> RES

4

37

PCO

-> SID

5

36

RESIN < -

PC 5

5

36

P87

-> TRAP

6

35

READY < -

< - TOUT

6

35

PB6

-> RST7.5

7

34

IO/M ->

-> IO/M

7

34

PB5

8085A

40

+5V

-> X1

-> RST6.5

8

33

8

33

PB4

9

32

S1 -> RD ->

-> CE

-> RST5.5

-> RD

9

32

PB3

-> INTR

10

31

WR - >

-> WR

10

31

PB2

< - INTA

11

30

ALE ->

-> ALE

11

30

PB1

ADO

12

29

SO ->

ADO

12

29

PBO

AD1

13

28

A15 ->

AD 1

13

28

PA 7

AD2

14

27

A14 ->

AD2

14

27

PA6

AD3

15

26

A13 ->

AD3

15

26

PA5

AD4

16

25

A12 ->

AD4

16

25

PA4

AD 5

17

24

A11 ->

AD5

17

24

PA3

AD6

18

23

A10 ->

AD6

18

23

PA 2

AD7

19

22

A9

->

AD7

19

22

PA1

GND

20

21

A8

->

GND

20

21

PAO

PA3

1

40

PA4

-> ITOR

1

PA2

2

39

PA5

-> I/OW

2

PA1

3

38

PA6

< - MEMR

3

PAO

4

37

PA7

< - MEMW

-> RD

5

36

WR < -

-> CS

6

35

RESET < -

GND

7

34

DO

-> A1

8

33

-> AO

9

PC7 PC 6

8255A

8257

40

A7 ->

39

A6 ->

38

A5 ->

4

37

A4 ->

-> READY

6

35

A3

-> HLDA

7

34

A2

D1

- ADSTB

8

33

A1

32

02

< - AEN

9

32

AO

10

31

D3

< - HRQ

10

31

+5V

11

30

04

-> CS

11

30

DO

DMA

PC5

12

29

D5

-> CLK

12

29

01

PC 4

13

28

06

-> RESET

13

28

D2

- DACK2

14

27

D3

DACK3 -> DRQ3

15 !

26

D4

PCO

14

27

D7

PC1

15

26

+5V

PC2

16

25

PB7

PC 3

17

24

PB6

16 :

25

DACKO

24

DACK1

PBO

18

23

PB5

-> DRQ2 MA -> DRQ1 18

23

D5

PB1

19

22

PB4

-> DRQO

19

22

D6

PB2

20

21

PB3

GND

20

21

D7

18

DO ->

< - EOC

1

-> E

2

-> CLK

3

-> SC

ZN427

17

D1 ->

-> D1

1

16

D2 ->

-> DO

2

4

15

D3 ->

frei

3

Rext

5

14

D4 ->

-> EN

4

13

D5 < -

-> A i n

6

13

D5 ->

< - Aout

5

12

D6 < D7 < -

A/D

ZN428 D/A

16

D2 < -

15

D3 < -

14

D4 < -

-> V r i n

7

12

D6 ->

-> V r i n

6

11

< - l/rout

8

11

D7 ->

XI

1

- > X2

2

AO < -

37

PO < - >

-> K T

5

36

P1 < - >

- > IOW

6

35

P2 < - > P3 < - >

- > IOR

7

34

8

33

P4 < - >

< - > DO

9

32

PS < - >

< - > 01

JO

31

P6 < - >

< - > D2

11

30

P7 < - >

< - > D3

12

29

ERROR < -

< - > 04

13

28

SLCT < -

< - IRQ - > CS - > POE GND

IR7 < -

< - > D6

5

24

1R6 < -

< - > D5

6

23

IR5 < -

< - > D4

7

22

IR4 < -

< - > D3

8

21

IR3 < -

< - > D2

9

28

IR2 < -

< - > D1

10 I

19I

IR1 < -

< - > DO

11

18

IRÒ < -

12

17

INT - >

< - > CAS1

13

16

SP/EN < - >

GND

14

15

CAS2 < - >

A14 Vpp Vpp Vpp A 1 2 A12 A12 A 1 2 A12! A7 A7 A7 A7 A7 A7

A7 IA7

A6

A6

A5

A5

A4

A4

A3

A3

A2

A2

A1 AO DO

A6

BUSY < STRÖB < - > ÄÜTO < - >

18

23

19

22

INTT < - >

20

21

SLCT < - >

24

+5V

< - > 07

1

< - > 06

2

23

WR < -

< - > D5

3 Timer

22

RD < -

8253

< - > D4

4

21

CS < -

< - > D3

5

20

A1 < -

< - > D2

6

19

AO < -

< - > DI

7

18

CLK2 < -

< - > 00

8

17

0UT2 - >

- > CLKO

9

16

GATE2 < -

< - OUTO

10

15

CLK1 < -

- > GATEO

11

14

GATE1 < -

GMD

12

13

0UT1 - >

a> 4>% >J CD

a> >1 CS ^

1 EPROM 2716 (2 KByte)

RAM 6116 (2 KByte)

EPROM 2716 (2 KByte)

EPROM 2764 (8 KByte)

EPROM 2732 (4 KByte)

RAM 6264 (8 KByte)

EPROM 27128 (16 KByte)

RAM xx256 (32 KByte)

EPROM 27256 (32 KByte)

1

< - > CASO

25 24

PE_ D7

PIC

16 17

EPROM 27128 (16 KByte)

INTA < -

4

3

27 26

EPROM 27256 (32 KByte)

AO < -

26

- > RD

14 15

RAM 6264 (8 KByte)

+5V

27

RAM 6116 (2 KByte)

28

8259

PAI

3

< - DIR

< - > 07

1

A1 < -

38

< - > 05

2

+5V

39

4

< - > 06

- > WR

40

DCLK

< - CLK C£

82C11

Vcc VCC Vcc Vcc Vcc PtW ME PGM A14 MÉ Vcc VCC Vcc

A6

A6

A6

A6

A5

A5

AS

A5

A5

A5

A4

A4

A4

A4

A4

A4

A3

A3

A3

A3

A3

Ì A3

A2

A2

A2

A2

A2 !A2

A1

A1

AI

A1

A1

AI

AO

AO

AO

AO

AO

:

AO

9 (7) 10 ( 8 )

( 1 8 ) 20

AO

19

07

D7

07

D7

07

D7

07

07

00

DO

00

DO ¡ 0 0

DO

: DO

11 !(9)

1(16) 118

D6

06

D6

D6

06

D6

06

06

A1

(23)125

A8

A8

A8

S (3)

( 2 2 ) 124

A9

A9

A9

6 (4)

Vpp DE

7 (5)

( 2 1 ) 23 ( 2 0 ) ¡22

8 (6)

(19)¡21 (17)

5F

ÜE

A8

CE2 A13 A13 A 1 3 A8 A8 A8 A 8

A6

A9 A9 A9 A9 A 9 A11 A11 A11 A11 A l 1 A11

«/», Si

OF

¡JE

OF

OE

A I O A I O A I O A I O IA10 A10 A10 A10 tÉ CE CE CE CE CE A

ff

01

DI

DI

01

01

01

01

DI

12 i( 10)1

( 1 5 ) ¡17

05

05

D5

D5

05

05

D5

05

D2

02

02

02

02

D2

02

02

13 ( I D I 14 ( 1 2 )

(14)

D4

D4

04

04

D4

04

04

D4

03

D3

03

D3

03

D3

GND GND GND GND GNO GND GND GND

16

¡(13) ¡15

03

03

368

10 Anhang

Terminalprogramm in Pascal

PHOGHAB pterm; (* Anhang:Terminalprogramm iri Pascal für PC *) Steuerkonstanten COtll IRQ4 USES Crt, Dos Printer; 4800 Baud CONST t = 24; Ohne Par. 8 Daten 2 Stop p = $07; Adresse Schnittstelle COtll X = $03F8; Maske PIC: IRQ4 freigeben irqena = $EF; tlaske PIC: IRQ4 sperren irqdis = $10; PIC; IRQ4 bestaetigen irqack = $64; PIC: Vektor fuer IRQ4 irqvec = $0C; Länge Eingabepuffer np = 60000; (* Endemarke Prog ende : BOOLEAN = FALSE (« Druckermarke druk : BOOLEAN =1 FALSE >1 ; Endemarke Bnpf e mark : CHAR = ARRAY[1 Empfangspuffer zpuf : . .np] OF BYTE; VAR Pufferzeiger ezeig, azeig WORD; Typdatei BYTE datei : FILE OF BYTE; Dateiname name : STRING[20]; z : CHAR; klein : BOOLEAN; (* Umuandlungsmarke PROCEDURE init; 8250 und PIC initialisieren BEGIN (« 1000 0000 DLAB := 1 Port[x+3] := $80; (» Baudrate Port[x+1] = Hi(t); Port[xi0] := Lo(t); (" Oxxx xxxx DLAB := 0 Port[x+3] P (" Empfangsdaten leeren zpuf[1] Port[x+ü]; (* 0000 0001 Empf.-Int. Port[x+1] := $01; 0000 1000 Int. frei Port[x+4] := $08; zpuf[1] := Port[x+2]; (' Iriterruptanz. lösch. (« PIC IRQ frei Port[$21] := Port[$21] AND irqena; END; (* Zeichen nach Sender PROCEDURE send(z : BYTE); (* Sender frei? BEGIN (0010 0000 WHILE Port[x+5] AND $20 = $00 DO; (* nach Sender Port[x+0] := z.END; (* Zeichen von Empfänger PROCEDURE empf; INTERRUPT; BEGIN (* Empfänger lesen zpuf[ezeig] Port[x+0] IF ezeig = np THEN ezeig 1 ELSE Inc(ezeig); Port[$20] := irqack; (» PIC Int. best. END; (* Bildschirm/Druckeraus PROCEDURE bild; VAR z : BYTE; BEGIN (* Puffer lesen z := zpuf[azeig]; IF azeig = np THEN azeig := 1 ELSE Inc(azeig); Steuerzeichen CASE z OF Cursor links $08 : GotoXY(WhereX-l.WhereY); Cursor rechts $0C : GotoXY(WhereX+l,WhereY); CR Wagenrueckl $0D : GotoXY(1,WhereY); Fiil 1 zeichen $00 : ; ELSE (* Datenzeichen Urite(CHAR(z)} ; (" Druckerausgabe IF druk THEN BEGIN Write(LST,CHAR(z)) IF z=10 THEN Write(LST,#13) END; END; END; PROCEDURE speichern; ( Zeichen von Gerät nach Datei *) VAR i : WORD; z : CHAR; BEGIN WriteLn(#10,#13,'Abbruch mit Taste Speichern bis '.emark); (" Startzeichen ") azeig := l; ezeig := 1; send(13);

Terminalprogramm in Pascal

REPEAT UNTIL (zpuf[ezeig-1] = BYTE(emark)) OR KeyPressed; IF KeyPressed THEN z ReadKey; Write('Gespeicherte Daten anzeigen ? j -> '); IF UpCase(ReadKey) = •J• THEN FOR i : = azeig TO ezeig-2 DO Write(CHRR(zpuf[i])); Write(#10,#13,'Daten nach Datei ? j -> '); IF UpCase(ReadKey) = 'J' THEN BEGIN Write('Dateiname -> '); ReadLn(name); Assign(datei, najne); Rewrite(datei); FOR i := azeig TO ezeig-2 DO Write(datei , zpuf[i]); Close(datei); WriteLn( 'Daten gespeichert') END; Write(#10,#13,CHAR(zpuf[ezeig-1])); azeig := 1; ezeig 1; END; PROCEDURE laden; (* Zeichen von Datei nach Gerät *) CONST z : CHAR = ' ' ; VAR del : WORD; b : BYTE; BEGIN Write('Dateiname -> '); ReadLn(name); Assign(datei, name); (*$I-«) Reset(datei) C$1-«); IF IOResult O 0 THEN WriteLn('Datei nicht vorhanden') ELSE BEGIN Write('Verzögerung [ms] -> '); ReadLn(del); WriteLn('Abbruch mit Esc-Taste'); REPEAT Read(datei, b); IF NOT klein THEN b := BYTE(UpCase(CHAR(b))); Delay(del); send(b); IF ezeig azeig THEN bild; IF KeyPressed THEN z : = ReadKey; UNTIL Eof(datei) OR (z = #27); Close(datei) END; END; BEGIN (»««« H a u p t p r o g r a m m **•«) init; ezeig := 1; azeig := 1; (* initialisieren *) SetIntVec(irqvec,Addr(empf)); (* Interruptvektor*) Write('Kleinschrift? j -> '); klein := UpCase(ReadKey) = 'J'; ClrScr; GotoXY(l.l); TextBackground(tlAGENTA); Write( 'Fl;Ende F2:Gerät -> Datei F3:Datei -> Gerät F4:ClrScr F5:Drucker' ); Windowf1, 2,80,25); TextBackground(BLACK); ClrScr; REPEAT (* Puffersp. ausgeben *) IF (ezeig azeig) THEN bild; IF Keypressed THEN (* Wenn Taste betätigt ") BEGIN z := ReadKey; IF NOT klein THEN z UpCase(z); IF z #0 THEN send(BYTE(z)) (* Zeichencode senden ") ELSE CASE ReadKey OF (* Furiktionstasten ") #75 send($08); (* Cursor links tiVUS #77 send($0C); (* Cursor rechts tIVUS *) (« Fl: Ende des Progr. *) #59 ende := TRUE ; #60 speichern; (* F2: Datei speichern *) #61 laden; C F3: Daten senden *) ClrScr; #62 C F4: Schirm lösche n *) druk := NOT druk; #63 (* F5: Drucker ein/aus M ELSE Write(#7) (* Fehlermeldung Hupe END END UNTIL ende; Window(l,1,80,25); ClrScr; (* Ende durch Fl «) Port[$21] := Port[$21] OR irqdis; (" PIC Inter. sperren ") END.

369

370

10 Anhang

Register

A Ablaufplan 152 ACI-Befehl 248, 259 ADC-Befehl 248, 259 ADD-Befehl 248, 259 Addierer 20 Additionsbefehl 194 ADI-Befehl 194, 211, 248, 259 Adreßbus 37 Adreßdecoder 34, 118 Adreßleitungen 72 Adreßplan 121 Adreßregister 43 Adreßspeicher 77 Adreßtabelle 230 Adresse 34, 39 Akkumulator 27 Aktiv HIGH 30 Aktiv LOW 30 ALE-Signal 72, 77 ALU 22 ANA-Befehl 243, 249 Analog/Digitalwandler 116, 338, 342 Analogverarbeitung 332 AND-Schaltung 19 ANI-Befehl 194, 243 Anwendung 7 Arithmetische Befehle 248 Arithmetisch-logische Einheit 22 ASCII-Code 14 Assembler 10, 152 Assembleranweisungen 172 Asynchrone Übertragung 313 Ausgangsschaltung 58

B Bauformen 8 Bauplattensystem 10, 141 BCD-Zahlen 14, 258 Bedingungsregister 157, 196, 193 Befehl 11, 39 Befehlsregister 41, 182 Befehlszählregister 41, 182 Binär 13 Binärzähler 27, 209 Bipolare Technik 54 Bit 13 Bustreiber 70, 136 Byte 13

C CALL-Befehl 188 Carry 21 CC-Befehl 189 CLK-Signal 72 CM A-Befehl 243 CM-Befehl 189 CMC-Befehl 249 CM OS-Technik 52 CMP-Befehl 224, 248 CNC-Befehl 189 CNZ-Befehl 189 Code 39 Code-eigene Adressierung CP-Befehl 189 CPE-Befehl 189 CPI-Befehl 194, 211 CPO-Befehl 189 CZ-Befehl 189

160

D DAA-Befehl 259 DA D-Befehl 237, 249 Daten 13 Datenbus 41 Datenleitungen 72 Datentabelle 229 Datenverarbeitung 242 DB-Anweisung 173 DC-Anweisung 173 DCR-Befehl 207, 224 DCX-Befehl 214, 237 D-Flipflop 24 DI-Befehl 281 Digital/Analogwandler 115, 341 Direktzugriff 233 Division 264, 273 Divisionsrestverfahren 17 Druckerschnittstelle 311 DS-An Weisung 173 Dualzahlen 15, 250 DW-Anweisung 173 Dynamische Speicher 93, 100

E EI-Befehl 281 Eingangsschaltungen

56

Register

END-Anweisung 156 EODER-Schaltung 19, 242 EPROM 93 EPROM (2716) 96 EPROM (2732) 96 EQU-Anweisung 173 Ereigniszähler 217 F Fallunterscheidung 193 Flankensteuerung 33 Flankenzählung 217, 335 Flipflop 23 Frequenzmessung 218, 334 Funktionseinheiten 9 G Gegentakt-Ausgang

58

H Halbaddierer 20 Halbleitertechnik 50 Hexadezimalzahl 18 HLDA-Signal 73 HLT-Befehl 73, 281 HALT-Betriebszustand HOLD-Betriebszustand HOL D-Signal 73

90 89

I IN-Befehl 166 Indirekte Adressierung 227 INR-Befehl 207 , 224 Interrupt-Betriebszustand 85, 278 Interruptregister 279 Interrupt-Signale 73, 137 INTA-Signal 73, 87 INTR-Interrupt 73, 87, 279 INX-Befehl 214, 237 IO/M-Signal 73, 75

J

JC-Befehl JM-Befehl JMP-Befehl JNC-Befehl JNZ-Befehl JP-Befehl JPE-Befehl JPO-Befehl JZ-Befehl

186 186 183 186 186 186 186 186 186

371

K Kleinsystem 130 Kilobyte 13 Komplement 18 Konstanten 162

L LDA-Befehl 168 LDAX-Befehl 224 Leuchtdiodenansteuerung 62 Leistungstreiber 62 Lesesignal 30, 37 Lesezyklus 81, 94, 98, 102 LHLD-Befehl 178 Lineare Auswahl 128 Logischer Befehl 194, 242 LXI-Befehl 176, 237

M Maschinenzyklus 79 Maske 200 Master-Slave-Flipflop 26 Mehrzweckbausteine 76 Mikroprozessor 8 Mikroprozessor (8085A) 71, 157 Monitor 150, 303, 324 M OS-Eingang 57 MOS-Technik 51 MOV-Befehl 158, 224 Multiplikation 262, 273 MVI-Befehl 162, 224

N NAND-Flipflop 23 NAN D-Schaltung 19 NICHT-Schaltung 19, 242 NOP-Befehl 211 NOR-Schaltung 19

O ODER-Schaltung 19, 242 O f f e n e r Kollektor 60 ORA-Befehl 194, 243, 249 ORG-Anweisung 156 ORI-Befehl 243 OR-Schaltung 19 OUT-Befehl 80, 166 Overflow 256, 272, 284

372

10

Anhang

P Paralleiaddierer 21 Parallelschnittstelle (8155) 77, 109, 112, 285 Parallelschnittstelle (8255) 76, 109, 113, 288 PCHL-Befehl 176, 183 Periodendauermessung 219 Peripherieadressierung 167 74, 105, 109 Peripheriebausteine POP-Befehl 236 Prellen 217, 291 Program mablaufplan 46, 152 Programmblockplan 152 Programmierung 10 PROM 93, 120 Pull-up-W iderstand 67 PUSH-Befehl 236, 238 R RAL-Befehl 194, 246 RAM 92 R A M (2016) 98 RAR-Befehl 194, 246 RC-Befehl 189 R D-Signal 72 R E A D Y - B e t riebszustand 88 READY-Signal 73, 139 Registerpaaradressierung 223 Registersatz 157 Relative Adressierung 275 R e s e t - B e t riebszustand 83 RESIN-Signal 73 RESOUT-Signal 73 RET-Befehl 188, 281 RIM-Befehl 281 R L C - B e f e h l 211, 246 ROM 92 RM-Befehl 189 RNC-Befehl 189 RNZ-Befehl 189 RP-Befehl 189 RPE-Befehl 189 RPO-Befehl 189 RRC-Befehl 246 R S T - B e f e h l 281 RST-Interrupt 73, 86, 279 Rücksprung 188 RZ-Befehl 189 S SBB-Befehl 248 SBI-Befehl 248 Schiebebefehl 194, 201, 245

Schleife 190 , 204 Schreibsignal 30, 35 Schreibzyklus 82, 95, 99, 102 Serielle Datenübertragung 313 Serienschnittstelle (8251A) 114, 315 S H L D - B e f e h l 178 SI D-Eingang 74 SIM-Befehl 281 Single-Board-Rechner 9 Single-Chip-Rechner 9 SOD-Ausgang 74 Speicheradressierung 169, 222 Speicherbausteine 74, 92 Speicherbe fehl 40 Speicherbelegungsplan 121 Speicherorganisation 34 Speicherschaltung 23 SPHL-Befehl 176, 237 Sprungbefehl 45, 182 Sprungleiste 212 Sprungtabelle 220 , 232 S T A - B e f e h l 78, 168 Stapel 236 Stapeladressierung 236 Stapelzeiger 236 Statische Speicher 93 Statussignale (S0,S1) 73 S T A X - B e f e h l 224 STC-Befehl 249 Steuersignale 29 Steuerwerk 29, 41 Struktogramm 152 SUB-Befehl 248 SUI-Befehl 211, 248 T Tabellen 229 Takt 72, 321 Tastatur 293 Teildecodierung 120 Transistor 54 TRAP-Interrupt 73, 87, 138, 279 Treiber 19 Tristate-Ausgang 36, 63 TTL-Eingang 57 TTL-Last 66 T T L - T e c h n i k 55 TTL-Bausteine 106, 108 U Übertrag 21 Übungssystem 134, 150 UND-Schaltung 19, 242 Unmittelbare Adressierung 164 Unterprogramm 188, 190, 270

Register

V Verdrahtetes ODER 61 Vergleichsbefehl 194, 197 Verzweigung 190, 192 Volladdierer 20 Volldecodierung 123 Vorzeichen 198 , 254 V.24-Schnittstelle 314

W WR-Signal

32, 72, 95

X XCHG-Befehl 176 XOR-Schaltung 19 X R A - B e f e h l 243, 249 X R I - B e f e h l 243 X T H L - B e f e h l 2 3 6 , 239, 274 Z Zählbefehl 207, 214 Zähler 27 , 206 , 213 Zahlenkreis 207, 251, 256 Zusätzliche Befehle 284 Zustandssteuerung 33

373

Günter Schmitt

Mikrocomputertechnik Maschinenorientierte Programmierung Grundlagen — Schaltungstechnik — Anwendungen Didaktisch ausgefeilte Lehrbücher, die eine systematische Einführung in die Mikrocomputertechnik bieten. Viele Beispiele und Übungsaufgaben mit Lösungen vertiefen den Stoff. Die Werke sind sowohl zur Unterrichtsbegleitung als auch für das Selbststudium geeignet für alle, die sich mit Technik und Anwendungen der Mikrocomputer befassen.

Mikrocomputertechnik mit dem Prozessor 6809 und den Prozessoren 6800 und 6802 2., verbesserte Auflage 1988. 387 Seiten, 374 Abbildungen, 25 Tabellen ISBN 3-486-20847-0

Mikrocomputertechnik mit den Prozessoren der 68000-Familie 2., verbesserte Auflage 1990. 393 Seiten, 286 Abbildungen, 29 Tabellen ISBN 3-486-21667-8

Mikrocomputertechnik mit dem 16-Bit-Prozessor 8086 2., verbesserte Auflage 1989. 352 Seiten, 222 Abbildungen, 52 Tabellen ISBN 3-486-21436-5

R. Oldenbourg Verlag Rosenheimer Straße 145, 81671 München

Oldenbourg

Günter Schmitt

Pascal-Kurs — technisch orientiert Band 1: Grundlagen 2., verbesserte Auflage 1993. 256 Seiten ISBN 3-486-22479-4 Dieses Lehrbuch für Anfänger eignet sich sowohl als Begleitmaterial für den Unterricht als auch für das Selbststudium. Rund 80 Programmbeispiele und 30 Übungsaufgaben vertiefen den Stoff. Dazu Programmdiskette im MS-DOS-Format ISBN 3-486-21864 6 Band 2; Anwendungen 1991. 304 Seiten ISBN 3-486-21696-1 Zahlreiche Schaltungsvorschläge und über 100 Pascal Programme zeigen Anwendungen zum Messen, Steuern und Regeln, die früher nur in Maschinensprache realisiert wurden. Sämtliche Beispiele basieren auf Turbo Pascal Version 6.0. Dazu Programmdiskette im MS-DOS-Format ISBN 3-486-22035-7

Fortran-Kurs - technisch orientiert Einführung in die Programmierung mit Fortran 77 8. Auflage 1992. 232 Seiten ISBN 3-486-22210-4 Im Vordergrund steht die strukturierte Programmierung technischer Probleme. Etwa 80 Programmheispiele und 60 Übungsaufgaben mit Lösungen vertiefen den Stoff. Sie können sowohl am Bildschirmterminal eines Großrechners als auch mit einem Personal Computer im Dialog getestet werden. Dazu Programmdiskette im MS-DOS-Format ISBN 3-486-20088 7

C-Kurs — technisch orientiert 1993. 407 Seiten ISBN 3-486-22384-4 Im Vordergrund dieses Lehrbuchs steht die Programmierung technischer Aufgabenstellungen. 116 Programmbeispiele und 53 Übungsaufgaben. Dazu Programmdiskette im MS-DOS-Format: 3 1/2" ISBN 3-486-22468-9; 5 1/4 " ISBN 3-486-22474-3

R. Oldenbourg Verlag Rosenheimer Straße 145, 81671 München

Oldenbourg