272 13 80MB
German Pages 377 [392] Year 1993
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
5Î
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
CÙ
_
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