232 63 26MB
German Pages 386 [392] Year 1994
Mikrocomputertechnik mit dem Prozessor 6809 und den Prozessoren 6800 und 6802 Maschinenorientierte Programmierung Grundlagen, Schaltungstechnik und Anwendungen von Prof. Dipl.-Ing. Günter Schmitt 3. Auflage Mit 374 Bildern und 25 Tabellen
R. Oldenbourg Verlag München Wien 1994
Die Deutsche Bibliothek — CIP-Einheitsaufnahme Schmitt, Günter: Mikrocomputertechnik mit dem Prozessor 6809 un den Prozessoren 6800 und 6802 : maschinenorientierte Programmierung ¡Grundlagen - Schaltungstechnik Anwendungen ; mit 25 Tabellen / von Günter Schmitt. - 3. Aufl. - München ;Wien : Oldenbourg, 1994 ISBN 3-486-23103-0
© 1994 R. Oldenbourg Verlag GmbH, München Nachdruck der 2. Auflage 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 fiir Vervielfältigungen, Übersetzungen, Mikroverund die Einspeicherung und Bearbeitung in elektronischen Systemen.
Gesamtherstellung: R. Oldenbourg Graphische Betriebe GmbH, München
ISBN 3-486-23103-0
Inhaltsverzeichnis Vorwort
5
1
Einführung
7
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 3.3.6 3.3.7
Der Mikroprozessor 6809 Die Familien der 68xx- und 65xx-Bausteine Aufbau und Anschlußbelegung des Prozessors 6809 Der Zugriff auf Speicher-und Peripheriebausteine Die Betriebszustände Reset und Interrupt Die Betrieb szustände Halten und Warten Mikrorechnerschaltung mit dem Prozessor 6809 Die Prozessoren 6800 und 6802
71 71 72 75 84 90 93 94
3.4 3.4.1 3.4.2
Speicherbausteine Aufbau und Wirkungsweise Der Festwertspeicher (EPROM) 2716
98 98 102
2
Inhaltsverzeichnis
3.4.3 3.4.4 3.4.5
Der statische Schreib/Lesespeicher (RAM) 2016 Dynamische Schreib/Lesespeicher (DRAM) Gemeinsame Anschlußbelegung verschiedener Speichertypen
104 106 110
3.5 3.5.1 3.5.2 3.5.3 3.5.4 3.5.5 3.5.6
Peripheriebausteine Aufbau und Wirkungsweise TTL-Bausteine zur Ein/Ausgabe Parallelschnittstellen Serienschnittstellen Zeitgeber (Timer) Digital/Analog-und Analog/Digitalwandler
111 111 114 115 119 121 122
3.6 3.6.1 3.6.2 3.6.3 3.6.4 3.6.5 3.6.6
Bausteinauswahl und Adreßdecodierung Adreßdecoder Die Teildecodierung Die Volldecodierung Die Lineare Auswahl Die Decodierung eines Peripheriebereiches Speicherumschaltung und Speichererweiterung
125 125 128 130 135 136 138
3.7
Der Entwurf eines Kleinsystems
143
3.8
Der Entwurf eines Übungssystems
148
3.9 3.9.1 3.9.2 3.9.3 3.9.4
Der Entwurf eines Bauplattensystems Der Systembus Die 6809-Prozessorkarte Die Speicherkarten Die Peripheriekarten
154 154 156 158 160
4
Einführung in die maschinenorientierte Programmierung . . . 163
4.1
Die Hardware des Übungsrechners
163
4.2
Assemblerprogrammierung
165
4.3 4.3.1 4.3.2 4.3.3 4.3.4 4.3.5 4.3.6 4.3.7
Einfache Datenübertragung Datenübertragung zwischen den Registern des Prozessors Das Laden von Konstanten Die absolute (erweiterte) Adressierung Die direkte (direct) Adressierung Assembleranweisungen Einfache Datenübertragung mit den Prozessoren 6800 und 6802 . . . . Übungen zum Abschnitt Datenübertragung
170 172 175 178 182 186 189 190
4.4 4.4.1 4.4.2 4.4.3 4.4.4 4.4.5
Sprünge und Verzweigungen Unbedingte Sprung-und Verzweigungsbefehle Bedingte Verzweigungsbefehle Der Aufruf von Unterprogrammen Sprünge und Verzweigungen der Prozessoren 6800 und 6802 Übungen zum Abschnitt über Sprünge und Verzweigungen
191 192 197 200 203 203
1
ZN427
18
00 - >
GND
1
A/D
?4
CTS < -
2
D1 - >
- > RxD
2
23
ÜCD < -
D2 - >
- > RxC
3
22
DO < - >
D3 - >
- > TxC
4
21
D1 < - >
D4 - >
< - RTS
5
20
D2 < - >
- > CLK
3
- > SC
4
17 16 15
Rext
5
14
6850
6
13
D5 - >
< - TxD
6
19
D3 < - >
in
7
12
D6 - >
< - IRQ
7
18
D4 < - >
Vref out
8
11
D7 - >
- > CSO
8
17
D5 < - >
GND
9
10
+5V
- > CS2
9
1fi
D6 < - > D7 < - >
Vref
- > CS1
10
15
- > RS
11
14
E < -
+5V
12
13
R/W < -
- > A7
1
2716
24
+5 V
- > A7
1
2016
¿4
+5V
- > A6
2
EPROM
23
A8 < -
- > A6
2
RAM
23
A8 < A9 < -
- > A5
3
22
A9 < -
- > A5
3
22
- > A4
4
21
Vpp
- > A4
4
21
WE < -
- > A3
5
20
OE < -
- > A3
5
20
OE < -
- > A2
6
19
A10 < -
- > A2
6
19
A10 < -
- > A1
7
18
CE < -
- > A1
7
18
CE < D7 < - >
11
14
D4 - >
< - > D2
11
14
D4 < - >
GND
12
13
D3 - >
GND
12
13
D3 < - >
ro
E cz a.
UJ
RAM
CSi C\i
EPROM
EPROM
RAM
a) +J >> ca
EPROM 27256 (32 KByte)
< - D2
xx64 (8 KByte)
D5 < - >
EPROM 27128 (16 KByte)
15
2764 (8 KByte)
10
2732 (4 KByte)
< - > D1
EPROM
D5 - >
xx16 (2 KByte)
15
RAM
10
2716 (2 KByte)
D6 < - >
< - D1
EPROM
16
2716 (2 KByte)
17
9
xx16 (2 KByte)
8
EPROM
- > AO < - > DO
RAM
D7 - > D6 - >
2764 (8 KByte)
17 16
XX64 (8 KByte)
8 9
EPROM 27256 (32 KByte)
- > AO < - DO
xx256 (32 KByte)
383
-> E
EPROM 27128 (16 KByte)
RAM
XX256 (32 KByte)
Analog e i n ->
der wichtigsten
RAM
10.6 Stiftbelegung
Vpp
1
28
Vcc Vcc V c c Vcc Vcc
A 1 2 A12 A 1 2 A 1 2 A 1 2
2
27
PGM UE
A14 Vpp Vpp A7
A7
A7
A7
A7
A7
A6
A6
A6
A5
A6 A5
A6
A5
A5
A5
A4
A4
A4
A4
A3
A3
A3
A2
A2
A2
Al
A1
AO
AO
DO
3 ( 0 4 (2)
A7
A6
A6
A6
A5
A5
A5
A4
A4
A4
A4
A3
A3
A3
A3
A3
A2
A2
A2
A2
A2
A1
A1
A1
A1
A1
A1
AO
AO
AO
AO
AO
AO
10 ( 8 )
(17)
19 D7
D7
D7
D7
D7
D7
D7
D7
DO
DO
DO
DO
DO
00
DO
11 ( 9 )
( 1 6 ) 18 D6
D6
D6
06
06
06
D6
D6
D1
01
D1
01
D1
01
D1
01
12 ( 1 0 ) ( 1 5 )
17 D5
D5
D5
D5
D5
D5
05
D5
D2
02
D2
D2
D2
D2
D2
D2
13 ( 1 1 ) ( 1 4 ) 16 D4 GND GND GND GND GND GND GND GND 14 ( 1 2 ) ( 1 3 ) 15 D3
D4
D4
D4
D4
D4
04
D4
D3
D3
D3
D3
D3
D3
D3
5 (3) 6 (4) 7 (5) 8 (6) 9 (7)
Ì 2 4 " ) 26 Vcc Vcc Vcc A8 A8 A8 ( 2 3 ) 25 A8 A9 A9 A9 ( 2 2 ) ? 4 A9
P ® A14 WE
A7
( 2 1 ) 2 3 Vpp WE OE ( 2 0 ) 2 2 SE
A11 A l l
CE2 A 1 3 A13 A13 A8
A8
A8
A8
A9
A9
A9
A9
A11 A11 A11 A11
SE OE OE OE OE ( 1 9 ) 21 A10 A10 A10 A10 A10 A 1 0 A10 A10 CE CE CE CE CE CE CE ( 1 8 ) 2 0 CE
4
Inhaltsverzeichnis
5.3 5.4 5.5 5.6 5.7
Dateneingabe mit Schaltern und Tastern Datenausgabe mit Leuchtdioden und Siebensegmentanzeigen Tastatur und neunstellige Mulitplexanzeige Der Entwurf eines Tastenmonitors Parallele Datenübertragung mit Steuersignalen
303 307 310 315 320
6
Serielle Datenübertragung
324
6.1 6.2 6.3 6.4
Die V.24-Schnittstelle Die Programmierung der Serienschnittstelle 6850 ASCII-Code-Umwandlungen Der Entwurf eines Terminalmonitors
324 326 332 335
7
Datenerfassung und Datenverarbeitung
343
7.1 7.1.1 7.1.2 7.1.3
Verarbeitung analoger Daten Widerstands-Frequenz-Umsetzung Beispiel eines Analog/Digitalwandlers Beispiel eines Digital/Analogwandlers
343 343 345 347
7.2
Die Analogperipherie des Übungssystems
348
7.3
Aufbau und Arbeitsweise eines Arithmetikprozessors
351
8
Lösungen der Übungsaufgaben
357
9
Ergänzende und weiterführende Literatur
370
10
Anhang
371
10.1 10.2 10.3 10.4 10.5 10.6
Zahlentabellen ASCII-Zeichen-Tabelle Sinnbilder für Ablaufpläne und Struktogramme Befehlstabellen des 6800/6802 Befehlstabellen des 6809 Stiftbelegung der wichtigsten Bausteine
371 372 373 374 377 381
11
Register
384
Vorwort
Die r a s c h e Entwicklung der M i k r o c o m p u t e r t e c h n i k h a t mich veranlaßt, meine beiden Bücher " M a s c h i n e n o r i e n t i e r t e Programmierung für Mikroprozessoren " und " G r u n d l a g e n der M i k r o c o m p u t e r t e c h n i k " zu ü b e r a r b e i t e n . H a r d w a r e , S o f t w a r e und Anwendungen eines Prozessors werden jetzt in einem Band z u s a m m e n g e f a ß t . Auf den e r s t e n Band mit dem Prozessor 8085A folgt nun der zweite Band f ü r die Prozessoren 6800, 6802 und 6809. Der Schwerpunkt liegt auf dem modernen Prozessor 6809. Damit sind die Grundlagen für w e i t e r e B ä n de mit den Prozessoren 8086 und 68000 g e l e g t . Nach d e n e r s t e n L e h r j a h r e n gilt es nun, die Mikrocomputertechnik fest in die Ausbildung des technischen Nachwuchses einzubauen. Dieses Buch e n t s t a n d aus und f ü r meinen U n t e r r i c h t im P f l i c h t f a c h " M i k r o c o m p u t e r t e c h n i k " und in den w e i t e r f ü h r e n d e n W a h l p f l i c h t f ä c h e r n an der Fachhochschule Dieburg. In der Gliederung des S t o f f e s und in der Auswahl der Beispiele habe ich v e r s u c h t , einen " L e h r b u c h s t i l " zu finden, wie er sich z.B. auf dem Gebiet der Grundlagen der E l e k t r o t e c h n i k s e i t langem herausgebildet h a t . Der P r o g r a m m i e r t e i l 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 auf A s s e m b l e r e b e n e , wie sie f ü r die Programmierung von technischen Anwendungen und in d e r S y s t e m p r o g r a m m i e r u n g vorzugsweise verwendet wird. Auch im Z e i t a l t e r der 16- und 3 2 - B i t - P r o z e s s o r e n haben die " a l t e n " 8 - B i t Prozessoren durchaus noch ihre B e r e c h t i g u n g . G e r a d e der Prozessor 6809 ist in b e s t i m m t e n Anwendungen seinen großen Brüdern bezüglich V e r a r b e i t u n g s g e schwindigkeit und e i n f a c h e r Handhabung überlegen. G l e i c h e s gilt auch für die P r o g r a m m i e r u n g im Assembler gegenüber der Arbeit mit h ö h e r e n P r o g r a m m i e r s p r a c h e n . G e r a d e die Grundlagenausbildung im F a c h " M i k r o c o m p u t e r t e c h n i k " sollte auch w e i t e r h i n auf dieser Ebene e r f o l g e n , auf der der Z u s a m m e n h a n g zwischen H a r d w a r e und S o f t w a r e u n m i t t e l b a r zu sehen ist. Ich b e d a n k e mich bei meinen S t u d e n t e n für die vielen Fragen und F e h l e r , die viel zu e i n e r besonders eingehenden Darstellung wichtiger und schwieriger F r a g e n b e i g e t r a g e n haben. Dem Oldenbourg Verlag danke ich f ü r die g u t e Z u s a m m e n a r b e i t und bei meiner F a m i l i e entschuldige ich mich, daß ich t r o t z aller B e t e u e r u n g e n noch ein Buch geschrieben h a b e .
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 h a t , mußten die amerikanischen Bezeichnungen übernommen werden. Dabei wurde versucht, zusätzlich einen e n t s p r e chenden deutschen Ausdruck zu finden. Diese Einführung sowie die Abschnitte Grundlagen und Hardware (3.1 und 3.2) sind nicht auf einen b e s t i m m t e n Mikroprozessor zugeschnitten.
1.1
Anwendung von Mikrorechnern
Der Mikrorechner hat zwei Ahnen: die hochintegrierte Logikschaltung des Taschenrechners und die Großrechenanlage, Computer genannt. Auf einer F l ä che von e t w a 20 bis 50 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 S o f t w a r e . 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, e l e k t r o n i sche Schreibmaschinen, Kopierautomaten, Telefonvermittlungen und F e r t i g u n g s anlagen. Durch den Einsatz von Mikrorechnern werden die G e r ä t e 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 g e t e i l t e r Meinung sein; die Anwendung von Mikrorechnern zur Textverarbeitung oder Buchführung in Büros und kleineren B e t r i e ben hat sich heute durchgesetzt. Der Text dieses Buches wurde mit Hilfe eines Mikrorechners am Bildschirm entworfen und korrigiert.
8
1.2
1
Einführung
Aufbau und Bauformen von Mikrorechnern
Was ist allen Mikrorechnern in den v e r s c h i e d e n e n 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 d e r F u n k t i o n h e r gesehen sind es z u n ä c h s t 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 e i n e m 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 g e n a u dann einen A u s g a b e b e f e h l , wenn d e r richtige B u c h s t a b e des Rades am Papier v o r b e i k o m m t . Bei einem Abrechnungsprogramm z.B. e n t h ä l t das Programm R e c h e n b e f e h l e , die a u s d e r 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 d i e 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 B u c h s t a b e n 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 A r t i k e l b e z e i c h n u n g e n 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 S p e i c h e r i n h a l t 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 w e r d e n 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 v e r l i e r e n ihren Speicherinhalt b e i m A b s c h a l t e n d e r Versorgungsspannung; sie können a b e r während des B e t r i e b e s sowohl g e l e s e n als auch neu b e s c h r i e b e n w e r d e n . Sie werden vorzugsweise f ü r die S p e i c h e r u n g der Daten v e r w e n d e t . K l e i n - E D V - A n l a g e n werden in den m e i s t e n F ä l l e n 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 man 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 aus dem P r o g r a m m s p e i c h e r in das 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 B u c h s t a b e n mit dem a u g e n b l i c k l i c h e n Stand d e s T y p e n r a d e s vergleicht oder bei einem A b r e c h n u n g s p r o g r a m m 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 , auch 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 n e r mit s e i n e r U m w e l t , der P e r i p h e r i e . Im Beispiel des T y p e n r a d d r u c k e r s muß d e r 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 , d e m Magneten des H a m m e r s e i n e n 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 w e r d e n . 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 z u s a m m e n f a s s e n d die w i c h t i g s t e n F u n k t i o n s e i n h e i t e n e i n e s M i k r o r e c h n e r s . Der G r o ß r e c h n e r h a t prinzipiell den gleichen A u f b a u . Die E n t wicklung scheint h e u t e dahin zu g e h e n , d a ß die mit einem M i k r o r e c h n e r a u s g e r ü s t e t e K l e i n - E D V - A n l a g e den G r o ß r e c h n e r bei vielen Anwendungen v e r d r ä n g t .
1.2 Aufbau und Bauformen von Mikrorechnern
9
P e r i pher i e
ProgrammSpeicher
DatenSpeicher
E in/Ausgabe (PeripherieBaustein )
1 S t e u e r w e r k
R e c h e n w e r k
M i k r o p r o z e s s o r
Bild 1 - 1 :
A u f b a u eines M i k r o r e c h n e r s
M i k r o r e c h n e r b e s t e h e n im w e s e n t l i c h e n 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 E i n / A u s g a b e s c h a l t u n g e n f ü r die Verbindung zur P e r i p h e r i e . Man u n t e r s c h e i d e t f o l g e n d e B a u f o r m e n : Single-Chip-Mikrocomputer (Ein-Baustein-Mikrorechner) enthalten alle Funkt i o n s e i n h e i t e n (Prozessor, Speicher und E i n / A u s g a b e s c h a l t u n g e n ) auf einem Baustein der . G r ö ß e 15 mal 50 m m . Das P r o g r a m m b e s t e h t aus e t w a 1000 B e f e h l e n 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 B a u s t e i n . Der S c h r e i b / L e s e s p e i c h e r kann e t w a 100 D a t e n ( Z e i c h e n oder Zahlen) a u f n e h m e n . An den A n s c h l u ß b e i n c h e n ( c a . 40) s t e h e n nur die E i n / A u s g a b e l e i t u n g e n f ü r d i e P e r i p h e r i e zur V e r f ü g u n g . Ein d e r a r t i g e r B a u s t e i n 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 S t e u e r u n g von kleineren G e r ä t e n (z.B. e i n f a c h e n D r u c k e r n o d e r M e ß g e r ä t e n ) bei großen S t ü c k z a h l e n e i n g e s e t z t , bei d e n e n es auf g e r i n g e A b m e s s u n g e n a n k o m m t . Man kann ihn m e h r als i n t e l l i g e n t e n S t e u e r b a u s t e i n denn als R e c h n e r b e t r a c h t e n . Single-Board-Mikrocomputer (Ein-Platinen-Mikrorechner) enthalten alle Funkt i o n s e i n h e i t e n eines M i k r o r e c h n e r s a u f g e b a u t aus m e h r e r e n B a u s t e i n e n 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 F a l l e n t h ä l t eine P l a t i n e im E u r o p a f o r m a t (100 x 160 m m ) also einen Mikroprozessor z.B. vom Typ 6809, einen F e s t w e r t S p e i c h e r b a u s t e i n mit dem P r o g r a m m , e i n e n 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 v e r ä n d e r l i c h e n D a t e n und einige E i n / A u s g a b e b a u s t e i n e f ü r den P e r i p h e r i e -
10
1
Einßhrung
anschluß. Die Verbindungsleitungen, auf denen die Befehle und Daten zwischen den Bausteinen übertragen 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 das Programm und für die Peripherie. Das Haupteinsatzgebiet der Ein-Platinen-Mikrorechner liegt in der Steuerung von größeren Geräten wie z.B. elektronischen Schreibmaschinen oder Hobby-Computern. Die Entwicklung des Gerätes umfaßt den Entwurf des Rechners (Hardware), des Programms (Software) und die Anpassung an die Peripherie. Bauplatten-Mikrocomputer bestehen aus mehreren Karten, meist im Europaf o r m a t , die in einem Rahmen zusammengesteckt werden. Hier teilt man den Mikrorechner auf in eine Prozessorkarte, Speicherkarten für F e s t w e r t s p e i c h e r , Speicherkarten für Schreib/Lesespeicher und Peripheriekarten f ü r die D a t e n übertragung. Sein Haupteinsatzgebiet sind die Klein-EDV-Anlagen (PersonalComputer, Büro-Computer), die sich durch Einfügen neuer Karten leicht e r w e i tern oder durch den Austausch defekter Karten schnell reparieren 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 Bauplattensysteme angeboten. Bei einem aus Bauplatten zusammengestellten Mikrorechner e n t f ä l l t der größte Teil der Hardwareentwicklung, und die Entwicklung des Programms, der S o f t ware, kann sofort beginnen. Bei steigenden Stückzahlen kann es wirtschaftlich sein, bei unverändertem Programm aus einem Bauplatten-Mikrorechner einen maßgeschneiderten Ein-Karten-Mikrorechner zu entwickeln.
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 Programmieren Sprachen, als wolle man mit dem Rechner "reden". Dabei u n t e r s c h e i det man maschinennahe Sprachen, den Assembler, und aufgabennahe "höhere" Sprachen wie z.B. BASIC. Bei der Programmierung von Problemen der Datenübertragung sind sehr genaue Kenntnisse über den Aufbau des Mikroprozessors und der Ein/Ausgabebausteine erforderlich. Hier bevorzugt man die maschinennahe Assemblersprache, die aus leicht merkbaren Abkürzungen besteht. Ein Assemblerbefehl entspricht einem Maschinenbefehl. Da jeder Mikroprozessor einen eigenen Befehls- und Registersatz h a t , gibt es für jeden Prozessortyp eine eigene Assemblersprache, so daß sich im Assembler geschriebene Programme nicht zwischen verschiedenen Prozessortypen austauschen lassen. Die Programmierung im Assembler ist sehr zeitaufwendig, ergibt aber schnelle und kurze Programme.
1.3 Die Programmierung von Mikrorechnern
11
Bei d e r P r o g r a m m i e r u n g von E D V - P r o b l e m e n wie z.B. e i n e r A d r e s s e n v e r w a l t u n g 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. d e r F o r m e l - und A l g o r i t h m e n s c h r e i b w e i s e d e r 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 e i n e s L ö s u n g s v e r f a h r e n s . E i n Ü b e r s e t z u n g s p r o g r a m m ( I n t e r p r e t i e r e r oder C o m p i l e r ) w a n d e l t einen B e f e h l in m e h r e r e M a s c h i n e n b e f e h l e u m . Die P r o g r a m m i e r u n g in e i n e r h ö h e r e n p r o b l e m o r i e n t i e r t e n S p r a c h e e r f o r d e r t k e i n e K e n n t n i s s e über den A u f b a u und die Funktion des M i k r o r e c h n e r s und seiner B a u s t e i n e , die P r o g r a m m e sind zwischen v e r s c h i e d e n e n R e c h nern a u s t a u s c h b a r . Sie sind jedoch länger und l a n g s a m e r als e n t s p r e c h e n d e A s s e m b l e r p rog r a m m e . Bild 1 - 2 zeigt e i n i g e Beispiele f ü r B e f e h l e in v e r s c h i e d e n e n D a r s t e l l u n g e n . Sie sind j e d o c h n i c h t m i t e i n a n d e r v e r g l e i c h b a r , da z.B. der BASIC-Befehl zum Wurzelziehen im Assembler nur mit sehr hohem A u f w a n d p r o g r a m m i e r t w e r d e n kann.
Bild 1 - 2 :
Befehl
binär
101 101 10010001 1 100010001
Befehl
hexadezimal
B6 47 11
Assembler-Befehl
LDA
BASIC-Befehl
LET
WERT WERT = 13
Beispiele f ü r v e r s c h i e d e n e B e f e h l s a r t e n
Mikrorechner in der t e c h n i s c h e n Anwendung w e r d e n vorzugsweise im Assembler oder in b e s o n d e r s auf t e c h n i s c h e P r o b l e m e z u g e s c h n i t t e n e n S p r a c h e n 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 S p r a c h e n 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 z u r ü c k , die mit der Anlage vom H e r s t e l l e r g e l i e f e r t w e r d e n und im Assembler g e s c h r i e b e n 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 e i n e s R e c h n e r s e r f o r d e r l i c h sind, b e z e i c h n e t man a u c h als B e t r i e b s s y s t e m . Dieses Buch b e s c h ä f t i g t sich a u s s c h l i e ß l i c h mit d e r m a s c h i n e n o r i e n t i e r t e n P r o g r a m m i e r u n g im Assembler d e r Prozessoren 6800, 6802 und 6809, die m i t e i n a n d e r " v e r w a n d t " sind, so daß sie in einem Buch z u s a m m e n g e f a ß t werden k o n n t e n . P r o g r a m m e der Prozessoren 6800 und 6802 laufen mit geringen Ä n d e r u n gen auch auf d e m Prozessor 6809; u m g e k e h r t jedoch n i c h t . Bild 1 - 3 f a ß t die w i c h t i g s t e n Erkenntnisse dieser Einführung z u s a m m e n .
12
1 Einßhrung
Bild 1 - 3 :
MikrorechnerHardware
MikrorechnerAnwendungen
MikrorechnerSoftware
E in-Bauste inoder Kle i n s t s y s t e m
Kleingeräte Meßgeräte Drucker
A s s e m b 1er
Ein-KartenSystem
Größere Geräte A s s e m b 1 er Schre i b m a s c h i ne Tischcomputer BASIC
Baup1attenSystem
Prozeßrechner Klein-EDVAn1agen
Assembler PASCAL BASIC
A n w e n d u n g , B a u f o r m e n und P r o g r a m m i e r u n g von M i k r o r e c h n e r n
Der Mikroprozessor
ist d i e Z e n t r a l e i n h e i t des M i k r o r e c h n e r s . Je nach Z a h l d e r
Datenleitungen unterscheidet
man hauptsächlich 4 - B i t - P r o z e s s o r e n f ü r e i n f a c h e
Steuerungsaufgaben, 8-Bit-Prozessoren
für allgemeine
Anwendungen,
16-Bit-
P r o z e s s o r e n f ü r K l e i n - E D V - A n l a g e n und P r o z e ß r e c h n e r und 3 2 - B i t - P r o z e s s o r e n , d i e in den k o m m e n d e n w e r d e n . Zu j e d e m pheriebausteinen zusammen
Jahren als " m i t t l e r e "
Mikroprozessor wie
z.B.
Großrechner Verwendung Hersteller
Parallelschnittstellen
mit d e m P r o z e s s o r
s t e i n e sind w e i t g e h e n d
liefern die
eine
finden
R e i h e von P e r i -
und S e r i e n s c h n i t t s t e l l e n ,
die
eine " B a u s t e i n f a m i l i e " b i l d e n . D i e S p e i c h e r b a u -
prozessorunabhängig.
D i e " h ö h e r e n " P r o g r a m m i e r s p r a c h e n ( B A S I C , F O R T R A N und P A S C A L ) sind u n a b h ä n g i g von e i n e m b e s t i m m t e n R e c h n e r d e f i n i e r t , sie können auch f ü r G r o ß r e c h n e r v e r w e n d e t w e r d e n ; d i e Anpassung an d i e M a s c h i n e ü b e r n i m m t e i n Ü b e r setzungsprogramm
(Interpretierer
i m m e r auf einen b e s t i m m t e n schinentyp zugeschnitten.
oder
Compiler).
Die
Prozessor und d a m i t auf
Assemblersprache einen b e s t i m m t e n
ist Ma-
2
Grundlagen
Dieser Abschnitt ist f ü r Leser ohne Vorkenntnisse gedacht, die ohne b e g l e i t e n den Unterricht arbeiten. Wer b e r e i t s 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 e n t h ä l t , nennt man ein Bit. Acht Bits, also a c h t 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
=
Speicherstelle mit
Byte
=
Speicherwort
Kilobyte
=
1024 B y t e s
Megabyte
=
1024 K i l o b y t e
aus
0 oder 1
a c h t Bits
= 1 0 4 8 576
Bytes
Speichereinheiten
Für d i e D a r s t e l l u n g von Z a h l e n g i b t es z w e i M ö g l i c h k e i t e n : d i e B C D - C o d i e r u n g und d i e d u a l e BCD b e d e u t e t
Zahlendarstellung. Binär C o d i e r t e
D e z i m a l z i f f e r . Jede D e z i m a l z i f f e r w i r d e n t s p r e -
c h e n d Bild 2 - 3 binär v e r s c h l ü s s e l t ( c o d i e r t ) . D a b e i b l e i b t j e d o c h d i e Z a h l im dezimalen Zahlensystem
erhalten.
Ziffer Code 0 1 2 3 4 5 6 7 8 9
Bild 2 - 3 :
0000 0001 0010 001 1 0100 0101 0110 0111 1000 1001
Beispiel:
Dezimalzahl Ziffer
123 =
000100100011
I 1
1 0001
Ziffer
0010
Ziffer
0011
BCD-Codierung
Das d u a l e Z a h l e n s y s t e m kennt nur d i e b e i d e n Z i f f e r n 0 und 1. D i e D e z i m a l z a h l 123 l a u t e t in d i e s e r D a r s t e l l u n g 01111011. Da w i r unsere D a t e n d e z i m a l e i n g e ben und auch d i e E r g e b n i s s e d e z i m a l e r w a r t e n , ist b e i d e r dualen Speicherung von Z a h l e n im R e c h n e r e i n e Umwandlung d e r Z a h l e n e r f o r d e r l i c h . Für d i e b i n ä r e
D a r s t e l l u n g von Z e i c h e n v e r w e n d e t man C o d e s , mit d e n e n man
a l l e B u c h s t a b e n , Z i f f e r n und Sonderzeichen d e r S c h r e i b m a s c h i n e n t a s t a t u r stellen
kann.
Bild
2 - 4 z e i g t einen Ausschnitt
aus d e m
in d e r
dar-
Mikrorechner-
technik v o r w i e g e n d v e r w e n d e t e n A S C I I - C o d e . D e r Anhang e n t h ä l t d i e v o l l s t ä n dige Tabelle.
2.2 Zahlensysteme und
Buchstaben A ß C D E F
Bild 2 - 4 :
= = = = = =
Ziffern
01000001 01000010 01000011 01000100 01000101 01000110
0 1 2 3 4 5
= = = = = =
•
•
•
•
00110000 00110001 00110010 00110011 00110100 00110101
15
Umrechnungsverfahren
Sonderzeichen ! " # $ % S
= = = = = =
00100001 00100010 00100011 00100100 00100101 00100110
•
ASCII-Codierung
ASCII ist e i n e Abkürzung a u s d e m A m e r i k a n i s c h e n und b e d e u t e t f r e i ü b e r s e t z t : Amerikanischer sprünglich
N o r m c o d e für den A u s t a u s c h von N a c h r i c h t e n . E r wurde u r -
für den F e r n s c h r e i b v e r k e h r v e r w e n d e t . Zu den s i e b e n B i t s d e s
g e n t l i c h e n Z e i c h e n s fügt
kann ein B y t e g e n a u ein Z e i c h e n s p e i c h e r n . D e r Code ist r e g e l m ä ß i g baut.
Die
ei-
man o f t e i n a c h t e s B i t a l s K o n t r o l l b i t hinzu. D a m i t
l e t z t e n vier B i t s d e r Z i f f e m c o d i e r u n g z . B . e n t s p r e c h e n d e m
aufgeBCD-
Code. A n a l o g e S i g n a l e ( S p a n n u n g e n und S t r ö m e ) w e r d e n d u r c h W a n d l e r b a u s t e i n e b i n ä r e W e r t e u m g e s e t z t . S i e finden b e s o n d e r e
D e r A b s c h n i t t 7 z e i g t die V e r a r b e i t u n g a n a l o g e r D a t e n .
2.2
Zahlensysteme und Umrechnungsverfahren
Bild 2 - 5 :
Dezimal
Dual
Aufbau der
0 1 2 3 4 5 6 7 8 9
0000 0001 0010 001 1 0100 0101 01 10 0111 1000 1001
0 0 0 0 0 0 0 0 8 8
Die e r s t e n neun D u a l z a h l e n
+ 0 + 0 + 0 + 0 + 0 + 2 + 0+ 2 + 4 + 0 + 4 + 0 + 4 + 2 + 4 + 2 + 0+ 0 + 0 + 0
in
Anwendung in d e r M e ß t e c h n i k .
Dualzahl + + + + + + + + + +
0 1 0 1 0 1 0 1 0 1
= = = = = = = = = =
0 1 2 3 4 5 6 7 8 9
16
2
Grundlagen
Der e i n f a c h s t e Weg zu den Dualzahlen führt über das Zählen. Die Zahlen 0 und 1 sind im dezimalen und im dualen Zahlensystem gleich. Da damit im Dualsystem der Wertevorrat erschöpft ist, rückt man eine Stelle nach links, und es ergibt sich die Dualzahl 10 für die dezimale 2. Bild 2 - 5 zeigt die ersten neun Dualzahlen nach der Zählmethode. Sie entsprechen den BCD-Codierungen. Im Dezimalsystem läßt man führende Nullen f o r t . Da die Rechentechnik mit einer festen Stellenzahl a r b e i t e t , müssen führende Nullen entsprechend der Zahl der Stellen m i t g e f ü h r t werden, denn den binären Wert "leer" gibt es nicht. Für die Umwandlung größerer Zahlen gibt es Verfahren, die sich aus dem Aufbau der Zahlensysteme herleiten lassen. Das dezimale Zahlensystem verwendet die zehn Ziffern von 0 bis 9. Der Wert einer Ziffer hängt von der Stelle ab, an der sie s t e h t . Bild 2 - 6 zeigt als Beispiel den Aufbau der Dezimalzahl 123.
dezimal
123
1-102
+
2•101
+
3-10°
100
+
20
+
3
123
Bild 2-6:
Aufbau der Dezimalzahl 123
Die Wertigkeiten der Stellen sind Potenzen zur Basis 10. Multipliziert man jede Ziffer mit ihrer Wertigkeit und addiert man die Produkte, so ergibt sich wieder die ursprüngliche Zahl. Das duale Zahlensystem verwendet die beiden Ziffern 0 und 1. Daher sind die Wertigkeiten der Dualstellen Potenzen zur Basis 2. Bild 2 - 7 zeigt als Beispiel die Umrechung der Dualzahl 01111011 in eine Dezimalzahl und die Umwandlungsregel.
dual
01111011
= 0 - 2 ? + 1 -26+ 1 . 25+ 1 -2*+ 1 - 2 3 + 0 - 2 Z + 1 -21+ = 0 =
+ 64
123
+ 32
+ 16
+ 8
+ 0
+2
dezimal
Umwandlungsregel Die D u a l s t e l l e n sind m i t i h r e r W e r t i g k e i t zu m u l t i p l i z i e r e n . D i e P r o d u k t e e r geben addiert die Dezimalzahl.
Bild 2-7:
Umwandlung einer DualzahJ in eine Dezimalzahl
1-2°
+ 1
2.2 Zahlensysteme
und
Umrechnungsverfahren
Will man umgekehrt eine Dezimalzahl in eine Dualzahl umrechnen, so ist sie in Zweierpotenzen zu zerlegen. Bild 2 - 8 zeigt als Beispiel die Umwandlung der Dezimalzahl 123 in eine achtstellige Dualzahl und die Umwandlungsregel (Divisions restverfahren). dezimal
123 : 61 : 30 : 1 5 : 7 : 3 : 1 : 0 :
2 = 61 2 = 30 2 = 15 2 = 7 2 = 3 2 = 1 2 = 0 2 = 0
Rest Rest Rest Rest Rest Rest Rest Rest
Dualzahl
oder oder oder oder oder oder oder oder
1 1 0 1 1 — 1-, 1-, 0
123 61 30 15 7 3 1 0
== == == == == == == ==
2 - 61 2 . 30 2 . 15 2- 7 2- 3 2- 1 2- 0 2- 0
+ + + + + + + +
1 1 0 1 1 1 1 0
I
01111011
Umwandlungsrege 1 Die Dezimalzahl wird laufend durch die Zahl 2 dividiert, bis das Ergebnis 0 ist. Die R e s t e (0 oder 1) e r g e b e n die Dualstellen. Bei der e r s t e n Division e n t s t e h t die w e r t n i e d r i g s t e S t e l l e , bei der letzten Division e n t s t e h t die w e r t h ö c h s t e Stelle der Dualzahl.
Bild 2-8:
Umwandlung einer Dezimalzahl in eine Dualzahl
+ 123 d e z i m a l
=
01111011
komplementieren
:
10000100
1 addieren
:
+ 1
123 d e z i m a l
=
10000101
-
dual
dual
Ilmwandlungsregel Die positive Dualzahl wird mit führenden Nullen versehen und Stelle f ü r Stelle k o m p l e m e n t i e r t (aus 0 mach 1 und aus 1 mach 0). Dann ist eine 1 zu a d d i e r e n . Eine negative Dualzahl e n t h ä l t i m m e r e i ne 1 in der höchsten Bitposition.
Bild 2 - 9 : Bildung negativer Dualzahlen Es lassen sich auch negative Dualzahlen bilden. Von den verschiedenen Möglichkeiten soll nur die bei Mikrorechnern gebräuchliche Darstellung im Z w e i e r -
18
2 Grundlagen
Komplement
erwähnt
positive Wert
Stelle
w e r d e n . Zur Bildung e i n e r n e g a t i v e n für Stelle komplementiert
Dualzahl w i r d
der
( e r g ä n z t ) , und es w i r d z u s ä t z -
lich e i n e 1 a d d i e r t . Bild 2 - 9 z e i g t ein B e i s p i e l und d i e
Umwandlungsregel.
Aus e i n e r n e g a t i v e n Dualzahl w i r d durch R ü c k k o m p l e m e n t i e r e n nach d e m g l e i chen V e r f a h r e n wieder eine positive
Dualzahl, denn e i n e d o p p e l t e
Verneinung
h e b t sich a u f . Man b e a c h t e , d a ß bei v o r z e i c h e n b e h a f t e t e n Dualzahlen d i e ganz links s t e h e n d e S t e l l e nicht m e h r B e s t a n d t e i l d e r Zahl ist, sondern das V o r z e i chen d a r s t e l l t . Eine 0 b e d e u t e t p o s i t i v , e i n e 1 n e g a t i v . Beim
Programmieren
und
bei
der
Eingabe
und
Ausgabe
von
Daten
arbeitet
man n o r m a l e r w e i s e im d e z i m a l e n Z a h l e n s y s t e m ; zur Z a h l e n u m w a n d l u n g g i b t es fertige
Systemprogramme
und b e i d e r F e h l e r s u c h e der
Entwickler
mit
oder
Tabellen.
Bei der E n t w i c k l u n g
von
Hardware
in P r o g r a m m e n kann e s j e d o c h v o r k o m m e n , daß sich
Speicherinhalten
beschäftigen
muß. D i e s e w e r d e n in d e r
R e g e l nicht binär, so w i e s i e im S p e i c h e r s t e h e n , sondern h e x a d e z i m a l geben. vier
Das h e x a d e z i m a l e
Dualstellen
Zahlensystem
zu e i n e m
ausge-
e n t s t e h t durch Z u s a m m e n f a s s u n g
neuen Z e i c h e n . Entsprechend
von
Bild 2 - 1 0 v e r w e n d e t
es d i e Z i f f e r n 0 bis 9 und zusätzlich d i e Buchstaben A bis F .
Bild 2 - 1 0 :
Die
Hexadezimal
Dezimal
0000 0001 0010 001 1 0100 0101 0110 0111 1000 1001 1010 1011 1 100 1 101 1110 1111
0 1 2 3 4 5 6 7 8 9 A B C D E F
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
D i e 16 H e x a d e z i m a l z i f f e r n v o n 0 bis F
Dezimalzahl
stellige
Dual
123 l a u t e t a l s a c h t s t e l l i g e
Hexadezimalzahl
Dualzahl 01111011 und a l s
7B. Das h e x a d e z i m a l e
Z a h l e n s y s t e m hat
zwei-
16 Z i f f e r n ;
d i e W e r t i g k e i t e n d e r S t e l l e n sind P o t e n z e n zur Basis 16. In den U m r e c h n u n g s verfahren binäre
der
Bilder
2-7
Speicherinhalte,
Zeichencodierungen,
und die
werden
2-8 keine
ist a n s t e l l e der 2 d i e Dualzahlen
ebenfalls
kürzer
sind
16 zu s e t z e n .
wie
hexadezimal
z.B.
Befehle
ausgegeben.
B u c h s t a b e A ist e n t s p r e c h e n d Bild 2 - 4 binär 01000001 h e x a d e z i m a l 41.
Auch oder Der
2.3 Rechenschaltungen
2.3
19
Rechenschaltungen
Die Boolsche Algebra der Mathematik a r b e i t e t mit den beiden (binären) logischen Zuständen " w a h r " und " f a l s c h " . Die Digitaltechnik e n t w i c k e l t e daraus die S c h a l t a l g e b r a . Sie bildet die Grundlage für das Rechnen mit Dualzahlen und binär codierten Daten. Bild 2 - 1 1 faßt die wichtigsten logischen F u n k t i o nen zusammen.
Name
JA
Tabelle
X |Z 0 0 1 1
NICHT
UND
ODER
EODER
(NOT)
(AND)
(OR)
X |Z 0 1 1 0
X 0 0 1 1
X IY Z 0|0 0 0 ¡1 1 1)0 1 Iii 1
NICHT ODER (NOR)
X 0 0 1 1
X 0 0 1 1
X 0 0 1 1
Y 0 1 0 1
Z 0 1 1 0
Y 0 1 0 1
Z 1 1 1 0
Y 0 1 0 1
Z 1 0 0 0
m © iHh
neues Symbol
altes Symbol
amer i k Symbol
Bild 2 - 1 1 :
Y IZ_ OTÖ 1 0 0 0 1 1
(XOR )
NICHT UNO (NAND)
-o-
i£fc 3H =8-jy I> =D-3>i>
Logische Grundfunktionen
Die JA-Schaltung zeigt an ihrem Ausgang immer den am Eingang anliegenden Zustand. Sie wird als V e r s t ä r k e r oder T r e i b e r verwendet. Die NICHT-Schaltung verneint oder negiert den am Eingang anliegenden Z u stand. Sie wird zur Bildung des Komplementes bei der Darstellung negativer Zahlen verwendet. Die UND-Schaltung hat nur dann am Ausgang eine 1, wenn beide Eingänge 1 sind. Dies gilt auch für UND-Schaltungen mit mehr als zwei Eingängen. Die UND-Schaltung bildet das logische Produkt nach dem kleinen Einmaleins der Dualzahlen.
20
2 Grundlagen
Die ODER-Schaltung hat nur dann am 0 sind. Dies gilt
Ausgang eine 0, wenn b e i d e Eingänge
auch für O D E R - S c h a l t u n g e n
mit mehr als z w e i
Eingängen.
Die O D E R - S c h a l t u n g bildet d i e logische Summe, die jedoch für den F a l l 1 + 1 =
10
korrigiert
werden
muß,
da sich ein
Übertrag
auf
d i e nächste
Stelle
ergibt. Die EODER-Schaltung hat nur dann am Ausgang eine 0, wenn beide Eingänge gleich sind, also beide 0 oder beide 1. E O D E R b e d e u t e t " E n t w e d e r o d e r , a b e r nicht
alle
beide
".
Die
der für den Fall 0 - 1 Die
NICHT-UND-
zusätzliche
und
Verneinung
amerikanischen
EODER-Schaltung
bildet die logische D i f f e r e n z , bei
= 1 von der f o l g e n d e n Stelle g e b o r g t werden muß. die
NICHT-ODER-Schaltungen
am
Ausgang
Bezeichnungen
der
NAND
UND-
entstehen
durch
eine
bzw. O D E R - S c h a l t u n g . und N O R für
für N O T - A N D
Die
NOT-OR
sind b e r e i t s Bestandteil der deutschen Fachsprache g e w o r d e n . Für die Addition z w e i e r Dualstellen ist eine Schaltung e r f o r d e r l i c h , an deren Eingängen d i e beiden Dualstellen anliegen und an deren Ausgängen die e i n s t e l lige
Summe und der
Übertrag
auf
d i e nächste
Stelle
erscheinen. Bild 2 - 1 2
zeigt die W e r t e t a b e l l e und die Schaltung eines Halbaddierers. Eingänge Ausgänge U
X Y
X Y
We r t e t a b e 1 1 e Bild 2-12:
Scha1tung
HA
— U . — S
Symbo 1
Halbaddierer
Ein V e r g l e i c h
mit den W e r t e t a b e l l e n der logischen Grundfunktionen z e i g t , daß
die EODER-Schaltung die Summe und die U N D - S c h a l t u n g den Ü b e r t r a g b i l d e t . Auf
einen
systematischen
Entwurf
einer
logischen Schaltung aus der
Werte-
tabelle kann an dieser S t e l l e nicht eingegangen w e r d e n . Der Halbaddierer net
sich nur zur Addition der wertniedrigsten
( l e t z t e n ) Stellen z w e i e r
eigDual-
zahlen, da bei allen f o l g e n d e n Stellen ein Übertrag der vorhergehenden S t e l l e mit
berücksichtigt
werden
muß.
Bild
2-13
zeigt
die
Wertetabelle
und
die
Schaltung eines V o l l a d d i e r e r s , der drei Eingänge und z w e i Ausgänge hat. Der e r s t e Halbaddierer addiert die beiden Dualstellen X und Y . Die Z w i s c h e n summe läuft mit dem Ü b e r t r a g UV der vorhergehenden S t e l l e über den z w e i t e n Halbaddierer die beiden
der
Halbaddierer zum
Gesamtübertrag
addiert
U N , der an
ist. Bild 2-14 zeigt d i e
Schal-
eines A d d i e r w e r k e s ,aus acht V o l l a d d i e r e r n , das z w e i a c h t s t e l l i g e
Dual-
den nächsten tung
und bildet die Ergebnissumme S. Eine O D E R - S c h a l t u n g
Teilüberträge Volladdierer
w e i t e r zu
reichen
zahlen addieren kann, die parallel auf .je acht L e i t u n g e n am Eingang ankommen
2.3 Rechenschaltungen
Eingänge X V UV 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1
Ausgänge UN s 0 0 0 1 0 1 1 0 1 0 1 0 1 0 1 1
Wertetabe 1 le
Bild 2 - 1 3 :
»UN Schaltung
Volladdierer
2.Summand
I.Summand
Su m me Bild 2 - 1 4 :
5 Symbo1
Achtstelliger
Paralleladdierer
21
22
2 Grundlagen
D e r Ü b e r t r a g s a u s g a n g d e s w e r t h ö c h s t e n V o l l a d d i e r e r s wird m i t C f ü r C a r r y = Ü b e r t r a g b e z e i c h n e t . Ist C = 1, so ist bei d e r A d d i t i o n z w e i e r a c h t s t e l l i g e r Dualzahlen eine n e u n t e Stelle e n t s t a n d e n . Dies kann als Fehleranzeige dienen, da der zulässige Zahlenbereich ü b e r s c h r i t t e n wurde. Der Addierer kann auch s u b t r a h i e r e n , wenn man die abzuziehende Dualzahl vorher mit einer NICHTSchaltung k o m p l e m e n t i e r t und zusätzlich über den Ü b e r t r a g s e i n g a n g des w e r t n i e d r i g s t e n V o l l a d d i e r e r s e i n e 1 a d d i e r t . Die S u b t r a k t i o n wird auf d i e A d d i t i o n d e r n e g a t i v e n Z a h l z u r ü c k g e f ü h r t : A - B = A + ( - B ) . Bild 2 - 1 5 z e i g t abschließend das Symbol einer Arithmetisch-logischen Einheit, die a d d i e r t , s u b t r a h i e r t und logische Operationen a u s f ü h r t .
1.
2.Operand
Operand
-CV CN S
—
Z
—
ALU addieren subtrahieren UND ODER EODER
- Steuere i ngänge - z u r Auswahl -der Funktionen
Ergebn i s
Bild 2 - 1 5 :
A r i t h m e t i s c h - l o g i s c h e E i n h e i t f ü r a c h t Bit
ALU ist e i n e Abkürzung f ü r A r i t h m e t i c - L o g i c Unit g l e i c h A r i t h m e t i s c h l o g i s c h e E i n h e i t . Sie ist B e s t a n d t e i l d e s R e c h e n w e r k e s e i n e s M i k r o p r o z e s s o r s . Die ALU e n t h ä l t z w e i m a l a c h t D a t e n e i n g ä n g e f ü r d i e zu v e r k n ü p f e n d e n O p e r a n d e n und a c h t D a t e n a u s g ä n g e f ü r d a s E r g e b n i s . Der Ü b e r t r a g s e i n g a n g CV a d d i e r t bei e i n e r S u b t r a k t i o n z u s ä t z l i c h e i n e 1 z u m K o m p l e m e n t o d e r k a n n bei e i n e r A d d i t i o n von m e h r a l s a c h t bit l a n g e n D u a l z a h l e n d e n Z w i s c h e n ü b e r t r a g a d d i e r e n . D a h e r ist d e r Ü b e r t r a g d e s Ü b e r t r a g s a u s g a n g s C z w i s c h e n d e n T e i l a d d i t i o n e n zu s p e i c h e r n . Der Ausgang S f ü r Sign g l e i c h V o r z e i c h e n ist g l e i c h d e m w e r t h ö c h s t e n Bit des E r g e b n i s s e s u n d e n t h ä l t d a s V o r z e i c h e n bei v o r z e i c h e n b e h a f t e t e n D u a l z a h l e n . Der Ausgang Z f ü r Z e r o g l e i c h Null z e i g t ü b e r e i n e L o g i k s c h a l t u n g ( N O R mit a c h t E i n g ä n g e n ) , ob d a s E r g e b n i s g l e i c h Null i s t . Ü b e r d i e S t e u e r e i n g ä n g e w i r d d i e g e w ü n s c h t e O p e r a t i o n d e r ALU a u s g e w ä h l t , also Addition, Subtraktion, U N D - F u n k t i o n , O D E R - F u n k t i o n oder E O D E R F u n k t i o n . An d i e s e n E i n g ä n g e n liegt b e i m M i k r o p r o z e s s o r d e r F u n k t i o n s c o d e des Befehls.
2.4 Speicherschaltungen
2.4
23
Speicherschaltungen
S p e i c h e r s c h a l t u n g e n h a b e n d i e A u f g a b e , b i n ä r e Z u s t ä n d e (0 o d e r 1) a u f z u n e h men, zu s p e i c h e r n und auf Abruf w i e d e r a b z u g e b e n . Die e i n f a c h s t e S p e i c h e r s c h a l t u n g b e s t e h t aus zwei r ü c k g e k o p p e l t e n N A N D - S c h a l t u n g e n e n t s p r e c h e n d Bild 2 - 1 6 . Ein Flipflop kann auch a u s zwei N O R - S c h a l t u n g e n b e s t e h e n .
X V z 0 0 1 0 1 1 1 0 1 1 1 0 NAND-Tabelle Bild 2 - 1 6 :
Scha1tung
Symbol
NAND-Flipflop
Das Wort " F l i p f l o p " k o m m t aus d e r a m e r i k a n i s c h e n L a b o r s p r a c h e und b e d e u t e t so viel wie " K l i c k - K l a c k " . Die d e u t s c h e Bezeichnung " B i s t a b i l e r M u l t i v i b r a t o r " h a t sich n i c h t d u r c h g e s e t z t . Die Schaltung h a t zwei Eingänge und zwei A u s g ä n g e . Mit dem S-Eingang kann man den Speicher auf 1 s e t z e n , mit d e m R Eingang auf 0 r ü c k s e t z e n . Der Ausgang Q ist gleich d e m S p e i c h e r i n h a l t , d e r Ausgang (J ist durch einen Q u e r s t r i c h g e k e n n z e i c h n e t und e n t h ä l t d a s K o m p l e m e n t ( V e r n e i n u n g ) von Q. Ruhe- oder Speicherzustand: Bild 2 - 1 7 zeigt den S p e i c h e r z u s t a n d des N A N D - F l i p f l o p s . Der linke Teil z e i g t die Speicherung des W e r t e s Q = 0, d e r r e c h t e den des W e r t e s Q = 1.
Speicherinhalt Bild 2 - 1 7 :
Q = 0
Speieherinha1t
Speicherzustand des N A N D - F l i p f l o p s
Q = 1
24
Ist
2 Grundlagen
ein
Eingang
der
NAND-Schaltung
1, so hängt der Ausgang vom
des anderen Eingangs ab. Ist der Speicherinhalt
Zustand
Q = 0 (linkes Bild), so l i e g t
die 0 zusammen mit R = 1 am unteren N A N D und e r g i b t am Ausgang Q = 1. Diese
1 wird
auf
das obere
NAND
zurückgeführt und e r g i b t zusammen
mit
S = 1 w i e d e r den Ausgang Q = 0: die Schaltung speichert stabil den Inhalt 0. Auch für den
Speicherzustand Q = 1 ( r e c h t e s Bild) ergibt sich wieder ein s t a -
biler Zustand, so daß also R = S = 1 auf jeden Fall einen der beiden S p e i c h e r zustände Q = 0 oder Q = 1 festhält ( s p e i c h e r t ) . Einschreiben einer 1 ( S e t z e n ) : Bringt
man den Setzeingang S kurzzeitig auf 0, so e r g i b t sich immer der A u s -
gang und d a m i t der Speicherinhalt Q = 1. R muß dabei auf 1 bleiben. Einschreiben einer 0 ( R ü c k s e t z e n ) : Bringt
man den Rücksetzeingang
R kurzzeitig auf 0, so e r g i b t sich immer der
Ausgang Q = 1 und damit der Speicherinhalt Q = 0. S muß dabei auf 1 bleiben. Das N A N D - F l i p f l o p wird auch als R S - F l i p f l o p b e z e i c h n e t . Es dient z.B. zum Entprellen von Schaltern und Tastern. Die Eingänge R und S schalten mit einem 0 - S i g n a l , sie sind also " a k t i v L O W " . Das e i n f a c h e R S - F l i p f l o p kann entsprechend Bild 2-18 zum D - F l i p f l o p e r w e i tert w e r d e n .
C=, &1
^
1
R
-0
D — T •
I—Ö
Schaltung
Bild 2-18:
—Q -Q
T 0 1 1
Symbol
D X 0 1
Q 1Q speichern 0 |1 1 I 0
Wertetabe11 e
D-Flipflop
D b e d e u t e t Delay wie Verzögerung. Dieses F l i p f l o p hat nur noch einen einzigen Dateneingang D. Die NICHT-Schaltung sorgt d a f ü r , daß die Eingänge R ' und S 1 der
beiden
NAND-Schaltungen
NAND-Schaltungen
kann
immer
komplementär
zueinander
man sich a u f g e t e i l t denken in ein U N D
sind. mit
Die
einem
folgenden N I C H T . Durch das UND werden die Daten nur dann w e i t e r g e r e i c h t , wenn der T a k t T g l e i c h 1 ist. Die N I C H T - S c h a l t u n g k o m p l e m e n t i e r t die D a t e n . Der D - E i n g a n g ist j e t z t "aktiv H I G H " . D = 1 wird als Q = 1 g e s p e i c h e r t , D = 0 als Q = 0. Bild 2-19 zeigt den zeitlichen V e r l a u f eines Schreibvorganges.
2.4 Speicherschaltungen
T Q
& — Q
Eingang gesperrt
©
0
Ä
Eingang offen
neue D a t e n
25
Eingang gesperrt
(3)
am E i n g a n g
Q alte Daten speichern
Bild 2 - 1 9 :
neue Daten übernehmen
neue Daten speichern
S c h r e i b e n eines D - F l i p f l o p s
Im Bereich 1 ist d e r S c h r e i b t a k t 0, d a m i t sind die Eingänge R und S d e s R S Flipflops unabhängig von den an D bzw. R ' und S' a n l i e g e n d e n D a t e n i m m e r 1. Der Eingang ist g e s p e r r t , das Flipflop s p e i c h e r t . Im Bereich 2 ist d e r S c h r e i b t a k t 1, d a m i t w e r d e n d i e am Eingang D a n l i e g e n den D a t e n über R ' und S ' in d a s F l i p f l o p ü b e r n o m m e n und e r s c h e i n e n a m A u s gang Q . Während d e s T a k t z u s t a n d e s T = 1 d ü r f e n sich die D a t e n n i c h t ä n d e r n . Das vorliegende F l i p f l o p wird d u r c h den Zustand des T a k t e s g e s t e u e r t . D a n e b e n gibt es auch F l i p f l o p s , die d u r c h eine T a k t f l a n k e g e s t e u e r t w e r d e n . Die Ü b e r n a h m e e r f o l g t dann nur zu d e m Z e i t p u n k t , zu dem sich der T a k t von 0 auf 1 (positive F l a n k e ) oder von 1 auf 0 ( n e g a t i v e F l a n k e ) ä n d e r t . Im Bereich 3 ist d e r S c h r e i b t a k t wieder 0. D a m i t ist die D a t e n ü b e r n a h m e wieder g e s p e r r t , und das Flipflop b e w a h r t die D a t e n bis zum n ä c h s t e n S c h r e i b vorgang a u f . Der Ausgang Q des Flipflops kann j e d e r z e i t ohne V e r ä n d e r u n g des I n h a l t e s gelesen w e r d e n . Dies kann d u r c h d a s Anlegen eines L e s e t a k t e s g e s c h e h e n . D F l i p f l o p s w e r d e n u n t e r d e r Bezeichnung L a t c h - f r e i ü b e r s e t z t A u f f a n g s p e i c h e r - a l s R e g i s t e r f ü r d i e Eingabe und Ausgabe von D a t e n v e r w e n d e t . Für r e c h e n t e c h n i s c h e Anwendungen ist es o f t n ö t i g , in einem Flipflop g l e i c h zeitig einen a l t e n S p e i c h e r i n h a l t im H a u p t s p e i c h e r zu b e h a l t e n und einen n e u e n Inhalt z u n ä c h s t in e i n e n V o r s p e i c h e r zu s c h r e i b e n . Bild 2 - 2 0 zeigt die S c h a l tung eines M a s t e r - S l a v e - F l i p f l o p s z u s a m m e n mit d e m z e i t l i c h e n Verlauf d e r Datenübernahme.
26
2 Grundlagen
Master (Mei s t e r )
Slave (Sklave)
©
, (3)
I © j
7 7 x/ n e u e
Scha1tung
• / •
X
/
.
/
/
n
Slave
Der
/
e
u
/
/
/
al t
Master-Slave-Flipflop
Vorspeicher
Sklave.
/
Übernahme S1 ave
Symbol
Bild 2 - 2 0 :
/
Übernahme 1 Master J
al t
Q
/
Daten /
Master
D T
i /
heißt
Master
Neue D a t e n liegen am
gleich
M e i s t e r , der
Hauptspeicher
Slave
Eingang d e s M e i s t e r s ; der Sklave e r h ä l t
wie seine
D a t e n vom M e i s t e r . D i e Ü b e r n a h m e e r f o l g t j e d o c h durch den n e g i e r t e n T a k t d e s Sklaven zu u n t e r s c h i e d l i c h e n Im B e r e i c h
Zeitpunkten.
1 ist der T a k t d e s M e i s t e r s 0 . Dadurch ist sein D a t e n e i n g a n g
ge-
s p e r r t . Der T a k t des Sklaven dagegen ist 1. Der Sklave ü b e r n i m m t die D a t e n d e s M e i s t e r s ; b e i d e F l i p f l o p s haben den g l e i c h e n I n h a l t . Im
Bereich
2 ist der T a k t des M e i s t e r s 1, und e r ü b e r n i m m t die an s e i n e m
Eingang a n l i e g e n d e n
D a t e n . D e r T a k t des Sklaven d a g e g e n ist 0; d a h e r b e h ä l t
d i e s e r noch s e i n e n a l t e n I n h a l t . Im B e r e i c h 2 s p e i c h e r t
a l s o der M e i s t e r
be-
r e i t s die neuen D a t e n , während der Sklave noch die a l t e n W e r t e f e s t h ä l t . Im B e r e i c h 3 ü b e r n i m m t wie im B e r e i c h 1 der Sklave die D a t e n des M e i s t e r s ; b e i d e F l i p f l o p s h a b e n w i e d e r den g l e i c h e n Inhalt. A c h t p a r a l l e l e M a s t e r - S l a v e - F l i p f l o p s e n t s p r e c h e n d Bild 2 - 2 1 bilden den A k k u m u l a t o r , das w i c h t i g s t e D a t e n r e g i s t e r im R e c h e n w e r k e i n e s M i k r o p r o z e s s o r s .
2.4 Speicherschaltungen
1. O p e r a n d
27
2.Operand
Bild 2-21: ALU und Akkumulator f ü r a c h t Bit
Der Akkumulator gibt an seinen Ausgängen z.B. eine zu addierende Dualzahl an die a r i t h m e t i s c h - l o g i s c h e Einheit a b und n i m m t an seinen Eingängen die Summe a u f . Der z w e i t e Summand kann z.B. aus einem aus D - F l i p f l o p s b e s t e henden D a t e n r e g i s t e r k o m m e n . Akkumulator b e d e u t e t S a m m l e r . Er gibt seinen Speicherinhalt auf a c h t parallelen Leitungen gleichzeitig a b und n i m m t an seinen a c h t Eingängen das Ergebnis auf a c h t p a r a l l e l e n Leitungen a u f . Er wird daher auch als p a r a l l e l e s S c h i e b e r e g i s t e r b e z e i c h n e t . Eine Rückführung der Ausgänge eines M a s t e r - S l a v e - F l i p f l o p s auf die Eingänge entsprechend Bild 2 - 2 2 l i e f e r t einen 2 : 1 - F r e q u e n z t e i l e r , mit dem sich eine Z ä h l e r k e t t e a u f b a u e n läßt. Jede fallende T a k t f l a n k e s c h a l t e t den Ausgang eines Z ä h l e l e m e n t e s u m , d.h. von 0 auf 1 oder von 1 auf 0. Die im Bild u n t e r e i n a n d e r g e z e i c h n e t e n logischen Zustände der T a k t e bilden eine Dualzahl, die z.B. mit 0000 beginnend mit j e dem Takt um 1 weitergezählt wird. Auf den g r ö ß t e n Wert 1111 folgt wieder der Anfangswert 0000. Andere hier nicht b e h a n d e l t e Zähler lassen sich mit einem Anfangswert laden und wahlweise a u f w ä r t s oder a b w ä r t s zählen. Das Zählen geht s c h a l t u n g s t e c h n i s c h schneller und e i n f a c h e r als die Addition oder Subtraktion der Zahl 1.
28
2 Grundlagen
B I
I
I
0 R 0 I I
I I
0 '0
111
0
1
0
1 I1
0 I 0
1
' 1
0,0
1
I 1*0 1 '
B 0 I0
0 ' 0
1
1
0
0 I0
0
0
0
1 1
0
0 0
0 , 0
1 I 1
1 1
1
4-41 I1 I1 I 1
< 0010 =2«
0001 = 1.
0000 = 0«
Bild 2 - 2 2 :
V i e r s t e l l i g e r Binärzähler
1
I
1 0
0
0
1
I
,
0
0
0 I 0
I ' i_! • t 00 01 = 1. 0000 = 0« 1111 = 15.
2.5 Aktive Zustände von
2.5
Steuersignalen
29
Aktive Zustände von Steuersignalen
Die Arbeitsgeschwindigkeit eines Mikrorechners hängt ab von den Schaltzeiten seiner R e c h e n - und Speicherschaltungen. Diese ergeben sich aus den Z e i t e n f ü r den Aufbau und den Abbau von L a d u n g s t r ä g e r n in den H a l b l e i t e r s c h i c h t e n . S c h a l t e t man m e h r e r e Logikbausteine (z.B. NICHT, UND, ODER) wie bei einem Volladdierer Bild 2 - 1 3 h i n t e r e i n a n d e r , so addieren sich ihre L a u f z e i t e n . Besonders zeitkritisch ist der a c h t s t e l l i g e P a r a l l e l a d d i e r e r nach Bild 2 - 1 4 , bei d e m der G e s a m t ü b e r t r a g a c h t Volladdierer d u r c h l a u f e n muß. Aus diesem Grunde werden d e r a r t i g e Schaltungen in der Praxis möglichst aus p a r a l l e l e n Logikelementen a u f g e b a u t . Dadurch erhöht sich jedoch die Anzahl d e r E l e m e n t e und damit ihr P l a t z - und L e i s t u n g s b e d a r f . Die Bilder dieses A b s c h n i t t s z e i gen nur die Funktionsweise der R e c h e n - und Speicherschaltungen, nicht jedoch ihren t a t s ä c h l i c h e n Aufbau im Mikrorechner. Der zeitliche Ablauf aller Funktionen eines Mikrorechners wird durch den T a k t g e s t e u e r t . Dies ist ein von außen an den Mikroprozessor a n g e l e g t e s R e c h t e c k signal von c a . 1 bis 10 MHz, für d a s es jedoch aus technologischen Gründen eine obere und auch eine u n t e r e Frequenzgrenze g i b t . Innerhalb dieser aus den D a t e n b l ä t t e r n der Bausteine ersichtlichen Grenzen kann der Benutzer die A r beitsgeschwindigkeit seines Mikrorechners durch den Takt selbst b e s t i m m e n . Aus dem Takt leitet das S t e u e r w e r k des Mikroprozessors e n t s p r e c h e n d Bild 2 - 2 3 w e i t e r e Steuersignale ab. Die modernen Prozessoren e n t h a l t e n T a k t g e n e r a toren f ü r innere und Frequenzteiler f ü r ä u ß e r e T a k t s i g n a l e .
Daten l e i t u n g e n
=
Datenbus
Speicher
schreiben
lesen
Steuerwerk
t tt
lesen
Register
schreiben
Steuere i ngänge (Befehlsregister) Mikroprozessor
Bild 2 - 2 3 :
Steuerwerk und Steuersignale
30
2
Grundlagen
Das S t e u e r w e r k b e s t e h t aus Logik-, S p e i c h e r - und Zählschaltungen. Aus dem T a k t e i n g a n g und weiteren Steuereingängen werden die äußeren S t e u e r s i g n a l e (z.B. Speicher Lesen und Schreiben) und die inneren Steuersignale (z.B. T a k t e i n g ä n g e von Registern) a b g e l e i t e t . Bild 2 - 2 4 zeigt als Beispiel den z e i t lichen Verlauf der Signale "Lesen" und " S c h r e i b e n " , die zu den S p e i c h e r b a u steinen führen.
T1
Takt
T2
lesen
schreiben
Bild 2 - 2 4 :
I
»
¡
I ' i i
U
T3
I
I
!
! i i
i
I i i
i
i I
i.
Zeitlicher Verlauf eines " a k t i v - H I G H " - L e s e s i g n a l s
Die beiden Steuersignale "Lesen" und "Schreiben" des Beispiels sind "aktiv HIGH". Ein hohes P o t e n t i a l bzw. eine logische 1 löst den gewünschten Vorgang aus. Die Prozesoren der 68xx-Familie kennen nur ein Lese/Schreibsignal. T a k t T l : Beide Steuersignale sind nicht aktiv. Takt T2: Das Lesesignal ist aktiv, das Schreibsignal nicht. Takt T3: Das Lesesignal ist aktiv, das Schreibsignal n i c h t . T a k t T4: Beide Steuersignale sind nicht aktiv. Die Mikrorechnertechnik a r b e i t e t jedoch vorzugsweise mit Steuersignalen, die "aktiv LOW" sind. Ein niedriges P o t e n t i a l bzw. eine logische 0 soll den g e wünschten Vorgang auslösen. Bild 2 - 2 5 zeigt wieder die Steuersignale " L e s e n " und "Schreiben" jedoch für aktiv LOW. S t e u e r s i g n a l e , die aktiv LOW sind, werden meist durch einen Q u e r s t r i c h g e k e n n z e i c h n e t . Die Eingänge der Bausteine e r h a l t e n einen Punkt. Die Signale des Bildes 2 - 2 4 bzw. 2-25 könnten dazu dienen, die Übertragung von D a t e n zwischen dem Speicher und dem Mikroprozessor zu s t e u e r n . Im Takt T l müssen die Daten noch verschiedene Schaltstufen zu den Speichern d u r c h l a u f e n und sind noch nicht gültig. In den T a k t e n T2 und T3 sind die Daten stabil und gültig und können von den Speicherschaltungen übernommen w e r d e n . Das L e s e -
2.5 Aktive Zustände von Steuersignalen
Takt
T1
T2
T3
31
U
lesen
schreiben
Bild 2-25:
Z e i t l i c h e r V e r l a u f eines
"aktiv-LOW"-Lesesignals
signal legt nicht nur den Zeitpunkt, sondern auch die Richtung vom Speicher in den Mikroprozessor f e s t . Mit dem Schreibsignal werden Daten vom M i k r o prozessor in den Speicher g e b r a c h t . Die Prozessoren der 6 8 x x - F a m i l i e u n t e r scheiden mit dem Lese/Schreib-Signal d i e Richtung der Datenübertragung und legen mit dem F r e i g a b e t a k t E den Zeitpunkt der Übertragung f e s t . Die
L o g i k von Steuersignalen
läßt
sich durch N I C H T - S c h a l t u n g e n
leicht von
aktiv L O W nach aktiv HIGH und umgekehrt umdrehen. Bei der logischen V e r knüpfung mehrerer Steuersignale ist zu b e a c h t e n , daß sich die U N D - bzw. die O D E R - S c h a l t u n g des Bildes 2-11 nur auf aktiv HIGH beziehen. Für die V e r knüpfung von Steuersignalen, die aktiv L O W sind, ist entsprechend Bild 2 - 2 6 die e n t g e g e n g e s e t z t e Logikfunktion zu wählen.
l o g i s c h e ODERV e r k n i i p f ung
l o g i s c h e UNDVerknüpfung aktiv HIGH
aktiv LOW
Bild 2-26:
X 0 0 1
Y IZ 0 0 1 0 * — 0 0 V — Ii 1 Ii X lo 0 1 1
Y IZ 0 1 1 ! 0 1 1 1
Y
—
&
— Z
— z
"x 0 0 1 1 X o 0 1 1
Y 0 1 0 1
z 0 1 X — 1 Y — > 1 1
Y n 1 0 1
z n X — 0 0 Y — i
&
— Z
— z
Logische Verknüpfung von Steuersignalen
Für aktiv HIGH bildet die U N D - S c h a l t u n g g l e i c h z e i t i g auch die logische Verknüpfung, denn der Ausgang
ist nur dann 1, wenn b e i d e Eingänge
UND1 sind.
32
2 Grundlagen
E n t s p r e c h e n d e s gilt f ü r d a s O D E R . Auch hier s t i m m e n Schaltung und V e r k n ü p fung ü b e r e i n . Anders d a g e g e n bei Signalen, die aktiv LOW sind. Die O D E R S c h a l t u n g h a t nur dann a m Ausgang eine 0 (aktiv LOW), wenn b e i d e Eingänge 0 ( a k t i v LOW) sind. E n t s p r e c h e n d ist f ü r eine logische U N D - V e r k n ü p f u n g z w e i er Signale aktiv LOW eine O D E R - S c h a l t u n g e i n z u s e t z e n . Die U N D - S c h a l t u n g ist i m m e r d a n n am Ausgang 0 (LOW), wenn m i n d e s t e n s e i n e r d e r b e i d e n E i n g ä n g e 0 (LOW) ist. Für e i n e logische O D E R - V e r k n ü p f u n g z w e i e r aktiv LOW Signale ist also eine U N D - S c h a l t u n g e i n z u s e t z e n . Bild 2 - 2 7 zeigt als Beispiel, wie a u s den b e i d e n Signalen Lesen und Schreiben ein n e u e s Signal g e w o n n e n w i r d , das dann aktiv LOW i s t , wenn e n t w e d e r gelesen o d e r g e s c h r i e b e n wird. Das S t e u e r w e r k sorgt d a f ü r , daß nicht beide S t e u e r s i g n a l e gleichzeitig aktiv sein k ö n n e n . Daten gültig
m
Daten
Takt
—t Vorbereitungszeit lesen
m Haltezeit
schreiben
lesen . schreiben •
lesen •ODER schreiben
lesen ODER schreiben
Bild 2 - 2 7 :
O D E R - V e r k n ü p f u n g bei aktiv LOW
Die S t e u e r s i g n a l e " L e s e n " und " S c h r e i b e n " wurden z u n ä c h s t als z u s t a n d s g e s t e u e r t e i n g e f ü h r t . Die D a t e n ü b e r t r a g u n g e r f o l g t innerhalb der Z e i t , in d e r das Signal im aktiven Z u s t a n d ist. Der g e n a u e Z e i t p u n k t d e r D a t e n ü b e r n a h m e wird in vielen Fällen d u r c h eine T a k t f l a n k e g e s t e u e r t . Bild 2 - 2 4 zeigt a l s Beispiel eine n e g a t i v e ( f a l l e n d e ) F l a n k e , Bild 2 - 2 5 eine positive ( s t e i g e n d e ) F l a n k e . Die D a t e n müssen eine b e s t i m m t e Zeit vor d e r F l a n k e ( V o r b e r e i t u n g s z e i t ) und eine b e s t i m m t e Zeit nach der F l a n k e ( H a l t e z e i t ) s t a b i l sein. Diese Z e i t e n wurden in d a s Bild 2 - 2 7 e i n g e t r a g e n .
2.5 Aktive Zustände von
Steuersignalen
33
Bild 2 - 2 8 zeigt am Beispiel eines handelsüblichen Flipflops (SN 7474) den Unterschied zwischen einer Steuerung durch einen Zustand und d u r c h eine Flanke.
Zustnd Flanke ke ine F lanke
Bild 2-28:
Eingänge PRE CLR C L K X 0 1 1 0 X
t
1
1
1
1
1
1
0
1
1
1
•
Ausgänge D X X
Q
Q
1
0
0
1
1
--
1
0
0 X X
--
0
1
bleibt bleibt
C LR
Funktion setzen löschen setzen rücksetzen s pe i che rn spe i che rn
0CLK74 74
PRE
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 e s Flipflop
In der Tabelle könnten a n s t e l l e der logischen Bezeichnungen 0 und 1 a u c h die elektrischen Potentiale LOW und HIGH abgekürzt L und H s t e h e n . Ein X b e d e u t e t , daß der Zustand des Eingangs die Schaltung nicht b e e i n f l u ß t . Die beiden z u s t a n d s g e s t e u e r t e n Eingänge PRE und CLR sind aktiv LOW und wirken wie ein RS-Flipflop e n t s p r e c h e n d Bild 2-17 und 2 - 1 8 . PRE b e d e u t e t PRESET gleich s e t z e n . Durch e i n e logische 0 (LOW-Potential) a n diesem E i n gang wird der Speicherzustand des Flipflops Q = 1 g e s e t z t . CLR b e d e u t e t CLEAR gleich löschen. Durch eine logische 0 (LOW-Potential) a n diesem E i n gang wird der Speicherzustand des Flipflops auf Q = 0 g e b r a c h t . Sind b e i d e Eingänge 1 ( H I G H - P o t e n t i a l ) , so s p e i c h e r t das Flipflop seinen augenblicklichen Inhalt. Der Dateneingang D wird durch eine positive (steigende) Flanke des T a k t e i n gangs CLK g e s t e u e r t . CLK b e d e u t e t CLOCK gleich T a k t g e b e r oder Uhr. Im Gegensatz zum D-Flipflop des Bildes 2 - 1 8 e r f o l g t die D a t e n ü b e r n a h m e durch die T a k t f l a n k e . Dabei müssen die Daten während der Vorbereitungszeit vor der Flanke und während der Haltezeit nach der Flanke stabil sein. Im R u h e z u stand des T a k t e s speichert das Flipflop seinen augenblicklichen Inhalt. Beim Aufbau eines Mikrorechners werden vorwiegend h o c h i n t e g r i e r t e Bausteine (Mikroprozessor, S p e i c h e r - und Ein/Ausgabebausteine) e i n g e s e t z t . Damit e n t fällt der Entwurf von R e c h e n - und S p e i c h e r s c h a l t u n g e n , da diese ja b e r e i t s in den Bausteinen vorhanden sind. Wichtig wird dagegen die logische und z e i t l i che Verknüpfung der Steuersignale, die die D a t e n ü b e r t r a g u n g zwischen den Bausteinen s t e u e r n . Dazu sind Grundkenntnisse der Digitaltechnik und der Arbeit mit TTL-Schaltungen unbedingt e r f o r d e r l i c h . Für die P r o g r a m m i e r u n g von Mikrorechnern genügt es, die Arbeitsweise der Schaltungen zu v e r s t e h e n .
34
2 Grundlagen
2.6 Ein
Speicherorganisation Mikrorechner
kann
F l i p f l o p s o d e r ähnlichen Bits zu
einem
Byte
über
500 000 b i n ä r e
zusammen.
Speicherbytes
in F o r m
Mikrorechners
kann
Der
Mikroprozessor
von R e g i s t e r n . D e r
aus
Jedes B y t e e r h ä l t e i n e
Speicherelemente
Schaltungen e n t h a l t e n . Ü b l i c h e r w e i s e
maximal
65
536
enthält
in F o r m faßt
etwa
man
10 bis
B e f e h l s - und D a t e n s p e i c h e r Bytes
von acht
o d e r 64 K i l o b y t e s
20
eines
bestehen.
A d r e s s e , mit d e r es e i n d e u t i g von a l l e n a n d e r e n
Bytes
u n t e r s c h i e d e n w e r d e n kann. Die
A d r e s s e e i n e s B y t e s w i r d w i e sein Inhalt binär c o d i e r t und ü b l i c h e r w e i s e
als Dualzahl a n g e g e b e n . D e r in Bild 2 - 2 9 g e z e i g t e A d r e ß d e c o d e r ist e i n e
Aus-
w a h l s c h a l t u n g , d i e e i n e von v i e r S p e i c h e r s t e l l e n a u s w ä h l t .
A1 A0 Y3 Y 2Y1 Y0 0 0 0 0 0 1 0 1 0 0 1 0 0 1 0 0 1 0 1 1 1 0 0 0
Wertetabelle
/ 1 -aus-4 Decoder
z A1
Schaltung
Adressen
Bild 2 - 2 9 :
in z w e i
Y0
— Y1 —
Y2
— Y3
A0
Schaltbild
Adreßdecoder
Zur A u s w a h l von vier denn
A1
AO
—
Speicherstellen
sind als A d r e s s e z w e i Bits e r f o r d e r l i c h ,
B i t s lassen sich genau v i e r v e r s c h i e d e n e
Bitkombinationen
s t e l l e n . D i e s sind d i e Dualzahlen 0 0 , 01, 10 und 11 mit den d e z i m a l e n
dar-
Werten
0 , 1, 2 und 3. Zur A u s w a h l von a c h t S p e i c h e r s t e l l e n sind als A d r e s s e d r e i Bits erforderlich;
mit
vier
Bits
lassen
sich
16 S p e i c h e r s t e l l e n
adressieren.
Das
35
2.6 Speicherorganisation
Bildungsgesetz l a u t e t : 2 hoch Zahl der Adreßbits gleich Zahl der a d r e s s i e r b a ren S p e i c h e r s t e l l e n . Also z . B . 2 hoch 4 Adreßbits gibt 16 S p e i c h e r a d r e s s e n . Der Adreßdecoder des Bildes 2 - 2 9 h a t zwei Adreßeingänge und vier Auswahlausgänge, die immer nur eine von vier S p e i c h e r s t e l l e n auswählen; daher der Name
l-aus-4-Decoder.
Die Auswahlschaltung
besteht
aus
Spaltenleitungen
mit den Adressen und ihren Verneinungen ( N I C H T - S c h a l t u n g e n ) und aus Z e i l e n leitungen, Adresse
die
auf
UND-Schaltungen
11 an den beiden
geführt
Adreßeingängen,
werden.
Liegt
z . B . die
so gibt nur die u n t e r s t e
duale UND-
Schaltung an ihrem Ausgang e i n e 1 ab und wählt damit die S p e i c h e r s t e l l e mit der dualen
Adresse
11 aus. Alle anderen U N D - S c h a l t u n g e n zeigen an ihrem
Ausgang eine 0 , weil i m m e r mindestens einer ihrer Eingänge 0 i s t . Die W e r t e t a b e l l e des Bildes 2 - 2 9 zeigt für a l l e vier möglichen die
entsprechenden
Ausgänge. Sie sind "aktiv
Eingangsbitkombinationen
HIGH", d.h. e i n e
1 bedeutet
" a u s g e w ä h l t " , eine 0 b e d e u t e t " n i c h t a u s g e w ä h l t " . V e r w e n d e t man a n s t e l l e der U N D - S c h a l t u n g e n N I C H T - U N D - oder N A N D - S c h a l t u n g e n , so werden die Ausgänge "aktiv L O W " , d.h. der a u s g e w ä h l t e Ausgang ist 0 , und a l l e anderen sind 1. In den folgenden Schaltbildern
wird der Adreßdecoder durch ein Symbol
entsprechend Bild 2 - 2 9 d a r g e s t e l l t . Zum Einschreiben von Daten in einen aus mehreren S p e i c h e r s t e l l e n b e s t e h e n d e n Speicher sind entsprechend Bild 2 - 3 0 drei Angaben e r f o r d e r l i c h : die Adresse der S p e i c h e r s t e l l e , ein Schreibsignal und die D a t e n s e l b s t .
Bild 2 - 3 0 : Speicher schreiben
Die Adresse wählt über den Adreßdecoder die S p e i c h e r s t e l l e aus. Das S c h r e i b signal sorgt dafür, daß die D a t e n zum richtigen Zeitpunkt übernommen werden. Die Daten liegen auf einer g e m e i n s a m e n Datenleitung an den Eingängen a l l e r S p e i c h e r s t e l l e n . Aber nur das Flipflop, dessen Takteingang ausgewählt i s t , übernimmt die D a t e n . Die Eingänge a l l e r anderen Flipflops sind g e s p e r r t . Das
36
-2 Grundlagen
Bild z e i g t zur V e r e i n f a c h u n g nur eines von den a c h t Bits eines B y t e s . Sollen die a c h t Bits eines Bytes p a r a l l e l und gleichzeitig g e s p e i c h e r t w e r d e n , so sind a c h t D a t e n l e i t u n g e n e r f o r d e r l i c h . Die T a k t e i n g ä n g e aller a c h t Bits e i n e s S p e i c h e r b y t e s sind d a b e i p a r a l l e l g e s c h a l t e t . Beim Auslesen von D a t e n aus einem aus m e h r e r e n S p e i c h e r s t e l l e n b e s t e h e n d e n S p e i c h e r e n t s p r e c h e n d Bild 2 - 3 1 e n t s t e h e n e l e k t r o t e c h n i s c h e S c h w i e r i g k e i t e n , da alle Ausgänge auf e i n e g e m e i n s a m e D a t e n l e i t u n g g e f ü h r t werden müssen.
leitung
Bild 2 - 3 1 :
Drei-Zustands-Ausgang (tristate)
S c h a l t e t man m e h r e r e Ausgänge p a r a l l e l , so darf nur d e r a u s g e w ä h l t e Ausgang seinen b i n ä r e n Z u s t a n d oder e l e k t r o t e c h n i s c h a u s g e d r ü c k t sein P o t e n t i a l auf die D a t e n a u s g a n g s l e i t u n g legen. Alle a n d e r e n nicht a u s g e w ä h l t e n Ausgänge d ü r f e n die Leitung n i c h t b e e i n f l u s s e n . Dies g e s c h i e h t durch d i e Einführung eines d r i t t e n s o g e n a n n t e n hochohmigen Z u s t a n d e s . Der S t e u e r e i n g a n g S e i n e s D r e i - Z u s t a n d s - A u s g a n g s ( t r i s t a t e ) e n t s c h e i d e t , ob d e r Speicherausgang a n die D a t e n l e i t u n g a n g e s c h l o s s e n ist oder n i c h t . Für S = 0 ist der Ausgang " h o c h o h m i g " . Er verhält s i c h wie ein g e ö f f n e t e r S c h a l t e r . F ü r S = 1 ist der Ausgang mit d e r D a t e n l e i t u n g verbunden. Damit wird je nach g e s p e i c h e r t e m Inhalt e i n e 0 oder eine 1 a b g e g e b e n . Dieser d r i t t e " h o c h o h m i g e " Zustand ist lediglich eine s c h a l t u n g s t e c h n i s c h e Lösung, mit der man m e h r e r e Ausgänge p a r a l l e l s c h a l t e n k a n n . Die S p e i c h e r i n h a l t e und d a m i t die D a t e n sind w e i t e r h i n z w e i w e r t i g o d e r b i n ä r . Bild 2 - 3 2 z e i g t nun den A u f b a u eines aus vier S p e i c h e r s t e l l e n b e s t e h e n d e n S p e i c h e r s , d e r gelesen werden soll. Die zu lesende S p e i c h e r s t e l l e wird mit Hilfe e i n e r A d r e s s e über einen A d r e ß d e c o d e r a u s g e w ä h l t . Das Lesesignal s o r g t d a f ü r , daß die D a t e n zum r i c h t i g e n Z e i t p u n k t auf die D a t e n a u s g a n g s l e i t u n g g e l e g t w e r d e n . Nur einer d e r D r e i Z u s t a n d s - A u s g ä n g e wird d u r c h g e s c h a l t e t und v e r b i n d e t den Speicher mit d e r D a t e n l e i t u n g . Alle a n d e r e n D r e i - Z u s t a n d s - A u s g ä n g e bleiben " h o c h o h m i g " . Zum Auslesen e i n e s Bytes sind wieder a c h t . D a t e n l e i t u n g e n e r f o r d e r l i c h .
2.6 Speicherorganisation
Adressen
lesen
Bild 2 - 3 2 :
Speicher lesen
Bild 2 - 3 3 :
Aufbau eines Schreib/Lese-Speichers
Leitung
37
38
2
Grundlagen
Bild 2-33 zeigt zusammenfassend den Aufbau eines byteorganisierten Schreib/ Lese-Speichers. Die Adreßeingänge dienen zur Adressierung der Speicherbytes. Die Auswahl e r folgt durch einen 1 - a u s - n - D e c o d e r . Dabei ist n die Zahl der Speicherbytes. Entsprechend der Zusammenfassung von acht Bits zur Speichereinheit Byte sind acht parallele Datenleitungen erforderlich. Es werden immer alle acht Bits gemeinsam angesprochen; eine Auswahl eines einzelnen Bits eines Bytes ist nicht möglich. Die beiden Steuerleitungen "Lesen" und "Schreiben" legen die Richtung der Datenübertragung und ihren Zeitpunkt f e s t . Beim "Lesen" sind die Datenleitungen als Ausgang geschaltet; beim "Schreiben" als Eingang. Bei einem Festwertspeicher oder Nur-Lese-Speicher bestehen die Speicherstellen nicht mehr aus Flipflops, sondern aus Schaltungen, die unveränderlich eine 0 oder eine 1 e n t h a l t e n . Da sie im Betrieb nicht beschrieben werden können, entfällt gegenüber den Schreib/Lese-Speichern das Schreibsignal. Die D a t e n leitungen können nur als Ausgang betrieben werden. Einige Prozessoren (8085 und Z80) liefern getrennte Steuersignale für das L e sen und Schreiben, die gleichzeitig auch die zeitliche Steuerung übernehmen. Bei den Prozessoren der 68xx-Familie (6800, 6802 und 6809) können diese Signale - falls erforderlich - aus dem Lese/Schreibsignal und dem Ubertragungstakt gewonnen werden.
2.7 Befehle und Programme
2.7
39
Befehle und Programme
Befehle
sind
Anweisungen
an
den
Mikrorechner,
eine b e s t i m m t e
Tätigkeit
durchzuführen, z . B . den Akkumulator mit dem Inhalt eines D a t e n b y t e s aus dem Speicher zu laden. Die B e f e h l e zur Ausführung e i n e r b e s t i m m t e n Aufgabe, z . B . zur Steuerung e i n e r W a s c h m a s c h i n e , bilden ein P r o g r a m m . Es liegt genauso wie die Daten binär c o d i e r t im S p e i c h e r des Mikrorechners. Man u n t e r s c h e i d e t
zwei Arten von B e f e h l e n : B e f e h l e , die D a t e n
verarbeiten,
und B e f e h l e , die die Ausführung des Programms s t e u e r n . B e f e h l e b e s t e h e n e n t sprechend Bild 2 - 3 4 aus zwei T e i l e n .
was tun ?
mit wem ?
C o d e
A d r e s s e
Aufbau eines B e f e h l s
Bild 2 - 3 4 :
Der Code des B e f e h l s e n t h ä l t Angaben über die auszuführende T ä t i g k e i t , z . B . bringe ein B y t e aus dem Akkumulator in den Speicher oder addiere zum Inhalt des Akkumulators den Inhalt einer S p e i c h e r s t e l l e oder s e t z e das Programm bei einem b e s t i m m t e n B e f e h l f o r t . Da die B e f e h l e wie die D a t e n binär codiert im Speicher des Mikrorechners liegen, legt man z . B . den Code des B e f e h l s in einem B y t e a b . In a c h t B i t s lassen sich 2 hoch 8 oder 2 5 6 verschiedene B i t k o m b i n a tionen verschlüsseln. Der B e f e h l s s a t z des Mikrorechners b e s t e h t damit aus 2 5 6 verschiedenen
Befehlen
wie
z.B.
laden,
speichern,
addieren,
subtrahieren,
zählen oder springen. Durch Hinzufügen eines zweiten B y t e s läßt sich der B e fehlssatz e r w e i t e r n ( Z 8 0 und 6 8 0 9 ) . Die im B e f e h l e n t h a l t e n e
Adresse
ist eine Dualzahl mit der
"Hausnummer"
eines D a t e n r e g i s t e r s im Mikroprozessor oder eines B y t e s im S p e i c h e r . E n t h ä l t z . B . der Mikroprozessor a c h t D a t e n r e g i s t e r , so muß die Adresse aus drei B i t s b e s t e h e n . R e g i s t e r a d r e s s e n sind meist im Codeteil des B e f e h l s u n t e r g e b r a c h t . Speicheradressen werden n o r m a l e r w e i s e in 16 Bits oder zwei B y t e s v e r s c h l ü s selt.
Damit
lassen
sich 2 hoch
16 gleich 6 5
536 B y t e s oder 6 4
Kilobytes
adressieren. Im folgenden soll nun der B e f e h l " S p e i c h e r e den Inhalt des Akkumulators in das S p e i c h e r b y t e mit der Adresse 6 6 6 6 h e x a d e z i m a l " näher u n t e r s u c h t werden. Er gehört
zu den d a t e n v e r a r b e i t e n d e n
B e f e h l e n und b e s t e h t aus drei B y t e s .
Das e r s t e B y t e e n t h ä l t einen Code für " s p e i c h e r e " , und das z w e i t e und d r i t t e B y t e e n t h a l t e n die Adresse " 6 6 6 6 " . Die Adresse wurde willkürlich gewählt und
40
2 Grundlagen
k ö n n t e auch 4711 l a u t e n . Bild 2 - 3 5 zeigt den S p e i c h e r b e f e h l in verschiedenen Darstellungen.
AssemblerSchreibweise: binäre hexadezimale
Bild 2 - 3 5 :
STA
Codierung:
Darstellung:
6666H
10110111
0110
B7
66
66
0110
0110
0110
Speicherbefehl
F ü r die P r o g r a m m i e r u n g bevorzugt man kurze und e i n p r ä g s a m e B e f e h l s b e z e i c h nungen a n s t e l l e w e i t s c h w e i f i g e r Beschreibungen der a u s z u f ü h r e n d e n T ä t i g k e i t . Diese Kurzbezeichnungen sind Abkürzungen aus dem A m e r i k a n i s c h e n wie z.B. " S T A " f ü r " s t ö r e a c c u m u l a t o r " gleich " s p e i c h e r e den A k k u m u l a t o r " . Sie sind so klar und e i n f a c h , daß sie s p ä t e r von einem P r o g r a m m , dem Assembler o d e r d e u t s c h M o n t i e r e r in d i e b i n ä r e Codierung des B e f e h l s u m g e s e t z t werden k ö n n e n . Die Kurzbezeichnungen werden von den H e r s t e l l e r n d e r Mikroprozessoren v o r g e g e b e n . Sie bilden z u s a m m e n mit g r a m m a t i s c h e n Regeln die " A s s e m b l e r s p r a c h e " , in d e r sich d e r P r o g r a m m i e r e r mit s e i n e m M i k r o r e c h n e r v e r s t ä n d i g t . Der Assembler würde also in dem vorliegenden Beispiel den A s s e m b l e r b e f e h l " S T A " in den b i n ä r e n Code "10110111" ü b e r s e t z e n und die h e x a d e z i m a l e A d r e s se "6666" in d i e Dualzahl "0110011001100110". Bei d e r p r a k t i s c h e n Arbeit b e vorzugt man j e d o c h die k ü r z e r e hexadezimale D a r s t e l l u n g a n s t e l l e d e r binären Codierung. Das P r o g r a m m , n a c h dem ein Mikrorechner a r b e i t e t , liegt binär c o d i e r t im P r o g r a m m s p e i c h e r . J e d e r B e f e h l und jedes B e f e h l s b y t e e r h ä l t dabei e i n e A d r e s s e . Bild 2 - 3 6 zeigt als Beispiel den B e f e h l "STA $ 6 6 6 6 " . Das Z e i c h e n " $ " b e deutet hexadezimal.
Programmspeicher Adresse 0001000000000000 0001000000000001 0001000000000010
Inhalt 10110111 01 100110 01 1001 10
' lllilli II III" (16
Adreßbus
Leitungen)
(8
Datenbus
Leitungen)
lesen
Bild 2 - 3 6 :
B e f e h l im P r o g r a m m s p e i c h e r
Hexadezima 1 1000 B7 1001 66 1002 66
2.7 Befehle und Programme
41
Die Adressen der Befehlsbytes wurden in dem Beispiel willkürlich a b 1000 hexadezimal a n g e n o m m e n . Die drei Bytes d e s Befehls liegen in drei a u f e i n a n der folgenden S p e i c h e r b y t e s . Der Mikroprozessor holt sich aus dem P r o g r a m m speicher seine B e f e h l e . Über die Adreßleitungen wird der Befehl - g e n a u e r ein B e f e h l s b y t e - ausgewählt und über die D a t e n l e i t u n g e n in den Mikroprozessor ü b e r t r a g e n . Das Lesesignal legt den richtigen Zeitpunkt der D a t e n ü b e r t r a gung vom Speicher in den Prozessor f e s t . Die 16 Adreßleitungen bilden den Adreßbus, die a c h t D a t e n l e i t u n g e n den Datenbus. Ein Bus ist ein L e i t u n g s b ü n del, an dem mehrere Bausteine anschlössen sind. In dem vorliegenden Beispiel sind dies der Mikroprozessor, der P r o g r a m m s p e i c h e r und ein D a t e n s p e i c h e r . Der Datenbus ü b e r t r ä g t nicht nur D a t e n , sondern auch B e f e h l e . Bild 2 - 3 7 zeigt das Steuerwerk des Mikroprozessors, das die Befehle a u s f ü h r t .
Steuersignale
Bild 2 - 3 7 :
Adreßbus
(16 Leitungen)
Steuerwerk des Mikroprozessors
Das Befehlszählregister b e s t e h t aus 16 Bits. Sein Inhalt kann auf den g e s c h a l t e t werden. Es e n t h ä l t die Adresse des B e f e h l s b y t e s , das als aus dem P r o g r a m m s p e i c h e r geholt werden soll. Da die Befehle und bytes u n t e r a u f e i n a n d e r folgenden Adressen a n g e o r d n e t sind, kann das zählregister ähnlich einem Binärzähler Bild 2-22 sehr schnell die laufend um 1 erhöhen.
Adreßbus nächstes BefehlsBefehlsAdresse
42
2
Grundlagen
Das Befehlsregister speichert den Code des Befehls. Der Befehlsdecoder a r b e i tet ähnlich einem Adreßdecoder Bild 2-29 und setzt den Code um in eine Folge von Steuersignalen, die in der Befehlsablaufsteuerung fest abgespeichert sind. In dem vorliegenden Beispiel würde also der Code des Befehls "STA" die Befehlsablaufsteuerung veranlassen, daß die beiden folgenden Befehlsbytes mit der Datenadresse geholt werden und daß dann die Daten aus dem Akkumulator in den Datenspeicher übertragen werden. Die Befehlsablaufsteuerung sendet innere und äußere Steuersignale aus. Zu den inneren Steuersignalen gehören z.B. die Takteingänge der Register, die bestimmen, welches Register die vom Datenbus g e l i e f e r t e n Bytes übernimmt (Akkumulator, Befehlsregisteroder Adreßregister). Zu den äußeren Steuersignalen gehören das L e s e - und das Schreibsignal f ü r die Speicherbausteine. Sie bilden zusammen mit anderen Signalen den Steuerbus. Den zeitlichen Ablauf b e s t i m m t ein von außen angelegter Takt. Das Adreßregister nimmt die im Befehl enthaltene Adresse auf. In dem vorliegenden Beispiel ist es die Datenadresse "6666". Bei der Ausführung des Speicherbefehls wird diese Adresse auf den Adreßbus geschaltet, um die a u f n e h mende Datenspeicherstelle zu adressieren. Bei einem Befehl, der den Ablauf des Programms s t e u e r t , würde der Befehlszähler mit dem Inhalt des Adreßregisters geladen werden. In den Bildern 2-38 und 2-39 wird nun der räumliche und zeitliche Ablauf des Befehls "STA $6666" gleich "Speichere den Inhalt des Akkumulators in das Speicherbyte mit der Adresse 6666 hexadezimal" gezeigt.
Der Befehl besteht aus drei Bytes, die in den Bildern in der verkürzten h e x a dezimalen Schreibweise dargestellt werden. Er wird in vier Schritten (Takten) ausgeführt. 1.Schritt: Die Befehlsablaufsteuerung legt den Inhalt des Befehlszählers 1000 hexadezimal auf den Adreßbus und das Signal "Lesen" auf den Steuerbus. Der Programmspeicher sendet das adressierte Byte mit dem Code B7 hexadezimal über den Datenbus an den Prozessor. Es wird im Befehlsregister gespeichert. Der Befehlsdecoder entschlüsselt den Code. Die Befehlsablaufsteuerung übernimmt die weitere Ausführung des Befehls. Der Befehlszähler wird anschließend von 1000 um 1 auf 1001 erhöht. 2.Schritt: Die Befehlsablaufsteuerung legt den neuen Inhalt des Befehlszählers 1001 auf den Adreßbus und das Signal "Lesen" auf den Steuerbus. Der Programmspeicher sendet das adressierte Byte mit dem ersten Teil der Datenadresse an den Prozessor. Es wird im Adreßregister gespeichert. Der Befehlszähler wird um 1 erhöht. 3.Schritt: Die Befehlsablaufsteuerung holt durch Aussenden der Adresse 1002 und des
2.7 Befehle und Programme
r2*"IV-
Datenspeicher Adresse Inhalt 6666 // / 6667
Programmspeicher Adresse Inhalt 1000 B7 1001 66 1002 66 1197 1198 1199
/h
7E 10 00 schreiben
lesen Adreßbus
LLJ Datenbus
4 |Adreßreg
3. 1000/1001/1002 Befehlszählregister
6 6
ister
66
~ r r
Takt.. J
B 7 Befehlsregister
Bild 2 - 3 8 :
Übertragungswege des Speicherbefehls
Bild 2 - 3 9 :
Z e i t l i c h e r Ablauf d e s S p e i c h e r b e f e h l s
Akkumulator
43
44
2 Grundlagen
Lesesignals d a s d r i t t e Byte d e s Befehls in das A d r e ß r e g i s t e r . Der B e f e h l s z ä h ler wird um 1 auf 1003 e r h ö h t . 4.Schritt: Die B e f e h l s a b l a u f s t e u e r u n g s c h a l t e t die D a t e n a d r e s s e aus dem A d r e ß r e g i s t e r auf den A d r e ß b u s , die D a t e n aus dem A k k u m u l a t o r auf den D a t e n b u s und das Signal " S c h r e i b e n " auf den S t e u e r b u s . Der D a t e n s p e i c h e r ü b e r n i m m t die D a t e n in das a d r e s s i e r t e S p e i c h e r b y t e . Im n ä c h s t e n S c h r i t t wird d i e B e f e h l s a d r e s s e 1003 aus d e m Befehlszähler auf den Adreßbus g e l e g t , und ein neuer Code g e l a n g t in d a s B e f e h l s r e g i s t e r . Er wird vom B e f e h l s d e c o d e r entschlüsselt und von d e r B e f e h l s a b l a u f s t e u e r u n g a u s geführt. W e i t e r e d a t e n v e r a r b e i t e n d e Befehle sind: Laden des A k k u m u l a t o r s mit dem Inhalt eines S p e i c h e r b y t e s . L a d e n des A k k u m u l a t o r s mit einem k o n s t a n t e n Z a h l e n w e r t . A u f w ä r t s - bzw. A b w ä r t s z ä h l e n des A k k u m u l a t o r i n h a l t s . Addieren bzw. S u b t r a h i e r e n eines D a t e n b y t e s zum bzw. vom A k k u m u l a t o r . V e r g l e i c h e n des A k k u m u l a t o r s mit einem D a t e n r e g i s t e r o d e r e i n e r K o n s t a n t e n . A u s f ü h r e n e i n e r logischen O p e r a t i o n (NICHT, UND, O D E R , E O D E R ) . Als Beispiel f ü r einen B e f e h l , der den Ablauf des P r o g r a m m s s t e u e r t , soll nun der B e f e h l "Springe i m m e r zum B e f e h l mit der Adresse 1000 h e x a d e z i m a l " n ä h e r u n t e r s u c h t w e r d e n . In der A s s e m b l e r s c h r e i b w e i s e l a u t e t die Abkürzung "JMP" für " j u m p " gleich " s p r i n g e " . Das e r s t e Byte e n t h ä l t den Code z.B. 01111110 oder 7E h e x a d e z i m a l . Im z w e i t e n und d r i t t e n Byte des B e f e h l s s t e h t die A d r e s s e des Sprungziels, in u n s e r e m Beispiel 1000 h e x a d e z i m a l . Die A s s e m b l e r s p r a c h e e r l a u b t auch eine s y m b o l i s c h e Bezeichnung des Sprungziels, also z.B. JMP SUSI. Es ist Aufgabe des A s s e m b l e r - Ü b e r s e t z e r s , a n s t e l l e d e s M ä d c h e n n a m e n s SUSI die Adresse 1000 e i n z u s e t z e n . Bild 2 - 4 0 zeigt den B e f e h l im P r o g r a m m s p e i c h e r ab d e r willkürlich g e w ä h l t e n Adresse 1197 und seine A u s führung. l.Schritt: Die B e f e h l s a b l a u f s t e u e r u n g legt die Adresse 1197 aus d e m Befehlszähler auf den Adreßbus und holt sich mit einem L e s e s i g n a l den Code über den D a t e n b u s in das B e f e h l s r e g i s t e r . Er wird vom B e f e h l s d e c o d e r e n t s c h l ü s s e l t und d u r c h die B e f e h l s a b l a u f s t e u e r u n g a u s g e f ü h r t . 2.Schritt: Die B e f e h l s a b l a u f s t e u e r u n g legt die Adresse 1198 aus d e m B e f e h l s z ä h l r e g i s t e r auf den Adreßbus und holt sich mit einem L e s e s i g n a l das z w e i t e Byte des B e f e h l s in das A d r e ß r e g i s t e r . 3.Schritt: Die B e f e h l s a b l a u f s t e u e r u n g legt die Adresse 1199 aus d e m B e f e h l s z ä h l r e g i s t e r
2.7 Befehle und Programme
45
Programmspe i e h e r Adresse Inhalt 1000 B7 1001 66 1002 66
r-2----
1 197 1198 1199
7E 10 00
RESETH Interrupt Takt
7E
1.
Befehlsregister
Bild 2-40:
I i
j
Ausführung des Sprungbefehls
auf den Adreßbus und holt das d r i t t e Byte des Befehls in das Adreßregister. Die Adresse des Sprungziels, in dem Beispiel 1000 hexadezimal, wird nun in das Befehlszählregister übernommen. Im nächsten Schritt wird die neue Befehlsadresse 1000 aus dem Befehlszählregister auf den Adreßbus gelegt, und der Code des neuen Befehls gelangt in das Befehlsregister. Programme bestehen normalerweise aus aufeinander folgenden Befehlen, die in dieser Reihenfolge ausgeführt werden. Dabei wird der Befehlszähler immer um 1 erhöht. Mit Sprungbefehlen kann man diese Reihenfolge durchbrechen und das Programm bei jedem beliebigen Befehl f o r t s e t z e n . Dazu wird die Adresse des Sprungziels aus dem Adreßteil des Sprungbefehls in das Befehlszählregister geladen. Weitere Befehle zur Steuerung eines Programmablaufs sind: Springe nur dann zu einem neuen Befehl, wenn das Ergebnis des vorhergehenden Vergleiches Null war; sonst führe den nächsten Befehl aus.
46
2 Grundlagen
Springe nur dann zu einem neuen B e f e h l , wenn ein Zähler ungleich Null ist; sonst führe den n ä c h s t e n B e f e h l aus. Führe ein Unterprogramm
(Hilfsprogramm) aus und mache anschließend
mit
dem n ä c h s t e n B e f e h l w e i t e r . Zum S t a r t e n des R e c h n e r s z . B . beim E i n s c h a l t e n der Versorgungsspannung muß das Programm mit dem e r s t e n B e f e h l beginnen. Der R E S E T - E i n g a n g des Mikroprozessors führt direkt auf das S t e u e r w e r k des Mikroprozessors. R e s e t b e d e u t e t zurücksetzen in einen Anfangszustand. Mit diesem Eingangssignal wird der B e f e h l s z ä h l e r mit der Startadresse des Programms geladen. Ein Signal am I N T E R R U P T - E i n g a n g des Mikroprozessors veranlaßt das S t e u e r w e r k , ein l a u f e n des Programm abzubrechen und dafür ein Sonderprogramm zu s t a r t e n . Ein I n t e r rupt ist eine Programmunterbrechung. Abschließend
f o l g t ein vollständiges P r o g r a m m b e i s p i e l .
Im Akkumulator
soll
ein Zähler von Null beginnend immer um 1 erhöht werden. Der laufende Z ä h l e r stand ist auf
einem
Ausgaberegister
mit der
8 0 0 0 h e x a d e z i m a l auszugeben. Bild 2 - 4 1
zeigt
willkürlich gewählten
Adresse
die g r a f i s c h e Darstellung
des
Programms im Programmablaufplan.
Bild 2 - 4 1 :
Programmablaufplan des Beispiels
Die Symbole des Programmablaufplans sind g e n o r m t und unabhängig von der verwendeten
Programmiersprache.
Datenverarbeitende
Befehle
werden
durch
ein R e c h t e c k d a r g e s t e l l t . Der unbedingte Sprungbefehl b e s t e h t aus einem Pfeil zum Sprungziel. Bild 2 - 4 2 zeigt r e c h t s das Assemblerprogramm und links die h e x a d e z i m a l e Übersetzung durch den A s s e m b l e r - Ü b e r s e t z e r .
1000 1002 1005 1006
Bild 2 - 4 2 :
86 00 B7 80 00 4C 7E 10 02
* B I L D 2 - 4 2 ASSEMBLERPROGRAMM 0RG $1000 ADRESSZAEHLER PROGRAMM START LDA #$00 ANFANGSWERT LADEN STA $8000 WERT AUSGEBEN LOOP INCA WERT UM 1 ERH0EHEN LOOP JMP SCHLEIFE END
Assemblerprogramm des Beispiels
2.8 Übungen zum Abschnitt Grundlagen
47
Der e r s t e Befehl "ORG" und der letzte Befehl "END" sind Assembleranweisungen, die dem Übersetzer sagen, wo die Anfangsadresse des Programms liegt und wo das Programm zuende ist. Der Befehl "LDA" lädt die Konstante 0 in den Akkumulator. Der bereits bekannte Befehl "STA" speichert den Inhalt des Akkumulators in eine Speicherstelle, hier in ein Ausgaberegister. Der Befehl "INCA" erhöht den Inhalt des Akkumulators um 1. Es ist ein Zählbefehl. Der bereits bekannte Befehl "JMP" springt zum symbolischen Sprungziel LOOP. Alle Adressen werden bei den Prozessoren der 68xx-Familie in der "natürlichen" Reihenfolge mit dem höherwertigen Teil zuerst angegeben; es gibt jedoch P r o zessoren (8085, Z80), bei denen die Reihenfolge zu vertauschen ist.
2.8
Übungen zum Abschnitt Grundlagen
Die Lösungen befinden sich im Anhang. 1.Aufgabe: Die Dezimalzahl 100 ist nacheinander in eine achtstellige Dualzahl, eine zweistellige Hexadezimalzahl und in eine 12 Bit lange BCD-codierte Dezimalzahl zu verwandeln.
2.Aufgabe: Die Dezimalzahl -100 ist als achtstellige Dualzahl im Zweierkomplement d a r zustellen. Wie lautet die hexadezimale Zusammenfassung?
3. Aufgabe: Gegeben ist die Bitkombination 01011000. a. Wie lautet die hexadezimale Zusammenfassung? b. Welches Zeichen ist es im ASCII-Code? c. Es sei eine Dualzahl, welches ist ihr dezimaler Wert? d. Es sei eine BCD-codierte Dezimalzahl, welches ist ihr Wert?
4.Aufgabe: Ein Text im ASCII-Code hat folgenden hexadezimalen Inhalt: 44 55 20 41 46 46 45 21 Er ist zu decodieren.
48
2 Grundlagen
5.Aufgabe: Für die logische Schaltung Bild 2-43 stelle man die Wertetabelle der beiden Ausgangsgrößen in Abhängigkeit von den drei Eingangsgrößen a u f .
x v z
=1
&
&
SP u
Bild 2-43:
=1
X Y z 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1
u
s
s
Logikschaltung
6. Aufgabe: Gegeben sind zwei binäre Operanden: 1.Operand: 00001111 2,Operand: 00111100 a. Man addiere die beiden Operanden und prüfe das Ergebnis durch dezimale Rechnung. b. Man subtrahiere den zweiten Operanden vom ersten Operanden durch Addition des Zweierkomplementes und prüfe das Ergebnis durch dezimale Rechnung. c. Man bilde bitweise das logische UND. d. Man bilde bitweise das logische ODER. e. Man bilde bitweise das logische EODER.
7.Aufgabe: Für die Schaltung eines l - a u s - 8 - D e c o d e r s nach Bild 2 - 4 4 stelle man die Wertetabelle a u f . Welcher Ausgang wird bei der dualen Adresse 101 ausgewählt?
2.8 Übungen zum Abschnitt Grundlagen
49
Lm &
,Y1
,Y3. XL,
c 0 0 0 0 1
,Y5t
1
1
B
A
0 0
0
1
Y3
Y4
Y5 Y6 Y7
1
1
1
0
1
12
0
0 0
,Y6.
YO Y1
1
1
0
1
1
Y7
J
J
Bild 2 - 4 4 :
J
l-aus-8-Decoder
8.Aufgabe: Zwei Steuersignale X I und X2 sind aktiv LOW. Gesucht wird e i n e S c h a l t u n g , die an ihrem Ausgang HIGH ist, wenn beide S t e u e r s i g n a l e X I UND X 2 LOW sind. Man s t e l l e zusätzlich die W e r t e t a b e l l e auf und zeichne den z e i t l i c h e n Verlauf des Ausgangssignals in das Zeitdiagramm Bild 2 - 4 5 ein.
Ausgang
Bild 2 - 4 5 :
Verknüpfung von Steuersignalen
3
Hardware
Dieses K a p i t e l v e r m i t t e l t d e m Entwickler von M i k r o r e c h n e r - S c h a l t u n g e n die g r u n d l e g e n d e n K e n n t n i s s e ü b e r den Entwurf von e i n f a c h e n R e c h n e r n mit den Prozessoren 6800, 6802 und 6809. Der P r o g r a m m i e r e r von M i k r o r e c h n e r - P r o g r a m men lernt die A r b e i t s w e i s e d e s R e c h n e r s und d a m i t den Z u s a m m e n h a n g z w i schen H a r d w a r e und S o f t w a r e kennen.
3.1
Halbleitertechnik
Die A r b e i t s w e i s e eines R e c h n e r s ( C o m p u t e r s ) ist zunächst unabhängig von s e i n e r t e c h n i s c h e n A u s f ü h r u n g . Die Schaltungen d e s hier b e h a n d e l t e n M i k r o p r o zessors und s e i n e r S p e i c h e r - und E i n / A u s g a b e b a u s t e i n e k ö n n t e man a u c h aus m e c h a n i s c h e n R e l a i s , E l e k t r o n e n r ö h r e n oder einzelnen T r a n s i s t o r e n a u f b a u e n . Mikroprozessoren und ihre H i l f s b a u s t e i n e w e r d e n j e d o c h h e u t e vorwiegend in M O S - T e c h n i k a u s g e f ü h r t . D a m i t e r g e b e n sich f o l g e n d e V o r t e i l e g e g e n ü b e r a n deren Schaltungstechniken: 1. Durch die hohe P a c k u n g s d i c h t e lassen bis zu 100 000 T r a n s i s t o r f u n k t i o n e n auf e i n e r F l ä c h e von c a . 5 X 5 mm u n t e r b r i n g e n . D a m i t läßt sich auf d e r G r u n d f l ä c h e e i n e r Z i g a r e t t e n s c h a c h t e l ein k o m p l e t t e r M i k r o r e c h n e r aus d r e i Bausteinen aufbauen. 2. Die L e i s t u n g s a u f n a h m e e i n e s Mikroprozessors b e t r ä g t 0,5 bis 1,5 W a t t ; die g l e i c h e S c h a l t u n g in T T L - L o g i k a u f g e b a u t h ä t t e e t w a den 1 0 - bis lOOfachen L e i s t u n g s b e d a r f j e n a c h d e m , welchen I n t e g r a t i o n s g r a d die v e r w e n d e t e n B a u elemente haben. 3. Die T a k t f r e q u e n z von 1 bis 10 MHz r e i c h t f ü r die m e i s t e n Anwendungen aus; j e d o c h w ä r e hier die TTL-Logik um den F a k t o r 10 bis 20 s c h n e l l e r . 4. Durch eine w e i t g e h e n d a u t o m a t i s i e r t e M a s s e n f e r t i g u n g k o s t e t ein S t a n d a r d Mikroprozessor bzw. ein S p e i c h e r - o d e r E i n / A u s g a b e b a u s t e i n zwischen 5 und 20 DM, ein e i n f a c h e r Mikrorechner zwischen 50 und 500 DM. Dieser Abschnitt f a ß t die w i c h t i g s t e n Grundlagen d e r H a l b l e i t e r t e c h n i k z u s a m men und soll d a s V e r s t ä n d n i s für die B a u s t e i n e und die d a m i t a u f g e b a u t e n S c h a l t u n g e n e r l e i c h t e r n . Das L i t e r a t u r v e r z e i c h n i s e n t h ä l t e r g ä n z e n d e und w e i terführende Literatur.
51
3.1 Halbleitertechnik
3.1.1
Die
Die MOS-Technik
Abkürzung
MOS bedeutet
Metal-Oxide-Semiconductor
h a l b l e i t e r . Durch A n l e g e n e i n e r Steuerspannung trägern
einer
Polarität
3-1 zeigt
den
Metalloxid-
g e s t e u e r t . In d e r ä l t e r e n P - K a n a l t e c h n i k sind e s p o -
s i t i v e , in d e r n e u e r e n N - K a n a l t e c h n i k sind es n e g a t i v e Bild
gleich
w i r d e i n S t r o m aus L a d u n g s Ladungsträger.
A u f b a u und das S c h a l t b i l d e i n e s s e l b s t l e i t e n d e n
T r a n s i s t o r s , b e i d e m ohne A n l e g e n e i n e r Steuerspannung n e g a t i v e
NMOS-
Ladungsträ-
g e r vorhanden sind.
Source
Gate
UDD
Drain
JJfagLL
ID
Isolierschicht
Drain o
Gate
I n-Kanol
Bulk
Source UGS o
p- Grundmaterial
0
Bulk
-0,05mm
Schaltbild
Schnittbild
Bild 3 - 1 :
Aufbau eines selbstleitenden
Auf
einem
sich
zwei
schwach
Drain g l e i c h Über dem nung
p-leitenden
hochdotierte
NMOS-Transistors
Grundmaterial
n-leitende
aus
Anschlußzonen:
Senke. Z w i s c h e n den Anschlußzonen
Silizium Source
(Bulk)
gleich
l i e g t ein n - l e i t e n d e r
K a n a l b e f i n d e t sich e i n e S t e u e r e l e k t r o d e ( G a t e ) . O h n e
fließt
ein
Strom,
da
der
befinden
Quelle
Kanal selbstleitend
und
Kanal.
Steuerspan-
ist; d e r T r a n s i s t o r
leitet.
Durch A n l e g e n e i n e r n e g a t i v e n Steuerspannung v e r a r m t der K a n a l an L a d u n g s trägern, sperrt.
die Die
in das p - G r u n d m a t e r i a l Schaltung
arbeitet
zurückgedrängt
als V e r s t ä r k e r .
Die
werden;
der
Transistor
Eingangsspannung
den A u s g a n g s s t r o m . L e g t man e i n e n A r b e i t s w i d e r s t a n d in den
steuert
Ausgangsstrom-
k r e i s , so w i r k t d i e Schaltung als N I C H T - S c h a l t u n g o d e r l n v e r t e r . W i d e r s t ä n d e w e r d e n durch l e i t e n d e Z o n e n , K a p a z i t ä t e n durch i s o l i e r t e Z o n e n
hergestellt.
D i e S i l i z i u m - S t e u e r e l e k t r o d e ( G a t e ) ist durch e i n e dünne ( 0 , 1 u m ) und h o c h . 1 0 o h m i g e ( c a . 10 10 O h m ) S c h i c h t aus S i l i z i u m o x i d g e g e n den K a n a l und das G r u n d m a t e r i a l i s o l i e r t . Sie kann durch Überspannungen w i e z . B . s t a t i s c h e A u f ladung des Bausteins z e r s t ö r t w e r d e n . O b w o h l a l l e M O S - B a u s t e i n e S c h u t z s c h a l -
52
3
Hardware
tungen e n t h a l t e n , e m p f e h l e n d i e H e r s t e l l e r , M O S - B a u e l e m e n t e nur in l e i t e n der
Verpackung
zu
transportieren
und
nur
mit
geerdeten
bzw.
entladenen
Werkzeugen zu behandeln. Im statischen B e t r i e b wird dauernd eine Steuer-Gleichspanung a n g e l e g t .
Der
Eingangsstrom b e t r ä g t c a . 10~ 1 ° bis l O ' ^ A ; d i e Leistungsaufnahme pro T r a n sistor 0,1 bis 1 mW. Mikroprozessoren, die mit statischen Schaltungen a r b e i ten ( Z 8 0 ) haben keine untere Grenzfrequenz. Im dynamischen B e t r i e b lädt man die Eingangskapazitäten von 1 bis 5 p F nur a u f . Die tungen
sich
wieder
langsam
abbauenden
aufgefrischt
werden.
Steuerladungen Der
müssen durch
Leistungsbedarf
Taktschal-
verringert sich auf
e t w a 0,001 bis 0,01 mW pro Transistor. D i e Mikroprozessoren 68xx a r b e i t e n mit dynamischen Schaltungen. Der Zweiphasentakt zum W i e d e r a u f f r i s c h e n wird auf dem Baustein e r z e u g t . Die untere Grenzfrequenz b e t r ä g t c a . 100 K H z . Durch die g e r i n g e n Abmessungen eines M O S - T r a n s i s t o r s von c a . 40 X 40 pm ist es möglich, 10 000 bis 50 000 Transistorfunktionen auf einer Grundfläche von 5 X 5
mm unterzubringen. Es wird e r w a r t e t , daß es durch F o r t s c h r i t t e in
der H a l b l e i t e r t e c h n i k
möglich sein w i r d , die Packungsdichte auf über 200 000
Transistoren pro Baustein zu steigern und damit noch leistungsfähigere Schaltungen aufzubauen. Die
in diesem
Buch behandelten
Mikroprozessoren
68xx enthalten
N-Kanal-
Transistoren ähnlich Bild 3 - 1 . Die Prozessoren der ersten Generation w i e z.B. der
Typ
8008
wurden
in selbstsperrender
P-Kanal-Technik
hergestellt.
Das
Grundmaterial besteht dabei aus n-Silizium, die Anschlußzonen aus p - d o t i e r t e m Silizium. Ohne Steuerspannung sperrt der Transistor. Durch Anlegen einer n e gativen Steuerspannung entsteht ein p - l e i t e n d e r Kanal zwischen den Anschlußzonen; der Transistor Anwendungen in der
leitet. Mikrocomputertechnik:
Die Standard-Mikroprozessoren, -Speicherbausteine und -Ein/Ausgabebausteine werden
in N M O S - T e c h n i k h e r g e s t e l l t , die durch die verschiedenen
Hersteller
v e r f e i n e r t und verbessert worden ist. Die Versorgungsspannung beträgt +5 V o l t . Ä l t e r e Bausteine b e n ö t i g t e n Vorspannungen von - 5 V o l t und +12 V o l t .
3.1.2
Die
Die CMOS-Technik
Abkürzung
CMOS
gleich komplementärer Ladungsträger
einer
bedeutet
Complementary-Metal-Oxide-Semiconductor
Metalloxidhalbleiter.
Polarität.
Auch hier steuert eine Spannung
Bild 3-2 z e i g t
als
Beispiel den A u f b a u einer
CMOS-Schaltung bestehend aus einem P M O S - und einem
NMOS-Transistor.
53
3.1 Halbleitertechnik
U
E
Udd p- Kanol
Ua UDD=12V T2
T1 W///W™ '
l>////////////////\ P
T1
H1' P
^ p-Kanal . W H
Isolie r s c h l c h t
V///////W / / / / // // 7/ /A/ M
V////////A I
T2
J r"j .".-Kanal D-Grundmatenal
n- Konol
n - Grundmaterial Bulk
Schaltbild
Schnittbild
Bild 3 - 2 :
Aufbau e i n e r C M O S - S c h a l t u n g
D i e b e i d e n T r a n s i s t o r e n T 1 und T 2 sind s e l b s t s p e r r e n d . B e i Spannungen k l e i n e r a l s 3 V o l t zwischen der S t e u e r e l e k t r o d e und dem G r u n d m a t e r i a l , das m i t dem Sourceanschluß
verbunden
i s t , h a b e n sie e i n e n hohen Widerstand und s p e r r e n
den S t r o m . B e i hoher Spannung über 3 V o l t zwischen der S t e u e r e l e k t r o d e und dem
Grundmaterial
b i l d e t sich ein l e i t e n d e r K a n a l zwischen den b e i d e n
An-
schlußzonen. B e i h o h e r Eingangsspannung UE s p e r r t der o b e r e T r a n s i s t o r T l , da s e i n e
Steu-
e r e l e k t r o d e und sein G r u n d m a t e r i a l a u f g l e i c h e m P o t e n t i a l l i e g e n . D e r u n t e r e T r a n s i s t o r T 2 ist j e d o c h l e i t e n d , da sein G r u n d m a t a r i a l auf E r d p o t e n t i a l l i e g t und d a m i t
eine hohe P o t e n t i a l d i f f e r e n z zwischen der S t e u e r e l e k t r o d e und dem
Grundmaterial
b e s t e h t , die den K a n a l
leitend
macht. Dieser leitende
Kanal
legt den Ausgang d e r S c h a l t u n g auf E r d p o t e n t i a l . D e r o b e r e s p e r r e n d e K a n a l des T r a n s i s t o r s T l t r e n n t den Ausgang von der Bei niedriger
Eingangsspannung
UE
leitet
Versorgungsspannung.
der o b e r e
Transistor
Tl
und l e g t
den Ausgang der S c h a l t u n g a u f das P o t e n t i a l der V e r s o r g u n g s s p a n n u n g , da der o b e r e K a n a l durch d i e P o t e n t i a l d i f f e r e n z zwischen S t e u e r e l e k t r o d e und G r u n d m a t e r i a l l e i t e n d wird. Der u n t e r e T r a n s i s t o r T 2 s p e r r t , da s e i n e
Steuerelek-
t r o d e und sein G r u n d m a t e r i a l auf g l e i c h e m P o t e n t i a l l i e g e n . B e i h o h e r Eingangsspannung
UE e r g i b t sich a l s o eine n i e d r i g e
Ausgangsspan-
nung UA; eine n i e d r i g e Eingangsspannung U E h a t e i n e h o h e Ausgangsspannung UA zur F o l g e . D i e C M O S - S c h a l t u n g d e s B i l d e s 3 - 2 wirkt als N I C H T - S c h a l t u n g oder I n v e r t e r .
54
3 Hardware
Da in der C M O S - T e c h n i k der a n d e r e frequenz
i m m e r nur e i n e r d e r b e i d e n T r a n s i s t o r e n l e i t e t und
s p e r r t , f l i e ß t nur beim U m s c h a l t e n
abhängiger
Ladestrom.
Der
ein a l l e r d i n g s von der S c h a l t -
Ruhestrom
ist
vernachlässig bar
klein.
Ä h n l i c h w i e M O S - S c h a l t u n g e n sind auch C M O S - S c h a l t u n g e n e m p f i n d l i c h g e g e n Überspannungen und in ihrer T a k t f r e q u e n z und L e i s t u n g s a b g a b e A n w e n d u n g e n in d e r Mikroprozessoren nahme
für
CMOS-Technik. schnellen werden
Mikrocomputertechnik:
und
Speicherbausteine
Batteriebetrieb
Mikroprozessoren
und
werden
auch
U n t e r der
kann. D i e ä l t e r e
mit
äußerst
in C M O S - T e c h n i k
für Peripheriebausteine Bezeichnung
Logikbausteinen
verfügbar, zu
langsam.
geringer
Leistungsauf-
hergestellt.
Für
einige
g i b t e s A u s f ü h r u n g e n in
74HCXX
ist n e u e r d i n g s e i n e S e r i e von
die
Zusatzschaltungen
für
Standard-CMOS-Serie
Mikrorechneranwendungen
Die
CD 4 0 X X
eingesetzt
ist für d i e
Versorgungsspannung
Bausteinen kann z w i s c h e n +3 und +15 V o l t g e w ä h l t
3.1.3
beschränkt.
von
meisten CMOS-
werden.
D i e b i p o l a r e Technik
Im G e g e n s a t z zur M O S - und C M O S - T e c h n i k a r b e i t e t d i e b i p o l a r e T e c h n i k Grenzschichten
zwischen
b e s t e h t aus d r e i
Ladungen b e i d e r
Halbleiterzonen
mit
Polaritäten. Der bipolare Transistor
mit z w e i p n - Ü b e r g ä n g e n .
Bild 3 - 3 z e i g t den
A u f b a u e i n e s n p n - T r a n s i s t o r s in P l a n a r t e c h n i k .
UB = + 5 V
Kollektor
Basis
Emitter
Rl
ir w
' CE
r
2 , 0 V
IF
C
t
rr t > i
Emax =
10
1
Emax = ±
10
'Emax = ±
10
Pp
T1
Bild 3 - 4 :
Eingangstransistor
MOS-Eingangsschaltung
t ä t e n i h r e r E i n g ä n g e . L ä ß t m a n 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 ) , so kann e r d u r c h E i n s t r e u u n g e n und s t a t i s c h e A u f l a d u n g ein U n d e f i n i e r t e s o d e r sich v e r ä n d e r n d e s P o t e n t i a l a n n e h m e n . U n b e s c h a l t e t e M O S - E i n g ä n g e sind w e g e n i h r e r w e c h s e l n d e n l o g i s c h e n Z u s t ä n d e e i n e s e h r s c h w e r zu f i n d e n d e Fehlerquelle. Bild 3 - 5 z e i g t d e n 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 d e r d i e E i n g a n g s s p a n n u n g UE d e n E m i t t e r d e s T r a n s i s t o r s T1 und d i e s e r d i e Basis von T 2 ansteuert.
•5V LOW:
UE2,0 V
i 11 Bild 3 - 5 :
ii
Standard
LS-Technik
I E PC Adreßrechenwerk Code Befehlsregister
Bild 3 - 2 2 :
55
6809
Akkumulator
Mikroprozessor 6809 mit 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 e n
D e r S p e i c h e r b a u s t e i n e n t h ä l t ein T e s t p r o g r a m m , d a s in e i n e r u n e n d l i c h e n S c h l e i f e D a t e n a u s d e m A k k u m u l a t o r A in ein D a t e n r e g i s t e r d e s P e r i p h e r i e b a u s t e i n s s p e i c h e r t . Der P e r i p h e r i e b a u s t e i n s e n d e t die D a t e n w e i t e r a n ein B i l d s c h i r m g e r ä t . D a s B e f e h l s z ä h l r e g i s t e r des P r o z e s s o r s a d r e s s i e r t d i e P r o g r a m m b y t e s , d i e aus d e m P r o g r a m m s p e i c h e r ü b e r den D a t e n b u s in d e n P r o z e s s o r g e l e sen w e r d e n . Die F u n k t i o n s c o d e s d e r B e f e h l e g e l a n g e n in d a s B e f e h l s r e g i s t e r , D a t e n a d r e s s e n w e r d e n in e i n e m A d r e ß r e g i s t e r z w i s c h e n g e s p e i c h e r t . D a s A d r e ß r e c h e n w e r k b e r e c h n e t a u s d e m Inhalt d e s B e f e h l s z ä h l r e g i s t e r s und e i n e m A b s t a n d die S p r u n g a d r e s s e f ü r den S p r u n g b e f e h l . Bei d e r A u s f ü h r u n g e i n e s S p e i c h e r b e f e h l s w i r d d e r Inhalt d e s A k k u m u l a t o r s ü b e r d e n D a t e n b u s in d e n P e r i p h e r i e b a u s t e i n g e s c h r i e b e n . Der A d r e ß d e c o d e r u n t e r s c h e i d e t z w i s c h e n d e n b e i d e n B a u s t e i n e n , w e n n vom Prozessor e i n e A d r e s s e auf den A d r e ß b u s g e l e g t w i r d . Bild 3 - 2 3 z e i g t d e n z e i t l i c h e n Ablauf d e r T e s t s c h l e i f e o h n e den e r s t e n B e f e h l , d e r n u r e i n m a l beim S t a r t d e s P r o g r a m m s a u s g e f ü h r t w i r d .
Der 1. B e f e h l " L D A # $ 5 5 " lädt den A k k u m u l a t o r A m i t d e m B i t m u s t e r 0 1 0 1 0 1 0 1 , d a s zur h e x a d e z i m a l e n K o n s t a n t e n 55 z u s a m m e n g e f a ß t w u r d e . A l l e n H e x a d e z i m a l z a h l e n wird d a s Z e i c h e n " $ " v o r a n g e s t e l l t ; d a s Z e i c h e n " # " k e n n z e i c h n e t k o n s t a n t e W e r t e . D i e s e r B e f e h l w i r d n i c h t im I m p u l s d i a g r a m m d a r g e s t e l l t .
3.3 Der Mikroprozessor 6809
T1
Adresse
Inhalt
F000 F001 F002 F 003 F004 F005 F006
86 55 B7 C9 01 20 FB
Befehl
STA
T2
T3
Name Befehl ORG START LDA LOOP
Operand $F000 #$55
STA
$C901
BRA
LOOP
END Befehl
T4-
T5 •
T1
BRA
T2
C_IZ n LJZL F003
B7
C9
F 004
FFFF
T3
JZ.
H
n
AB F002
77
C901
F005
F006
FFFF
55
20
FB
XX
AO,
DB'
DO,
R/W
BA
BS
Bild 3-23: Impulsdiagramm einer Testschleife
Der 2. Befehl "STA $C901" speichert den Inhalt des Akkumulators A, also die Konstante $55, in das Datenregister des Peripheriebausteins. Testet man das Beispielprogramm mit dem Übungssystem (Abschnitt 3.8), so befindet sich dort auf der Adresse $C901 das Senderegister einer Serienschnittstelle, das die Konstante $55 als Buchstaben "U" an das angeschlossene Bildschirmgerät sendet.
78
3 Hardware
Der 3. Befehl "BRA LOOP" ist ein Sprungbefehl zum 2. Befehl des Testprogramms. Das zweite Byte des Befehls besteht aus der hexadezimal verschlüsselten Zahl " - 5 " , dem Abstand zum Sprungziel. Das Impulsdiagramm zeigt den zeitlichen Verlauf der Takte E (Freigabe) und Q (versetzter Takt) des Prozessors sowie die Signale R/W (Lesen/Schreiben), BA (Bus verfügbar) und BS (Bus Zustand). Für den Adreßbus (16 Leitungen) und den Datenbus (8 Leitungen) konnten aus Platzgründen nicht die Zustände der einzelnen Leitungen dargestellt werden, sondern die Signale wurden h e x a d e zimal zusammengefaßt. Führt z.B. der Datenbus im 1. Takt den hexadezimalen Wert B7, so entspricht dies dem Bitmuster 10110111 und damit den Leitungszuständen D7 = HIGH, D6 = LOW, D5 = HIGH, D4 = HIGH, D3 = LOW, D2 = HIGH, Dl = HIGH und DO = HIGH. Für die Adreßleitung A0 und die Datenleitung DO wurden die Zeitverläufe dargestellt. In der ersten H ä l f t e eines Taktes ist der Datenbus im Tristate-Zustand. In der hexadezimalen Zusammenfassung erscheint ein " m i t t l e r e s " Potential, bei der Darstellung des Zustandes der Leitung DO wird jedoch davon ausgegangen, daß die Leitung ihr altes Potential beibehält. Der Befehl "STA $C901" wird in fünf Takten ausgeführt. Im Takt T1 liest der Prozessor den Funktionscode des Befehls aus dem Programmspeicher und übernimmt ihn mit der fallenden Flanke des Taktes E. Dieser Takt ist ein Lesezyklus. Im Takt T2 decodiert (entschlüsselt) der Befehlsdecoder des Prozessor den Code und stellt die Art des Befehls fest. Erst dann kann das Steuerwerk e n t scheiden, ob weitere Befehlsbytes zu holen sind. Während der Decodierung liest der Prozessor jedoch schon das auf den Code folgende Byte, in diesem Fall den höherwertigen Teil der Datenadresse. Dieser Takt ist ein Lesezyklus. Im Takt T3 ist die Decodierung des Funktionscodes beendet und damit der Ablauf des Befehls bekannt. Der Prozessor liest den niederwertigen Teil der Datenadresse. Dieser Takt ist ein Lesezyklus. Im Takt T4 laufen im Prozessor interne Vorgänge ab, bei denen der Bus nicht benötigt wird. Der Prozesor sendet die Adresse $FFFF aus. Dieser Takt wird als VMA-Zyklus bezeichnet. Im Takt T5 sendet der Prozessor die Datenadresse aus und legt den Inhalt des Akkumulators A auf den Datenbus. Dieser Takt ist ein Schreibzyklus, die Leitung R/W liegt auf LOW. Der Befehl "BRA LOOP" wird in drei Takten ausgeführt. Im Takt T1 liest der Prozessor den Funktionscode des Befehls aus dem Programmspeicher und übernimmt ihn mit der fallenden Flanke des Taktes E. Dieser Takt ist ein Lesezyklus.
3.3 Der Mikroprozessor
Im T a k t
T2
decodiert
(entschlüsselt)
79
6809
d e r B e f e h l s d e c o d e r des Prozessors den
C o d e und s t e l l t die Art des B e f e h l s f e s t . E r s t dann kann das S t e u e r w e r k
ent-
s c h e i d e n , ob w e i t e r e B e f e h l s b y t e s zu holen sind. Während der D e c o d i e r u n g liest der Prozessor schon das a u f den Code f o l g e n d e B y t e , in d i e s e m F a l l den Abstand zum Sprungziel. D i e s e r T a k t ist wieder ein L e s e z y k l u s . Im T a k t T3 ist die D e c o d i e r u n g des F u n k t i o n s c o d e s b e e n d e t . D a s A d r e ß r e c h e n werk b e r e c h n e t Takt
T2
aus dem S t a n d des B e f e h l s z ä h l e r s und dem A b s t a n d , der im
e i n g e l e s e n wurde, d i e A d r e s s e des n ä c h s t e n B e f e h l s . D a d e r Bus in
diesem T a k t n i c h t b e n ö t i g t wird, s e n d e t der Prozessor die A d r e s s e $ F F F F a u s . D i e s e r T a k t ist ein V M A - Z y k l u s . Bild 3 - 2 3 e n t h ä l t k e i n e A n g a b e n über S c h a l t z e i t e n . D i e s e h ä n g e n von d e r T a k t frequenz ( Q u a r z ) und von der kapazitiven B e l a s t u n g d e r L e i t u n g e n a b . S i e k ö n nen den zeigen
Datenblättern
die
beiden
der
Hersteller
folgenden
entnommen
werden.
Bilder eine vereinfachte
Zur
Orientierung
Darstellung
T a k t von 1 MHz ( Q u a r z 4 MHz). Bild 3 - 2 4 z e i g t e i n e n L e s e z y k l u s .
-Lese
- Zyklus
(1MHz)-
-500 ns
-250
Prozessor speichert Daten t
ns Prozessor speichert Steuersignale
L,
-200 nsAB
Adresse
gültig
80ns-i' >10 ns DB
Daten vom Speicher
R/W
BA
Bild 3 - 2 4 :
L e s e z y k l u s des P r o z e s s o r s 6 8 0 9 b e i 1 MHz
Oaten gültig
für
einen
80
3 Hardware
In e i n e m L e s e z y k l u s s e n d e t der Prozessor e i n e A d r e s s e und R/W = H I G H ( L e s e n ) aus und bringt d i e A u s g a n g s t r e i b e r der D a t e n l e i t u n g e n in den T r i s t a t e - Z u s t a n d . Die
A d r e ß - und S t e u e r l e i t u n g e n
w e r d e n in den e r s t e n 200 ns s t a b i l . D i e
stei-
g e n d e F l a n k e des T a k t e s Q z e i g t an, daß a l l e A u s g a n g s s i g n a l e des P r o z e s s o r s gültig
sind.
Die
Eingangs-Steuersignale
RESET,
H A L T und I n t e r r u p t
werden
mit d e r f a l l e n d e n F l a n k e des T a k t e s Q vom P r o z e s s o r ü b e r n o m m e n . Bei
einem
L e s e z y k l u s muß e i n S p e i c h e r - oder P e r i p h e r i e b a u s t e i n d i e D a t e n auf den D a t e n bus l e g e n . D e r P r o z e s s o r s p e i c h e r t den Zustand des D a t e n b u s mit d e r f a l l e n d e n F l a n k e des T a k t e s E . D i e D a t e n müssen 80 ns vor d e r F l a n k e
(Vorbereitungs-
s t a b i l sein. Bild 3 - 2 5 z e i g t e i n e n
z e i t ) und 10 ns nach d e r F l a n k e ( H a l t e z e i t ) Schreibzyklus.
Bild 3 - 2 5 :
In e i n e m
S c h r e i b z y k l u s des Prozessors 6809 b e i 1 M H z
Schreibzyklus
sendet
der
Prozessor
eine
Adresse
und
R/W = L O W
( S c h r e i b e n ) aus. W i e bei e i n e m L e s e z k l u s w e r d e n die A d r e s s e n und S t e u e r l e i tungen in den e r s t e n 200 ns des T a k t e s s t a b i l ; der T a k t Ausgangssignale
gültig
gangs-Steuersignale. tristate
(Takt
sind; die
steigende
In d e r ersten
Flanke
von
Q
Q zeigt
an, daß d i e
speichert
H ä l f t e des Schreibzyklus ist der
die
Ein-
Datenbus
E = L O W ) ; in der z w e i t e n H ä l f t e ( T a k t E = H I G H ) f ü h r t e r d i e
3.3 Der Mikroprozessor 6809
81
vom Prozessor ausgesendeten Daten. Ihre Übernahme ist Aufgabe der Speicherund Peripheriebausteine. Diese werden in den meisten Anwendungen so angeschlossen, daß sie die Daten wie der Prozessor mit der fallenden Flanke des T a k t e s E übernehmen. /
-
vHÄ -
,/
Zyklus
Q
AB
X
DB
Adresse
/
V Inhalt
$F F F F
von
I
$FFFF
-
R/W
A0=d
BA
A15 BA
VMA
Bild 3 - 2 6 :
—
R/W
BS
—
VMA >1
E — >1 0
VMA-Zyklus des Prozessors 6 8 0 9
Bei der Ausführung eines jeden Befehls holt sich der Prozessor im 1. Takt den Funktionscode und decodiert ihn im 2. T a k t , während er schon das auf den Funktionscode folgende Byte liest. Im weiteren Befehlsablauf kann es nun T a k t e geben, in denen der Prozessor mit internen Vorgängen b e s c h ä f t i g t ist (z.B. Adreßrechnungen) und in denen er den Bus nicht benötigt. Bei den älteren Prozessoren 6 8 0 0 und 6802 wurden in diesen Takten ungültige Zustände auf den Adreßleitungen ausgesendet; dies wurde durch ein besonderes Steuersignal VMA angezeigt, das dazu verwendet wurde, Peripheriebausteine zu sperren. VMA bedeutet "Valid Memory Address gleich gültige S p e i c h e r a d r e s s e " . Für VMA = HIGH waren die Adreßleitungen gültig; bei VMA = LOW waren sie
82
3
Hardware
ungültig. Der Prozessor 6809 kennt dieses Signal n i c h t , s o n d e r n s e n d e t in den T a k t e n , in d e n e n e r w e g e n interner V o r g ä n g e den Bus n i c h t b e n ö t i g t , die Adresse $ F F F F , also l a u t e r H I G H - Z u s t ä n d e auf den A d r e ß l e i t u n g e n a u s . Das R/W-Signal ist d a b e i HIGH (Lesezyklus). Auf der A d r e s s e $ F F F F liegt d a s L O W - B y t e d e r S t a r t a d r e s s e , auf das der Prozessor n o r m a l e r w e i s e nur im F a l l e eines RESET z u g r e i f t . Dann ist jedoch die S t a t u s l e i t u n g BS = HIGH (Bild 3 - 2 1 ) . Bild 3 - 2 6 zeigt e i n e S c h a l t u n g und das d a z u g e h ö r i g e Z e i t d i a g r a m m , um diese Buszyklen f ü r a n d e r e Z w e c k e verfügbar zu m a c h e n . Das VMA-Signal ist d a n n LOW, wenn im n o r m a l e n B e t r i e b (BA = BS = LOW) in einem Lesezyklus ( R / W = HIGH) die Adresse $ F F F F (A0 bis A I 5 = HIGH) dann a u f t r i t t , w e n n die A d r e ß - und S t e u e r l e i t u n g e n s t a b i l sind (E oder Q = HIGH). Durch die b e i d e n z e i t l i c h versetzten T a k t e E und Q wird der S p e i c h e r zyklus in vier V i e r t e l t a k t e (Q1 bis Q4) u n t e r t e i l t . Bei e i n e m 1 - M H z - S y s t e m finden a l l e Ü b e r g ä n g e (Änderungen) auf den A d r e ß - und S t e u e r l e i t u n g e n im Takt Q1 s t a t t ; in den T a k t e Q2 bis Q4 sind die Signale s t a b i l . B e r ü c k s i c h t i g t man noch d a s Signal BA (Bus verfügbar) so kann man e n t s p r e c h e n d Bild 3 - 2 7 ein S t e u e r s i g n a l e r z e u g e n , das den Z e i t r a u m g ü l t i g e r Adressen a n z e i g t . Speicherzyklus . —
Q1
I Q2 I Q 3
Busfreigabe
I QA
I
BA 0 0 0 0 1
BA
AB
-L
JL
Adresse gültig
1=
>
Bus tri state
AS
Bild 3-27:
•t
E 0 0 1 1 X
e-T> 1
Q
q AS 0 1 0 1 X
1 0 0 0 1
halten
- AS
BA-
S t e u e r s i g n a l f ü r gültige Adressen
AS b e d e u t e t " A d d r e s s S t r o b e gleich A d r e ß - S t e u e r s i g n a l " . Es ist aktiv LOW, d.h. es zeigt mit seinem L O W - Z u s t a n d an, daß die am Adreßbus anliegende Adresse gültig ist. Bei Bedarf k ö n n t e noch das VMA-Signal (Bild 3 - 3 5 ) mit v e r w e n d e t w e r d e n . In vielen F ä l l e n wird der Takt E = HIGH allein a l s A d r e ß - S t e u e r s i g n a l verwendet; d e r A d r e ß b u s s t e h t dann f ü r den T a k t E = LOW e x t e r n e n E i n h e i t e n wie z.B B i l d s c h i r m - S t e u e r b a u s t e i n e n und d y n a m i s c h e n Speichern zu V e r f ü g u n g .
3.3 Der Mikroprozessor 6809
Schreibzyklus-
Lesezyk1us-
83
Busfreigabe
R/W
BA
DB
/ Daten vom ~ \ Speicher
\
vom ßDaten Prozessor
DS
RD
WR
Bild 3-28:
Steuersignale für gültige Daten
Auch für den Datenbus lassen sich besondere Steuersignale entsprechend Bild 3-28 erzeugen. DS bedeutet "Data Strobe gleich Daten-Steuersignal". Es zeigt mit seinem LOW-Zustand an, daß der Datenbus gültige Daten f ü h r t . Verknüpft man dieses Signal noch mit R/W, so entstehen das Lesesignal RD und das Schreibsignal WR, die durch einen LOW-Zustand den Zeitraum anzeigen, in denen Daten g e lesen oder geschrieben werden. Sie werden wie die entsprechenden Steuersignale der Prozessoren 8085 und Z80 für die Steuerung der Speicherbausteine verwendet. Die Peripheriebausteine der Familien 68xx und 65xx sind f ü r die Steuersignale E (Takt) und R/W ausgelegt. Andere Peripheriebausteine (TTL, A/D- und D/A-Wandler sowie die 80xx-Familie) benötigen die getrennten Leseund Schreibsignale KD und WR.
84
3
3.3.4
Hardware
Die Betriebszustände Reset und Interrupt
Nach dem Einschalten der Versorgungsspannung laufen im Prozessor zunächst Einschwingvorgänge ab. Daher muß der Reset-Eingang mindestens 100 ms lang auf LOW (0,8 V) gehalten werden. Das HIGH-Potential des Reset-Eingangs liegt im Gegensatz zu allen anderen Eingängen bei +4,0 V. Die einfachste Anlaufschaltung besteht aus einem RC-Glied (C = 22 pF gegen Masse und R = 3 KOhm gegen +5 V). Der Zustand der R e s e t - und Interruptleitungen wird mit jeder fallenden Flanke des Taktes Q gespeichert und ausgewertet. Bild 3-29 zeigt den Ablauf des Reset-Betriebszustandes während der Ausführung eines Programms. Reset bedeutet Zurücksetzen auf einen Anfangszustand.
r r| il r n rl r M n n n n rl n p n n n n n n n n n n nR /
RES
AB xxxx xxxx xxxx XXXX xxxx FFFE FFFE FFFE FFFE FFFE FFFE FFFF FFFF PC+O DB XX R/U I
BA
XX
XX
XX
XX
PCL
1 1
PCL
PCL
PCL
BS
Bild 3-29:
PCL
PCL
PCH
PCH
XX
1 Ablauf des Reset-Betriebszustandes
Mit der fallenden Flanke des Taktes Q (Zeitpunkt l ) erkennt der Prozessor den LOW-Zustand des Reset-Einganges. Der laufende Befehl wird abgebrochen, ohne daß wie bei einem Interrupt Register g e r e t t e t werden. Während der nächsten drei Takte laufen im Prozessor interne Vorgänge ab, in denen der Prozessor den Bus mit Zwischenzyklen noch belegt (Zeitraum 2).
3.3 Der Mikroprozessor 6809
85
Ist anschließend die Reset-Leitung weiterhin LOW, so führt der Prozessor d a u ernd Lesezyklen auf die Speicherstelle $FFFE mit dem niederwertigen Teil der Startadresse aus. Die Zustandssignale BA und BS sind dabei LOW (Zeitraum 3).
Wird bei einer fallenden Flanke des Taktes Q ein HIGH-Zustand der R e s e t Leitung erkannt (Zeitpunkt 4), so g r e i f t der Prozessor nach zwei Zwischenzyklen auf die beiden Speicherstellen $FFFE und $ F F F F zu und holt sich die Startadresse, von der er nach einem weiteren VMA-Zyklus das Programm s t a r t e t . Während der beiden Zugriffe auf die Vektortabelle ist das Zustandssignal BS HIGH; dies ist der Unterschied zu einem VMA-Zyklus. Nach dem Reset befindet sich der Prozessor in folgendem Grundzustand: Das Direkt-Seitenregisten (Direct Page) hat den hexadezimalen Wert $00. Das bedeutet, daß bei der direkten Adressierung das höherwertige Byte der Adresse 00 ist. Das I-Bit und das F-Bit des Bedingungsregisters sind 1; damit sind die beiden Interrupts IRQ und FIRQ gesperrt. Der NMI-Interrupt bleibt so lange gesperrt, bis der Stapelzeiger geladen wurde.
In den meisten Anwendungen wird das Reset-Signal gleichzeitig den Peripheriebausteinen zugeführt, die damit ebenfalls in einen Grundzustand versetzt w e r den. Bei einem Reset der Peripheriebausteine werden alle Register dieser Bausteine in einen Anfangszustand gebracht, in den meisten Fällen gelöscht. Im Gegensatz dazu werden bei einem Reset des Prozessors nur das Befehlszählregister mit der Startadresse, das Direkt-Seitenregister mit $00 und das I- und F-Bit des Bedingungsregister mit 1 geladen. Alle anderen Register (Akkumulatoren, Indexregister, Stapelzeiger, Bedingungsbits) sind nach einem Reset in einem nicht vorhersehbaren Anfangszustand. Im Gegensatz zu den anderen Betriebszuständen Interrupt und Halten wird der laufende Befehl nicht zuende g e f ü h r t , sondern abgebrochen. Bei einem Interrupt dagegen wird der laufende Befehl zuende g e f ü h r t . Die Register werden in den Stapel g e r e t t e t , so daß das unterbrochene Programm ohne Verlust von Daten an der alten Stelle fortgesetzt werden kann. Bild 3-30 zeigt ein Modell der R e s e t - und Interruptsteuerung des Prozessors 6809. Das Reset-Signal wurde bereits behandelt. Es bringt den Prozessor in einen Grundzustand und s t a r t e t ein Programm, dessen Anfangsadresse auf den Speicherstellen $FFFE und $FFFF liegen muß. Befindet sich der Prozessor bei e i nem Reset gerade im Halt-Zustand, so wird das Reset-Signal gespeichert und erst nach Beendigung des Halt-Zustandes ausgeführt. Der NMI-Interrupt bedeutet "Not Maskable Interrupt gleich nicht sperrbare Programmunterbrechung". Nach einem Reset bleibt jedoch der NMI-Interrupt
86
Bild 3-30:
3 Hardware
Modell d e r R e s e t - und I n t e r t u p t s t e u e r u n g des Prozessors 6809
bis zum L a d e n des S t a p e l z e i g e r s z.B. mit dem B e f e h l "LDS # $ " gesperrt, da d e r Stapelzeiger f ü r das R e t t e n d e s R e g i s t e r s a t z e s b e n ö t i g t wird. Das Signal ist negativ f l a n k e n g e s t e u e r t ; der L O W - Z u s t a n d muß j e d o c h m i n d e s t e n s einen T a k t a n d a u e r n . Der N M I - I n t e r r u p t r e t t e t a l l e R e g i s t e r mit Ausnahme des S S t a p e l z e i g e r s in den S t a p e l und setzt das E - B i t d e s B e d i n g u n g s r e g i s t e r s auf 1. E b e d e u t e t " E n t i r e gleich vollständig", weil a l l e R e g i s t e r g e r e t t e t w e r d e n . Das 1-Bit und das F - B i t des Bedingungsregisters w e r d e n g e s e t z t ; d a m i t w e r d e n die I n t e r r u p t s IRQ und FIRQ g e s p e r r t . Die S t a r t a d r e s s e des N M I - I n t e r r u p t p r o g r a m m s wird von den S p e i c h e r s t e l l e n $FFFC und $ F F F D g e h o l t . Der N M I - I n t e r rupt wird während des H a l t - Z u s t a n d e s nicht a u s g e f ü h r t , sondern bleibt bis zum Ende des Z u s t a n d e s g e s p e i c h e r t . Der F I R Q - I n t e r r u p t ist L O W - z u s t a n d s g e s t e u e r t und kann durch das F - B i t des Bedingungsregisters g e s p e r r t w e r d e n . Ist das F - B i t 1, so ist der I n t e r r u p t g e s p e r r t ; bei 0 ist e r f r e i g e g e b e n . FIRQ b e d e u t e t " F a s t I n t e r r u p t R e q u e s t gleich s c h n e l l e A n f o r d e r u n g einer P r o g r a m m u n t e r b r e c h u n g " , weil d i e s e r I n t e r rupt nur den Stapelzeiger und das B e d i n g u n g s r e g i s t e r in den S t a p e l r e t t e t und d a m i t s c h n e l l e r als die a n d e r e n I n t e r r u p t s a u s g e f ü h r t wird, die alle R e g i s t e r r e t t e n . Das E - B i t d e s Bedingungsregisters wird d a h e r bei der A n n a h m e des FIRQ auf 0 g e s e t z t . Das F - und das I-Bit werden 1 g e s e t z t , d a m i t s p e r r t d e r F I R Q den IRQ und auch sich s e l b s t . Die S t a r t a d r e s s e des F I R Q - I n t e r r u p t p r o g r a m m s b e f i n d e t sich auf den Adressen $ F F F 6 und $ F F F 7 .
3.3 Der Mikroprozessor 6809
87
Der I R Q - I n t e r r u p t ist L O W - z u s t a n d s g e s t e u e r t und kann durch eine 1 im I-Bit des Bedingungsregisters g e s p e r r t werden; bei 1 = 0 ist der I R Q - I n t e r r u p t f r e i gegeben. IRQ b e d e u t e t " I n t e r r u p t Request gleich Anforderung einer P r o g r a m m Unterbrechung". Da alle R e g i s t e r g e r e t t e t werden, s e t z t der I R Q - I n t e r r u p t das E-Bit auf 1. Das F - und das I-Bit werden e b e n f a l l s 1 g e s e t z t , d a m i t s p e r r t der IRQ den FIRQ und sich selbst. Die S t a r t a d r e s s e des I R Q - I n t e r r u p t p r o g r a m m s b e f i n d e t sich auf den Adressen $ F F F 8 und $ F F F 9 . Die Befehle SWI, SWI2 und SWI3 r e t t e n ähnlich wie die I n t e r r u p t - S i g n a l e die Register in den Stapel und s t a r t e n P r o g r a m m e , d e r e n Adressen wie in Bild 3 - 3 1 d a r g e s t e l l t im höchsten Adreßbereich anzuordnen sind. Der Befehl SWI setzt das I- und das F - B i t und s p e r r t d a m i t die beiden I n t e r r u p t s IRQ und FIRQ; die beiden anderen SWI-Befehle verändern diese beiden Maskenbits n i c h t .
Bild 3-31:
Adresse
Inhalt
$FFF0 $FFF 1 $FFF2 $FFF3 $FFF4 $FFF5 $FFF6 $FFF7 $FFF8 $FFF9 $FFFA $FFFB $FFFC $FFFD $FFFE $FFFF
reserviert reserviert SWI3-Adresse SWI3-Adresse SWI2-Adresse SWI2-Adresse FIRQ-Adresse FIRQ-Adresse IRQ-Adresse IRQ-Adresse SWI-Adresse SWI-Adresse NMI-Adresse NMI-Adresse RES-Adresse RES-Adresse
HIGH LOW HIGH LOW HIGH LOW HIGH LOW HIGH LOW HIGH LOW HIGH LOW
Tabelle der S t a r t v e k t o r e n
Mikrocomputer mit den Prozessoren der 6 8 x x - und auch 6 5 x x - F a m i l i e b e n ö t i gen also F e s t w e r t s p e i c h e r im oberen Adreßbereich, d a m i t beim Einschalten der Versorgungsspannung und im Falle eines I n t e r r u p t s die S t a r t v e k t o r e n vefügbar sind. Bild 3 - 3 2 zeigt den zeitlichen Ablauf eines I n t e r r u p t - B e t r i e b s z u s t a n des. Die f a l l e n d e Flanke des T a k t e s Q speichert die Zustände der I n t e r r u p t l e i t u n g e n (Zeitpunkt 1), die am Ende des laufenden Befehls vom Prozessor a u s g e w e r t e t werden. Ist der Interrupt a u f g e t r e t e n und f r e i g e g e b e n , so werden zunächst interne Vorgänge zuende g e f ü h r t ( Z e i t r a u m 2), in denen Teile des folgenden
88
3
Hardware
r n
r
n
.>200
FIRQ
•
\
t
t
AB xxxx
XXXX
Adr.
Adr.
FFFF
SP- 1
SP - 2
SP-3
FFFF
FFF6
FFF7
XX
XX
XX
XX
XX
PCL
PCH
CCR
XX
PCH
PCL
FFFF
PC+0
PC + 1
XX
XX
DB
R/W
< X/
\
XX
I t
BA
t BS
l Bild 3-32:
Ablauf e i n e s I n t e r r u p t - B e t r i e b s z u s t a n d e s (FIRQ)
B e f e h l s zwar g e h o l t , aber n i c h t mehr a u s g e w e r t e t w e r d e n . Es folgt d e r Z e i t raum 3, in dem der Prozessor seine R e g i s t e r in den S t a p e l r e t t e t . Das Beispiel zeigt den FIRQ, der nur den Befehlszähler und das Bedingungsregister r e t t e t ; bei den a n d e r e n I n t e r r u p t s k o m m e n noch d a s D - R e g i s t e r , die beiden I n d e x r e g i s t e r X und Y, der U - S t a p e l z e i g e r und d a s D i r e k t - S e i t e n r e g i s t e r dazu. Dann liest der Prozessor im Z e i t r a u m 4 d i e A d r e s s e des zu s t a r t e n d e n P r o g r a m m s ( S t a r t v e k t o r ) und s t a r t e t d a s I n t e r r u p t p r o g r a m m , das die Möglichkeit h a t , mit dem Befehl RTI wieder in das u n t e r b r o c h e n e P r o g r a m m z u r ü c k z u k e h r e n . RTI b e d e u t e t " R e t u r n f r o m I n t e r r u p t gleich Rückkehr aus einem U n t e r b r e c h u n g s p r o g r a m m " . Dieser B e f e h l l ä d t die g e r e t t e n R e g i s t e r wieder zurück und s e t z t das u n t e r b r o c h e n e Programm f o r t . Mit Hilfe der I n t e r r u p t e i n g ä n g e ist es möglich, wichtige und z e i t k r i t s c h e S i g nale schneller als durch A b f r a g e von P e r i p h e r i e b a u s t e i n e n a u s z u w e r t e n . Die R e a k t i o n s z e i t vom A u f t r e t e n des I n t e r r u p t s i g n a l s bis zum S t a r t des I n t e r r u p t p r o g r a m m s b e t r ä g t im u n g ü n s t i g s t e n Fall e t w a 40 T a k t e , das sind 40 |us bei einem T a k t von 1 MHz. Sie setzt sich z u s a m m e n aus 20 T a k t e n f ü r den l ä n g s t e n B e f e h l (SWI2 bzw. SWI3), 3 Z w i s c h e n t a k t e n für i n t e r n e V o r g ä n g e , 13 T a k ten zum R e t t e n d e r R e g i s t e r (NMI bzw. IRQ), 3 T a k t e n f ü r das L a d e n d e r S t a r t a d r e s s e und 1 T a k t zum Holen des F u n k t i o n s c o d e s des e r s t e n B e f e h l s . Bild
3.3 Der Mikroprozessor 6809
b. Schnittstellen
Bild 3-33:
89
c. Steuerbaustein
Schaltungen zur Interruptauslösung
3 - 3 2 zeigt den günstigsten Fall. Liegen mehrere Interruptsignale gleichzeitig a n , so werden sie mit der Rangfolge ( P r i o r i t ä t ) R e s e t , NMI, FIRQ und IRQ a u s g e f ü h r t . Bild 3 - 3 3 zeigt m e h r e r e Schaltungen, die zur Auslösung von I n t e r ruptsignalen dienen können. Bild 3 - 3 3 a zeigt die Auslösung eines I n t e r r u p t s durch einen e n t p r e l l t e n T a s t e r , der direkt an den NMI-Interrupteingang angeschlossen ist. Da bei j e d e m I n t e r r u p t ein b e s t i m m t e s Programm g e s t a r t e t werden muß, kann der Prozessor das Signal s o f o r t identifizieren und die e n t s p r e c h e n d e S t a r t a d r e s s e holen. Bild 3-33b zeigt die Auslösung eines I R Q - I n t e r r u p t s über zwei P e r i p h e r i e b a u s t e i n e , deren Interruptausgänge parallel g e s c h a l t e t sind. Die S e r i e n s c h n i t t stelle 6850 kann so p r o g r a m m i e r t w e r d e n , daß sie einen Interrupt a u s l ö s t , wenn ein Zeichen gesendet oder e m p f a n g e n wurde. Die P a r a l l e l s c h n i t t s t e l l e 6821 kann so p r o g r a m m i e r t w e r d e n , daß eines von vier Steuersignalen einen Interrupt
90
3 Hardware
auslöst. Die I n t e r r u p t q u e l l e n werden in Zustandsflipflops der Schnittstellen g e s p e i c h e r t . Das I n t e r r u p t p r o g r a m m muß durch Lesen dieser Anzeigen p r ü f e n , welches Signal oder Ereignis den Interrupt ausgelöst h a t . Bild 3-33c zeigt die Auslösung eines F I R Q - I n t e r r u p t s über einen I n t e r r u p t Steuerbaustein (6828), der den Steuersignalen eine Priorität (Vorrrang) zuordnet und der gleichzeitig die Startadressen der I n t e r r u p t p r o g r a m m e aus einem besonderen EPROM auf den Datenbus legt, so daß das Identifizieren der I n t e r ruptquelle e n t f ä l l t .
3.3.5
Die Betriebszustände Halten und Warten
Die in diesem Abschnitt kurz erklärten Betriebszustände Halten und Warten werden in e i n f a c h e n Mikrorechnern nicht v e r w e n d e t . Für die p r a k t i s c h e Anwendung sollten die U n t e r l a g e n der Hersteller herangezogen werden. Bild 3 - 3 4 zeigt den Ablauf des Halt-Betriebszustandes.
alte r
Bef eh l - i
neue r
L
l e t z t e r Leerzyklus Zyklus
Lee r-
Wart e z y k l e n
Bef e h l
Code
Zyklus 'holen
r r n r r rr r n n n nr P n n n nn r
\
:
n
XXXX XXXX XXXX
XX
1f
Bild 3-34:
XX
! XXXX XXXX XXXX
i i
XX
/
>—
1 1
—i
i
/
( |
/
(
\
j—
Ablauf des HALT-Betriebszustandes
XX
i
r
\
XX
XX
3.3 Der Mikroprozessor
6809
91
Ein LOW-Potential am HALT-Eingang bringt den Prozessor in einen Halt-Zustand, in dem er die Adreß- und Datenleitungen sowie die R/W-Leitung in den Tristate-Zustand bringt. Auf die Ausführung des laufenden Befehls folgt ein Übergangs- oder Leerzyklus (Dead Cycle), in dem die Leitungen tristate werden. Geht der HALT-Eingang wieder auf HIGH, so wird nach einem weiteren Übergangs- oder Leerzyklus das Programm mit dem nächsten Befehl fortgesetzt. Dieser Betriebszustand wird für eine Einzelbefehlssteuerung und für den Mehrprozessorbetrieb verwendet, da der Prozessor im Halt-Zustand den Bus dauernd freigibt, so daß andere Prozessoren oder Steuerbausteine den Bus belegen können. Bild 3-35 zeigt den Ablauf des DMA/BREQ-Betriebszustandes, in dem der Prozessor den Bus kurzzeitig wieder belegt.
BefehlsZyklus
Befehls Zyklus
BefehlsZyklus Leert — tnax Zyklus 1.
H
W a r t e z y k len
—
LeerZyklus
leerZyklus
LeerZyklus
_r r r r r n nrn n n n n r nn n n n n 14.
J.
AB
x x x x \—
! <
t
j
f
1-
C028 31 C02A 20
21 04
* BILD 4-77 FREQUENZMESSUNG $COOO ADRESSZAEHLER ORG START CLR $C881 STEUERREGISTER L0ESCHEN CLR $C883 STEUERREGISTER L0ESCHEN #$FF04 LDD AUSGABE PROGRAMMIEREN STD $C880 LDD #$0004 EINGABE PROGRAMMIEREN $C882 STD DURCHLAUFZAEHLER LOOP LDX #31250 LDY FLANKENZAEHLER #0 * AUF ZUSTAND HIGH WARTEN $C882 LEITUNG PRUEFEN LOOP 1 LDA LOW: AUF HIGH WARTEN BPL L00P1 * MESSUNG BEGINNT MIT LEITUNG HIGH $C882 L00P2 CMPA 5 ZYKLEN: ALT MIT NEU VERGLEICHEN BEQ LOOP 3 3 ZYKLEN: BEIDE GLEICH KEINE AENDERUNG LDA $C882 5 ZYKLEN: UNGLEICH NEUEN ZUSTAND LESEN BMI L00P4 3 ZYKLEN: HIGH WAR STEIGENDE FLANKE * FALLENDE FLANKE ERKANNT: ZAEHLEN LEAV 5 ZYKLEN: ZAEHLEN 1 ,Y BRA L00R 5 3 ZYKLEN: DURCHLAUFZAEHLER
C02C 1E
11
L00P3
C02E 1E C030 30 C032 26
11 1F EA
L00P4 L00P5
cooo cooo C003 C006 C009 COOC COOF C012 C015
7F 7F CC FD CC FD 8E 108E
C881 C883 FF04 C880 0004 C882 7A12 0000
C019 B6 C01C 2A
C882 FB
C01E C021 C023 C026
C882 09 C882 06
C034 C036 C037 C039 C03B C03E
B1 27 B6 2B
1F 4D 27 C6 F7 20
Bild 4-77:
EXG
X,X
EXG x,x LEAX -1,x BNE L00P2 * ERGEBNIS AUSGEBEN TFR 20 Y,D TSTA 02 BEQ L00P6 FF LDB #$FF C880 L00P6 STB $C880 D2 BRA LOOP END
Frequenzmessung
8 ZYKLEN:
ZEITAUSGLEICH
8 ZYKLEN: ZEITAUSGLEICH 5 ZYKLEN: DURCHLAUFZAEHLER - 1 3 ZYKLEN. ZAEHLSCHLEIFE NACH D = A UND B REGISTER ZAEHLER GR0ESSER 254 ? N E I N : WERT AUSGEBEN JA: FEHLERMELDUNG NACH LEUCHTDIODEN NEUE MESSUNG
4.6 Programmschleifen
229
Für e i n e F r e q u e n z m e s s u n g werden e n t s p r e c h e n d Bild 4 - 7 7 nur die f a l l e n d e n Flanken innerhalb e i n e r vorgegebenen Meßzeit von 1 s g e z ä h l t . Nach der 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 löscht das P r o g r a m m e i n e n F l a n k e n z ä h l e r im Y - R e g i s t e r und lädt e i n e n D u r c h l a u f z ä h l e r im X - R e g i s t e r mit e i n e m A n f a n g s w e r t , der aus der L a u f z e i t der f o l g e n d e n P r o g r a m m s c h l e i f e b e r e c h n e t w u r d e . Alle drei Zweige d e r S c h l e i f e b e n ö t i g e n 32 Zyklen; m u l t i p l i ziert mit dem D u r c h l a u f z ä h l e r 31 250 e r g e b e n sich 1 Million Z y k l e n . Bei 1 MHz e n t s p r i c h t dies einer Meßzeit von 1 Sekunde. Der Flankenzähler e r m i t t e l t also die Frequenz in der Einheit Hz. Die Messung beginnt mit e i n e m H I G H Z u s t a n d , der A k k u m u l a t o r A wird i m m e r mit dem l e t z t e n L e i t u n g s z u s t a n d g e laden. In der M e ß s c h l e i f e können drei F ä l l e a u f t r e t e n : 1. Der a u g e n b l i c k l i c h e Leitungszustand ist gleich dem vorhergehenden; es f i n det lediglich ein Z e i t a u s g l e i c h von 16 Zyklen s t a t t . 2. Der L e i t u n g s z u s t a n d h a t sich g e ä n d e r t ; d i e Leitung ist j e t z t HIGH. Der n e u e Z u s t a n d wird im Akku A g e s p e i c h e r t ; die s t e i g e n d e F l a n k e wird jedoch n i c h t g e z ä h l t . Es f i n d e t ein Z e i t a u s g l e i c h von 8 Zyklen s t a t t . 3. Der Leitungszustand h a t sich g e ä n d e r t ; die L e i t u n g ist j e t z t LOW. Dieser neue Z u s t a n d wird im Akku A g e s p e i c h e r t , und die f a l l e n d e Flanke wird g e zählt. Dieser l ä n g s t e Programmzweig b e n ö t i g t keinen Z e i t a u s g l e i c h . Nach 31 250 D u r c h l ä u f e n oder 1 Sekunde wird das Ergebnis a u s g e g e b e n . Da in dem vorliegenden Beispiel nur a c h t L e u c h t d i o d e n f ü r die Ausgabe zur V e r f ü gung s t e h e n , wird bei Frequenzen über 254 Hz a l s F e h l e r m e l d u n g $ F F a u s g e g e b e n . Eine b e s s e r e Lösung würde in d i e s e m Fall die Meßzeit v e r r i n g e r n . Bei der P e r i o d e n d a u e r m e s s u n g e n t s p r e c h e n d Bild 4 - 7 8 wird die Zeit zwischen zwei f a l l e n d e n F l a n k e n des Eingangssignals g e m e s s e n . Als A b t a s t r a t e wurde in dem vorliegenen Beispiel die Zeit von 1 ms zwischen zwei Messungen d e s L e i tungszustandes f e s t g e l e g t . In e i n e r b e s s e r e n Lösung w ü r d e das Programm s e l b s t t ä t i g den g ü n s t i g s t e n Abstand zwischen zwei A b t a s t u n g e n e r m i t t e l n . Die M i n d e s t a b t a s t z e i t von 16 Zyklen e n t s p r e c h e n d 16 ps wird d u r c h das U n t e r p r o g r a m m TIME künstlich auf 1 ms v e r l ä n g e r t . Die Messung beginnt mit d e r e r s t e n f a l lenden F l a n k e des Signals und wird d u r c h die n ä c h s t e f a l l e n d e F l a n k e b e e n d e t . Der im X - R e g i s t e r l a u f e n d e D u r c h l a u f z ä h l e r wird n a c h j e d e m Zählen auf e i n e n Überlauf a b g e f r a g t , der dann a u f t r i t t , wenn d e r Zähler n a c h dem E n d w e r t $ F F F F wieder auf Null g e h t . In diesem Fall sowie bei Ergebnissen g r ö ß e r a l s 254 wird als F e h l e r m e l d u n g auf den L e u c h t d i o d e n $ F F a u s g e g e b e n . Eine b e s s e r e Lösung w ü r d e in diesem Fall die A b t a s t r a t e v e r g r ö ß e r n . Die beiden P r o g r a m m b e i s p i e l e Bild 4 - 7 7 und 4 - 7 8 lassen sich mit T T L - I m p u l sen am Eingang der P a r a l l e l s c h n i t t s t e l l e zur Messung der Frequenz und d e r Periodendauer von R e c h t e c k s i g n a l e n v e r w e n d e t . Die N e t z f r e q u e n z von 50 Hz l i e f e r t einen sehr g e n a u e n und k o n s t a n t e n V e r g l e i c h s w e r t . Da der Prozessor
230
4 Einführung
in die maschinenorientierte
Programmierung
A b t a s t r a t e
II
I II 12
I II 3
I I
4 5 6 7
I I I
II
1
ms
I I I I I
u
t u
8 9 10 11 12 13 14 15 16 17 19 19
• ' — Z e i t zwischen 2 f a l l e n d e n Flanken
>'
t C000 C000 C003 C006 C009 C00C C00F C012 C015 C018 C01A C01D
7F 7F CC FD CC FD 8E 7D 2A 7D 2B
C881 C883 FF04 C880 0004 C882 0000 C882 FB C882 FB
C01F C021 C023 C025 C028
30 27 8D B6 2A
01 17 1C C882 F5
C02A C02C C02E C030 C033
30 27 8D B6 2B
01 OC 11 C882 F5
C035 C037 C038 C03A C03C C03F
1F 4D 27 C6 F7 20
02 FF C880 D1
C041 C043 C044 C046
86 4A 26 39
Bild 4 - 7 8 :
10
C2 FD
* BILD 4-78 MESSUNG DER PERIODENDAUER ORG ADRESSZAEHLER $COOO START CLR $C881 STEUERREGISTER LADEN CLR $C883 STEUERREGISTER LADEN LDD #$FF04 AUSGABE PROGRAMMIEREN STD $C880 EINGABE PROGRAMMIEREN LDD #$0004 $C882 STD LOOP LDX #0 ZEITZAEHLER LOESCHEN LOOP 1 TST $C882 LEITUNG TESTEN LOOP 1 BPL IST LOW L00P2 TST $C882 LEITUNG TESTEN BMI L00P2 IST HIGH * 1.FALLENDE FLANKE ERKANNT MESSUNG BEGINNT L00P3 LEAX 5 ZYKLEN: ZAEHLEN 1 ,x BEQ FEHL 3 ZYKLEN: UEBERLAUF ? BSR TIME 7 + 977 ZYKLEN: 1 MS TAKT LDA JC882 5 ZYKLEN: LEITUNG LESEN BPL • • L00P3 3 ZYKLEN: IST LOW * STEIGENDE FLANKE ERKANNT WEITER ZAEHLEN L00P4 LEAX 5 ZYKLEN: ZAEHLEN 1 ,x FEHL BEQ 3 ZYKLEN: UEBERLAUF ? TIME BSR 7 + 977 ZYKLEN: 1 MS TAKT LDA $C882 5 ZYKLEN: LEITUNG LESEN BMI L00P4 3 ZYKLEN: IST HIGH * 2. I-ALLENDE FLANKE ERKANNT MESSUNG BEENDET X,D TFR NACH A UND B REGISTER TS TA HIGH-BYTE TESTEN BEQ L00P5 IST NULL: AUSGEBEN FEHL #$FF LDB ZU GROSS: FF AUSGEBEN L00P5 STB $C880 AUSGEBEN BRA LOOP NEUE MESSUNG * UNTERPROGRAMM 977 ZYKLEN WARTEN TIME #194 LDA 2 ZYKLEN: ZAEHLER LADEN TIME1 DECA 2 ZYKLEN: ZAEHLER - 1 BNE TIME1 3 ZYKLEN: ENDE ? RTS 5 ZYKLEN: RUECKSPRUNG
Messung der Periodendauer
w ä h r e n d des A b l a u f e s von W a r t e - und Z ä h l s c h l e i f e n f ü r a n d e r e A u f g a b e n b l o k kiert i s t , w e r d e n diese A u f g a b e n in vielen Anwendungen T i m e r b a u s t e i n e n (z.B. 6840) oder Timern der P a r a l l e l s c h n i t t s t e l l e n (z.B. 6522 und 6532) ü b e r t r a g e n , die p a r a l l e l zum Prozessor a r b e i t e n .
231
4.6 Programmschleifen
4.6.5
Programmschleifen mit den Prozessoren 6800 und 6802
Befehl INCA INCB INX INS INC DECA DECB 0EX OES 0EC CMPA CMPB CBA CPX NOP
Bild 4 - 7 9 :
Mit
den
Operand
—HINZVC XXX XXX X
adresse
adresse adresse adresse adresse
XXX XXX XXX X X XXX xxxx xxxx xxxx XXX
Wirkung Erhöhe den Erhöhe den Erhöhe das Erhöhe den Erhöhe das Vermindere Vermindere Vermindere Vermindere Vermindere Vergleiche Vergleiche Vergleiche Vergleiche Tu nichts
Akku A um 1 Akku B um 1 X-Register um 1 Stapelzeiger um 1 adressierte Byte um 1 den Akku A um 1 den Akku B um 1 das X-Register um 1 den Stapelzeiger um 1 das adressierte Byte um 1 den Akku A mit dem adressierten Byte den Akku B mit dem adressierten Byte den Akku A mit dem Akku B das X-Register mit den beiden Bytes
Z ä h l - und V e r g l e i c h s b e f e h l e der P r o z e s s o r e n 6800/6802
in Bild 4 - 7 9 z u s a m m e n g e s t e l l t e n
Befehlen
lassen
sich d i e
gleichen
S c h l e i f e n w i e mit d e m Prozessor 6809 a u f b a u e n . A n s t e l l e d e r L E A - B e f e h l e h a ben d i e Prozessoren 6800 und 6802 Z ä h l b e f e h l e für d i e b e i d e n X
und S, die der Prozessor
beiden Akkumulatoren
6809 nicht
16-Bit-Register
k e n n t . A u c h d e r B e f e h l C B A , der
miteinander vergleicht, fehlt beim
durch d i e B e f e h l s f o l g e PSHS B und C M P A
S+ e r s e t z t
die
6809 und muß d o r t
werden.
232
4.6.6
4 Einflhrung in die maschinenorientierte Programmierung
Übungen zum Abschnitt Programmschleifen
Die Lösungen befinden sich im Anhang!
1.Aufgabe: Man e n t w i c k l e ein Unterprogramm, das 100 ms w a r t e t , und verwende es in einem Hauptprogramm, das einen um 100 ms verzögerten dualen Abwärtszähler auf den Leuchtdioden laufen läßt. Der S y s t e m t a k t b e t r a g e 1 MHz.
2.Aufgabe: Man lasse auf den Leuchtdioden einen unverzögerten Dualzähler von 1 bis 6 laufen, der nach seinem Endwert 6 wieder mit dem Anfangswert 1 beginnt. Steht der w e r t h ö c h s t e Kippschalter auf LOW, so soll der Zähler laufen. Ist er auf HIGH, so h a l t e der Zähler an und w a r t e auf seine F r e i g s b e durch ein L O W - S i g n a l . Da der Zähler zu einem zufälligen Zeitpunkt angehalten wird, e n t s t e h t ein Würfel. Mit dem gleichen V e r f a h r e n lassen sich Lottozahlen e r mitteln.
3.Aufgabe: Man e n t w i c k l e ein Programm, das nur die steigenden Flanken des w e r t n i e d r i g s ten Kippschalters B0 zählt und den Zähler auf den Leuchtdioden anzeigt. Der Ausgangszustand des S c h a l t e r s vor dem P r o g r a m m s t a r t sei LOW.
4.Aufgabe: Man lasse auf den Leuchtdioden einen Dualzähler laufen, der auf der w e r t n i e drigsten S t e l l e B 0 eine Frequenz von 4 4 0 Hz ( K a m m e r t o n A) ausgibt. Die P e riode b e t r ä g t 2 , 2 7 2 7 ms; die Wartezeit für das U m s c h a l t e n 1,136 ms. Durch Ankopplung eines L a u t s p r e c h e r s oder Oszilloskops kann die Frequenz k o n t r o l liert werden.
4.7 Die Adressierung
4.7
von Speicherbereichen
233
Die Adressierung von Speicherbereichen
Adressen sind "Hausnummern" von Speicherbytes oder von Schnittstellen des Mikrocomputers. Jeder Befehl besteht aus einem Code (was ist zu tun?) und aus einer Adresse (mit wem?). Bild 4 - 8 0 stellt die bisher behandelten e i n f a chen Adressierungsarten des Mikroprozessors 6809 zusammen.
__ — Code
Bild 4-80:
n (2.Byte) |
code-eigene Adressierung
Code
Konstante
Code
Konstante
Konstante
unmittelbare Adressierung (16 Bit)
Code
Adresse H
Adresse
absolute (extended) Adressierung
Code
Adresse L
unmittelbare Adressierung (8 Bit)
L
direkte Adressierung
Die einfachen Adressierungsarten des Prozessors 6809
Bei der code-eigenen Adressierung (Hersteller: inherent) enthält der Funktionscode, der eventuell um ein zweites Byte erweitert sein kann, die Namen der beteiligten Prozessorregister. Beispiele für diese Adressierungsart sind die Befehle CLRA und TFR A,B. Bei der unmittelbaren Adressierung (Hersteller: immediate) wird der Operand unmittelbar hinter dem Funktionscode im Befehl abgelegt. Beispiele sind die Befehle LDA #$55 und LDD #$FF04. Bei der absoluten Adressierung (Hersteller: extended) wird die Operandenadresse als volle 16-Bit-Zahl im Befehl angegeben. Beispiele sind die Befehle LDA $C882 und JMP $F800. Bei der direkten Adressierung (Hersteller: direct) wird nur der niederwertige Teil der Operandenadresse im Befehl angegeben; den höherwertigen Teil e n t nimmt die Befehlsablaufsteuerung dem D i r e k t - S e i t e n - R e g i s t e r . Ein Beispiel ist der Befehl LDA $C882, wenn mit der Assembleranweisung SETDP die D i r e k t Seiten-Adresse auf $C8 s t e h t . Bei der Ausführung des Befehls muß das Direkt Seiten-Register den Inhalt $C8 haben. Die genannten Adressierungsarten haben den Nachteil, daß die Operandenadresse bereits bei der Programmierung bekannt sein muß und daß sie sich während des Programmlaufes nicht mehr verändern läßt. Bild 4-81 zeigt das Adreß-
234
4 Einßhrung in die maschinenorientierte Programmierung
Datenspeicher Adresse Inhalt F000 F001 adr esse
Programmspeicher Adresse Inhalt C000 C001 konst.
Befehlszähler
FÉ
Akku
Adreßrechenwerk
+1 / - 1 Adreßregister X , Y, U, S
Bild 4 - 8 1 :
Konstante
Das A d r e ß r e c h e n w e r k des M i k r o p r o z e s s o r s 6809
r e c h e n w e r k des M i k r o p r o z e s s o r s 6809, das b e r e i t s für die r e l a t i v e A d r e s s i e r u n g der V e r z w e i g u n g s b e f e h l e b e n u t z t wurde. Bei der werk
relativen A d r e s s i e r u n g ( H e r s t e l l e r : r e l a t i v e ) a d d i e r t das
zum
augenblicklichen
Stand
Adreßrechen-
des B e f e h l s z ä h l e r s e i n e n A b s t a n d
(Sprung-
w e i t e ) , der h i n t e r d e m F u n k t i o n s c o d e des B e f e h l s a b g e l e g t w u r d e . D i e S u m m e w i r d w i e d e r in das B e f e h l s z ä h l r e g i s t e r ü b e r n o m m e n und a d r e s s i e r t den nächsten B e f e h l . Der f o l g e n d e
Abschnitt
Datenspeicherstellen
berechnet.
z e i g t , w i e das A d r e ß r e c h e n w e r k A d r e s s e n von Dies
geschieht
mit
Hilfe
der
Adreßregister
X , Y , U und S, die 16 Bit lang sind und d a m i t eine volle S p e i c h e r a d r e s s e
auf-
nehmen können.
4.7.1
Bei
der
D i e indizierte Adressierung
indizierten
adresse nicht
Adressierung
(Hersteller:
indexed)
steht die
Operanden-
im B e f e h l , sondern in e i n e m I n d e x r e g i s t e r . Sie kann d a m i t
rend des P r o g r a m m a b l a u f e s
wäh-
g e l a d e n , b e r e c h n e t o d e r v e r ä n d e r t w e r d e n . In der
M a t h e m a t i k u n t e r s c h e i d e t man g l e i c h a r t i g e D i n g e ( E l e m e n t e e i n e r M a t r i x o d e r G l i e d e r e i n e r R e i h e ) durch e i n e Beizahl, den I n d e x . Bild 4 - 8 2 z e i g t als A n w e n dungsbeispiel d i e A u f g a b e , den Inhalt des Akkus A in e i n e n S p e i c h e r b e r e i c h von 256 B y t e s zu s p e i c h e r n . Bei V e r w e n d u n g der a b s o l u t e n A d r e s s i e r u n g w ä r e n dazu 256 den.
Speicherbefehle
e r f o r d e r l i c h , d i e s i c h l e d i g l i c h im
Adreßteil
unterschei-
4.7 Die Adressierung
von
Speicherbereichen
Adresse Inhalt FOOO F001 F002 F003 F004 i FOFF
FOOO/F001/F002... Indexregister
Datenadresse
55 55 55 55 55 i 1 55
55 Akku
Daten
256 /255 254.../O Y-Register
Durchlaufzäh ler
Bild 4 - 8 2 :
cooo cooo C002 C005 C009 COOB COOD COOF C012 C015 C100 C100 C106 FOOO F000
Adressierung eines S p e i c h e r b e r e i c h e s
F800 F81B 86 8E 108E A7 31 26 8E BD 7E
55 F000 0100 80 3F FA C100 F81B F800 46 04 0100
* BILD 4-83 MONI EQU AUST EQU ORG START LDA LDX LDY LOOP STA LEAY BNE LDX JSR JMP ORG TEXT FCC FCB ORG DATEN RMB END
ADRESSIERUNG EINES SPEICHERBEREICHES $F800 EINSPRUNG MONITOR SF81B UNTERPROGRAMM TEXTAUSGABE $C000 ADRESSZAEHLER BEFEHLE #$55 DATEN LADEN #DATEN ADRESSE DER SPEICHERBYTES LADEN #256 ZAHL DER SPEICHERBYTES LADEN X+ SPEICHERE INDIZIERT MIT X-•REGISTER ZAEHLER VERMINDERN -1 ,Y LOOP BIS ZAEHLERENDE #TEXT MELDUNG "FERTIG" AUSGEBEN AUST MIT MONITORUNTERPROGRAMM MONI SPRUNG ZUM MONITOR $C100 ADRESSZAEHLER KONSTANTEN 'FERTIG' 4 ENDEMARKE $F000 ADRESSZAEHLER VARIABLEN 256 256 BYTES RESERVIERT
ADR: 0 1 2 3 4 5 6 7 8 9 A B C D E F "F000 _ 55 - 55~55 _ 55"35 _ 55~55"35 _ 55 _ 55 - 55~S5'~55~S5~T5"T5 F010 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 F020 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 F030 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 F040 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55
Bild 4 - 8 3 :
P r o g r a m m b e i s p i e l f ü r eine I n d e x s c h l e i f e
UUUUUUUUUUUÜUUUU UUUUUUUUUUUUUUUU UUUUUUUUUUUUUUUU UUUUUUUUUUUUUUUU UUUUUUUUUUUUUUUU
235
236
4 Einführung in die maschinenorientierte
Programmierung
Bei der Adressierung des Speicherbereiches benutzt man das X-Register als Zähler für die Datenadresse und lädt es vor Beginn der Schleife mit der Anfangsadresse des Bereiches ($F000). Das Y-Register enthält die Zahl der Bytes (256) als Durchlaufzähler. Die zu übertragenden Daten ($55) stehen als Kons t a n t e im Akku A. Der "neue" Befehl STA X+ legt den Inhalt des X-Registers als Datenadresse auf den Adreßbus und gleichzeitig den Inhalt des Akkus A auf den Datenbus. Das Zeichen "+" veranlaßt, daß das X-Register nach dem Aussenden der Adresse um 1 erhöht wird. Der erste Befehl adressiert also das Speicherbyte $F000, der folgende das Speicherbyte $F001, der nächste das Byte $F002 usw. Da der Durchlaufzähler im Y-Register bis auf Null h e r u n t e r gezählt wird, adressiert die Schleife den gesamten Speicherbereich von $F000 bis $F0FF. Nach Beendigung der Schleife gibt das Programm die Meldung "FERTIG" aus und springt in den Monitor zurück. Das Bild zeigt Teile eines Speicherauszugs (Dumps), der mit Hilfe des Monitors nach einem Testlauf des Programms gemacht wurde. Das Bitmuster 01010101 ($55) ist der ASCII-Code des Buchstabens "U". Der in Bild 4 - 8 4 dargestellte Ablauf des Befehls STA X+ setzt voraus, daß sich die Daten ($55) im Akku A und daß sich die Adresse der Datenspeicherstelle ($FOOO) im X-Register befinden. Der Befehl wird in sechs Zyklen ausgeführt: 1. Zyklus: Im ersten Zyklus holt sich der Prozessor das erste Byte des Funktionscodes in das Befehlsregister. 2. Zyklus: Während der Decodierung des Codes holt sich der Prozessor das folgende Byte mit der Code-Ergänzung in das Steuerwerk. 3. Zyklus: Die Decodierung des ersten Bytes ergab die Adressierungsart indiziert. Da das zweite Byte mit der Code-Ergänzung jetzt erst decodiert wird, holt sich der Prozessor vorsorglich noch ein Byte in das Steuerwerk, das aber bei der vorliegenden Adressierung nicht ausgewertet wird. 4. und 5. Zyklus: In diesen beiden VMA-Zyklen führt das Adreßrechenwerk die Adreßrechnung für das Indexregister durch. Die Erhöhung um 1 wird jedoch noch nicht wirksam. 6. Zyklus: In diesem Zyklus sendet der Prozessor noch den alten Inhalt des Indexregisters ($F000) auf dem Adreßbus aus und legt den Inhalt des Akkus A auf den D a t e n bus. Erst am Ende dieses Zyklus erhält das Indexregister den neuen Inhalt $F001.
4.7 Die Adressierung von
Adresse
COOO C002 C005
Inhalt
86 00 8E F0 00 A7 80
Name
Befehl
IDA LDX STA
Operand
#$55 #$F000 X+
1.Zyklus
2.Zyklus
3.Zyklus
4.Zyklus
5.Zyklus
6. Zyklus
I
I
I
l
I
i
FFFF
FFFF
C005
I A?
C006 | so
C007
237
Speicherbereichen
1Yy 1^
F000 155 P
—t
"L
' t
* t Bild 4-84:
Ablauf des Befehls STA X+ (indizierte Adressierung
Die indizierte Adressierung läßt sich auf die bereits bekannten Befehle LD, ST, CLR, INC, DEC, CMP, TST, ROL und ROR anwenden. Dabei wird das Ergebnis der Adreßrechnung auf dem Adreßbus ausgesendet. Bild 4 - 8 5 zeigt die LEA-Befehle, die das Ergebnis einer Adreßrechnung in ein 16-Bit-Register übertragen.
4 Einfuhrung in die maschinenorientierte Programmierung
238
Befehl LEAX LEAY LEAU LEAS
Bild 4 - 8 5 :
Operand EFHINZVC X ausdruck X ausdruck ausdruck ausdruck
Wirkung Lade das X-Register mit Lade das Y-Register mit Lade den U-Stapelzeiger Lade den S-Stapelzeiger
Ergebnis der Adreßrechnung Ergebnis der Adreßrechnung mit dem Ergebnis der Adr. mit dem Ergebnis der Adr.
Befehle zum Laden der effektiven Adresse
LEA bedeutet Load E f f e c t i v e Address gleich lade die e f f e k t i v e Adresse. Der B e f e h l läßt sich auf die vier Adreßregister X , Y , U und S als Empfangsregister anwenden. Als Operanden sind die in Bild 4 - 8 6 zusammengestellten Ausdrücke zulässig. Der Buchstabe " r " steht für eines der Adreßregister X , Y , U oder S.
Ausdruck r r+ r++ -r —r konst.r A,r B,r D,r
Bild 4 - 8 6 :
Wirkung Adresse steht im Register X, Y, U oder S; Registerinhalt unverändert Adresse steht im Register X, Y, U oder S, Registerinhalt danach + 1 Adresse steht im Register X, Y, U oder S, Registerinhalt danach + 2 Registerinhalt vorher - 1; Adresse steht im neuen Register X,Y,U o.S Registerinhalt vorher - 2; Adresse steht im neuen Register X,Y,U o.S Adresse ist Summe aus Konstante und Register X, Y, U oder S Adresse ist Summe aus Akku A und Register X, Y, U oder S Adresse ist Summe aus Akku B und Register X, Y, U oder S Adresse ist Summe aus Doppelakku D und Register X, Y, U oder S
Operandenausdrücke der indizierten Adressierung
Bei der indizierten Adressierung ohne Abstand können j e nach verwendetem Assembler verschiedenartige Ausdrücke gebildet werden. So z.B. LDA X oder LDA ,X oder LDA 0 , X . In allen drei Beispielen wird der Inhalt des Indexregisters unverändert auf den Adreßbus g e s c h a l t e t . Ein Pluszeichen ( " + " ) hinter dem Register bewirkt, daß der Inhalt des Registers nach Ausführung des Befehls um 1 erhöht wird ( a u t o - i n c r e m e n t ) . Zwei Pluszeichen erhöhen das R e g i s t e r um 2. Da die Erhöhung nach der Ausführung des Befehls e r f o l g t , heißt dies auch " P o s t - I n c r e m e n t " . Ein Minuszeichen ( " - " ) vermindert den Inhalt des Adreßregisters vor der Ausführung des Befehls ( a u t o - d e c r e m e n t ) . Zwei Minuszeichen vermindern das Register um 2. Da die Verminderung vor der Ausführung des B e f e h l s e r f o l g t , nennt man dies auch " P r e - D e c r e m e n t " . Der Inhalt der Adreßregister wird durch das Zählen verändert. Ein Beispiel ist der Befehl LDA X+, der in der Schleife des Bildes 4 - 8 3 das X - R e g i s t e r laufend um 1 erhöht. Bei der indizierten Adressierung mit einem konstanten Abstand wird der Abstand als vorzeichenbehaftete Dualzahl im Zweier-Komplement zu der im Adreßregister enthaltenen Zahl addiert und ergibt die e f f e k t i v e Adresse. Dabei bleibt der Inhalt des Adreßregisters unverändert im Gegensatz zum a u t o increment bzw. a u t o - d e c r e m e n t . Es gibt drei Arten von Konstanten. Konstan-
4.7 Die Adressierung von
Speicherbereichen
239
t e n im B e r e i c h von - 1 6 bis + 1 5 werden im 2 . B y t e des B e f e h l s a b g e l e g t . F ü r K o n s t a n t e n im B e r e i c h von - 1 2 8 bis + 1 2 7 wird e i n d r i t t e s B y t e a n g e l e g t . K o n s t a n t e n im B e r e i c h von - 3 2 7 6 8 bis + 3 2 7 6 7 l i e g e n in e i n e m d r i t t e n und v i e r t e n B y t e . Mit dem L E A - B e f e h l , der das E r g e b n i s e i n e r A d r e ß r e c h n u n g w i e d e r
in
ein A d r e ß r e g i s t e r ü b e r n i m m t , können K o n s t a n t e n zu den A d r e ß r e g i s t e r n a d d i e r t oder s u b t r a h i e r t w e r d e n . Ein B e i s p i e l ist d e r B e f e h l L E A Y - 1 , Y der S c h l e i f e , der das Y - R e g i s t e r um 1 v e r m i n d e r t . Bei
der
i n d i z i e r t e n A d r e s s i e r u n g mit e i n e m v a r i a b l e n A b s t a n d s t e h t der
s t a n d in e i n e m
der b e i d e n A k k u m u l a t o r e n
Ab-
A o d e r B o d e r im Doppelakku
Auch h i e r b l e i b t der Inhalt der A d r e ß r e g i s t e r unverändert e r h a l t e n . Mit
D.
dem
B e f e h l L E A , der das E r g e b n i s e i n e r A d r e ß r e c h n u n g w i e d e r in ein A d r e ß r e g i s t e r l ä d t , lassen s i c h d a m i t a r i t h m e t i s c h e O p e r a t i o n e n z w i s c h e n den A d r e ß r e g i s t e r n und den A k k u m u l a t o r e n d u r c h f ü h r e n . Das in Bild 4 - 8 7 d a r g e s t e l l t e T e s t p r o g r a m m Adressierung w ä h l t , der
z e i g t B e i s p i e l e für die i n d i z i e r t e
m i t und o h n e A b s t a n d . Als B e f e h l wurde der L E A Y - B e f e h l
das E r g e b n i s der A d r e ß r e c h n u n g in das Y - R e g i s t e r
wurde e s m ö g l i c h , die Wirkung der A d r e ß r e c h n u n g
lädt.
ge-
Dadurch
mit H i l f e des Monitors zu
v e r f o l g e n . Das Bild z e i g t a u c h die Ausführung des T e s t p r o g r a m m s im E i n z e l s c h r i t t . Die in K l e i n s c h r i f t a u s g e d r u c k t e n A s s e m b l e r z e i l e n wurden n a c h t r ä g l i c h in das P r o t o k o l l e i n g e f ü g t . Das P r o t o k o l l z e i g t den Inhalt der B e n u t z e r r e g i s t e r n a c h der Ausführung e i n e s B e f e h l s . B e i m S t a r t des P r o g r a m m s h a t der M o n i t o r die R e g i s t e r A, B , X , Y und U mit zeigt
binären
den B e f e h l
C000 COOO C003 C005 C007 C009 C00B C00D C00F
C011
C014 C017 C01B C01F C023 C025 C027 C029 C02B C02E C030
8E 31 31 31 31 31 31 31 31 31 31 31 31 86 31 C6 31 CC 31 20
Nullen g e l ö s c h t .
Die e r s t e
Zeile
des B i l d e s
(eingefügt)
in A s s e m b l e r s c h r e i b w e i s e , die z w e i t e Z e i l e z e i g t die
* B i l d 4-87 ORG START LDX 1000 LEAY 84 LEAY 80 LEAY 81 LEAY 82 LEAY 83 LEAY 03 LEAY 1D LEAY 88 64 LEAY 88 9C LEAY 89 03E8 LEAY 89 FC 18 LEAY 89 1000 LDA 10 LEAY 86 LDB 80 LEAY 85 LDD 1000 LEAY 8B BRA CE SUSI 1000 EQU END
TEST FUER $C000 #$1000 0,X 0,X+ 0.X++
o,-x
0,—X
3, X -3,X
100.X -100.X 1000.x -1000.x SUSI.X #$10 A.X #$80 B.X #$1000 D.X START $1000
Regi-
I N D I Z I E R T E ADRESSIERUNG ADRESSZAEHLER INDEXREGISTER LADEN OHNE ABSTAND OHNE ABSTAND X = X + 1 OHNE ABSTAND X = X + 2 X = X - 1 OHNE ABSTAND X = X - 2 OHNE ABSTAND POS 4-BIT-ABSTAND NEG 4 - B I T - A B S T A N D POS 7-BIT-ABSTAND NEG 7-BIT-ABSTAND POS 15-BIT-ABSTAND NEG 15-BIT-ABSTAND SYMBOLISCHE ADRESSE ( 1 5 - B I T - A B S T A N D ) ABSTAND IM AKKU A ABSTAND IM AKKU B ABSTAND IM DOPPELAKKU D TESTSCHLEIFE WERTZUWEISUNG
240
4 Einführung in die maschinenorientierte
C000 8 E 1 0 0 0 PC=
START
A=
B=
~ T 0 0 3 ~ T T 0 0 C003 3 1 PC=
A=
B=
A=
X=
B=
31
A=
" T 0 0 9 " T r o O C009 31 82 PC=
_
B= 0 0
A=
PC=
_
X=
Y=
U=
S=
LEAY
0,X»
Y=
U=
11010000 ABSTAND
DP_EFHINZVC 11010000
OHNE ABSTAND S=
LEAY
0,X»+
Y=
U=
LADEN
DPJFHINZVC
X = X •
11010000
OHNE ABSTAND S=
1
DP_EFHINZVC
DP
X = X 01010011001
a.
Bild 4 - 1 1 9 :
0101
0101
links
beginnend
b.
rechts
beginnend
Multiplikationsverfahren
Zähler 4
Produkt 00000000
cfooooodo
Mu 1 t i p i i k a t o r Bemerkung 0101 -- Multiplikand: 0101 Produkt schieben 0101 Bit testen 0: n i c h t a d d i e r e n Zähler - 1 Produkt schieben 0101 Bit testen 1: add i e r e n
t
3
«•
i
00000000 +0101 00000101 2
/
— t —
/
00001010
1
1 I i0 0 0 1 0 1 0i0
0101
t
0101 + 0101 00011001 0 00011001
Bild 4 - 1 2 0 :
V-
Zähler - 1 Produkt schieben Bit testen 0: n i c h t 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 Ergebni s
A b l a u f p l a n und Beispiel e i n e r Multiplikation
274
4 Einführung in die maschinenorientierte
Programmierung
Im G e g e n s a t z zur d e z i m a l e n Rechnung gibt es im Dualen nur zwei Möglichkeit e n : ist die S t e l l e des Multiplikators 0, so ist a u c h das Teilprodukt 0; ist die Stelle des M u l t i p l i k a t o r s 1, so ist d a s Teilprodukt gleich dem Multiplik a n d e n . Die T e i l p r o d u k t e sind vor dem Addieren jeweils um eine Stelle zu v e r s c h i e b e n . Bei d e r Multiplikation zweier 4 - B i t - Z a h l e n kann ein 8 - B i t - E r g e b n i s e n t s t e h e n . Bild 4 - 1 2 0 zeigt den Ablauf e i n e r Multiplikation, die mit dem w e r t h ö c h s t e n Bit des M u l t i p l i k a t o r s beginnt und d a s Produkt l a u f e n d n a c h links schiebt. Für die Multiplikation vierstelliger Dualzahlen des Beispiels sind vier S c h l e i f e n d u r c h l ä u f e e r f o r d e r l i c h . Das P r o d u k t r e g i s t e r wird vor der S c h l e i f e gelöscht und in der S c h l e i f e immer um 1 Bit n a c h links g e s c h o b e n . Dann wird jeweils das w e r t h ö c h s t e Bit des Multiplikators u n t e r s u c h t . Ist es 1, so wird der Multiplikand zum Produkt a d d i e r t , sonst n i c h t . Bild 4 - 1 2 1 zeigt ein nach diesem V e r f a h r e n a r b e i t e n d e s U n t e r p r o g r a m m , das zwei in den beiden Akkus ü b e r g e b e n e vorzeichenlose Dualzahlen zu einem 1 6 - B i t - P r o d u k t multipliziert, das im Doppelakku D z u r ü c k g e b r a c h t wird. Dieses U n t e r p r o g r a m m kann den MUL-Befehl ersetzen. Das das tors den Die
H a u p t p r o g r a m m lädt die beiden F a k t o r e n aus dem Speicher und bringt Produkt w i e d e r in den S p e i c h e r , so daß das P r o g r a m m mit Hilfe des Monig e t e s t e t w e r d e n kann. Das U n t e r p r o g r a m m legt die beiden F a k t o r e n und D u r c h l a u f z ä h l e r in den Stapel und löscht das Produkt im Doppelakku D. beiden B e f e h l e ASLB und ROLA schieben d a s Produkt im Doppelakku D
* BILD F 8 0 0 MONI cooo cooo C004
10CE C 8 0 0 F000 B6 F001 C 0 0 7 F6 COOA 8D 06 F002 C 0 0 C FD COOF 7E F800 C012 C014 C016 COI 8 C019 C01A C01B C01C C01E C020 C022 C024 C026 C028 C02A F000 F000 F001 F002
34
06
86 34 4F 5F
08 02
58 49 68 24 EB 89 6A 26 32 39
Bild 4 - 1 2 1 :
START
0001 0002
M U L T I P L I K A T I O N S P R O G R A M M 8 X 8 = 16 EINSPRUNG MONITOR $F800 ADRESSZAEHLER $C000 S - S T A P E L Z E I G E R LADEN #$C800 FAK1 FAK2
FAKTOR FAKTOR
1 AUS 2 AUS
SPEICHER SPEICHER
MUL8 PR0D MONI
BESSER: M U L -BEFEHL PRODUKT S P E I C H E R N
BIT
LADEN LADEN BEIM 6809
!!!
S P R U N G NACH MONITOR STATT M U L - B E F E H L * UNTERPROGRAMM D = A * B ERST B DANN A NACH S T A P E L A ,B MUL8 PSHS DURCHLAUFZAEHLER LDA #8 NACH S T A P E L A PSHS PRODUKT CLRA L0ESCHEN CLRB ASLB ROLA ASL BCC ADDB ADCA MUL82
63
0001
LDS LDA LDB BSR STD JMP
MUL81 61 04 62 00 E4 F2
4-121 EQU 0RG
FAK1 FAK2 PROD
DEC BNE LEAS RTS ORG RMB RMB RMB END
1 ,S MUL82 2,S #0 S MUL81 3 ,S $F000 1 1 2
PRODUKT 1 B I T NACH L I N K S S C H I E B E N M U L T I P L I K A N D IM S T A P E L
SCHIEBEN
C=0: NICHT ADDIEREN C = 1 : M U L T I P L I K A T O R A U S S T A P E L ZU LOW CARRY ZU H I G H ( A ) WEGEN 1 6 - B I T - A D D I T I O N Z A E H L E R IM S T A P E L V E R M I N D E R N NOCH K E I N E 8 D U R C H L A E U F E STAPELZEIGER WIEDERHERSTELLEN A D R E S S Z A E H L E R DATEN F A K T O R 1 VOR S T A R T L A D E N F A K T O R 2 VOR S T A R T L A D E N PRODUKT NACH ENDE K O N T R O L L I E R E N
Multiplikation nach dem S c h i e b e v e r f a h r e n
275
4.8 Datenverarbeitung
* BILD 4-122 16-BIT * 16-BIT MULTIPLIKATION EQU $F800 EINSPRUNG MONITOR F800 MONI ORG $C000 ADRESSZAEHLER C000 #$C800 COOO 10CE C800 START LDS STAPELZEIGER LADEN LDD C004 FC F000 FAKT1 ' FAKTOR 1 AUS SPEICHER LADEN LDX F002 FAKT2 FAKTOR 2 AUS SPEICHER LADEN C007 BE BSR MUL 16 16-BIT-MULTIPLIKATION C00A 8D 09 F004 STD PR0D PRODUKT HIGH SPEICHERN C00C FD STX PR0D+2 PRODUKT LOW SPEICHERN C00F BF F006 JMP MONI . SPRUNG ZUM MONITOR C012 7E F800 * UNTERPROGRAMM D * X = s STD 1 ,S C037 ED 61 TEILSUMME NACH STAPEL BCC MUL162 CARRY ? C039 24 02 INC J A : HOECHSTES BYTE ERHOEHEN C03B 6C E4 0,S MUL162 PULS C03D 35 X,A,B 16 32-BIT-PRODUKT AUS STAPEL LEAS C03F 32 4,S 64 STAPELZEIGER WIEDERHERSTELLEN C041 39 RTS RUECKSPRUNG ORG F000 $F000 DATENBEREICH FAKT1 RMB 2 F000 0002 FAKTOR 1 VOR START LADEN F002 0002 FAKT2 RMB 2 FAKTOR 2 VOR START LADEN 4 F004 0004 PR0D RMB PRODUKT NACH ENDE PRUEFEN END Bild 4-122: U n t e r p r o g r a m m
zur
16-Bit-Multiplikation
um
1 Bit nach links. D e r M u l t i p l i k a n d w i r d im S t a p e l g e s c h o b e n ; g e n a u s o
der
Zähler
im
Stapel
halt des S t a p e l z e i g e r s mit
der
holen
um
mit dem
Rücksprungbefehl
kann.
1 vermindert. Vor dem RTS
Befehl L E A S die
Rücksprung
muß der a l t e
3,S w i e d e r h e r g e s t e l l t
Rücksprungadresse
richtig
wird In-
werden, da-
aus d e m
Stapel
276
4 Einfährung in die maschinenorientierte
Programmierung
Das in Bild 4 - 1 2 2 g e z e i g t e B e i s p i e l e n t h ä l t ein U n t e r p r o g r a m m , das zwei v o r zeichenlose
1 6 - B i t - D u a l z a h l e n aus dem Doppelakku D und dem X - R e g i s t e r zu
e i n e m 3 2 - B i t - E r g e b n i s m u l t i p l i z i e r t . Das D - R e g i s t e r e n t h ä l t den h ö h e r w e r t i g e n T e i l des P r o d u k t e s ; das X - R e g i s t e r den n i e d e r w e r t i g e n T e i l . Das P r o g r a m m b i l det m i t H i l f e des M U L - B e f e h l s vier T e i l p r o d u k t e und a d d i e r t sie u n t e r B e r ü c k sichtigung
der
Stellenwertigkeit.
Da a l l e
Hilfsspeicherstellen
im
Stapel
ge-
h a l t e n w e r d e n , ist das U n t e r p r o g r a m m r e - e n t r a n t oder a b b r u c h f e s t .
4.8.9
Die Division
Divisionsbefehle erst
im
sind
Nachfolger
im
Prozessor
68000.
Die
6809 nicht
Division
vorhanden, d i e s e
kann im e i n f a c h s t e n
finden
sich
F a l l auf
eine
m e h r m a l i g e S u b t r a k t i o n zurückgeführt w e r d e n . D a b e i wird der Dividend so l a n ge um
den
Quotient
Divisor v e r m i n d e r t ,
gibt
an,
7 : 3 ergibt 7 Ergebnis
wie o f t 3 = 4 -
subtrahiert.
3 = 1 -
Der
bis s i c h e i n e n e g a t i v e D i f f e r e n z e r g i b t .
der Divisor im Dividenden e n t h a l t e n i s t .
Der
Beispiel:
3 = - 2 . Es wurde z w e i m a l ohne ein n e g a t i v e s
Quotient
ist
2; der
Rest
ist
1. Ein
Divisor
Null
gibt a l s S o n d e r f a l l U n e n d l i c h . Bild 4 - 1 2 3 zeigt e i n P r o g r a m m b e i s p i e l für e i n e D i v i s i o n s s c h l e i f e n a c h dem
* BILD 4-123 F800 MONI EQU cooo ORG cooo 10CE C800 START LOS C004 B6 F000 LDA F001 LDB C007 F6 04 COOA 34 PSHS TSTB COOC 5D OA COOD 27 BEQ COOF 5F CLRB E4 C010 AI CMPA LOOP C012 25 08 BL0 C014 AO E4 SUBA C016 5C INCB C017 20 F7 BRA FFFF FEHL C019 CC LDD C01C 32 61 FERT LEAS C01E 1 E 89 EXG FD F002 C020 STD F800 JMP C023 7E F000 ORG 0001 DEND F000 RMB 0001 DS0R F001 RMB 0002 ERG RMB F002 END
Bild 4 - 1 2 3 :
Subtraktionsverfahren.
DIVISIONSSCHLEIFE $F800 EINSPRUNG MONITOR ADRESSZAEHLER $C000 #$C800 S-STAPELZEIGER LADEN DIVIDENDEN AUS SPEICHER LADEN DEND DS0R DIVID0R AUS SPEICHER LADEN B B NACH STAPEL RETTEN DIVISOR AUF NULL TESTEN FEHL DIVISOR NULL QUOTIENTEN = ZAEHLER L0ESCHEN DIVIDENDEN MIT DIVISOR VERGLEICHEN S FERT DIVISOR KLEINER: FERTIG S DIVISOR GR0ESSER: DIVISOR ABZIEHEN QUOTIENTEN = ZAEHLER ERH0EHEN LOOP SCHLEIFE #$FFFF FEHLER: GR0ESSTEN WERT LADEN S = S+ 1 ALTEN STAPELZEIGER WIEDERHERSTELLEN 1 ,S QUOTIENT UND REST VERTAUSCHEN A,B ERGEBNIS SPEICHERN ERG MONI SPRUNG NACH MONITOR ADRESSZAEHLER DATEN $F000 DIVIDEND VOR START LADEN 1 1 DIVISOR VOR START LADEN QUOTIENT UND REST NACH ENDE KONTROLLIEREN 2
D i v i s i o n s c h l e i f e nach dem
Subtraktionsverfahren
Das P r o g r a m m holt die b e i d e n Operanden aus dem S p e i c h e r und prüft den Divisor auf setzt.
Null. Ist Der
Divisor
er
Null, so wird als F e h l e r m a r k e das E r g e b n i s $ F F wird
in e i n e
Hilfsspeicherstelle
im
Stapel
einge-
gebracht
und
dort für die l a u f e n d e S u b t r a k t i o n v e r w e n d e t . Die Q u o t i e n t bildet s i c h im Akku B; der Akku A e n t h ä l t n a c h Ablauf der S c h l e i f e den R e s t .
4.8 Datenverarbeitung
dezimal: dual:
43
:
3
00101011
:
0011
-
111
= 1 4
Rest
1
=1110
Rest 0001
0011
A neg:
ja! 00101 -
0011
Apos:
0010
J
00100 -
0011
Apos:
0001 00011 -
0011
Apos:
0000 -
A neg: Rest:
Bild 4 - 1 2 4 :
Zähler 4
00001 0011
0001 =>
Divisionsverfahren
C
Dividend Akku MQR 1011 0010
0
0101
/
A
/ neg
01 1 „
pos =0010 3 0
/
0100
01 i E
i
1 1 1u pos
=0001 2 0
1
001 1
1110
t
111u
pos
=0000 1 0
/
0001 0001
0
Bild 4 - 1 2 5 :
111I1J /
111K
neg
1110
0001 1110 Rest Quotient
Bemerkung D i v i s o r : 0011 T e s t s u b t r a k t i on Akku+MQR s c h i e b e n Testsubtraktion Divisor subtrahieren MQR D = anfangsadresse = endadresse (er) > G = startadresse (er) > S = anfangsadresse adresse wert -
lz
r
@ gibt adresse + 1 gibt adresse - 1 Eingabe , adresse + 1 beendet Kommando
Bild 6 - 1 3 : Terminalmonitor: Kommandos
Nach dem Anlauf des Systems meldet sich der Monitor mit dem Begrüßungstext "MONI-6809" und einem Eingabezeichen am linken Rand einer neuen Zeile. Der Benutzer gibt nun einen Kommandobuchstaben und Steuergrößen ein. Der Kennbuchstabe F (Fill, fülle) dient zum Füllen eines Speicherbereiches von einer Anfangsadresse bis zu einer Endadresse mit einem bestimmten Bitmuster, das als vierstellige Hexadezimalzahl einzugeben ist. Der Kennbuchstabe D (Display, Dump) dient zum Ausgeben eines Speicherbereiches von einer Anfangsadresse bis zu einer Endadresse. Es erscheinen immer 16 Bytes auf einer Zeile.
336
6 Serielle
Datenübertragung
Der K e n n b u c h s t a b e G ( G e h e , Go) s t a r t e t ein Programm a b einer einzugebenden S t a r t a d r e s s e . Ein Setzen von H a l t e p u n k t e n , eine P r o g r a m m v e r f o l g u n g im E i n z e l s c h r i t t und e i n e R e g i s t e r v e r w a l t u n g w i e bei handelsüblichen E n t w i c k l u n g s s y s t e men i s t bei dem vorliegenden Monitorprogramm nicht v o r g e s e h e n . Sie k ö n n t e n j e d o c h durch w e i t e r e K e n n b u c h s t a b e n e i n g e f ü h r t w e r d e n . Der K e n n b u c h s t a b e S ( S u b s t i t u t e , s c h r e i b e ) d i e n t zum Anzeigen und Ändern einzelner D a t e n b y t e s ab e i n e r einzugebenden A n f a n g s a d r e s s e . Auf e i n e r Zeile e r s c h e i n e n d i e Adresse und der alte Inhalt g e f o l g t von e i n e m S t r i c h . Es können vier U n t e r k o m m a n d o s v e r w e n d e t w e r d e n . Ein L e e r z e i c h e n e r h ö h t ohne Ä n d e rung d e r D a t e n die A d r e s s e um 1. Ein Minuszeichen v e r m i n d e r t ohne Änderung der D a t e n die Adresse um 1. Der a l t e Inhalt kann durch Eingabe e i n e r z w e i s t e l l i g e n Hexadezimalzahl g e ä n d e r t w e r d e n . Dabei wird die Adresse um 1 e r h ö h t . Ein Wagenrücklauf ( e r ) beendet das K o m m a n d o und k e h r t in den G r u n d z u s t a n d zurück.
S e r i e n s c h n i t t s t e l l e programmieren Meldung > ausgeben
Bereich Bereich Bytes Programm f ü l l e n ausgeb. eingeb. starten
Bild 6 - 1 4 :
Meldung
Terminalmonitor: Programmblockplan
Der in Bild 6 - 1 4 d a r g e s t e l l t e P r o g r a m m b l o c k p l a n zeigt e i n V o r l a u f p r o g r a m m , das d i e S c h n i t t s t e l l e p r o g r a m m i e r t und eine Meldung a u s g i b t , sowie eine S c h l e i f e , die die e i n g e g e b e n e n K o m m a n d o b u c h s t a b e n a u s w e r t e t . Bei f e h l e r h a f t e r Eingabe wird eine F e h l e r m e l d u n g a u s g e g e b e n . Fehler können sein ein nicht d e f i n i e r t e r K e n n b u c h s t a b e oder eine N i c h t - H e x a d e z i m a l z i f f e r bei der Eingabe von S t e u e r g r ö ß e n oder der Versuch, e i n e n N i c h t - R A M - B e r e i c h zu b e s c h r e i b e n . Das f o l g e n d e Programm wird nun in m e h r e r e n A b s c h n i t t e n e r k l ä r t . Bild 6 - 1 5 zeigt die T a b e l l e der Einsprungpunkte und U n t e r p r o g r a m m e . Ein Monitor soll den Benutzer bei seiner Arbeit u n t e r s t ü t z e n . Dazu g e h ö r t a u c h die B e r e i t s t e l l u n g von U n t e r p r o g r a m m e n f ü r die Eingabe und Ausgabe von D a t e n über S y s t e m s c h n i t t s t e l l e n ; davon wurde im K a p i t e l 4 über m a s c h i n e n o r i e n t i e r t e P r o g r a m m i e r u n g Gebrauch g e m a c h t . Muß das M o n i t o r p r o g r a m m im
337
6.4 Der Entwurf eines Terminalmonitors
* B I L D 6 - 1 5 TERMINALMONITOR TABELLE DER UNTERPROGRAMME DATRE EQU ACIA DATENREGISTER $C901 STARE EQU $C900 ACIA STEUER/STATUSREGISTER ORG $C000 ADRESSZAEHLER KALT LB RA START NEUSTARTADRESSE DES MONITORS WARM LBRA EINSPRUNGPUNKT MONITORSCHLEIFE LOOP AUSZH BRA AUSZ ZEICHEN AUS AKKU A AUSGEBEN AUSBH BRA AUSB AKKU A UMWANDELN UND I N 2 ZEICHEN AUSGEBEN AUSLH BRA AUSL LEERZEICHEN UND AKKU A UMGEW. AUSGEBEN A U S L I H BRA AUSLI L I N K E S HALBBVTE AKKU A UMWANDELN UND AUSGEB. AUSREH BRA AUSRE RECHTES HABLBBYTE AKKU A UMWANDELN UND AUSG. AUSAD AUSADH BRA NEUE Z E I L E LEEZEICHEN UND X UMGEW. AUSGEBEN AUSTH BRA AUST NEUE Z E I L E UND TEXT AUS (X) B I S EOF AUSGEBEN EIN ZEICHEN NACH AKKU A LESEN EINH LBRA EINHUH LBRA EINHU ZEICHEN LESEN UND IN AKKU A UMWANDELN EIN2 2 ZEICHEN LESEN UND NACH AKKU A UMWANDELN EIN2H BRA EIN4H BRA EIN4 4 ZEICHEN LESEN UND NACH D UMWANDELN
C901 C900 cooo cooo C003 C006 C008 COOA COOC COOE C010 C012 C014 C017 C01A C01C
16 16 20 20 20 20 20 20 20 16 16 20 20
00C8 00D9 62 48 3E 4E 50 23 0A OOA7 0089 71 63
*
Bild 6-15:
Laufe
der
auch die auch
T e r m i n a l m o n i t o r : Einsprungpunkte und U n t e r p r o g r a m m e
bei
Fertigung
Rechnermodells
geändert
w e r d e n , so können s i c h
S y s t e m u n t e r p r o g r a m m e verschieben. Um dem
verschiedenen
immer die gleichen wichtigen
eines
Adressen der
Versionen
und
Ausführungen
A d r e s s e n zu g a r a n t i e r e n , l e g t
Einsprungpunkte
eines
man a l l e
für den
w i e im Bild 6 - 1 5 in e i n e T a b e l l e
S p r u n g b e f e h l e n zu den e i g e n t l i c h e n
Benutzer
Rechnermodells Benutzer
mit u n b e d i n g t e n
U n t e r p r o g r a m m e n . Durch V e r w e n d u n g
der
r e l a t i v e n Adressierung auch bei den K o n s t a n t e n ist das v o r l i e g e n d e M o n i t o r p r o g r a m m v e r s c h i e b l i c h . Es kann also auf b e l i e b i g e n A d r e s s e n im S p e i c h e r Die
in Bild
mit dem
6-16 dargestellten
bereits bekannten
g r a m m . Das U n t e r p r o g r a m m Die
Anfangadresse
des
Ausgabe-Unterprogramme
Unterprogramm
bilden
A U S Z als z e n t r a l e m
ein
liegen. System
Ausgabepro-
A U S T gibt auf e i n e r neuen Z e i l e e i n e n T e x t aus.
Textes
wird
im X - R e g i s t e r
ü b e r g e b e n , am Ende
des
T e x t e s s t e h t als E n d e m a r k e das B y t e $04; im A S C I I - C o d e w i r d es als E O F f ü r End Of F i l e oder Ende des D a t e n s a t z e s b e z e i c h n e t . Das U n t e r p r o g r a m m d i e n t zur A u s g a b e e i n e r des X - R e g i s t e r s
A d r e s s e auf
in v i e r H e x a d e z i m a l s t e l l e n
ausgegeben.
A U S L und A U S B w a n d e l n den Inhalt des Akkus um und g e b e n diese aus.
Das
mit
Unterprogramm
Leerzeichen
ausgibt
Unterprogramme
und
AUSLI,
dann
Die
A in z w e i
H i l f e des U n t e r p r o g r a m m s AUSL
AUSAD
e i n e r neuen Z e i l e . Dabei w i r d d e r Inhalt Unterprogramme
Hexadezimalstellen
AUSZ
auf
dem
Terminal
ist dabei e i n Einsprungpunkt, der vorher
als
AUSRE
Unterprogramm und
AUSZ
AUSB weiterarbeitet.
bilden e i n e
K e t t e von d r e i
ein Die Ein-
sprungpunkten, die e n t w e d e r das linke H a l b b y t e oder das r e c h t e H a l b b y t e des Akkus A u m c o d i e r e n o d e r den Inhalt des Akkus A als Z e i c h e n a u s g e b e n .
D i e in Bild 6 - 1 7 d a r g e s t e l l t e n E i n g a b e - U n t e r p r o g r a m m e benutzen das C a r r y b i t als M a r k e f ü r e i n e f e h l e r h a f t e E i n g a b e . Das U n t e r p r o g r a m m
E I N A D gibt z u -
nächst ein Z e i c h e n " = " aus und e r w a r t e t d i e E i n g a b e von vier
Hexadezimalzif-
f e r n als A d r e s s e . Es b i l d e t mit den U n t e r p r o g r a m m e n E I N 4 und E I N 2 , die vier bzw. zwei
Bytes lesen, eine K e t t e
von Einsprungpunkten. Das U n t e r p r o g r a m m
E I N H U liest e i n e H e x a d e z i m a l z i f f e r ein und w a n d e l t s i e u m . Bei E i n g a b e e i n e r
338
6 Serielle Datenübertragung
C01E C020 C023 C025 C027 C029 C02B C02D C02F C031 C033
34 CC 8D 1F 8D A6 81 26 35 8D 20
16 OAOO 45 98 41 80 04 02 96 37 F4
C035 C037 C03A C03C C03E C040 C042 C044 C046 C048
34 CC 8D 1F 80 1F 8D 1F 80 35
06 0A0D 2E 98 2A 10 06 98 0A 86
C04A C04C C04E C050
34 86 8D 35
02 20 1A 02
C052 C054 C056 C058 C05A
34 8D A6 8D 35
02 06 E4 06 82
C05C C05D C05E C05F
44 44 44 44
C060 C062 C064 C066 C068
84 8B 81 23 8B
0F 30 39 02 07
C06A C06C C06F C071 C073 C075 C078
34 B6 84 27 35 B7 39
02 C900 02 F9 02 C901
* B I L D 6 - 1 6 TERMINALMONITOR AUSGABE-UNTERPROGRAMME * NEUE Z E I L E UND TEXT ,AUS ( X ) B I S EOF = 04 AUSGEBEN AUST PSHS A,B,X REGISTER RETTEN ZEILENVORSCHUB ( L F ) UND WAGENRUECKLAUF LDD #$OAOD ZEILENVORSCHUB BSR AUSZ TFR B,A WAGENRUECKLAUF BSR AUSZ AUST1 LDA X+ ZEICHEN LADEN CMPA #$04 ENDEMARKE DES TEXTES ? BNE AUST2 N E I N : AUSGEBEN PULS A , B , X , P C JA: REGISTER ZURUECK UNF RUECKSPRUNG AUST2 BSR AUSZ ZEICHEN AUSGEBEN BRA AUST1 * NEUE Z E I L E LEERZEICHEN UND X - R E G I S T E R ALS ADRESSE AUSGEBEN AUSAD PSHS A,B REGISTER RETTEN LDD #$0A0D ZEILENVORSCHUB UND WAGENRUECKLAUF BSR AUSZ TFR B,A BSR AUSZ TFR X ,D ADRESSE NACH DOPPELAKKU D BSR AUSL LEERZEICHEN UND 1. BYTE AUSGEBEN TFR B,A BSR AUSB 2»BYTE AUSGEBEN PULS REGISTER ZURUECK UND RUECKSPRUNG A.B.PC * L E E R Z E I C H E N UNS AKKU A UMGEWANDELT AUSGEBEN A AUSL PSHS ZEICHEN RETTEN LDA #$20 LEERZEICHEN AUSZ AUSGEBEN BSR A ZEICHEN ZURUECK PULS * AKKU A UMGEWANDELT AUSGEBEN AUSB PSHS A ZEICHEN RETTEN AUSLI L I N K E S HALBBYTE UMWANDELN UND AUSGEBEN BSR ZEICHEN IM STAPEL LESEN LDA S BSR AUSRE RECHTES HALBBYTE UMWANDELN UND AUSGEBEN PULS A,PC AKKU A ZURUECK UND RUECKSPRUNG * L I N K E S HALBBYTE AKKU A UMWANDELN UND AUSGEBEN AUSLI LS RA AKKU A 4 B I R RECHTS LS RA LSRA LSRA * RECHTES HALBBBYTE AKKU A UMWANDELN UND AUSGEBEN AUSRE ANDA #$0F MASKE 0000 1111 ADDA #$30 NACH A S C I I - Z E I C H E N CMPA #'9 BUCHSTABE ? BLS AUSZ N E I N : Z I F F E R AUSGEBEN ADDA #$07 JA: NACH BUCHSTABEN A - F UMWANDELN * Z E I C H E N AUS AKKU A AUSGEBEN AUSZ PSHS A ZEICHEN RETTEN AUSZ1 LDA STARE STATUSREGISTER LADEN ANDA #$02 MASKE 0000 0010 BEQ AUSZ 1 B1=0: SENDER VOLL PULS A B1=1: SENDER F R E I STA DATRE ZEICHEN NACH SENDER RTS *
Bild 6 - 16:
Terminalmonitor: Ausgabe- Unterprogramme
N i c h t - H e x a d e z i m a l z i f f e r w i r d das C a r r y b i t a u f 1 g e s e t z t . Im G e g e n s a t z zu d e n B i l d e r n 6 - 8 u n d 6 - 1 1 g i b t h i e r das U n t e r p r o g r a m m EIN d a s e i n g e l e s e n e Z e i c h e n im E c h o w i e d e r a u s .
6.4 Der Entwurf eines Terminalmoniton
C079 C07B C07D C07F
86 8D 86 8D
20 ED 3D E9
C081 C083 C085 C086 C088 C08A C08C
8D 24 39 1F 8D 1E 39
OA 01
C08D C08F C091 C093 C095 C097 C099 C09A C09B C09C C09D C09F C0A1
34 8D 25 1F 8D 25 58 58 58 58 E7 AA 35
04 12 OE 89 OC 08
C0A3 C0A5 C0A7 C0A9 C0AB C0AD C0AF COBO C0B2 C0B4 C0B6 C0B8 COBA COBB COBD
8D 81 22 81 25 80 39 81 22 81 25 80 39 1A 39
19 46 12 41 03 37
COBE C0C1 C0C3 C0C5 C0C8 COCA
B6 84 27 B6 8D 39
89 03 89
E2 EO 84
39 07 30 03 30 01 C900 01 F9 C901 AO
Bild 6 - 1 7 :
339
* BILD 6-17 TERMINALMONITOR EINGABE-UNTERPROGRAMME * LEERZEICHEN UND " = " AUSGEBEN UND ADRESSE NACH D LESEN C=1: FEHLER LEERZEICHEN EINAD LDA #$20 AUSGEBEN BSR AUSZ LDA ZEICHEN " = " #' = BSR AUSZ AUSGEBEN * 4 ZEICHEN LESEN UMWANDELN UND IN D UEBERGEBEN C=1: FEHLER EIN4 BSR EIN2 1. UND 2 . ZEICHEN LESEN UND UMWANDELN EIN41 BCC C=0: 3. UND 4 . BYTE LESEN RTS C=1: FEHLER WAR KEIN HEXAZEICHEN EIN41 TFR HI GH-ADRESSE NACH B RETTEN A,B BSR EIN2 3 . UND 4. BYTE LESEN EXG BEIDE TEILE VERTAUSCHEN A,B RTS RUECKSPRUNG * 2 ZEICHEN LESEN UND IN AKKU A UMWANDELN C=1: FEHLER EIN2 PSHS B AKKU B RETTEN BSR EINHU 1. ZEICHEN LESEN UND UMWANDELN BCS EINF C=1: FEHLER TFR A,B 4 BIT RETTEN BSR EINHU 2. ZEICHEN LESEN UND UMWANDELN BCS EINF C=1: FEHLER LSLB 1. ZEICHEN 4 BIT NACH LINKS LSLB LSLB LSLB NACH STAPEL STB -S ORA S+ MIT 4 RECHTES BITS MISCHEN EINF PULS B,PC AKKU B ZURUECK UND RUECKSPRUNG * HEXAZEICHEN LESEN UND UMWANDELN C=1: FEHLER EINHU BSR EIN ZEICHEN LESEN CMPA #'F GROESSER BUCHSTABE F ? EINHUF JA: FEHLER BHI CMPA #'A KLEINER BUCHSTABE A ? BLO JA: AUF ZIFFER TESTEN EINHU1 SUBA #$37 BUCHSTABE A-F DECODIEREN RTS EINHU1 CMPA #'9 GROESSER ZIFFER 9 ? BHI EINHUF JA: FEHLER CMPA #'0 KLEINER ZIFFER 0 ? BLO EINHUF JA-: FEHLER SUBA ZIFFER 0-9 DECODIEREN #$30 RTS EINHUF ORCC #$01 KONSTANTE 0000 0001 RTS C=1: FEHLER KEINE HEXAZIFFER * ZEICHEN NACH AKKU A LESEN UND IM ECHO AUSGEBEN EIN LDA STARE STATUS LESEN ANDA MASKE 0000 0001 #$01 BEQ EIN B0=0: KEIN ZEICHEN DA LDA DATRE 80=1: ZEICHEN LESEN IM ECHO AUSGEBEN BSR AUSZ RTS
Terminalmonitor:
Eingabe-Unterprogramme
340
COCB COCF C0D2 C0D5 C0D8 CODC CODF C0E3 C0E6 C0E8 COEC COEE COFO C0F4 C0F7 C0F9 COFB COFD COFF C101
6 Serielle Datenübertragung
10CE CC B7 F7 30 17 30 17 8D 30 6D 2A 30 17 20 A1 27 30 20 6E
C103 C10C C10D C10F C115 C116 C117 C119 C11A C11C C11D C11F C120 C122
C800 6311 C900 C900 8D 0027 FF3F 8D 002A FF38 D6 8D 002A 84 09 8D 001B FF27 E6 80 04 02 EB 94 4D 04 3E 46 04 46 C123 44 C14B 53 C173 47 C1B0 FF
Bild 6 - 1 8 :
C123 C126 C128 C12A C12D C12F C131 C134 C136 C138 C13A C13D C13F C141 C143 C145 C147 C149
17 25 1F 17 25 1F 17 25 34 ED 10A3 26 AC 23 35 20 35 20
Terminalmonitor:
FF53 C8 01 FF4C C1 02 FF45 BA 20 84 81 08 E4 F5 20 98 20 A5
Bild 6 - 1 9 :
* B I L D 6 - 1 8 TERMINALMONITOR HAUPTPROGRAMM START LOS #$C800 STAPELZEIGER LADEN LDD #$6311 STEUERBVTES A C I A STA STARE A C I A RESET STB STARE A C I A BETRIEBSART LEAX TEXT1,PCR T E X T : M 0 N I - 6 8 0 9 LBSR AUST AUSGEBEN LOOP LEAX TEXT2,PCR TEXT: EINGABEZEICHEN LBSR AUST AUSGEBEN BSR EIN BENUTZERKENNBUCHSTABEN FUER I LEAX TAB,PCR ANFANGSADRESSE SPRUNGTABELLE L00P1 TST X ENDEMARKE $FF TESTEN BPL L00P2 N E I N : K E I N E ENDEMARKE DA B7=l LOOPF LEAX TEXT3,PCR TEXT: FEHLER AUST AUSGEBEN LBSR BRA LOOP NEUE EINGABE L00P2 CMPA BUCHSTABEN VERGLEICHEN X+ BEQ L00P3 GEFUNDEN: SPRINGEN LEAX 2 ,X NICHT GEFUNDEN ADRESSE + 2 BRA WEITER SUCHEN L00P1 JMP L00P3 NACH KOMMANDO SPRINGEN [XJ * TEXTE UND SPRUNGTABELLE TEXT1 FCC 'MONI-6809' FCB 4 TEXT2 FCB '>,4 TEXT3 'FEHLER' FCC FCB 4 TAB FCB 'F FILL-KOMMANDO FKOM FDB 'D FCB DUMP-KOMMANDO DKOM FDB FCB 'S SUBSTITUTE-KOMMANDO FDB SKOM FCB 'G GO-KOMMANDO GKOM FDB FCB $FF ENDEMARKE
Hauptprogramm
* B I L D 6 - 1 9 TERMINALMONITOR BEREICH FUELLEN ANFANGSADRESSE LESEN EINAD FKOM LBSR FEHLER. K E I N E HEXAZAHL LOOPF BCS ANFANGSADRESSE NACH X TFR D,X EINAD ENDADRESSE LESEN LBSR LOOPF FEHLER: K E I N E HEXAZAHL BCS ENDADRESSE NACH Y D,Y TFR EINAD 2-BYTE-MUSTER LESEN LBSR FEHLER: K E I N E HEXAEINGABE LOOPF BCS ENDADRESSE NACH STAPEL Y PSHS X MUSTER SPEICHERN FK0M1 STD GESPEICHERTEN WERT VERGLEICHEN X++ CMPD FKOMF FEHLER: UNGLEICH K E I N RAM BNE S LAUFENDE ADRESSE M I T ENDADRESSE CMPX FK0M1 K L E I N E R : WEITER BLS Y GROESER PULS BRA NEUE EINGABE LOOP FEHLERAUSGANG FKOMF PULS Y FEHLERMELDUNG BRA LOOPF
T e r m i n a l m o n i t o r : Bereich füllen
VERGLEICHEN
341
6.4 Der Entwurf eines Terminalmonitors
Das in Bild 6 - 1 8 d a r g e s t e l l t e mit einem
Anfangswert
im
Hauptprogramm
RAM-Bereich
Meldung aus. Um das Programm
lädt den
System-Stapelzeiger
des Benutzers und gibt dann e i n e
verschieblich zu g e s t a l t e n , wurde mit dem
B e f e h l L E A X T E X T , P C R die befehlszählerrelative
Datenadressierung
gewählt.
Die V e r a r b e i t u n g s s c h l e i f e LOOP gibt auf dem Bildschirm e i n e Marke aus, hinter der der Benutzer mit einem Kennbuchstaben das auszuführende Kommando a u s wählt.
Die
Verzweigung
Sprungtabelle, ausdehnen
in
die vier Kommandos
geschieht
mit
Kennbuchstaben
und
Kommandos
und Sprungtabelle liegen hinter dem
unbedingten
die sich leicht auf
l ä ß t . Die T e x t e
weitere
Hilfe
einer
Sprungbefehl. Das in Bild 6 - 1 9 d a r g e s t e l l t e F - K o m m a n d o wird mit dem Kennbuchstaben " F " für Fill gleich Fülle a u f g e r u f e n . Es füllt einen S p e i c h e r b e r e i c h von einer Anfangsadresse bis zu e i n e r Endadresse mit einem B i t m u s t e r aus 16 h e x a d e z i mal einzugebenden B i t s . Es wird vorzugsweise dazu verwendet, nach dem E i n s c h a l t e n der Versorgungsspannung den R A M - S p e i c h e r mit einem Anfangswert zu füllen. Durch V e r g l e i c h e n des e i n g e s c h r i e b e n e n W e r t e s kontrolliert das Programm, ob der S p e i c h e r b e r e i c h b e s c h r e i b b a r i s t .
C14B CHE C150 C152 C154 C157 C159 C15B C15D C160 C162 C164 C167 C168 C16A C16C C16E C170
17 25 C4 1F 17 25 CA 34 17 C6 A6 17 5A 26 AC 23 35 16
FF2B AO F0 01 FF22 97 OF 06 FED5 10 80 FEE3 F8 E4 EF 06 FF6C
Bild 6 - 2 0 :
* BILD 6-20 DK0M LBSR BCS ANDB TFR LBSR BCS ORB PSHS DK0M1 LBSR LDB DK0M2 LDA LBSR DECB BNE CMPX BLS PULS LBRA
TERMINALMONITOR BEREICH AUSGEBEN EINAO ANFANGSADRESSE LESEN L00PF FEHELR: KEINE HEXAZAHL #$F0 ANFANGSADRESSE ABRUNDEN NACH X-REGISTER D,X EINAD ENDADRESSE LESEN L00PF FEHLER: KEINE HEXAZAHL #$0F ENDADRESSE AUFRUNDEN A,B ENDADRESSE NACH STAPEL AUSAD NEUE ZEILE UND ADRESSE AUSGEBEN #16 16 BYTES PRO ZEILE X+ BYTE LADEN AUSL LEERZEICHEN UND BYTE AUSGEBEN ZAEHLER - 1 DK0M2 S LAUFENDE ADRESSE MIT ENDADRESSE DK0M1 A,B REGISTER ZURUECK LOOP VERARBEITUNGSSCHLEIFE
T e r m i n a l m o n i t o r : B e r e i c h ausgeben
Das in Bild 6 - 2 0 d a r g e s t e l l t e D - K o m m a n d o wird mit dem Kennbuchstaben " D " für
Dump
gleich
Speicherauszug
a u f g e r u f e n . Es gibt einen
Speicherbereich
hexadezimal von einer Anfangsadresse bis zu einer Endadresse auf dem T e r m i nal aus. Dabei erscheinen immer 16 B y t e s auf einer Z e i l e . Am Anfang der Z e i le s t e h t die Adresse des e r s t e n B y t e s . Das in Bild 6 - 2 1 d a r g e s t e l l t e S - K o m m a n d o wird mit dem Kennbuchstaben
"S"
für Substitute gleich e r s e t z e a u f g e r u f e n . Es gibt zunächst die Adresse und den Inhalt des adressierten B y t e s g e f o l g t von einem " - " auf einer neuen Zeile aus.
342
6 Serielle
C173 C176 C17A C17C C17F C181 C184 C186 C189 C18C C18E C190 C192 C194 C197 C199 C19B C19D C19F C1 AI C1A3 C1A5 C1A7 C1A9 C1AD
17 1025 1F 17 A6 17 86 17 17 25 A7 AI 27 16 81 26 30 20 81 26 30 20 81 1027 16
Datenübertragung
* BILD 6-21 TERMINALMONITOR BYTES ANZEIGEN UND EINGEBEN SK0M LBSR EINAD ANFANGSADRESSE LESEN L00PF LBCS FEHLER: KEINE HEXAEINGABE TFR D ,X ADRESSE NACH X-REGISTER SK0M1 LBSR AUSAD NEUE ZEILE UND ADRESSE AUSGEBEN LDA X ALTES BYTE LADEN AUSL LBSR UND MIT LEERZEICHEN AUSGEBEN LDA MARKE "-" # ' LBSR AUSZ AUSGEBEN LBSR EIN2 VERSUCH NEUES BYTE ZU LESEN KEIN HEXAZEICHEN; STEUERZEICHEN ? BCS SK0M2 STA X NEUES BYTE SPEICHERN CMPA X+ VERGLEICHEN OB ANGEKOMMEN BEQ SK0M1 GLEICH: NAECHSTES BYTE LBRA L00PF UNGLEICH: FEHLER KEIN RAM SK0M2 CMPA LEERZEICHEN ? #$20 NEIN: WEITER VERGLEICHEN BNE SK0M3 LEAX ADRESSE + 1 1 ,x BRA SK0M1 SK0M3 CMPA MINUSZEICHEN ? # ' BNE SK0M4 NEIN: WEITER SUCHEN LEAX ADRESSE - 1 -1 ,x BRA SK0M1 SK0M4 CMPA #$0D CR = WAGENRUECKLAUF ? LBEQ LOOP JA: ENDE DES KOMMANDOS LBRA L00PF NEIN: FEHLER
FF03 FF76 01 FEB6 84 FEC6 2D FEE1 FF01 09 84 80 E8 FF59 20 04 01 DD 2D 04 1F D5 OD FF32 FF40
*
T e r m i n a l m o n i t o r : B y t e s a n z e i g e n und e i n g e b e n
Bild 6 - 2 1 :
E n t s p r e c h e n d B i l d 6 - 1 3 sind nun vier U n t e r k o m m a n d o s m ö g l i c h . D a s P r o g r a m m versucht
z u n ä c h s t , ein n e u e s
das kein neues
Byte eingibt,
B y t e zu l e s e n . Im F a l l e e i n e s erscheint
jedoch
= 1, da es s i c h um ein N i c h t - H e x a d e z i m a l z e i c h e n sucht
das P r o g r a m m
terscheiden.
Unterkommandos,
als F e h l e r m e l d u n g das
Carrybit
h a n d e l t e . In d i e s e m F a l l v e r -
m i t V e r g l e i c h s b e f e h l e n , d i e d r e i U n t e r k o m m a n d o s zu u n -
Nach der
E i n g a b e von z w e i g ü l t i g e n H e x a d e z i m a l z i f f e r n w i r d d a s
e i n g e g e b e n e B y t e a b g e s p e i c h e r t und d u r c h e i n e n V e r g l e i c h k o n t r o l l i e r t . K o n n t e es
nicht
gespeichert
Schreib/Lesespeicher abgebrochen. durch von
weil
z.B.
wird
das K o m m a n d o
auf
der
eingegebenen mit
einer
Adresse
der
erlauben
Startadresse
in
den
Befehlszähler.
Kenn-
d a s S e t z e n von H a l t e p u n k t e n
Benutzerregistern
und
eine
( B r e a k p o i n t s ) , das
Programmverfolgung
im
C1B0 17 FEC6 C1B3 1025 FF39 C1B7 1F 05
starten
La-
Einzelschritt
* BILD 6-22 TERMINALMONITOR PROGRAMM STARTEN GKOM LBSR EINAD STARTADRESSE LESEN LBCS L00PF FEHLER: KEINE HEXAEINGABE TFR D,PC START DES BENÜTZERPROGRAMMS END
Terminalmonitor: Programm
ein-
Aufwendigere
(Tracing).
Bild 6 - 2 2 :
kein
Fehlermeldung
f ü r G O g l e i c h G e h e a u f g e r u f e n . Es s t a r t e t d a s P r o g r a m m
Speichern
Startprogramme den
so
D a s in B i l d 6 - 2 2 d a r g e s t e l l t e G - K o m m a n d o w i r d m i t d e m
buchstaben " G " fach
werden, liegt,
7
Datenerfassung und Datenverarbeitung
Dieser Abschnitt gibt einen Einblick in den Aufbau und in die A r b e i t s w e i s e von A n a l o g / D i g i t a l - und Digital/Analogwandlern sowie von A r i t h m e t i k p r o z e s s o r e n , mit denen die M e ß w e r t e a u s g e w e r t e t werden können.
7.1
Verarbeitung analoger Daten
A n a l o g e Daten t r e t e n in der M e ß - und Regelungstechnik als Spannungen oder S t r ö m e bzw. als veränderliche Widerstände auf. Sie müssen zur
Verarbeitung
im Mikrocomputer aus der analogen in die d i g i t a l e Darstellung u m g e s e t z t w e r den. U m g e k e h r t ist es nötig, d i g i t a l e Ergebnisse wieder in analoge Größen zu verwandeln.
Der
folgende
Abschnitt
zeigt
die
wichtigsten
Umwandlungsver-
fahren.
7.1.1
Widerstands-Frequenz-Umsetzung
+5V
R, = 6 K
i
*
c = 0,1 pF
1 =
(R1 • 2R2) • C '1
r
NTC
«n
(1 * 2-6)-105-0,1*10'
>1
-6 =1,1 kHz
_3
f. aus
10 nF
PB7 Bild 7 - 1 :
Temperatur-Frequenz-Umsetzung
344
7 Datenerfassung und Datenverarbeitung
Viele M e ß a u f g a b e n lassen sich auf Sensoren ( F ü h l e r ) z u r ü c k f ü h r e n , d e r e n W i d e r s t a n d s w e r t von der zu messenden G r ö ß e ( T e m p e r a t u r , S t r a h l u n g , M a g n e t f e l d , Druck) a b h ä n g t . Ein Beispiel ist d e r N T C - W i d e r s t a n d , dessen W i d e r s t a n d s w e r t mit s t e i g e n d e r T e m p e r a t u r a b n i m m t . Bringt man den M e ß w i d e r s t a n d als f r e q u e n z b e s t i m m e n d e Größe in eine O s z i l l a t o r s c h a l t u n g , so wird die T e m p e r a t u r in eine F r e q u e n z u m g e s e t z t , die mit einem Programm g e m e s s e n w e r d e n k a n n . Dieser Abschnitt zeigt a l s Beispiel die Messung e i n e r T e m p e r a t u r mit einem N T C - W i d e r s t a n d . Als M i k r o c o m p u t e r dient das im A b s c h n i t t 3.8 e n t w o r f e n e Übungssystem. Bild 7 - 1 zeigt als M e ß f ü h l e r einen N T C - W i d e r s t a n d , der d i e F r e q u e n z am Ausgang eines Multivibrators b e s t i m m t . Mit den g e w ä h l t e n B a u t e i l e n ergibt sich eine Ausgangsfrequenz bei R a u m t e m p e r a t u r von e t w a 1 KHz, die dem Eingang einer P a r a l l e l s c h n i t t s t e l l e z u g e f ü h r t wird. Das Signal hat T T L - P e g e l und kann von einem Programm a u s g e w e r t e t w e r d e n . Bild 7 - 2 zeigt den Z u s a m m e n h a n g zwischen d e r zu m e s s e n d e n T e m p e r a t u r , dem Widerstand des M e ß f ü h l e r s und der A u s g a n g s f r e q u e n z .
Bild 7 - 2 :
Zusammenhang
Widerstand-Frequenz-Temperatur
Mit s t e i g e n d e r T e m p e r a t u r n i m m t d e r Widerstand des Fühlers ab und die F r e quenz s t e i g t an; T e m p e r a t u r und Frequenz sind in einem gewissen Bereich p r o p o r t i o n a l . Bei einer g e n a u e n Messung des Z u s a m m e n h a n g e s zwischen T e m p e r a tur und F r e q u e n z zeigen sich besonders an den Grenzen des M e ß b e r e i c h e s Nicht l i n e a r i t ä t e n , die besonders b e r ü c k s i c h t i g t werden müssen. Die Frequenz kann mit dem in Abschnitt 4.6.4 b e s c h r i e b e n e n Programm Bild 4 - 7 7 g e m e s s e n w e r den. Dabei e r s c h e i n t die Frequenz als 8 - B i t - E r g e b n i s eines Z ä h l e r s . Die U m wandlung in die T e m p e r a t u r kann durch e i n e n d i r e k t e n Tabellenzugriff (Bild 4 - 9 7 ) e r f o l g e n . Der Zähler ist dabei die n i e d e r w e r t i g e Adresse eines 8 - B i t A u s g a b e w e r t e s , der als zweistellige BCD-Zahl a b g e s p e i c h e r t w e r d e n k a n n . D a mit e n t f a l l e n alle U m r e c h n u n g e n von Z ä h l e r s t a n d in Frequenz und von F r e q u e n z in T e m p e r a t u r . Die T a b e l l e muß durch e i n e Messung über den g e s a m t e n B e reich e r m i t t e l t w e r d e n . N i c h t l i n e a r i t ä t e n werden dabei a u t o m a t i s c h b e r ü c k sichtigt.
7.1 Verarbeitung analoger Daten
345
7.1.2 Beispiel eines Analog/Digitalwandlers
2 N 42 7 R - 2 R - Netzwerk
URe» Schalter
=3=
=f= 1f)F 2,56V
1 i
Zähler ( s u k z e s s i v e A p p r o x . )
Analog Eingang
A u s g a n g s t r e i b e r itristote]
1
2,55V
-IbV: 22UK
DO
n7 u/
EX 51
Datenbus
Bild 7-3: Blockschaltplan des A/D-Wandlers ZN 427 Bild 7 - 3 zeigt als Beispiel für einen Analog/Digitalwandler den Blockschaltplan des A/D-Wandlers ZN 427, dessen Funktionsweise bereits im Abschnitt 3.5.6 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 a r b e i t e t 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 Umwandlungstäktes muß unter 1 MHz liegen. Bild 7 - 4 zeigt die Startbedingungen. Die steigende Flanke des Startimpulses leitet die Umwandlung ein; die f a l l e n de Flanke des Taktsignals muß mindestens 200 ns vor und hinter dieser Flanke liegen. Bild 7 - 5 zeigt das Impulsdiagramm f ü r den Betrieb des Wandlers mit dem Mikroprozessor 6809. Der Umwandlungstakt CLK des Wandlers wird abgeleitet vom Takt Q des P r o zessors, der durch einen einstellbaren Frequenzteiler im Verhältnis 2:1 bzw. 4:1 heruntergeteilt werden kann. Der Startimpuls wird durch einen Schreibbefehl erzeugt, der jedoch keine Daten ü b e r t r ä g t . Bei einem Teilerverhältnis von 2:1 müssen vor dem Lesen 9 Wandlertakte entsprechend 18 Prozessortakten a b laufen. Dies kann z.B. durch 8 NOP-Befehle erreicht werden. Der Ladebefehl, mit dem die umgewandelten Daten abgeholt werden, erzeugt dann den 9. Wandlertakt. Der in Bild 7 - 6 dargestellte Analogteil des Wandlers hat einen Ersatz-Innenwiderstand von 4 KOhm; der Ersatz-Außenwiderstand soll ebenfalls 4 KOhm betragen. Im unipolaren Betrieb nach Bild 7-6a liegt am Eingang ein
346
7 Datenerfassung
und
Datenverarbeitung
Wandlertakt
CLK
f mIHaX a v = 1 MHz
J>- >200ns-,' >200ns , •
'
sc (WE)
11 Startimpuls
250ns —> •
© Bild 7 - 4 :
-500-
(D
Startbedingungen des A/D-Wandlers ZN 427
-1000ns 250 - 2 5 0
CLK
1. Takt
2250 SC
,'250
-1750
Startimpuls
Bild 7 - 5 :
Betrieb des A/D-Wandlers ZN 427 mit dem Prozessor 6809
Spannungsteiler, der die Eingangsspannung auf 2,55 Volt h e r u n t e r t e i l t ; dies e n t s p r i c h t der auf dem Baustein e r z e u g t e n Vergleichsspannung. Die Schaltung nach Bild 7 - 6 b ist für bipolaren Betrieb b e s t i m m t .
347
7.1 Verarbeitung analoger Daten
390 1jjF 1M Vref;n | |680K
R j fl8K
R,
8K
a. ZN 427 Bild 7 - 6 :
7.1.3
255V
Vrefou, ZN 427
"1 A/D-Wandler n
b. ZN 427
unipolarer Betrieb
bipolarer Betrieb
A n a l o g t e i l des A / D - W a n d l e r s Z N 427
Beispiel eines Digital/Analogwandlers
• 5V
Bild 7 - 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 Z N 428
Bild 7 - 7 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 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
s p r o c h e n w u r d e . Er w a n d e l t
einen digitalen
den B l o c k s c h a l t p l a n
im A b s c h n i t t
3.5.6
bis 11111111 in e i n e a n a l o g e Ausgangsspannung von 0 bis 2,55 V o l t u m . Baustein e n t h ä l t 2,55
Volt
Der
einen E i n g a n g s s p e i c h e r , d e r 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 neuer 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 von
be-
8 - B i t - E i n g a n g s w e r t von 00000000
liegt
die
Ausgangsspannung
ebenfalls
bei
Vergleichsspannung m a x i m a l 2,55
Volt.
7 Datenerfassung und
348
Bild 7-8:
Datenverarbeitung
Analogteil des D/A-Wandlers ZN 428
Der Analogteil des Wandlers hat einen Ersatz-Innenwiderstand von 4 KOhm. Bild 7 - 8 zeigt zwei Ausgangsschaltungen für bipolaren und unipolaren Betrieb unter Verwendung eines Operationsverstärkers.
7.2
Die Analogperipherie des Übungssystems
Das in Abschnitt 3.8 beschriebene Übungssystem enthält einen Analog/DigitalWandler ZN 427 auf der Adresse $C810 und einen Digital/Analogwandler ZN 428 auf der Adresse $C820. Die Bilder 3-101 und 3-102 zeigen die Schaltung und den Adreßplan. In den folgenden Beispielen wird die gesamte Peripherie mit Hilfe des Direkt-Seiten-Registers mit der direkten (verkürzten) Adressierung angesprochen.
* BILD
cooo C002 C004 C006 C008 C00B COOD C010 C012 C014 C016 C018
86 1F OF OF
CC DD CC DD 96 97 97 20
C8 8B 81 83 FF04 80 0004 82 82 80 20 F8
START
LOOP
7 - 9 A B G L E I C H DES D / A - W A N D L E R S SETDP $C8 PERIPHERIE DIREKT ADRESSIERT $C000 ADRESSZAEHLER ORG LOA #$C8 DIREKT-SEITE A,DP NACH D I R E K T - S E I T E N - R E G I S T E R TFR $C881 STEUERREGISTER L0ESCHEN CLR $C883 STEUERREGISTER L0ESCHEN CLR LDD #$FF04 AUSGABE PROGRAMMIEREN STD $C880 LDD #$0004 EINGABE PROGRAMMIEREN STD $C882 DIGITALE EINGABE LDA $C882 $C880 D I G I T A L E AUSGABE STA STA $C820 ANALOGE AUSGABE BRA LOOP TESTSCHLEIFE END
Bild 7-9: Programmbeispiel: Abgleich des D/A-Wandlers
7.2 Die Analogperipherie des Übungssystems
349
Bild 7 - 9 zeigt ein Programmbeispiel zum Abgleich des Digital/Analogwandlers. Der an den Kippschaltern eingestellte digitale Wert wird analog am Wandlerausgang ausgegeben. Die binäre Ausgabe auf den Leuchtdioden dient zur Kontrolle. Mit diesem Programm können Nullpunkt und Verstärkung der Ausgangsschaltung eingestellt werden.
00C8 cooo cooo C002 C004 C005 C007 C008
86 1F 4F 97 4C 20
C8 8B 20 FB
* BILD 7-10 AUSGABE EINES SAEGEZAHNS SETDP $C8 PERIPHERIE DIREKT ADRESSIERT ADRESSZAEHLER ORG $C000 #$C8 DIREKTE ADRESSE START LDA NACH DIREKT-SEITEN-REGISTER TFR A,DP CLRA LOOP STA $C820 4 ZYKLEN: ANALOGE AUSGABE 2 ZYKLEN: WERT + 1 INCA BRA LOOP 3 ZYKLEN: SCHLEIFE END
Bild 7-10: Programmbeispiel: Ausgabe einer Sägezahnkurve
Mit dem Programmbeispiel Bild 7 - 1 0 kann die Linearität der Ausgangsspannung mit einem Oszilloskop kontrolliert werden. Es erscheint eine sägezahnförmige Ausgangsspannung mit einer Periodendauer von ca. 2,3 ms.
C000 COOO C002 C004 C006 C008 C00B C00D C010 C012 C013 C015 C017 C019 C01A C01B C01C C01D C01F
86 1F OF OF CC DD CC DD 4F 97 97 97 12 12 12 12 96 20
C8 8B 81 83 FF04 80 0004 82 10 20 80
10 F2
* BILD 7 - 1 1 ABGLEICH DES A/D-WANDLERS SETDP $C8 DIREKT S E I T E EINSTELLEN $COOO ORG ADRESSZAEHLER DIREKT-SEITEN-REGISTER START LDA #$C8 TFR LADEN A,DP $C881 CLR STEUERREGISTER L0ESCHEN $C883 CLR STEUERREGISTER L0ESCHEN #$FF04 LDD AUSGABE PROGRAMMIEREN STD $C880 EINGABE LDD #$0004 PROGRAMMIEREN STD $C882 CLRA LOOP STA $C810 START DER UMWANDLUNG STA $C820 1. UND 2 . SCHRITT UND ANALOGE AUSGABE STA $C880 3. UND 4 . SCHRITT UND DIGITALE AUSGABE NOP 5 . SCHRITT NOP 6 . SCHRITT NOP 7 . SCHRITT NOP 8 . SCHRITT 9 . SCHRITT UND ANALOGE EINGABE LDA $C810 SCHLEIFE BRA LOOP END
Bild 7-11: Programmbeispiel: Abgleich des A/D-Wandlers
Mit dem in Bild 7-11 dargestellten Testprogramm läßt sich die Eingangsschaltung des Analog/Digitalwandlers abgleichen. Die am Eingang anliegende a n a l o ge Spannung wird auf den Leuchtdioden ausgegeben. Die analoge Ausgabe auf dem Digital/Analogwandler dient der Kontrolle. Legt man an den Eingang des A/D-Wandlers eine zeitlich veränderliche Spannung, z.B. die sinusförmige Spannung eines Funktionsgenerators, so kann am Ausgang des D/A-Wandlers der zurückgewandelte analoge Wert mit einem Oszilloskop beobachtet werden.
350
7 Datenerfassung und Datenverarbeitung
cooo cooo 86 C002 C004 C007 C008 COO A C00B COOC COOD COOE COOF C010
con
C012 C014 C016 C017 C019
00C8
1F 8E 5F 97 12 12 12 12 1212 12 12 96 A7 5A 26 20
C8 8B F000 10
10 80 EF E9
* BILD 7-12 SPEICHERN EINES ANALOGEN SIGNALS DIREKT S E I T E EINSTELLEN SETDP $C8 $COOO ADRESSZAEHELR ORG #$C8 DIREKT SEITEN REGISTER START LOA LADEN A,DP TFR #$F000 ANFANG DATENSPEICHER LDX LOOP1 ZAEHLER L0ESCHEN CLRB $C810 START DER UMWANDLUNG L00P2 STA 1. SCHRITT NOP 2 . SCHRITT NOP 3. SCHRITT NOP 4 . SCHRITT NOP 5. SCHRITT NOP 6 . SCHRITT NOP 7. SCHRITT NOP 8 . SCHRITT NOP $C810 9. SCHRITT UND ANALOGWERT LADEN LDA SPEICHERN X+ STA ZAEHLER - 1 DECB L00P2 BNE L00P1 ENDE DES SPEICHERS BRA *
Bild 7 - 1 2 :
P r o g r a m m b e i s p i e l : Speichern eines a n a l o g e n Signals
D a s P r o g r a m m b e i s p i e l Bild 7 - 1 2 t a s t e t d i e E i n g a n g s s p a n n u n g m i t e i n e r A b t a s t r a t e von 33 T a k t e n o d e r 33 p s (bei 1 MHz) a b u n d s p e i c h e r t d i e d i g i t a l e n W e r t e in e i n e m f o r t l a u f e n d e n S p e i c h e r b e r e i c h von $ F 0 0 0 b i s $ F 0 F F . D i e S p e i c h e rung e r f o l g t z y k l i s c h b i s zum A b b r u c h m i t e i n e m R e s e t o d e r e i n e m I n t e r r u p t . D a s in Bild 7 - 1 3 d a r g e s t e l l t e A u s g a b e p r o g r a m m g i b t d i e g e s p e i c h e r t e K u r v e auf d e m D / A - W a n d l e r w i e d e r a u s . F ü l l t m a n d e n S p e i c h e r b e r e i c h m i t d e n T a b e l l e n w e r t e n e i n e r b e l i e b i g e n F u n k t i o n , so k a n n d i e s e z y k l i s c h auf d e m O s zilloskop a u s g e g e b e n w e r d e n . Legt m a n a b w e c h s e l n d die Werte $00 und $ F F a b , so läßt s i c h d a s E i n s c h w i n g v e r h a l t e n d e s D i g i t a l / A n a l o g w a n d l e r s z u s a m m e n mit dem A u s g a n g s - O p e r a t i o n s v e r s t ä r k e r u n t e r s u c h e n .
OOC8 C100 C100 C102 C104 C107 C108 C10A C10C C1 OD C10F
86 1F 8E 5F A6 97 5A 26 20
Bild 7 - 1 3 :
C8 8B F000 80 20 F9 F3
* BILD 7-13 ANALOGE AUSGABE EINES GESPEICHERTEN SIGNALS SETDP $C8 DIREKT SEITE EINSTELLEN ORG $C100 ADRESSZAEHLER AUS LDA #$C8 DIREKT SEITEN REGISTER TFR A ,DP LADEN L00P3 LDX #$F000 ANFANG AUSGABESPEICHER CLRB ZAEHLER L0ESCHEN L00P4 LDA X+ DIGITALWERT LADEN STA $C820 ANALOG AUSGEBEN DECB ZAEHLER - 1 BNE L00P4 AUSGABESCHLEIFE BRA L00P3 WEITER AM SPEICHERANFANG END
P r o g r a m m b e i s p i e l : A u s g a b e des g e s p e i c h e r t e n
Signals
7.3
7.3
Aufbau
und Arbeitsweise
eines
351
Arithmetikprozessors
A u f b a u und Arbeitsweise eines Arithmetikprozessors
Wie b e r e i t s im Abschnitt 4.8 gezeigt e n t h ä l t der Befehlssatz des Mikroprozessors 6809 nur Befehle zur Addition, Subtraktion und Multiplikation von 8 - B i t Dualzahlen. Bei den Prozessoren 6800 und 6802 sowie bei den meisten anderen 8-Bit-Mikroprozessoren f e h l t ein Multiplikationsbefehl. Im Bereich der t e c h n i schen Anwendungen muß jedoch sehr o f t mit h ö h e r e r Stellenzahl g e r e c h n e t w e r d e n . Die anwendungsorientierten P r o g r a m m i e r s p r a c h e n wie z.B. BASIC, FORTRAN oder PASCAL kennen die D a t e n t y p e n INTEGER (ganzzahlig) als v o r z e i c h e n b e h a f t e t e Dualzahlen von 16 oder 32 Bit Länge und REAL (reell) in einer Gleitkommadarstellung (Floating Point). Sie e r w e i t e r t den Zahlenbereich auf größer Für technische Berechnungen sind zusätzlich die Wurzelfunktion sowie die trigonometrischen und die logarithmischen Funktionen e r f o r d e r lich. Trotz a u s g e f e i l t e r m a t h e m a t i s c h e r N ä h e r u n g s v e r f a h r e n , die jedoch alle auf die Grundrechnungsarten von 8 - B i t - D u a l z a h l e n z u r ü c k g e f ü h r t werden m ü s sen, rechnet man mit c a . 20 bis 100 ms f ü r die Quadratwurzel aus einer 3 2 B i t - R E A L - Z a h l in Gleitpunktdarstellung. Durch Anwendung eines A r i t h m e t i k prozessors läßt sich die Wurzeloperation j e nach verwendeten Prozessor auf 400 bis 40 |os h e r u n t e r d r ü c k e n . Bild 7 - 1 4 zeigt die Anschlußbelegung und den Blockschaltplan des Arithmetikprozessors Am 9511A, der sich wie ein n o r m a l e r Peripheriebaustein verhält und mit jedem 8 - B i t - oder 16-Bit-Mikroprozessor z u s a m m e n a r b e i t e n kann. Der Arithmetikprozessor 8087 der 8 0 8 6 - B a u s t e i n f a m i lie kann nur an die Prozessoren dieser Familie angeschlossen werden.
GND +5V EACK SVACK
SVRH5 frei frei -> DO -> D1 -> D2 -> D3 -> D4
1 2 3 4 5 6 7 8 9 10 11 12
9511A
24 23 22 21 20 19 18 17 16 15 14 13
END -> CLK < RES < C/D < EE < WR < CS < -
Kommandoregister
Datenregister
AblaufSteuerung
ALU
Datenstapel Statusregister
(16 Bytes)
und Konstanten
Register
PAUSE ->
+ 12V D7 < - > D6 < - > D5 < - >
Bussteuerung
Anschlußsteuerung
Datenbustreiber
Am 9511A
CS UD HR C/D PAUSE
Bild 7-14:
CLK RESET SVACK SVREQ EACK END
D7
DO
Aufbau und Anschluß des Arithmetikprozessors Am 9511A
Die A r i t h m e t i s c h - L o g i s c h e Einheit (ALU) und die A r b e i t s r e g i s t e r (Akkumulat o r e n ) des Arithmetikprozessors sind 16 Bit b r e i t . Der Ablauf der a r i t h m e t i schen Operationen wird von einer f e s t e n Ablaufsteuerung (Mikroprogramm) g e -
7 Datenerfassung und Datenverarbeitung
352
steuert. lungen
Die Zahlenkonstanten stehen
Operanden
in e i n e m
(Pi, e ) und K o e f f i z i e n t e n der
internen
Konstantenspeicher.
verarbeitenden
( Z a h l e n ) w e r d e n in ein 8 - B i t - D a t e n r e g i s t e r g e s c h r i e b e n und g e l a n -
gen n a c h e i n a n d e r in e i n e n i n t e r n e n S t a p e l , der m a x i m a l kann.
Reihenentwick-
D i e zu
Durch S c h r e i b e n
auszuführende
eines Steuerbytes
arithmetische
Operation
16 B y t e s a u f n e h m e n
in das K o m m a n d o r e g i s t e r
gestartet.
Sie
läuft
wird die
unabhängig
vom
Mikroprozessor z e i t l i c h p a r a l l e l zur Ausführung e i n e s M i k r o c o m p u t e r p r o g r a m m s a b . D a s Ende der O p e r a t i o n kann e n t w e d e r durch A b f r a g e n des S t a t u s r e g i s t e r s oder durch e i n e n Interrupt über zwei S t e u e r a u s g ä n g e des erkannt
werden.
Durch
Arithmetikprozessors
L e s e n des D a t e n r e g i s t e r s werden die E r g e b n i s s e aus
dem S t a p e l g e h o l t .
RD
UR
Funktion
L L H H
H L H L
L H L H
Datenbyte nach Operandenstapel schreiben Datenbyte aus Operandenstapel lesen Operation nach Kommandoregister und Start Status der Verarbeitung lesen
Die R e g i s t e r a d r e s s e n des A r i t h m e t i k p r o z e s s o r s Am 9 5 1 1 A
Bild 7 - 1 5 :
Der
C/D
RESET-Eingang
ist
im
G e g e n s a t z zu den B a u s t e i n e n
der
68xx-Familie
aktiv HIGH. Der Eingang C S (aktiv L O W ) dient zur F r e i g a b e des B a u s t e i n s . Er wird
wie ein P e r i p h e r i e b a u s t e i n
an den
Ausgang e i n e s A d r e ß d e c o d e r s
ange-
s c h l o s s e n . Der Eingang C/D ( K o m m a n d o / D a t e n ) wird m i t der A d r e ß l e i t u n g AO verbunden und dient (WR)
zur
7-15)
.
zusammen
Auswahl der vier Der
(Ausführung
am A-l:
mit der L e s e l e i t u n g
dem P r o g r a m m i e r e r
CLK-Eingang
anliegende
( R D ) und
Schreibleitung
zugänglichen R e g i s t e r
Takt
beträgt
3 M H z ) . Er kann a s y n c h r o n zum T a k t des
maximal
(Bild
2
MHz
Mikroprozessors
und d a m i t zu den R D - und W R - S i g n a l e n v e r l a u f e n . Die S y n c h r o n i s a t i o n b e i d e r P r o z e s s o r e n e r f o l g t durch den P A U S E - A u s g a n g , der kurzzeitig auf LOW g e h t , wenn
eine
Datenübertragung
über den
Datenbus s t a t t f i n d e t . Dieser
Zustand
kann bis zu 6 ps a n d a u e r n . E i n z e l h e i t e n müssen dem D a t e n b l a t t des H e r s t e l l e r s (Advanced
Micro
Devices)
entnommen
werden.
Ein L O W - Z u s t a n d
am
END-
Ausgang zeigt das Ende e i n e r O p e r a t i o n a n . Mit e i n e m L O W - S i g n a l a m E A C K Eingang ( E N D A c k n o w l e d g e ) wird der Ausgang END w i e d e r auf HIGH z u r ü c k gesetzt. Liegt
EACK dauernd auf L O W , so gibt der E N D - A u s g a n g b e i m Ende
e i n e r O p e r a t i o n einen Impuls von e i n e r T a k t p e r i o d e a b . Im G e g e n s a t z zum E N D A u s g a n g , der
immer
das
Ende e i n e r
O p e r a t i o n m e l d e t , kann die A r b e i t
des
S V R E Q - A u s g a n g s ( S e r v i c e R e q u e s t ) durch das w e r t h ö c h s t e B i t des K o m m a n d o r e g i s t e r s g e s p e r r t und f r e i g e g e b e n w e r d e n . Mit dem S V A C K - E i n g a n g wird das S V R E Q - F l i p f l o p wieder z u r ü c k g e s e t z t . Mit den Signalen E N D bzw. S V R E Q kann also
der
Arithmetikprozessor
über e i n e n
m e l d e n ; das M i k r o c o m p u t e r p r o g r a m m
Interrupt das Ende e i n e r
Operation
b e s t ä t i g t die Ü b e r n a h m e der E r g e b n i s s e
über die E i n g ä n g e E A C K bzw. S V A C K . Bild 7 - 1 6 zeigt den Anschluß des A r i t h m e t i k p r o z e s s o r s Am 9 5 1 1 A an das Ü b u n g s s y s t e m mit dem Prozessor 6 8 0 9 .
7.3 Außau
Y1
A 1 0 RD
WR
AO
MRDY
und Arbeitsweise
eines
353
Arithmetikprozessors
RES
Bild 7-16:
Anschluß des Arithmetikprozessors an das Übungssystem
Durch den
Anschluß des Freigabeeingangs
CS an die Auswahlleitung
Y 1 und
die Adreßleitung A10 (Bild 3-101 und 3 - 1 0 2 ) ergeben sich die Adressen $CC00 für das D a t e n r e g i s t e r und $CC01 für das S t e u e r r e g i s t e r . Der P A U S E - A u s g a n g wird an den M R D Y - E i n g a n g
des Prozessors 6809 g e l e g t und verlängert damit
den Takt E des Mikroprozessors, bis der Arithmetikprozessor seine tragung abgeschlossen
Datenüber-
hat. Der Takt (2 M H z ) des Arithmetikprozessors
wird
über einen besonderen T a k t g e b e r e r z e u g t . Ein Anschluß an die T a k t e E bzw. Q des
Mikroprozessors
6809 ist nicht
m ö g l i c h , da in diesem Fall das
PAUSE-
Signal den Mikroprozessor blockieren würde. In dem vorliegenden Übungssystem wurde von der M ö g l i c h k e i t einer Interruptauslösung durch die Ausgänge und S V R E Q kein Gebrauch g e m a c h t , die Eingänge E A C K und S V A C K
END
wurden
f e s t auf L O W g e l e g t .
Durch Beschreiben des K o m m a n d o r e g i s t e r s (Bild 7 - 1 7 ) werden L ä n g e , F o r m a t und A r t der auszuführenden Operation f e s t g e l e g t . Diese wird g l e i c h z e i t i g
ge-
s t a r t e t . Mit dem werthöchsten Bit ( B 7 ) kann der S V R E Q - A u s g a n g gesperrt bzw. f r e i g e g e b e n w e r d e n . Durch T e s t e n der werthöchsten Bitposition B7 des Statusregisters kann ein Programm des Ende der Operation f e s t s t e l l e n . Die anderen Bitpositionen enthalten Angaben über V o r z e i c h e n , Null und Carry sowie einen F e h l e r c o d e . D i e zu verarbeitenden Zahlen w e r d e n entsprechend Bild 7 - 1 8 durch einen S c h r e i b b e f e h l auf den Operandenstapel g e l e g t . Der Stapel besteht aus 16 B y t e s und kann damit acht 2 - B y t e - O p e r a n d e n der
16-Bit-Festpunktarithmetik
oder vier 4 - B y t e - O p e r a n d e n der 3 2 - B i t - F e s t p u n k t - bzw. G l e i t p u n k t a r i t h m e t i k aufnehmen.
Die 1 6 - B i t - F e s t p u n k t a r i t h m e t i k von
- 3 2 768 bis
arbeitet
mit v o r z e i c h e n b e h a f t e t e n Dualzahlen
+32 767. Es stehen die vier Grundrechnungsarten
Subtraktion, Multiplikation und Division zur V e r f ü g u n g .
Addition,
354
7 Datenerfassung
und
Datenverarbeitung
Komnando-Format B7
B6
B5
B4
Länge Format SVREQ : gesp 0: 32 0 : G l e i t : f r e i 1: 16 1 :Festp
B3
B2
B1
B0
Operation 0 1 1 0 0 : Addition 0 1 1 0 1 : Subtraktion 0 1 1 1 0 : Multiplikation sowie weitere Funktionen
usw.
B e i s p i e l : Wurzelfunktion 32 B i t Gleitpunkt SVREQ g e s p e r r t : 0 0 0 0 0 0 0 1 =
$01
Statusregister B7 BUSV : ja : nein
Bild 7-17:
B6 Sign 0: + 1: -
B5 Zero 0:ne i n 1: ja
B4 £
B3
B2
B1
B0
Fehlercode ' Carry 0 0 0 0: kein Fehler 1 0 0 0: D i v i s i o n durch N U l i 0 1 0 0: neg. Argument bei Wurzel oder Log. 1 1 0 0: Argument zu groß x x 1 0: Unterlauf I x x 0 1: Überlauf
Aufbau des Kommando- und Statusregisters
Die 32-Bit-Festpunktarithmetik arbeitet mit vorzeichenbehafteten Dualzahlen von - 2 147 483 648 bis +2 147 483 647.Auch hier stehen die vier Grundrechnungsarten zur Verfügung. In der 32-Bit-Gleitpunktarithmetik wird die Dualzahl durch eine 24-BitMantisse und einen 6-Bit-Exponenten jeweils mit Vorzeichen dargestellt. Die Genauigkeit beträgt mindestens sieben Dezimalstellen, die Zahlenbereich e r streckt sich von -2.7E-20 bis +9.2E+18. Neben den vier Grundrechnungsarten gibt es eine Reihe von mathematischen Operationen (SQRT, SIN, COS, TAN, ASIN, ACOS, ATAN, LOG, LN, EXP und Exponentiation). Dazu kommen Operationen zur Umwandlung der D a t e n f o r m a t e und Stapelbefehle. Bild 7-19 zeigt abschließend ein Testprogramm, das zwei 4-Byte-Operanden in den Operandenstapel des Arithmetikprozessors bringt und eine Operation s t a r t e t , deren Code im Speicher abzulegen ist. Der Code der Wurzeloperation (SQRT) lautet z.B. $01. Die Warteschleife kontrolliert das Statusregister auf das Ende der Operation und zählt dabei die Durchläufe. Das Ergebnis wird aus dem Arithmetikprozessor in Speicher gebracht und kann dort zusammen mit dem Durchlaufzähler und dem Status ausgewertet werden.
7.3 Aufbau und Arbeitsweise eines
Arithmetikprozessors
Operandenstapel
schreiben
HIGH
lesen 32-Bit
LOW HIGH LOW
¡16-Bit
16-Bit-Festpunkt von - 32 768 bis + 32 767
32-Bit-Festpunkt von - 2 147 483 648 bis + 2 147 483 647
32-Bit-Gleitpunkt von - 2.7E-20 bis + 9.2E+18 bei 7 Dezimalstellen V V ME
Exponent 1 1 1 i
I iM' a, n. t, i, s. s, e
Beispiel : 4 dezimal = 100 dual = 0.U)0 2 x 2i = $03 80 00 00 t' 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
Bild 7 - 1 8 :
ojo
0 0 0 0 0 0 0 0 0
Aufbau des D a t e n s t a p e l s und D a t e n f o r m a t e
355
356
cooo cooo
7 Datenerfassung
CCOO CC01 F800
C014 C017 C019 C01C C01E C021 C024 C027 C029
10CE 8E 8D 8E 8D 8E B6 B7 30 B6 2B B7 BF 8E 8D 7E
C800 F001 23 F005 1E 0000 F000 CC01 01 CC01 F9 FOOD FOOE F009 13 F800
C02C C02E C030 C032 C034 C037 C038 C03A
34 30 C6 A6 B7 5A 26 35
16 04 04 82 CCOO
C03C C03E C040 C043 C045 C046 C048
34 C6 B6 A7 5A 26 35
16 04 CCOO 80
C004 C007 C009 COOC COOE
coi 1
F000 F000 F001 F005 F009 FOOD FOOE
Bild 7-19:
F8 96
F8 96
0001 0004 0004 0004 0001 0001
und
Datenverarbeitung
7 - 1 9 TESTPROGRAMM ARITHMETIKPROZESSOR DATENREGISTER STAPEL $CCOO EQU STEUERREGISTER/STATUSREGISTER $CC01 EQU EINSPRUNG MONITOR EQU $F800 ADRESSZAEHLER $C000 ORG STAPELZEIGER LADEN #$C800 START LOS 4-BYTE-OPERAND 1 LDX #0P1 NACH OPERANDENSTAPEL PUSH4 BSR 4-BYTE-OPERAND 2 #0P2 LDX NACH OPERANDENSTAPEL PUSH4 BSR DURCHLAUFZAEHLER LOESCHEN LDX #0 OPERATIONSCODE LADEN CODE LDA UND OPERATION STARTEN STA STARE LOOP LEAX 5 ZYKLEN ZAEHLEN 1,X LDA STARE 5 ZYKLEN STATUS TESTEN BMI LOOP 3 ZYKLEN: B7=1: WARTESCHLEIFE STA STATUS STATUS NACH SPEICHER ZAEHLER SPEICHERN STX ZAEHL LDX #ERG 4-BYTE-ERGEBNIS P0P4 BSR AUS AR ITHMETIKRPOZESSOR NACH SPEICHER JMP MONI SPRUNG NACH MONITOR * UNTERPROGRAMM 4-BYTE--DATEN NACH ARITHMETIKPROZESSOR PUSH4 PSHS X ,A ,B REGISTER RETTEN LEAX MIT LOW-BYTE BEGINNEN 4,X LDB #4 4 BYTES PUSH41 LDA -X STA NACH OPERANDENSTAPEL DATRE DECB DURCHLAUFZAEHLER BNE PUSH41 SCHLEIFE PULS X,A,B,PC FERTIG: RUECKSPRUNG * UNTERPROGRAMM 4-BYTE--DATEN AUS ARITHMETIKPROZESSOR HOLEN P0P4 PSHS REGISTER RETTEN X,A,B LDB #4 DURCHLAUFZAEHLER 4 BYTES P0P41 LDA DATRE AUS OPERANDENSTAPEL STA X+ NACH SPEICHER DECB DURCHLAUFZAEHLER P0P41 BNE SCHLEIFE PULS X,A,B,PC FERTIG: RUECKSPRUNG * VARIABLENßEREICH VOR START LADEN UND DANACH PRUEFEN ORG $F000 CODE RMB 1 OPERATIONSCODE VOR START LADEN 0P1 RMB 4 1. OPERAND 4 BYTE VOR START LADEN RMB 4 0P2 2 . OPERAND 4 BYTE VOR START LADEN RMB 4 ERG ERGEBNIS NACH ENDE PRUEFEN STATUS RMB 1 STATUS DES ERGEBNISSES RMB ZAEHL 1 DURCHLAUFZAEHLER END * BILD DATRE STARE MONI
T e s t p r o g r a m m f ü r den A r i t h m e t i k p r o z e s s o r Am 9511A
8
Lösungen der Übungsaufgaben Abschnitt 2.8 Grundlagen
1.Aufgabe: dual: 01100100 h e x a d e z i m a l : 64 BCD: 0001 0000 0000
3.Aufgabe: h e x a d e z i m a l : 58 ASCII-Zeichen: X als Dualzahl: 88 als B C D - Z a h l : 58
2.Aufgabe: dual: 10011100 hexadezimal: 9C
4.Aufgabe: DU A F F E !
5.Aufgabe:
6. A u f g a b e : Summe: 01001011 D i f f e r e n z : 11010011 UND: 00001100 ODER: 00111111 E O D E R : 00110011
X
Y
z
u s
0
0
0
0
0
0
1
0
1
0
1 0
0
1
0
0
1
1
1 0
1 0
0
0
1 0
1
1 0
1
1
1 0
1 0
1
1
1
1
1
7.Aufgabe: Es wird der Ausgang Y5 a u s g e w ä h l t .
c
B
A YO
TT
Y2
Y3
Y4
Y5
Y6
YT
0
0
0
0
1
1
1
1
1
1
1
0
0
1
1
0
1
1
1
1
1
i
0
1 0
1
1
1
1
1
1
1
0
1
1
1
0
1
1
1
1
1
0 0 0 1 1 0 1 1
1 1 1
1
1
1
1
1
1
0
1
1
1
1
1
1
1
1
0
1
1
1
1
1
1
1
1
0
1
1
1
1
1
1
1
1
0
358
8 Lösungen der Übungsaufgaben
8.Aufgabe:
X1-
Ausgang
X2XI t X2 Ausgang
^
t
Abschnitt 4.3.7 Datenübertragung
1.Aufgabe:
cooo
cooo 7F C003 C006 C009 COOB COOE
* UEBUNG 4 . 3 . 7 AUFGABE 1 ADRESSZAEHLER ORG SCOOO STEUERREGISTER LOESCHEN $C881 CLR LDD #$FF04 STEUERBYTE $C880 NACH RICHTUNGSREGISTER STD LDA #$55 BITMUSTER 0 1 0 1 0 1 0 1 STA $C880 NACH LEUCHTDIODEN AUSGEBEN JMP LOOP WARTESCHLEIFE LOOP END
CC FD 86 B7 7E
C881 FF04 C880 55 C880 COOE
START
7F 7F 86 B7 B6 B7 7E
C883 C882 04 C883 C882 FOOO F800
START
2.Aufgabe:
COOO COOO C003 C006 C008 COOB COOE CO11 FOOO FOOO
0001
* UEBUNG 4 . 3 . 7 AUFGABE 2 ORG SCOOO ADRESSZAEHLER BEFEHLE STEUERREGISTER LOESCHEN CLR $C883 RICHTUNGSREGISTER LOESCHEN CLR $C882 LDA #$04 STEUERBYTE NACH STA $C883 STEUERREGISTER LDA $C882 KIPPSCHALTER LESEN STA NACH VARIABLENSPEICHER WERT JMP $F800 SPRUNG NACH mONITOR VARIA3LENBEREICH ORG $F000 RMB WERT 1 1 SPEICHERBYTE R E R S E R V I E R T END
8 Lösungen der Übungsaufgaben
3.Aufgabe:
00C8 cooo cooo C004 C006 C008 COOB COOE coi 1 C014 C100 C100 C101 C102 F000 F000 F001 F002
10CE 86 1F FC FD B6 B7 7E
C800 C8 8B C100 F000 C102 F002 F800 64 44 41 0001 0001 0001
* UEBUNG 4 . 3 . 7 AUFGABE 3 SETDP $C8 SETZE DIREKT-SEITE ORG ADRESSZAEHLER BEFEHLE $C000 START LDS #$C800 S-STAPELZEIGER LADEN LDA DIREKT-SEITEN-ADRESSE #$C8 A,DP NACH DIREKT-SEITEN-REGISTER TFR LDD K0N1 1. UND 2. BYTE LADEN STD VAR1 UND SPEICHERN LDA K0N3 3 . BYTE LADEN STA UND SPEICHERN VAR3 JMP SPRUNG NACH MONITOR $F800 ORG KONSTANTENSPEICHER $C100 K0N1 FCB 100 DEZIMAL FCB $44 HEXADEZIMAL K0N2 ZEICHEN K0N3 FCB 'A ORG VARIABLENSPEICHER $F000 VAR1 RMB 1 1. VARIABLE RMB 1 VAR2 2 . VARIABLE RMB 1 VAR3 3 . VARIABLE END
Abschnitt 4 . 4 . 5 Sprünge und Verzweigungen
1.Aufgabe:
COOO COOO C003 C006 C009 COOC COOF COI 2 C015 C018
7F 7F CC FD CC FD B6 B7 20
C881 C883 FF04 C880 0004 C882 C882 C880 F8
* UEBUNG 4 . 4 . 5 AUFGABE 1 ORG $C000 ADRESSZAEHLER STEUERREGISTER LOESCHEN START CLR $C881 CLR $C883 STEUERREGISTER LOESCHEN #$FF04 AUSGABE PROGRAMMIEREN LDD STD $C880 LDD #$0004 EINGABE PROGRAMMIEREN STD $C882 LDA $C882 EINGABE LOOP STA $C880 AUSGABE BRA LOOP SCHLEIFE MIT BRA-BEFEHL END
2.Aufgabe:
COOO COOO C004 C007 COOA COOD C010 C013 C015 C018
F809 F806 10CE 7F CC FD B6 BD 86 BD 20
C800 C883 0004 C882 C882 F809 20 F806 F3
* UEBUNG 4 . 4 . 5 AUFGABE 2 EQU AUSB $F809 AKKU A HEXADEZIMAL AUSGEBEN ZEICHEN AUS AKKU A AUSGEBEN AUSZ EQU $F806 ORG $C000 ADRESSZAEHLER START LDS #$C800 S-STAPELZEIGER LADEN CLR $C883 STEUERREGISTER LOESCHEN LDD #$0004 EINGABE PROGRAMMIEREN STD $C882 LDA LOOP $C882 EINGABE KIPPSCHALTER JSR AUSB AUSGABE HEXADEZIMAL AUF TERMINAL LDA #$20 CODE FUER LEERZEICHEN JSR AUSZ AUSGEBEN BRA LOOP SCHLEIFE END
359
360
8 Lösungen der Übungsaufgaben
3.Aufgabe:
cooo cooo C004 C007 COOA COOD C010 C013
F824 10CE 7F CC FD BD B7 20
C800 C881 FF04 C880 F824 C880 F8
* UEBUNG 4 . 4 . 5 AUFGABE 3 EIN EQU $F824 ZEICHEN NACH AKKU A LESEN ADRESSZAEHLER ORG $COOO S-STAPELZEIGER LADEN START LDS #$C800 CLR $C881 STEUERREGISTER LOESCHEN #$FF04 LDD AUSGABE PROGRAMMIEREN STD $C880 EIN ZEICHEN VON TERMINAL LESEN LOOP JSR NACH LEUCHTDIODEN AUSGEBEN STA $C880 BRA SCHLEIFE LOOP END
Abschnitt 4.5.5 Programmverzweigungen
1.Aufgabe:
COOO COOO C003 C006 C009 COOC COOF C012 C015 C017 C01A C01C C01E C020 C023 C025 C027 C02A
7F 7F CC FD CC FD B6 26 B7 20 2A 86 B7 20 86 B7 20
C881 C883 FF04 C880 0004 C882 C882 05 C880 F6 07 FO C880 ED OF C880 E6
* UEBUNG 4 . 5 . 5 AUFGABE 1 ORG ADRESSZAEHLER JCOOO $C881 STEUERREGISTER LOESCHEN START CLR $C883 CLR STEUERREGISTER LOESCHEN #$FF04 LDD AUSGABE PROGRAMMIEREN STD $C880 LDD #$0004 EINGABE PROGRAMMIEREN STD $C882 KIPPSCHALTER LESEN LOOP LDA $C882 BNE MARK1 UNGLEICH 0: WEITER STA GLEICH 0 : AUSGEBEN $C880 BRA SCHLEIFE LOOP MARK1 BPL MARK2 B7=0: WEITER LDA #$F0 B7=1: 1111 0000 LADEN UND AUSGEBEN STA $C880 BRA LOOP SCHLEIFE MARK2 LDA #$0F B 7 = 0 : 0000 1111 LADEN STA UND AUSGEBEN $C880 BRA LOOP SCHLEIFE END
4.Aufgabe:
F800 F824 COOO COOO C003 C005 C007 COOA COOC COOE C011 C013 C015
BD 81 26 BD 81 26 BD 81 26 7E
F824 45 F9 F824 4E F2 F824 44 EB F800
* UEBUNG 4 . 5 . 5 AUFGABE 4 MONI EQU SF800 EINSPRUNG MONITOR EIN EINGABE-UNTERPROGRAMM EQU $F824 ORG $C000 ADRESSZAHLER START JSR EIN 1. ZEICHEN LESEN CMPA #' E E ? BNE N E I N : PRUEFUNG ABBRECHEN START JSR EIN J A : 2. ZEICHEN LESEN CMPA #'N N ? BNE N E I N : PRUEFUNG ABBRECHEN START JSR EIN J A : 3. ZEICHEN LESEN 1 CMPA # D D ? BNE N E I N : PRUEFUNG ABBRECHEN START JMP MONI J A : ENDE DES PROGRAMMS END
8 Lösungen der Übungsaufgaben
2.Aufgabe:
C000 C000 C003 C006 C009 COOC COOF C012 C015 C017 C019 C01C C01E C020 C022 C025 C027 C029 C02B C02D C02F C031 C033 C035 C037 C03A
F800 7F 7F CC FD CC FD B6 81 26 7E 81 26 86 B7 20 81 26 86 20 81 26 86 20 7F 20
C881 C883 FF04 C880 0004 C882 C882 55 03 F800 OF 07 FO C880 EB FO 04 OF F3 00 04 FF EB C880 D6
* UEBUNG 4.5.5 AUFGABE 2 $F800 MONI EQU EINSPRUNG MONITOR ORG $C000 ADRESSZAEHLER $C881 START CLR STEUERREGISTER LOESCHEN $C883 STEUEREGISTER LOESCHEN CLR LDD AUSGABE PROGRAMMIEREN #$FF04 STD $C880 LDD #$0004 EINGABE PROGRAMMIEREN STD $C882 LOOP $C882 EINLESEN DER KIPPSCHALTER LDA CMPA #$55 ENDEMARKE 0101 0101 ? BNE MARK NEIN: WEITER JMP MONI JA: PROGRAMM ABBRECHEN MARK CMPA #$0F MUSTER 0000 1111 ? MARK1 NEIN: WEITER BNE LDA #$F0 JA: MUSTER 1111 0000 LADEN AUS STA $C880 MUSTER AUSGEBEN BRA LOOP SCHLEIFE MARIO CMPA #$F0 MUSTER 1111 0000 ? BNE MARK2 NEIN: WEITER LDA #$0F JA: MUSTER 0000 1111 LADEN BRA AUS UND AUSGEBEN MARK2 CMPA #$00 AUCH TSTA MOEGLICH BNE MARK3 NEIN: WEITER LDA #$FF JA: MUSTER 1111 1111 LADEN BRA AUS UND AUSGEBEN MARK3 CLR $C880 AUCH LDA #$00 UND BRA AUS MOEGLICH BRA LOOP SCHLEIFE END
3. Aufgabe:
COOO C000 C003 C006 C009 COOC COOF C012 C015 COI 7 C018 C01A C01B C01D C01E C020 C023 C025 C027 C029 C02B C02D C02F C031 C033 C036
7F 7F CC FD CC FD B6 2B 49 2B 49 2B 49 2B 7F 20 86 20 86 20 86 20 86 B7 20
C881 C883 FF04 C880 0004 C882 C882 OE OF 10 11 C880 ED CO OA FO 06 FC 02 FF C880 DA
* UEBUNG 4.5.5 AUFGABE 3 0RG $C000 ADRESSZAHLER $C881 START CLR STEUERREGISTER LOESCHEN $C883 STEUERREGISTER LOESCHEN CLR LDD #$FF04 AUSGABE PROGRAMMIEREN STD $C880 LDD #$0004 EINGABE PROGRAMMIEREN STD $C882 LDA EINGABE KIPPSCHALTER LESEN LOOP $C882 BMI B7 BIT7=1: JA ROLA SCHIEBE LINKS BMI B6 BIT6=1: JA ROLA SCHIEBE LINKS BMI B5 BIT5=1: JA ROLA SCHIEBE LINKS B4 BMI BIT4=1: JA $C880 KEIN BIT 1: AUSGABE LOESCHEN CLR LOOP BRA SCHLEIFE B7 LDA #$C0 MUSTER 1100 0000 LADEN BRA AUS UND AUSGEBEN B6 LDA #$F0 MUSTER 1111 0000 LADEN BRA AUS UND AUSGEBEN B5 LDA #$FC MUSTER 1111 1100 LADEN BRA AUS UND AUSGEBEN B4 LDA #$FF MUSTER 1111 1111 LADEN AUS STA $C880 MUSTER AUSGEBEN AUS AKKU A BRA LOOP SCHLEIFE END
361
362
8 Lösungen der Übungsaufgaben
Abschnitt 4.6.6 Programmschleifen
1.Aufgabe:
cooo cooo C003 C006 C009 COOA COOD COOE C010
7F CC FD 4F B7 4A 8D 20
C881 FF04 C880
C012 C015 C017 C019
8E 30 26 39
30D3 1F FC
C880 02 F8
* UEBUNG 4.6.6 AUFGABE 1 ADRESSZAEHLER ORG $C000 STEUERREGISTER LOESCHEN START CLR $C881 LDD #$FF04 AUSGABE PROGRAMMIEREN STD $C880 CLRA ZAEHLER LOESCHEN STA $C880 ZAEHLER AUSGEBEN LOOP DE CA ZAEHLER - 1 BSR MS 100 100 MS WARTEN BRA LOOP SCHLEIFE * UNTERPROGRAMM 100 MS WARTEN #12499 3 ZYKLEN MS 100 LDX MS 101 LEAX 5 ZYKLEN ZAEHLER - 1 -1 ,x BNE 3 ZYKLEN: BIS NULL MS101 RTS 5 ZYKLEN END
2.Aufgabe:
COOO COOO C003 C006 C009 COOC COOF C012 C014 C017 C01A C01C C01D COI F C021
7F 7F CC FD CC FD 86 B7 7D 2B 4C 81 22 20
C881 C883 FF04 C880 0004 C882 01 C880 C882 FB 06 F1 F1
* UEBUNG 4.6.6 AUFGABE 2 ADRESSZAEHLER ORG $COOO STEUERREGISTER LOESCHEN $C881 START CLR STEUERREGISTER LOESCHEN $C883 CLR #$FF04 LDD AUSGABE PROGRAMMIEREN STD SC880 #$0004 EINGABE PROGRAMMIEREN LDD $C882 STD ANFANGSWERT LDA LOOP #1 LAUFENDEN WERT AUSGEBEN $C880 LOOP 1 STA L00P2 TST $C882 SCHALTER TESTEN BMI L00P2 SCHALTER HIGH: WARTEN INCA SCHALTER LOW: ZAEHLEN CMPA #6 ENDWERT ? BHI LOOP GROESSER BRA KLEINER ODER GLEICH LOOP 1 END
4.Aufgabe:
COOO COOO C003 C006 C009 COOC COOF con i C012 C014 C015 C016
7F CC FD 7F 7C 86 4A 26 12 12 20
C881 FF04 C880 C880 C880 EO FD F4
* UEBUNG 4.6.6 AUFGABE 4 ORG $C000 ADRESSZAEHLER START CLR $C881 STEUERREGISTER LOESCHEN LDD #$FF04 AUSGABE PROGRAMMIEREN STD SC880 CLR $C880 AUSGABE LOESCHEN $C880 LOOP INC 7 ZYKLEN UMSCHALTEN LDA #224 2 ZYKLEN L00P1 DECA 2 ZYKLEN BNE LOOP 1 3 ZYKLEN NOP 2 ZYKLEN NOP 2 ZYKLEN BRA LOOP 3 ZYKLEN END
8 Lösungen der Übungsaufgaben
3.Aufgabe:
cooo
cooo
C003 C006 C009 COOC COOF C012 C013 C016 C019 C01A C01C C01D C020 C023 C024 C026
7F 7F CC FD CC FD 4F B7 F6 56 24 4C B7 F6 56 25 20
C881 C883 FF04 C880 0004 C882 C880 C882 FA C880 C882 FA EE
* UEBUNG 4 . 6 . 6 AUFGABE 3 $C000 ADRESSZAEHLER ORG START CLR $C881 STEUERREGISTER LOESCHEN STEUERREGISTER LOESCHEN CLR $C883 #$FF04 LDD AUSGABE PROGRAMMIEREN STD $C880 LDD #$0004 EINGABE PROGRAMMIEREN STD $C882 CLRA ZAEHLER LOESCHEN STA $C880 UND AUSGEBEN L00P1 LDB $C882 EINGABE LESEN BO NACH C - B I T RORB BCC L00P1 LEITUNG IST LOW INCA LEITUNG IST HIGH: ZAEHLEN STA $C880 NEUEN ZAEHLER AUSGEBEN L00P2 LDB $C882 EINGABE LESEN RORB BO NACH C-BIT BCS L00P2 LEITUNG IST HIGH BRA L00P1 FALLENDE FLANKE END
Abschnitt 4.7.7 Bereichsadressierung 1. A u f g a b e :
COOO COOO C003 C006 C009 COOC COOF coi 1 C014 C016
F800 7F CC FD 8E B6 A7 8C 23 7E
C883 0004 C882 C100 C882 80 C6FF F9 F800
* UEBUNG 4 . 7 . 7 AUFGABE 1 MONI EQU $F800 EINSPRUNG MONITOR ORG $C000 ADRESSZAEHLER START CLR $C883 STEUERREGISTER LOESCHEN LDD #$0004 EINGABE PROGRAMMIEREN STD $C882 LDX #$C100 ANFANGSADRESSE LADEN LDA $C882 BITMUSTER VON KIPPSCHALTERN LOOP STA X+ SPEICHERN X = X + 1 #$C6FF CMPX AUF ENDEADRESSE VERGLEICHEN BLS LOOP KLEINER ODER GLEICH JMP MONI FERTIG: SPRUNG ZUM MONITOR END
3.Aufgabe:
COOO COOO C003 C006 C009 COOC COOF C012 C015 C018 C01A C01D
7F 7F CC FD CC FD 8E B6 A6 B7 20
C881 C883 FF04 C880 0004 C882 COOO C882 86 C880 F6
* UEBUNG 4 . 7 . 7 AUFGABE 3 ORG $COOO ADRESSZAEHLER START CLR $C881 STEUERREGISTER LOESCHEN CLR $C883 STEUERREGISTER LOESCHEN LDD #$FF04 AUSGABE PROGRAMMIEREN STD $C880 LDD #$0004 EINGABE PROGRAMMIEREN STD $C882 LDX #$C000 BASISADRESSE LADEN LOOP LDA $C882 LOW-ADRESSE LADEN LDA A ,X INDIZIERT A + X STA $C880 DATENBYTE AUSGEBEN BRA LOOP SCHLEIFE END
363
364
8 Lösungen
der
Übungsaufgaben
2.Aufgabe:
F806 F809 cooo cooo C004 C006 C009 COOB COOD COOF C011 COI 3 C015 C018 C01A C01D C01F C022 C024 C026 C029 C02B
10CE 86 8E E6 A7 AI 27 34 1F BD 1F BD 86 BD 35 E7 8C 23 20
F100 55 C100 84 84 84 13 06 10 F809 98 F809 20 F806 06 80 C7FF DE D9
* UEBUNG 4 . 7 . 7 AUFGABE 2 ZEICHEN AUS AKKU A AUSGEBEN AUSZ EQU $F806 AKKU HEXADEZIMAL AUSGEBEN AUSB EQU $F809 ORG $C000 ADRESSZAEHLER STAPEL AB $F100 ANLEGEN START LDS #$F100 LDA #$55 TESTWERT LOOP LDX #$C100 ANFANGSADRESSE BEREICH X ALTEN WERT RETTEN L00P1 LDB STA X TESTWERT SPEICHERN CMPA MIT SPEICHERINHALT VERGLEICHEN X BEQ L00P2 BEIDE GLEICH: SPEICHER O . K . UNGLEICH: B E I D E AKKUS NACH STAPEL PSHS A,B TFR X ,D ADRESSE NACH A UND B JSR AUSB HI GH-TEIL HEXADEZIMAL AUSGEBEN TFR B,A AUSB JSR LOW-TEIL HEXADEZIMAL AUSGEBEN LDA LERRZEICHEN #$20 LEERZEICHEN AUSGEBEN JSR AUSZ PULS A,B BEIDE AKKUS AUS STAPEL ZURUECK L00P2 STB X+ ALTEN WERT NACH SPEICHER ZURUECK CMPX #$C7FF AUF ENDADRESSE VERGLEICHEN BLS WEITER DA KLEINER ODER GLEICH L00P1 BRA FERTIG: NEUER DURCHLAUF LOOP END
4.Aufgabe:
F824 F806 COOO COOO C003 C007 COOA COOC COOE C010 C012 C014 C017 C019 C01C C01F C021 C024 C026 C028 FOOO FOOO
8E 108E BD A7 31 81 26
FOOO 0000 F824 80 21 3A F5
86 BD 86 BD 8E A6 BD 31 26 20
OA F806 OD F806 FOOO 80 F806 3F F7 D6 0100
* UEBUNG 4 . 7 . 7 AUFGABE 4 UNTERPROGRAMM ZEICHEN LESEN $F824 EIN EQU UNTERPROGRAMM ZEICHEN AUSGEBEN EQU $F806 AUSZ ORG $C000 ADRESSZAEHLER BEFEHLE #TEXT SPEICHERADRESSE LADEN START LDX LDY #0 ZEICHENZAEHLER LOESCHEN JSR E I N EINGABESCHLEIFE L00P1 STA X+ ZEICHEN SPEICHERN ADRESSE + 1 LEAY ZEICHENZAEHLER + 1 1 ,Y CMPA ENDEZEICHEN : ? #': NEIN BNE LOOP 1 * ENDEZEICHEN : ERKANNT TEXT AUSGEBEN LDA #$ OA ZEILENVORSCHUB JSR AUSZ AUSGEBEN LDA #$0D WAGENRUECKLAUF JSR AUSZ AUSGEBEN LDX #TEXT SPEICHERADRESSE LADEN X+ ZEICHEN LADEN ADRESSE + 1 L00P2 LDA JSR AUSZ ZEICHEN AUSGEBEN LEAY ZEICHENZAEHLER - 1 - 1 ,Y BNE L00P2 AUSGABESCHLEIFE BRA START NEUE EINGABE ORG $F000 ADRESSZAEHLER VARIABLENBEREICH RMB 256 TEXT 256 BYTES RESERVIERT END
8 Lösungen der Übungsaufgaben
Abschnitt 4.8.11 Datenverarbeitung
1.Aufgabe:
cooo cooo
*
C004 C007 COOA COOD C010 C013
10CE 7F 7F CC FD CC FD
C800 C881 C883 FF04 C880 0004 C882
C016 C019 C01B C01D C01F C020 C021 C022 C023 C025 C027
B6 1F 84 27 54 54 54 54 27 34 4F
C882 89 OF 15
C028 C02A C02B C02D C030 C032 C034 C037
AB 5A 26 B7 35 20 7F 20
E4
OF 02
FB C880 02 E2 C880 DD
UEBUNG 4 . 8 . 1 1 AUFGABE 1 ADRESSZAEHLER ORG $COOO START #$C800 S - S T A P E L Z E I G E R LADEN LDS STEUERREGISTER LOESCHEN CLR $C881 CLR $C883 STEUERREGISTER LOESCHEN #$FF04 AUSGABE PROGRAMMIEREN LDD STD $C880 #$0004 EINGABE PROGRAMMIEREN LDD $C882 STD * EINGABE LESEN UND IFAKTOREN TRENNEN EINGABE NACH AKKU A LOOP LDA $C882 NACH B KOPIEREN TFR A,B MASKE 0000 1111 FAKTOR 2 GETRENNT ANDA #$0F BEQ NULL B E I NULL ERGEBNIS NULL LSRB FAKTOR 1 VERSCHIEBEN LSRB LSRB LSRB BEQ NULL B E I NULL ERGEBNIS NULL PSHS A FAKTOR 2 NACH STAPEL CLRA PRODUKT LOESCHEN * MULTIPLIKATIONSSCHLEIFE ADDA L00P1 S PRODUKT = PRODUKT + FAKTOR 1 ( S T A P E L ) DECB FAKTOR 2 VERMINDERN BNE LOOP 1 B I S NULL STA $C880 PRODUKT AUSGEBEN PULS A S T A P E L Z E I G E R WIEDERHERSTELLEN BRA LOOP NEUER DURCHLAUF NULL CLR $C880 AUSGABE LOESCHEN ERGEBNIS NULL BRA LOOP NEUER DURCHLAUF END
2.Aufgabe:
COOO COOO C004 C007 COOA COOD C010 C013 C016 C018 C01B C01E C020 C022 C023 C025 C027
10C E 7F 7F CC FD CC FD 86 B7 F6 2B 8B 19 81 23 20
C800 C881 C883 FF04 C880 0004 C882 01 C880 C882 FB 01 49 F1 ED
* UEBUNG 4 . 8 . 1 1 AUFGABE 2 ORG $C000 ADRESSZAEHLER START LDS #$C800 S - S T A P E L Z E I G E R LADEN CLR $C881 STEUERREGISTER LOESCHEN CLR $C883 STEUERREGISTER LOESCHEN LDD #$FF04 AUSGABE PROGRAMMIEREN STD $C880 LDD #$0004 EINGABE PROGRAMMIEREN STD $C882 L00P1 LDA #1 ANFANGSZAHL LADEN L00P2 STA $C880 LAUFENDE ZAHL AUSGEBEN L00P3 LDB $C882 KOMMANDOSCHALTER LESEN BMI L00P3 SCHALTER HIGH: WARTEN ADDA #1 SCHALTER LOW: ZAEHLEN STATT INCA DAA DEZIMALKORREKTUR CMPA #$49 MIT ENDWERT VERGLEICHEN BLS LOOP2 K L E I N E R / G L E I C H : AUSGEBEN BRA L00P1 GROESSER: M I T ANFANGSWERT BEGINNEN END
365
366
8 Lösungen
der
Übungsaufgaben
3.Aufgabe:
cooo
cooo C004 C007 COOA COOD C010 C013 C016 C019 C01B C01C C01D C01F C022 C024 C027
10CE 7F 7F CC FD CC FD B6 C6 3D 4D 26 F7 20 7F 20
C800 C881 C883 FF04 C880 0004 C882 C882 OA
05 C880 F2 C880 ED
* UEBUNG 4 . 8 . 1 1 AUFGABE 3 ORG $C000 ADRESSZAEHLER START LDS #$C800 S - S T A P E L Z E I G E R LADEN CLR $C881 STEUERREGISTER LOESCHEN CLR $C883 STEUERREGISTER LOESCHEN LDD #$FF04 AUSGABE PROGRAMMIEREN STD $C880 LDD #$0004 EINGABE PROGRAMMIEREN STD $C882 LOOP LDA $C882 ZAHL LESEN LDB #10 FAKTOR 10 LADEN MULTIPLIZIEREN MUL TSTA GROESSER 8 B I T ? BNE JA: FEHLER FEHL STB $C880 N E I N : LOW-TEIL AUSGEBEN BRA LOOP FEHL CLR $C880 FEHLERMELDUNG AUSGABE LOESCHEN BRA LOOP END
4.Aufgabe:
F824 COOO COOO C004 C007 COOA COOD C010 C012 C014 C016 C018 C01A C01D C01F C021 C023 C025 C027 C029 C02C C02E C030 C033
10CE 7F CC FD BD 81 25 81 22 80 B7 20 81 25 81 22 80 B7 20 86 B7 20
C800 C881 FF04 C880 F824 30 1A 39 07 30 C880 EE 41 OB 46 07 37 C880 DF FF C880 D8
* UEBUNG 4 . 8 . 1 1 AUFGABE 4 EIN EQU $F824 EINGABE-UNTERPROGRAMM ORG SCOOO ADRESSZAEHLER START LDS #$C800 S - S T A P E L Z E I G E R LADEN CLR $C881 STEUERREGISTER LOESCHEN LDD #$FF04 AUSGABE PROGRAMMIEREN STD $C880 LOOP JSR EIN ZEICHEN VOM TERMINAL HOLEN CMPA #'0 KLEINER ZEICHEN 0 ? BLO FEHL J A : FEHLER CMPA #'9 GROESSER ZEICHEN 9 ? BHI BUCH JA: AUF BUCHSTABEN PRUEFEN SUBA #$30 Z I F F E R 0 - 9 DECODIEREN STA $C880 BINAER AUSGEBEN BRA LOOP BUCH CMPA KLEINER BUCHSTABE A ? #'A BLO JA: FEHLER FEHL CMPA #' F GROESSER BUCHSTABE F ? BHI FEHL J A : FEHLER SUBA #$37 BUCHSTABE A - F DECODIEREN STA $C880 BINAER AUSGEBEN BRA LOOP FEHL LDA #$FF FEHLERMELDUNG STA AUSGEBEN $C880 BRA LOOP END
8 Lösungen
der Übungsaufgaben
Abschnitt 4.9.4 Unterprogrammtechnik
1.Aufgabe:
cooo
cooo
C004 C007 COOA COOD C010 C013 C016 C019 C01C C01E C021
10CE 7F 7F CC FD CC FD 7F B6 8D 7C 20
C023 C024 C026 C027 C029 C02B C02D C02E C030 C031 C033
4D 26 39 34 C6 21 5A 26 4A 26 35
C800 C881 C883 FF04 C880 0004 C882 C880 C882 05 C880 F6
01 07 C6 00 FD F6 87
* UEBUNG 4 . 9 . 5 AUFGABE 1 ORG $C000 ADRESSZAEHLER START LDS #$C800 S - S T A P E L Z E I G E R LADEN CLR $C881 STEUERREGISTER LOESCHEN CLR $C883 STEUERREGISTER LOESCHEN LDD #$FF04 AUSGABE PROGRAMMIEREN STD $C880 LDD #$0004 EINGABE PROGRAMMIEREN STD $C882 CLR $C880 AUSGABE LOESCHEN LOOP LDA $C882 FAKTOR VON SCHALTERN LADEN BSR NMS1 N * 1 MS WARTEN INC $C880 AUSGABE ERHOEHEN BRA LOOP * UNTERPROGRAMM N * '1 MS WARTEN N I N AKKU A NMS1 TSTA FAKTOR TESTEN BN E NMS 11 B E I UNGLEICH NULL WARTEN RTS B E I NULL SOFORT ZURUECK NMS 11 PSHS B,A,CC REGISTER RETTEN NMS 12 LDB #198 2 ZYKLEN BRN NMS 13 3 ZYKLEN NOP NMS 13 DECB 2 ZYKLEN * 198 BN E NMS 13 3 ZYKLEN * 198 DECA 2 ZYKLEN BN E NMS 12 3 ZYKLEN PULS C C . A . B ,,PC REGISTER ZURUECK UND RUECKSPRUNG END
2.Aufgabe:
F800 COOO COOO C004 C007 C009 COOC COOF CO11 C013 C014 C015 C016 C017 C019 C01A C01B C01D C01F C021 FOOO FOOO F002
10CE BE 8D BF 7E
C800 FOOO 06 F002 F800
34 1F 58 49 58 49 E3 58 49 1F 35 32 39
16 10
62
01 06 62
0002 0002
* UEBUNG 4 . 9 . 5 AUFGABE 2 MONI EQU $F800 EINSPRUNG MONITOR $C000 ORG ADRESSZAEHLER START LDS #$C800 S - S T A P E L Z E I G E R LADEN LDX ZAHL MULTIPLIKAND AUS SPEICHER LADEN MUL10 BSR MAL 10 M U L T I P L I Z I E R E N STX" ERG PRODUKT NACH SPEICHER JMP MONI SPRUNG ZUM MONITOR * UNTERPROGRAMM X = X * 10 M U L T I P L I Z I E R E N MUL10 PSHS X,B,A ALTEN WERT UND H I L F S R E G I S T E R RETTEN TFR X ,D ALTEN WERT NACH DOPPELAKKU ASLB 1 B I T LINKS = * 2 ROLA ASLB 1 B I T L I N K S = * 2 GIBT * 4 ROLA ADDD 2 ,S ALTEN WERT DAZU GIBT * 5 ASLB 1 B I T L I N K S = * 2 GIBT * 1 0 ROLA D,X TFR ERGEBNIS NACH X-REGISTER PULS A,B H I L F S R E G I S T E R AUS STAPEL LEAS 2 ,S WEGEN PSHS X ZEIGER BERICHTIGEN RTS ORG $F000 ADRESSZAEHLER TESTWERTE ZAHL RMB 2 ZAHL VOR DEM STARTEN LADEN ERG RMB 2 ERGEBNIS NACH STOP KONTROLLIEREN END
367
8 Lösungen der Übungsaufgaben
368
3.Aufgabe:
cooo cooo C004 C007 COOA COOC COOF C012 C015 C017 C019 C01C C01F C021 C023 C025 C027 C029 C02B F000 FOOO F002 F004 F006
F800 10CE BE FC 8D FD BF 7E
C800 FOOO F002 09 F004 F006 F800
1E 34 8E 10A3 25 A3 30 20 32 1E 39
01 10 0000 E4 06 E4 01 F5 62 01 0002 0002 0002 0002
* UEBUNG 4.9.5 AUFGABE 3 MONI EINSPRUNG MONITOR EQU $F800 ADRESSZAEHLER ORG $C000 S-STAPELZEIGER LADEN START LDS #$C800 DIVIDENDEN AUS SPEICHER LADEN LDX DIVID DIVISOR AUS SPEICHER LADEN LDD DISOR BSR DIVXD DIVIDIONSUNTERPROGRAMM QUOTIENTEN NACH SPEICHER STD QUOT STX REST REST NACH SPEICHER JMP MONI * UNTERPROGRAMM X : D QUOTIENT IN D REST IN X DI VXD EXG D = DIVIDEND X = DIVISOR D,X PSHS X DIVISOR NACH STAPEL LDX #0 QUOTIENT LOESCHEN DIVXD1 CMPD DIVIDEND MIT DIVISOR VERGLEICHEN S DIVXD2 KLEINER: FERTIG BLO SUBD S GROESSER/GLEICH: ABZIEHEN QUOTIENT + 1 LEAX 1 ,x BRA DIVXD1 SUBTRAKTIONSSCHLEIFE 2 ,S PSHS X AUFHEBEN DIVXD2 LEAS D,X D = QUOTIENT X = REST EXG RTS $F000 ORG ADRESSZAEHLER TESTWERTE 2 DIVIDEND VOR START LADEN DIVID RMB DIVISOR VOR START LADEN 2 DISOR RMB RMB 2 QUOTIENT NACH STOP PRUEFEN QUOT RMB 2 REST NACH STOP PERUEFEN REST END
8 Lösungen
der Übungsaufgaben
3.Aufgabe Zusatzlösung:
F800 COOO COOO C004 C007 C009 C00C C00E coi 1 C013 C016 C018 C01B C01 C020
10CE BE 8D F7 8D F7 8D F7 8D F7 1F F7 7E
C800 FOOO 1A F002 1A F003 1A F004 1A F005 10 F006 F800
CC 20 CC 20 CC 20 CC 1E 34 8E 10A3 25 A3 30 C045 20 C 0 4 7 32 C 0 4 9 1E C04B 39 F000 FOOO F002
2710 OD 03E8 08 0064 03 OOOA 01 10 0000 E4 06 E4 01 F5 62 01
C023 C026 C028 C02B C02D C030 C032 C035 C037 C039 C03C C03F C041 C043
F003 F004 F005
F006
0002 0001 0001 0001 0001 0001
* UEBUNG 4 . 9 . 5 AUFGABE MONI EQU SF800 ORG $C000 START LDS #$C800 LDX DIVID BSR D10000 STB S10000 BSR D1000 STB S1000 BSR D100 STB S100 BSR D10 STB S10 TFR X,D STB S1 JMP MONI * UNTERPROGRAMM X : D D10000 LDD #10000 BRA DIVXD D1000 LDD #1000 BRA DIVXD D100 LDD #100 BRA DIVXD D10 LDD #10 DIVXD EXG D,X PSHS X LDX #0 DIVXD1 CMPD S BLO DIVXD2 SUBD S LEAX 1 ,x BRA DIVXD1 DIVXD2 LEAS 2 ,S
EXG
RTS ORG DIVID RMB S 1 0 0 0 0 RMB S1000 RMB S100 RMB S10 RMB S1 RMB
END
D,X
$F000 2 1 1 1 1 1
3 ZUSATZLOESUNG EINSPRUNG MONITOR ADRESSZAEHLER S - S T A P E L Z E I G E R LADEN DIVIDENDEN AUS S P E I C H E R LADEN DURCH 10000 T E I L E N ZEHNTAUSENDERSTELLE DURCH 1000 D I V I D I E R E N TAUSENDERSTELLE DURCH 100 T E I L E N HUNDERTERSTELLE DURCH 10 T E I L E N ZEHNERSTELLE REST I S T E I N E R S T E L L E EINERSTELLE QUOTIENT IN D REST IN X D I V I D E N D IST 10 0 0 0 D I V I D E N D IST
1000
DIVIDEND IST
100
D I V I D E N D IST 10 D = DIVIDEND X = DIVISOR D I V I S O R NACH S T A P E L QUOTIENT LOESCHEN D I V I D E N D MIT D I V I S O R VERGLEICHEN KLEINER: FERTIG GROESSER/GLEICH: ABZIEHEN QUOTIENT + 1 SUBTRAKTIONSSCHLEIFE
PSHS X
AUFHEBEN
D = QUOTIENT
X = REST
ADRESSZAEHLER TESTWERTE D I V I D E N D VOR START LADEN ZEHNTAUSENDERSTELLE TAUSENDERSTELLE HUNDERTERSTELLE ZEHNERSTELLE EINERSTELLE
369
9
Ergänzende und weiterführende Literatur
Kobitzsch, W. Mikroprozessoren - A u f b a u und Wirkungsweise Teil 1: G r u n d l a g e n Oldenbourg München - Wien 2 . A u f l a g e 1981 Kobitzsch, W. Mikroprozessoren - A u f b a u und Wirkungsweise Teil 2: Beispiele und Anwendungen Oldenbourg München - Wien 1980 T i e t z e , U., S c h e n c k , Ch. Halbleite r - S c h a l t u n g s t e c h n i k Springer Verlag Berlin Motorola M6800 Mikroprozessor P r o g r a m m i e r h a n d b u c h F i r m e n s c h r i f t Motorola Leventhal, L.A. 6800 - P r o g r a m m i e r e n in Assembler t e - w i - V e r l a g München 1978 Motoro la Microcomputer Components 6800 8 - B i t M i c r o p r o c e s s i n g Unit 6802 8 - B i t Microprocessing Unit 6809 8 - B i t Microprocessing Unit F i r m e n s c h r i f t e n Motorola Zaks, R., L a b i a k , W. P r o g r a m m i e r u n g des 6809 Sybex 1984 Leventhal, L.A. 6809 Assembly L a n g u a g e Programming Os b o r n e / M c G r a w - H i l l 1981
10
Anhang
10.1
Zahlentabellen 0
1
2
3
u
5
6
7
8
00 Ol 02 03 04 05 06 07_
0000 0016 0032 0048 0064 0080 0096 0112
0001 0017 00 3 3 004 9 006 5 0081 0097 0113
0002 0018 0 0 34 0050 0066 0082 0098 0114
0003 0019 0 0 35 0051 006 7 008 3 0099 0115
0004 0020 0 0 36 0052 0068 0084 0100 0116
0006 0022 0038 0054 0070 0086 0102 0118
0007 0023 0 0 39 0055 0071 0087 0103 0119
0008 0024 0040 0056 0072 0088 0104 0120
08 09 OA OB OC OD OE OF
0128 0144 0160 0176 0192 0208 0224 0240
0129 0130 0145 0146 0161 0162 0177 0178 0193 0194 0209 0210 0225 0226 0241 0242
0131 0147 0163 0179 0195 0211 0227 0243
0132 0133 0134 0148 0149 0 1 5 0 0164 0165 0166 0180 0181 0182 0196 0197 0198 0212 0213 0214 0228 0229 0230 0244 0245 0246
0135 0151 0167 0183 0199 0215 0231 0247
10 11 12 13 14 15 16 17_
0256 0272 0288 0 304 0320 0336 0352 0368
0257 0273 0289 0305 0321 0337 035 3 0369
0258 0274 0290 0306 0322 0338 0354 0370
0259 0275 0291 0307 0323 0339 0355 0371
0260 0276 0292 0308 0324 0340 0356 0372
18 19 1A 1B IC 1D IE 1F_
0384 04 0 0 0416 0432 04 4 8 0464 0480 0496
0385 0401 0417 0433 0449 0465 0481 0497
0386 0387 0388 0402 0403 0404 0418 0419 0420 0 4 3 4 04 35 04 36 0450 0451 0452 0466 0467 0468 0 4 8 2 048 3 0484 0498 0499 0500
20 21 22 23 24 25 26 27_
0512 0513 0528 0529 0544 0545 0560 0561 0576 0577 0592 0593 0608 0609 0624 0625
0
1
0514 0515 0 5 3 0 05 31 0546 0547 0 5 6 2 056 3 0578 0579 0594 0595 0610 0611 0626 0627
28 29 2A 2B 2C 2D 2E 2F_
0640 0656 0672 0688 0704 0720 0 7 36 0752
0641 0657 067 3 0689 0705 0721 0 7 37 0753
30 31 32 33 34 35 36 37
0768 0784 08 00 0816 0832 0848 0864 0880
0769 0785 0801 0817 0833 0849 0365 0881
0770 0786 0802 0818 0 8 34 0850 0866 0882
38 39 3A 3B 3C 3D 3E 3F
0896 0912 0928 0944 0960 0976 0992 1008
0897 0913 0929 0945 0961 0977 0993 1009
0898 0899 0900 0914 0915 0915 0930 0931 0932 0 9 4 6 094 7 0 9 4 8 0 9 6 2 096 3 0 9 6 4 0978 0979 0980 0994 0995 0996 1010 1011 1012
0005 0021 0037 0053 0069 008 5 0101 0117
9
0009 0025 0041 0057 007 3 0089 0105 0121
A
B
c
D
E
F
0011 0027 004 3 0059 0075 0091 0107 0123
0012 0028 0044 0060 0076 0092 0108 0124
0013 0029 004 5 0061 0077 0093 0109 0125
0014 0 0 30 0046 0062 0078 0094 0110 0126
0015 0031 004 7 006 3 0079 0095 Olli 0127
0 1 3 6 Ol 37 0152 0153 0168 0169 0184 0185 0200 0201 0216 0217 0232 0233 0248 0249
0138 0139 0154 0155 0170 0171 0186 0187 0202 0203 0218 0219 0234 0235 0250 0251
0140 0156 0172 0188 0204 0220 0236 0252
0141 0157 0173 0189 0205 0221 0237 0253
0142 0158 0174 0190 0206 0222 0238 0254
0143 0159 0175 0191 0207 0223 0239 0255
0261 0262 0263 0277 0278 0279 0293 0294 0295 0309 0310 0311 0325 0326 0327 0 3 4 1 0 3 4 2 034 3 0357 0358 0359 0373 0374 0375
0264 0280 0296 0312 0328 0344 0360 0376
0265 0281 0297 0313 0329 0345 0361 0377
0266 0282 0298 0314 0330 0346 0362 0378
0267 0283 0299 0315 0331 0347 036 3 0379
0268 0284 0300 0316 0332 0348 0364 0380
0269 0285 0301 0317 0333 0349 0365 0381
0270 0286 0302 0318 0334 0350 0366 0382
0271 0287 0303 0319 0335 0351 0367 0383
0390 0406 0422 0438 0454 0470 0486 0502
0391 0407 0423 0439 0455 0471 0487 0503
0392 0408 0424 0440 0456 0472 0488 0504
0393 0409 0425 0441 0457 0473 0489 0505
0394 0410 0426 0442 0458 0474 0490 0506
0395 0411 0427 0443 0459 0475 0491 0507
0396 0397 0398 0399 0412 0413 0414 0415 0 4 2 8 0 4 2 9 0 4 3 0 0 4 31 0444 0445 0446 0447 0460 0461 0462 0463 0476 0477 0478 0479 0 4 9 2 0 4 9 3 0494 0495 0508 0509 0510 0511
0516 0517 0 5 3 2 0 5 33 0548 0549 0564 0565 0580 0581 0596 0597 0612 0613 0628 0629
0518 0534 0550 0566 0582 0598 0614 0630
0519 0535 0551 0567 0583 0599 06i5 0631
0520 0536 0552 0568 0584 0600 0616 0632
0521 0537 0553 0569 0585 0601 0617 0633
0522 0538 0554 0570 0586 0602 0618 06 34
0523 0524 0539 0540 0555 0556 0571 0572 0587 0588 0 6 0 3 06 04 0619 0620 0635 0636
0525 0541 0557 057 3 0589 0605 0621 0637
0526 0527 0542 0543 0558 0559 0574 0575 0590 0591 0606 0607 0622 0623 0638 0639
0 6 4 2 064 3 0658 0659 0674 0675 0690 0691 0706 0707 0722 0723 0 7 3 8 07 39 0754 0755
06 4 4 0660 0676 0692 0708 0724 0740 07 56
0646 0662 0678 06 94 0710 07 26 0742 0758
0647 0663 0679 0695 0711 0727 074 3 0759
0643 0664 0680 0696 0712 0728 0744 0760
0649 0665 0681 0697 0713 0729 0745 0761
0650 0666 0682 0698 0714 07 30 0746 0762
0651 0667 068 3 0699 0715 0 7 31 0747 076 3
0652 0668 0684 0700 0716 07 32 0748 0764
0653 0669 0685 0701 0717 07 33 074 9 0765
0654 0670 0686 0702 0718 07 34 0750 0766
0771 0787 0803 0819 0835 0651 0867 088 3
0772 0788 0804 0820 08 36 0852 0868 0884
0774 0775 0776 0790 0791 0792 0806 0807 0808 0822 0823 0824 0 8 38 08 39 0 8 4 0 0854 0855 0856 0870 0871 0872 0886 0887 0888
0777 0793 0809 0825 0841 0857 0873 0889
0778 0794 0810 0826 0842 0858 0874 0890
0779 0795
0780 0781 0796 0797
0782 0798
0902 0918 0934 0950 0966 0982 0998 1014
0905 0921 0937 0953 0969 0985 1001 1017
0907 09 2 3 U9'39 0955 0971 0987 100 3 1019
0908 0909 0924 0925 0940 0941 0956 0957 0972 097 3 0988 0989 1004 1005 1020 1021
0910 0926 0942 0958 0974 0990 1006 1022
2
3
0389 0405 0421 0437 0453 0469 0485 0501
L, 5
0901 0917 0933 0949 0965 0981 0997 1013
0903 0919 0935 0951 0967 09tí 3 0999 1015
8
0904 0920 0 9 36 0952 0968 0984 1000 1016
9
0010 0026 004 2 0058 0074 0090 0106 0122
A
B
C
D
E
F
0655 0671 0687 0703 0719 0 7 35 0751 0767
0783 0799 0815 0 8 2 7 0 8 2 8 0 8 2 9 08 30 0 8 3 1 084 3 0844 084 5 0846 0847 0859 0860 0861 0862 0863 0875 0876 0877 0878 0879 0891 0892 0 8 9 3 0894 0895
o a i i 0 8 1 2 0 8 1 3 0814
0911 0927 0943 0959 0975 0991 1007 1023
372
10 Anhang
DEZ HEX KPL 00 01 02 03 04 05 06 07 08 09 10 1 1 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
10.2
00 01 02 03 04 05 06 07 08 09 OA OB OC OD OE OF 10 1 1 12 13 14 15 16 17 18 L 19 U IA 1B 1C ID IE 1 F
DEZ HEX KPL
00 FF FE FD FC FB FA F9 F8 F7 F6 F5 F4 F3 F2 Fl FO EF EE ED EC EB EA E9 ES
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
E7
E6 E5 E4 E3 E2 El
20 21 22 23 24 25 26 27 28 29 2A 2B 20 2D 2E 2F 30 31
i¿
33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F
DEZ HEX KPL
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
EO DF DE DD DC DB DA D9 D8 D7 D6 D5 D4 D3 D2 DI DO CF CE CD CC CB CA C9 C8 C7 C6 C5 C4 C3 C2 C1
40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F
CO BF BE BD BC BB BA B9 B8 B7 B6 B5 64 B3 B2 B1 BO AF AE AD AC AB AA A9 A8 A7 A6 A5 A4 A3 A2 AI
96 97 98 99 100 101 102 103 104 105 106 107 108 109 1 10
111 1 12
1 1 3 114 115 1 16 117 1 18 119 120 121 122 123 124 125 126 127 128
60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71
AO 9F 9E 9D 9C 9B 9A 99 98 97 96 95 94 93 92 91 90 8F BE 80 8C 8B 8A 89 88 87 86 85 84 83 82 81 80
12
73 74 75 76 77 78 79 7A /B 7C 7D 7E 7F
ASCIl-Zeichen-Tabelle
HEX ASCII HEX A S C I I HEX A S C I I HEX ASCII HEX A S C I I HEX A S C I I HEX ASCII HEX A S C I I 00
NUL
10
DLE
20
30
0
40
@
50
P
60
70
P
01
SOH
11
DC t
21
1
31
i
41
A
§
51
'.SLA | -ÎC--U I I.LIJJ o- 118 : 2 xxxx ASL B 53 i ; 2 1 xxxx 68 2 7 •SL 78 •»ymimii ;2 xxxx i i •,SP. A — " KTI ' ! ; xxxx .'SR B —: KX1JXŒHM57 1 .2 77:3,6 67 : 2 i 7 xîx-xx -,SR — ..KTiniTMtJ 1 ! xfxpcx LSP, A —eîrnuTDfc- 11 1 2 xp
reg.
1F98
2
6
1F99
2
6
1F9A
2
6
1F9B
2 ¡6
TFR
CC. CC=>
reg.
1FA8
2
6
1FA9
2
6
tFAA
2
6
1FAB
2
TFR
DP, DP=>
reg.
1FB8
2
6
1FB9
2
6
1FBA
2
6
1FBB
2 ¡6
Befehl
Wirkung
A-Rec
B-Reg
CC-Reg
6
DP-Reg
L
Op
B
Z
Op
B Z
Op
B
Z
Op
EXG
A, A
reg.
1E8Ô
2
8
1E89
2 8
1E8A
2
8
1E8B
B 2:8
EXG
B, B
reg.
1E98
2
8
1E99
2
8
1E9A
2
8
1E9B
2,8
EXG
CC, C C < = > r e £ .
1EA8
2
8
1EA9
2 8
1EAA
2
8
1EAB
2
B
EXG
DP,
1EB8
2
8
1EB9
2
1EBA
2
8
1EBB
2
8
DPreg.
PC - R c g z B
Op
BlZ
D
=>
reg.
1FOO
2(6
1 FOI 2 i 6
2
b
_X. _*
=>
reg.
1F10
2|fi
1F11
?
fi
1 F02 2 1F1?
?:6
1F13
2:6
1F14
2:6
l U b
2
6
6
1F22
2 I 6
1F23
216
1F24
216
1F25
2
6
6
1F32
2
b
1F33!216
11-34
2 1 b U3b
1F42 [2
6
11-43
11-44
2
TF531 f " î r
TF5T
Op
B|Z
TFR
Y,
Y
=>
reg.
1F20
2
6
1F21
2
TFR
U,
U
=>
reg.
1F30
2
6
1F31
2
S,
S
=>
reg.
1F«I2T6
TFR TFR
PC, PC=>
Befehl
WCf
|2
r e g J ÏF5ÛT2"i5~ T F 4 T Z
Wirkung
D - teg
Y-f îeg
s - Reg
Wirkung
TFR TFR
X - teg
U - Reg
Befehl D,
D- !eg
8
6
Z
B'Z
1E00
!
Op
B|Z
Op
H03
2:6
11-04
Y-Rec Op
IB Z
Op
b
TF52
X-Re
Op
BIZ
Op
8
1E03
~U, Lk=>
EXG
S, S
EXG
PC,
r e i "ÏE3Ô
2
8
reg..
1É40
218
PCreg.
1È50
2
Ï Ë J T f
8
1E32
1E412
8
1E42
8 ÎË51
Wirkung
LDA
A
Reo
37
2
5+
PULS
S-Stapel
=>
Reg
Jb
2
b+
2+
5+
i ! 1 ; X|XQ :
3+
6+
S i : ; ,
!
s+ PC
S/U
Y
X
DP
;
10
b+
PULU
TO
i X,
101
BF 10
PSHS
6
30! 2+ 4+
"10" I
1
U-Stapel
3
33¡2+:4+ B7
I Reg.=>
DE
i
j
PSHU
7
31I2+I4+
—
STB
4
10
1
M
STD
FE
10
B
A
CCR
: 1 l!
!
10.5 Befehlstabellen des 6809
B e f e h l Wirkung CWAI SYNC SWI SWI2 SWI3
CC2 19
2
20
2
20
Befehl
Bedingung
BRA/LBRA BRN/LBRN BEQ/LBEQ BNE/LBNE BPL/LBPL BMI/LBMI BCC/LBCC BCS/LBCS BVC/LßVC BVS/LBVS BLT/LBLT BLE/LBLE BGE/LBGE BGT/LBGT BLO/LBLO BLS/LBLS BHS/LBHS BHT/CB'RT BSR/LBSR RTS RTI
immer nie Z = 0 Null Z = 1 nicht Null N = 0 positiv N = 1 neqativ C = 0 kein übertraq C = 1 Übertrag V = 0 kein uberlauf V = 0 Überlauf 2er K p l . < 0 2 e r K p l . =0 2er K p l . > 0 pos.Zahl < 0 p o s . Z a h l =0 pos.Zahl > 0 Unterproqr.Verzw. Rücksjjrung U n t e r p r . Rücksprung I n t e r r t .
I n d i z . Adr. 2 . B y t e X-Reg Operand Abstand Code +B 84 0 U ,R .R+ 0 r e g + 1 80 0 ,R++ 0 reg+2 81 u 82 0 req-1 0 ,-R 83 0 ,—R 0 reg-2 Od +d,R +4bit 0 -d,R -4bit 1d 0 88 dd,R 8bit 1 89 dddd.R 1 16bit A,R A-Reg. 8b ü 85 B,R B-Reg. 0 D,R 8B O-Reg. ü Operand dd.PCR dddd.PCR
Abstand 8bit 16bit
+z u
2 3 2 3 1 1 1 4 1 1 4
Up 20 21 27 26 2A 2R 24 25 28 29 2D 2F 2C 2E 25 23 24 22 80 39 3B
kurz B Z 2 3 2 3 2 3 2 3 2 3 ? 3 2 3 2 3 2 3 2 3 2 3 2 3 2 3 2 3 2 3 2 3 2 3 2 3 2 7 1 5 1 5/1E
Y-Reg U-Reg Code +B +Z Code +B A4 U U 14 U 0 2 CU AO u ü 3 C1 A1 ü 0 2 C2 A2 0 0 3 C3 A3 0 0 1 4d 0 2d 0 1 bd 0 3d 1 1 C8 i 1 A8 2 4 C9 A9 2 Ab U 1 Cb ü 0 1 C5 A5 0 Aß 0 4 CB U
2.Byte 3 . Byte Code +B +Z 8C 1 1 dd 8D 2 5 dd
Abstand 2 . B y t e 3 . Byte Code +B +Z 9C 1 4 dd 9D 2 8 dd 9F 2 5 nn
(dd.PCR) 8 b i t (dddd.PCR) 1 6 b i t (nnnn) absöl.
Z 5 5 5/6 5/6 5/6 5/6 5/6 5/6 5/6 5/6 5/6 5/6 5/6 5/6 5/6 5/6 5/6 5/6 9
+z u
2 3 2 3 1 1 1 4 1 1 4
S-Reg Code +B L4 U
tu t1
E2 E3 6d /d E8 E9 tb E5 kB
u
0 0 0 0
u
1 2
u 0 0
+z u
2 3 2 3 1 1 1 4 1 1 4
3.Byte
4.Byte
dd dd
dd
3.Byte
4.Byte
dd dd
dd
4.Byte
dd
I n d i r . A d r . 2 . B y t e X- Reg Y- Reg Operand Abstand Code + B I + Z Code + B I + Z 94 0 0 3 B4 ö! 3 ( ,R) 91 Ol 6 B1 ( ,R++) 0 reg+2 0 6 93 0 6 B3 Ol 6 ( ,—R) 0 reg-2 98 (dd.R) 8bit 1 4 B8 1 ! 4 (dddd.R) 1 6 b i t 99 2 7 B9 2 i 7 A-Reg. 96 (A,R) Ol 4 B6 0 4 Ol 4 B-Re^. 95 (B,R) Ol 4 B5 (D,R) 9B D-Reg. 0 | 7 BB 0| 7
Operand
lang 0p B 16 3 1021 4 1027 4 1026 4 102A 4 102B 4 1024 4 1025 4 1028 4 1029 4 102D 4 102F 14 102C 4 102 E 4 1025 4 1023 4 1024 4 1022 4 17 3
U-Reg S-Reg Code|+B +Z Code| +B|+Z D4 \ 0 3 F4 ; 0! 3 D1 : 0 6 F1 Ol 6 ÖT~6 D3 I 0 6 F3 08 ' 1 - 4 F8 11 4 09 ' 2 i 7 F9 ! 2 7 D6 ! 0 ' 4 F6 0 4 D5 I 0 ! 4 F5 0 4 DB | 0 7 FB 0 7
4.Byte
dd nn
379
380
10 Anhang
Befehl Wirkung CLRA
A