Kapitel 19: Mikrocomputer-Grundlagen

Kapitel 19: Mikrocomputer-Grundlagen Das gemeinsame Merkmal von Mikrocomputern ist darin zu sehen, daß alle wesentlichen Baugruppen eines Computers i...
Author: Matilde Frei
246 downloads 0 Views 1MB Size
Kapitel 19: Mikrocomputer-Grundlagen

Das gemeinsame Merkmal von Mikrocomputern ist darin zu sehen, daß alle wesentlichen Baugruppen eines Computers in einer einzigen oder in wenigen hochintegrierten Schaltungen zusammengefaßt sind. Dabei reicht das Spektrum der Leistungsfähigkeit vom einfachen Schaltwerk bis zur komplexen Rechenanlage. Derart leistungsfähige Mikrocomputer bezeichnet man auch als „Micro Mainframe“. 19.1

Grundstruktur eines Mikrocomputers Gemäß dem Blockschaltbild in Abb. . besteht ein Mikrocomputer im wesentlichen aus vier Funktionseinheiten: ) Der wichtigste Teil ist der Mikroprozessor. Er stellt die zentrale Steuer- und Recheneinheit dar und wird deshalb auch als Central Processing Unit (CPU) bezeichnet. ) Der Programmspeicher enthält die Folge der zu bearbeitenden Befehle, also das Programm. Er besteht in der Regel aus einem EPROM, weil dann das Programm auch nach Netzausfall erhalten bleibt. Für häufig zu ändernde Programme werden RAMs als Speicher verwendet, die in der Regel von einem externen Massenspeicher (z.B. Floppy Disk oder Festplatte) geladen werden. ) Im Datenspeicher stehen die Variablen. Er ist deshalb immer ein RAM. ) Über die Ein-/Ausgabeschaltungen erfolgt die Kommunikation mit den Peripheriegeräten wie z.B. Datensichtgerät, Tastatur, Massenspeicher usw. Die Kommunikation der Zentraleinheit mit den übrigen Baugruppen erfolgt gemäß Abb. . über drei Bus-Systeme. Über den Adreßbus gibt der Mikroprozessor die gewünschte Speicheradresse an. Über den Kontrollbus legt er fest, ob gelesen oder geschrieben werden soll. Über den Datenbus findet der Datenaustausch statt. Der Datenbus ist im Unterschied zu den beiden anderen bidirektional. Das Blockschaltbild in Abb. . sagt noch nichts über die Leistungsfähigkeit der CPU und die Kapazität der Arbeitsspeicher aus. Es ist nichts anderes als das Blockschaltbild eines Computers schlechthin. Je nach der Größe des installierten



19 Mikrocomputer-Grundlagen

Abb. 19.1. Blockschaltbild eines Mikrocomputers

Speichers und der Rechenleistung (gemessen in Million Instructions Per Second) unterscheidet man ganz grob folgende Größenklassen: Klassifikation

Speicherkapazität

Wortbreite

Rechenleistung

Mikrocomputer Personal Computer Workstation

 k : : :  k byte  M: : :  M byte  M: : :  M byte

: : :  bit  bit : : :  bit

, : : :  MIPS  : : :  MIPS : : :  MIPS

Der Durchbruch der Mikrocomputer erfolgte mit der Einführung monolithischer Mikroprozessoren. Infolge rasch fallender Preise wurde neben der Anwendung als einfacher Universalrechner auch der Einsatz in der Geräteentwicklung interessant, wo sie, fest programmiert. relativ komplexe Rechen- und Steueraufgaben übernehmen können. Auf diese Weise kommt man für viele Anwendungen mit einer Standard-Hardware-Schaltung aus, während sich die eigentliche Entwicklungsarbeit mehr und mehr auf die Erstellung der Programme (Software) verlagert. Diese Tendenz wird durch die Einführung der Ein-Chip-Mikrocomputer noch verstärkt. Solche hochintegrierten Schaltungen enthalten neben dem Prozessor eine Ein-/Ausgabe-Einheit sowie ein kleines RAM und ein ROM. Ein solcher Mikrocomputer ist also ohne äußere Zusätze bereits funktionsfähig.

19.2 Arbeitsweise eines Mikroprozessors



19.2

Arbeitsweise eines Mikroprozessors 19.2.1 Innerer Aufbau In diesem Abschnitt wollen wir die Arbeitsweise und die Struktur der Befehle eines Mikroprozessors etwas näher untersuchen. Das Blockschaltbild eines Mikroprozessors ist in Abb. . dargestellt. Man erkennt drei Funktionsblöcke: die Ausführungs-Einheit, die Ablauf-Steuerung und das Bus-Interface. Die Ausführungs-Einheit bearbeitet die arithmetischen und logischen Befehle. Die beteiligten Operanden stehen entweder in den Datenbzw. Adreß-Registern oder werden über den internen Bus angelegt. Die AblaufSteuerung besteht aus dem Befehls-Decoder und dem Programm-Zähler. Der Programm-Zähler ruft die Befehle des Programms nacheinander auf. Der Befehls-Decoder löst dann die zur Ausführung des Befehls erforderlichen Schritte aus. Die Ablauf-Steuerung stellt ein Schaltwerk dar (vergleiche Kapitel . auf S. ), dessen Wahrheitstafel bei neueren Mikroprozessoren in einem ROM gespeichert ist. Den Inhalt dieses ROMs bezeichnet man auch als Mikroprogramm. Die externen Befehle bestimmen in diesem Fall die Einsprungadressen in das Mikroprogramm. Beim Start eines Programms wird der Programm-Zähler auf die Start-Adresse gesetzt. Diese Adresse wird über den Adreß-Bus an die Speicher übertragen. Bei einem auf dem Kontrollbus übertragenen Lesesignal erscheint der Inhalt des betreffenden Speichers auf dem Daten-Bus und wird in dem Befehls-Decoder gespeichert. Der Befehls-Decoder löst dann die zur Durchführung des Befehls notwendigen Operationen aus. Dazu wird, wie wir noch sehen werden, eine unterschiedliche Anzahl von Maschinenzyklen benötigt. Der Befehls-Decoder setzt

Abb. 19.2. Innerer Aufbau eines Mikroprozessors



19 Mikrocomputer-Grundlagen Flag-Register

bit

Akkumulator A

bit

Akkumulator B

bit

Index-Register

 bit

Stapel-Zeiger

 bit

Programm-Zähler

 bit

Tab. 19.1. Zusammenstellung der Register im MC  -Mikroprozessor, die für den Programmierer zugänglich sind

nach Ausführung des Befehls den Programm-Zähler auf die Adresse des nächsten Befehls. Um möglichst konkrete Aussagen machen zu können, beziehen wir uns im folgenden auf einen realen bit-Mikroprozessor. Die Angabe „ bit“ bezieht sich auf die Wortbreite des Datenbusses. Zur Einführung ist der Basistyp der  -Familie besonders geeignet, weil er einfach aufgebaut, übersichtlich strukturiert und dennoch recht leistungsfähig ist. Es gibt inzwischen von Motorola und anderen Herstellern eine Reihe von Weiterentwicklungen, die zwar deutlich leistungsfähiger sind, aber wegen der vielfältigen Möglichkeiten auch schwieriger zu verstehen sind. Eine Übersicht folgt in Abschnitt .. Tabelle . zeigt die für den Programmierer zugänglichen Arbeitsregister des Mikroprozessors MC  . Die meisten arithmetischen Operationen werden mit Hilfe der Akkumulatoren A und B durchgeführt. Das Indexregister dient zur Speicherung häufig benutzter Adressen, der Stapel-Zeiger zur Organisation der Unterprogramm-Technik. Das Flag-Register (Condition Code Register) enthält einige Informationen über das zuletzt erhaltene Rechenergebnis.

19.2.2 Befehls-Struktur Wie schon erwähnt, arbeitet der Mikroprozessor MC   mit einer Adressenwortbreite von  bit (=  byte) und einer Datenwortbreite von bit (=  byte). Solche langen Bitkombinationen sind für den Programmierer sehr schwer zu lesen. Man benutzt deshalb eine abgekürzte Schreibweise. Dazu faßt man jeweils  bit zu einer Ziffer zusammen. Diese kann demnach  verschiedene Werte annehmen. Deshalb bezeichnet man den entstehenden Code als HexadezimalCode oder kurz Hex-Code. Für die Ziffern  bis  kann man die bekannten Dezimalziffern verwenden. Die Ziffern „zehn“ bis „fünfzehn“ werden durch die Großbuchstaben A bis F dargestellt. Damit ergibt sich die in Tab. . dargestellte Zuordnung.



19.2 Arbeitsweise eines Mikroprozessors Dual        

Hex       

Dezimal       

Dual        

Hex

 A B C D E F

Dezimal

      

Tab. 19.2. Vergleich von Dual-, Hex- und Dezimaldarstellung

Da die Zahlenbasis  eine Zweierpotenz ist, gibt es zwei verschiedene Möglichkeiten zur Umrechnung einer mehrstelligen Hex-Zahl in die entsprechende Dezimalzahl. Man kann sie einerseits gemäß der Beziehung ZHex = zN   N  + zN   N  + : : : + z   + z umrechnen. Die andere Möglichkeit besteht darin, jede Ziffer als Dualzahl darzustellen und diese aneinanderzureihen. Auf diese Weise entsteht die entsprechende Dualzahl, die man mit den bekannten Verfahren bearbeiten kann. Folgendes Beispiel soll dies verdeutlichen:

= 

Dez A Hex =    +    +    + A Hex = (           ) = 

Dez Die  bit-Dualzahlen für die Adressierung lassen sich also in der verkürzten Schreibweise durch stellige Hexzahlen darstellen, die bit-Datenworte durch stellige Hexzahlen. Die verschiedenen Befehle, die der Mikroprozessor ausführen kann, werden in der Maschinensprache (Op Code) durch bit-Worte, d.h. stellige Hexzahlen bezeichnet. Daneben werden noch symbolische Bezeichnungen verwendet (Mnemonics), die eine sprachliche Gedächtnisstütze darstellen. Der Befehl „Lade Akkumulator A“ wird beispielsweise mit „LDAA“ abgekürzt. Diese Bezeichnung kann der Mikroprozessor nicht verstehen. Man muß sie also zuerst in die Maschinensprache übersetzen. Dazu kann man eine Tabelle oder ein spezielles Übersetzerprogramm (Assembler) benutzen. Der Befehl LDAA ist noch unvollständig. Als nächstes muß man dem Mikroprozessor angeben, womit der Akkumulator geladen werden soll, d.h. auf welchen Operanden der Befehl angewendet werden soll. Dafür gibt es verschiedene Möglichkeiten.

 

19 Mikrocomputer-Grundlagen

1) VollstÆndige Adressierung (extended\) Es wird mit den im Programm auf den Befehl folgenden zwei Bytes die vollständige  bit-Adresse des Speichers angegeben, dessen Inhalt in den Akkumulator A geladen werden soll. Damit ergibt sich folgende Struktur: Befehl

B

Oberes Adressenbyte

z.B.

Unteres Adressenbyte

A

LDAA Mnem.

A





Der Maschinencode (Op Code) für den Befehl LDA A (ext) lautet beim MC  : B Hex =   . Bei dem oben angeführten Beispiel haben wir die Adresse A Hex =     eingetragen. 2) VerkÜrzte Adressierung (direct\) Es wird im Programm nur eine Ein-Byte-Adresse angegeben; das obere Byte wird vom Mikroprozessor automatisch auf Null gesetzt. Der entsprechende Maschinencode für den Befehl LDA A (dir.) lautet „“. Bei dieser Adressierung kann man mit verringertem Aufwand die Adressen  bis FFHex =  bis Dez (Base Page) aufrufen. Man wird in diesem Bereich also zweckmäßigerweise die meistgebrauchten Variablen und Konstanten speichern. Damit ergibt sich folgende Struktur: Befehl Adressenbyte



z.B.



Mnem.

LDAA 

In dem Beispiel wird der Inhalt des Registers  Hex =     eingelesen. 3) Indizierte Adressierung (indexed\) Bei dieser Adressier-Art wird der Inhalt desjenigen Speichers eingelesen, dessen Adresse im Indexregister steht. Zusätzlich hat man die Möglichkeit, mit einer

bit-Zahl einen „Offset“ anzugeben. Auf diese Weise lassen sich vereinfacht Speicher oberhalb einer beliebig wählbaren  bit-Indexadresse aufrufen. Damit ergibt sich folgende Struktur: Befehl Offset–Byte

z.B.

A 

Mnem.

LDAA, X 

Der Maschinencode für den Befehl LDA A (inx.) lautet A Hex =   . Wir nehmen einmal an, im Index-Register sei die Adresse A  Hex gespeichert. Dann

 

19.2 Arbeitsweise eines Mikroprozessors

wird bei obigem Beispiel der Inhalt des Speichers A  Hex +  Hex = A FHex eingelesen. Die Offsetangabe wird vom Mikroprozessor als positive bit-Zahl interpretiert. Ein negativer Offset ist nicht vorgesehen. Der größtmögliche Offset beträgt demnach:   = FFHex = Dez Im Abschnitt .. (Sprungbefehle) werden wir noch eine weitere Offsetangabe kennenlernen. Sie wird dort zur Spezifizierung relativer Sprünge benutzt. In diesem Zusammenhang wird die Offsetangabe jedoch als bit-Zahl in Zweierkomplement-Darstellung interpretiert. 4) Unmittelbare Adressierung (immediate\) Es wird das auf den Befehl folgende Byte unmittelbar eingelesen: Befehl



z.B.

Datenbyte

F

Mnem.

LDAA # F

Der entsprechende Maschinencode für LDA A (imm.) lautet Hex . Bei dem Beispiel wird der Ausdruck FHex =   in den Akkumulator A eingelesen. Im Unterschied zu dem genannten Beispiel benötigt man zum unmittelbaren Laden des Indexregisters und des Stapelzeigers zwei Datenbytes, da ihre Wortbreite  bit beträgt. 5) Implizite Adressierung (inherent\) Bei dieser Adressier-Art braucht der Operand nicht näher spezifiziert zu werden, da er bereits durch den Befehl selbst festgelegt ist: Befehl

z.B.

F

Mnem.

CLRA

Das Beispiel  FHex =  CLRA bedeutet: Lösche den Akkumulator A. Man sieht, daß dieser Befehl ohne weitere Angaben ausgeführt werden kann. Symbolische Schreibweise (Mnemonic Code) Bei der Aufstellung von Programmen im symbolischen Code sind einige Konventionen gebräuchlich, die bei allen Assemblern sehr ähnlich sind, während die mnemonischen Abkürzungen selbst je nach Prozessorfamilie verschieden sein können. Bei der mnemonischen Beschreibung wird folgendes vereinbart: Der Operand wird hinter den Befehl geschrieben. Dabei werden Hex-Zahlen mit einem $-Zeichen gekennzeichnet. Zahlen ohne Kennzeichen sind Dezimalzahlen. Sie werden beim Assemblieren in die entsprechende Hex-Zahl übersetzt. Mit einem Anführungszeichen werden ASCII-Zeichen charakterisiert. Beim Assemblieren

 

19 Mikrocomputer-Grundlagen

werden sie gemäß Tab. . auf S.  durch die entsprechende Bitkombination ersetzt. In Einzelfällen gibt man den Operanden als ausgeschriebene Bitkombination an. Sie wird durch ein &-Zeichen charakterisiert. Eine andere Darstellungsmöglichkeit eines Operanden ist die Verwendung einer Marke (Label). Sie wird durch eine Wertzuweisung definiert, z.B. M EQUAL $ A: Aufgrund dieser Zuweisung setzt der Assembler überall dort, wo M steht, die Hex-Zahl A ein. Die Anweisung EQUAL wird vom Assembler nur für die Übersetzung benutzt und erscheint nicht im Maschinenprogramm. Man nennt solche Anweisungen Assembler-Direktiven. Besonders häufig werden Marken zur Kennzeichnung von Sprungadressen verwendet. In diesem Fall geschieht die Wertzuweisung nicht explizit durch die Direktive EQUAL, sondern erfolgt implizit dadurch, daß man die Marke bei der entsprechenden Adresse vor den mnemonischen Befehl schreibt. Die Adressierart eines Befehls wird nicht explizit angegeben, sondern ergibt sich indirekt aus der Schreibweise des Operanden gemäß der Übersicht in Tab. .. Es ist möglich, jeden Operanden durch eine Marke zu ersetzen. In der Regel wird vereinbart, daß das erste Zeichen einer Marke ein Buchstabe ist. Es wird kein Sonderzeichen vorangestellt. Operanden ohne Sonderzeichen sind demnach entweder Dezimalzahlen oder Marken. Das Unterscheidungskriterium ist der Beginn mit einem Buchstaben. Wenn der Assembler eine Marke erkennt, holt er sich den zugehörigen Operanden aus der Markentabelle und ermittelt anschließend die Adressierart gemäß Tab. .. Tabelle . zeigt ein Programmbeispiel in symbolischer Schreibweise. Auf der linken Seite steht die Übersetzung der Befehle in den Maschinencode (Op Code) und die zugehörige Adresse. Es ist üblich, auch im Maschinencode den zu einem Befehl gehörigen Operanden mit auf eine Zeile zu schreiben. Man erhält

Adressierart

Operand

Interpretation

Extend

$

Adresse Hex

Direct

$

Adresse Hex

Indexed

$

Immediate

#$ # #& #”

Inherent

,X ,X

Offset Hex Offset Dezimal Daten Hex Daten Dezimal Daten Binär Daten ASCII Daten impliziert

Tab. 19.3. Übersicht über die Adressierarten und ihre Darstellung in symbolischer Schreibweise

 

19.2 Arbeitsweise eines Mikroprozessors Adr.

Hex-Code

     

B A 

  A 

 F F   Assembler

Marke



Mnem.

Operand

Kommentar

LDA A LDA A LDA A LDA A CLR A

$ A

$  $  , X # $ F

Extended Direct Indexed Immediate Inherent

 Programmierer



Tab. 19.4. Beispiel für die Assembler-Schreibweise eines Programms

die zugehörige Adresse durch Weiterzählen. Bei dem Beispiel in Tab. . steht demnach auf der Adresse  der Operand F. 19.2.3 AusfÜhrung eines Befehls Die Ausführung eines Befehls erfordert in der Regel mehrere Maschinenzyklen.  BHex wollen wir die einzelnen Schritte Anhand des Beispieles LDA A (ext.) = erläutern, die der Mikroprozessor nacheinander durchführt: Wenn der Programmzähler die Adresse M aufruft, bei der der Befehl gespeichert ist, antwortet der Speicher auf den Datenleitungen mit dem Befehlscode, also in unserem Fall mit BHex . Der Mikroprozessor dekodiert den Befehl und stellt fest, daß er die nächsten zwei Bytes aus dem Programmspeicher holen muß, um die Adresse des Operanden zu erhalten. Dazu legt er die Adresse M +  an den Adressenbus und liest das zugehörige Byte in einen Zwischenspeicher. Im nächsten Zyklus gibt er die Adresse M +  aus und liest das zugehörige Byte in einen zweiten Zwischenspeicher. Im vierten Zyklus legt der Mikroprozessor die beiden gespeicherten Bytes (also die  bit-Adresse des Operanden) nebeneinander an die entsprechenden Adressenleitungen und liest das auf dem Datenbus erscheinende Byte in den Akkumulator A ein. Für die Ausführung des Befehls werden also vier Maschinenzyklen benötigt. Sie sind in Tab. . zusammengestellt. Man kann sich entsprechend überlegen, daß für den Befehl LDA A (dir.) drei Zyklen und für den Befehl LDA A (imm.) zwei Zyklen benötigt werden.

Zyklus

Adressenbus

Datenbus



Adresse M des Befehls

Befehlscode



Adresse M + 

oberes Byte der Operanden-Adresse



Adresse M + 

unteres Byte der Operanden-Adresse



Adresse des Operanden

Operand

Tab. 19.5. Aktivität auf dem Adressen- und Datenbus bei der Verarbeitung des Befehls LDA A(ext)

 

19 Mikrocomputer-Grundlagen

Die Zahl der Zyklen ist ein direktes Maß für die Verarbeitungszeit eines Befehls. Beim MC   ist die Zykluszeit gleich der Taktperiode. Bei einer Taktfrequenz von  MHz ergibt sich demnach eine Zykluszeit von  s, d.h. der Befehl LDA A (ext.) wird in  s ausgeführt. 19.3

Befehls-Satz In diesem Abschnitt wollen wir einen Überblick über die Befehle des MC   geben. Er kann  verschiedene Operationen ausführen, die meist auf verschiedene Operanden angewendet werden können. Unter Berücksichtigung der vielfältigen Adressier-Arten ergibt sich insgesamt ein Satz von  Instruktionen. 19.3.1 Speicher-Operationen In Tab. . haben wir die Operationen zusammengestellt, mit denen ein Datenaustausch zwischen verschiedenen Registern vorgenommen werden kann. Bei der Kurzbeschreibung bedeutet A: B: [M]: X: XH : XL : C:

Inhalt des Akkumulators A Inhalt des Akkumulators B Inhalt des Speichers mit der Adresse M Inhalt des Indexregisters oberes Byte des Indexregister-Inhaltes unteres Byte des Indexregister-Inhaltes Übertragsbit im Flag-Register

Operation

Sym- Adressier-Arten bolisch ext. dir. Lade Akkumulator LDA A B  LDA B F D Speichere Akkumulator STA A B  STA B F D Dupliziere TAB Akkumulator TBA Lösche CLR F CLR A CLR B Lade Indexregister LDX FE DE Speichere Indexregister STX

FF

DF

Kurzbeschreibung inx. A E A E

F

EE EF

Tab. 19.6. Speicherbefehle des Mikroprozessors MC  

imm. inher.

 [M] ! A C [M] ! B A!M B!M  A ! B  B ! A  ! M F  ! A F  ! B CE [M] ! XH ; [M + ] ! XL XH ! M; XL ! M + 

 

19.3 Befehls-Satz

19.3.2 Arithmetische und logische Operationen In Tab. . sind die Befehle für arithmetische und logische (Boolesche) Operationen zusammengestellt. Die logischen Verknüpfungen werden für jedes Bit der Datenworte einzeln durchgeführt und an der entsprechenden Stelle des ErgebnisWortes ausgegeben. Für die und-Verknüpfung ergibt sich beispielsweise A:

 

B:

 

A  B:

 

Der Befehls-Satz an arithmetischen Operationen ist bei den gängigen Mikroprozessoren sehr begrenzt. Es stehen neben der Zweierkomplementbildung nur Addition und Subtraktion zur Verfügung. Die Addition kann durch Anwendung des Befehls DAA (Decimal Adjust) auch auf BCD-Zahlen angewendet werden. Dabei wird nach der Addition zu Pseudotetraden, deren Wert zwischen  und  liegt,  addiert. Der dabei entstehende Übertrag wird wie der normale Übertrag in die nächst höhere Dekade übertragen. Komplexere arithmetische Operationen müssen im Benutzerprogramm aus den Grundoperationen zusammengesetzt werden. Erst die neueren Prozessoren verfügen auch über Multiplikations- und Divisionsbefehle. Als Beispiel für die Anwendung des Befehls-Satzes wollen wir das Programm für die Addition zweier  bit-Zahlen aufstellen. Der erste Summand sei in den beiden Registern  und  gespeichert, und zwar das obere Byte in  und das untere Byte in . Der zweite Summand steht auf dieselbe Weise in den Registern  und  zur Verfügung. Das Ergebnis soll nach  und  gespeichert werden. Im ersten Schritt werden die beiden unteren Bytes der Dualzahlen addiert, also die Inhalte der Register  und . Da kein Übertrag von einer vorhergehenden Zahl zu berücksichtigen ist, wird der Befehl ADD A verwendet. Das Ergebnis wird in das Register  abgespeichert. Im zweiten Schritt werden die oberen Bytes mit Hilfe des Befehls ADC A addiert. Dabei wird der Übertrag der vorhergehenden Addition mit berücksichtigt. Er wird von der ALU aus dem Flag-Register abgerufen. Das Ergebnis wird in das Register  abgespeichert. Damit ergibt sich das in Tab. . aufgelistete Programm. Man kann mit demselben Programm auch zwei stellige BCD-Zahlen addieren. Dazu ersetzt man die beiden als Platzhalter eingefügten Befehle NOP durch die BCD-Korrektur DAA.

FB

ADD B



Bilde Zweierkomplement NEG NEG A



DEX

A A A

A

DEC A DEC B

DEC

Tab. 19.7. Arithmetische und logische Befehle der Mikroprozessors MC  

Erniedrige um 

C 

X

A B

[M]

B X

minus  ! X

minus  ! A minus  ! B

minus  ! M

plus  ! B plus  ! X

plus  ! M plus  ! A

!A !B [M] A

!M

INC B INX

!A

!A !B

A minus [M] minus C ! A B minus [M] minus C ! B

A minus B

A minus [M] B minus [M]

A korrigiert ! A

B plus [M] plus C ! B

A() B()

C

!A

!B

!A

A plus [M] plus C ! A

A plus B

B plus [M]

A plus [M]



 





B

inher.

[M]()

 C

 C

C



CB

B

imm.

Kurzbeschreibung



A E

A E

E

A

EB

AB

inx.

C

 D

 D

D



DB

B

dir.

INC A

INC

NEG B C

B F

Subtrahiere mit Übertrag SBC A SBC B

Erhöhe um 

F

SUB B SBA

B

SUB A

Subtrahiere

F

ADC B DAA

B

ADC A

BCD-Korrektur

Addiere mit Übertrag

BB

ADD A

Addiere ABA

SymAdressier-Arten bolisch ext.

Operation

  19 Mikrocomputer-Grundlagen

Tab. 19.7. Fortsetzung

Tue nichts

Schiebe rechts, logisch





LSR B NOP





LSR A





ASR B LSR



ASR A





ROR B





ROR A





ASL B ROR





ASL A

ASL



 C

A CA

C

 

inher.



A E AA EA A

E



imm.



 D A DA 

D



inx.

ROL B

B F BA FA B

F



dir.

ROL A

Schiebe rechts, arithmetisch ASR

Rotiere rechts

Schiebe links

Rotiere links

EXKLUSIV-ODER

ODER

UND

COM COM A COM B AND A AND B ORA A ORA B EOR A EOR B ROL

Bilde Einerkomplement



Sym- Adressier-Arten bolisch ext.

Operation

C

b

b

!

!

b

C

!

C

!

b

b

!

b

b 

Erhöhe Programmzähler um Eins

   B 

A

A

b

b

! !

C

C

!M !A !B [M] ! A [M] ! B [M] ! A [M] ! B [M] ! A [M] ! B

!    b B   [M]   ! 

   B   [M]   

A

   B   [M]   

A

   B   [M]   

A

[M]() A() B() A B A+ B+ A˚ B˚  [M]   

Kurzbeschreibung

19.3 Befehls-Satz 



19 Mikrocomputer-Grundlagen

Adr.

Hex-Code

Marke

Mnem.

Operand

Kommentar

      B C E

  B            

AD 

LDA A ADD A NOP STA A LDA A ADC A NOP STA A RTS

$  $ 

Addition der beider unteren Bytes

$  $  $ 

Addition der beider oberen Bytes

$ 

Tab. 19.8. Programm zur Addition von zwei  bit-Zahlen

19.3.3 Sprungbefehle Das Flag-Register Eine besondere Stärke der Mikroprozessoren liegt darin, daß man vielfältige logische Verzweigungen durchführen kann. Dabei werden verschiedene Flags im Flag-Register (Condition Code Register) abgefragt. Das Flag-Register ist ein bitRegister. Die beiden oberen Bits (Bit  und Bit ) sind konstant . Die einzelnen Flags sind nach folgendem Schema angeordnet:  Bit Dabei bedeutet C: V: Z: N: I: H:



H

I

N

Z

V

C Bit 

Übertrags-Flag (Carry) Überlauf Flag bei Zweierkomplementdarstellung (Overflow) Null-Flag (Zero) Minus-Flag bei Zweierkomplementdarstellung (Negative) Interrupt-Flag Zwischenübertrag von Bit  (Half Carry)

Die einzelnen Flags werden bei allen Speicher- und Rechenoperationen gesetzt bzw. gelöscht. Wird z.B. eine Zahl in den Akkumulator geladen, deren Bit gleich Eins ist, wird das Flag N auf  gesetzt, da die Zahl in der Zweierkomplementdarstellung negativ zu interpretieren ist. Wird bei einer Addition oder Subtraktion die in Abschnitt .. auf S.  beschriebene Überlaufbedingung für Zweierkomplementdarstellung erkannt, wird das Überlauf Flag V gesetzt. Das Null-Flag wird gesetzt, wenn als Ergebnis einer Operation alle Bits im Ergebnisregister gleich Null sind.

 

19.3 Befehls-Satz Operation Vergleiche

Bit-Test

SymAdressier-Arten bolisch ext. dir. CMP A B  CMP B F D CBA CPX BC C

BIT A BIT B Speicher-Test TST TST A TST B Setze Übertrags-Flag SEC Lösche Übertrags-Flag CLC Setze Überlauf-Flag SEV Lösche Überlauf-Flag CLV Setze Interrupt-Maske SEI Lösche Interrupt-Maske CLI

B F D

 D

Kurzbeschreibung inx. A E AC A E D

imm. inher.

 A minus [M] C B minus [M]  A minus B

C XH minus [M], XL minus [M + ]

 A  [M] C B  [M] [M]   D A   D B   D  ! C C  ! C B  ! V A  ! V F  ! I E  ! I

Tab. 19.9. Befehle des Mikroprozessors MC  , die nur auf das Flag-Register wirken

Es gibt eine Reihe von Operationen, bei denen das Ergebnis lediglich in Form von Flag-Zuständen ausgegeben wird. Wenn man z.B. wissen möchte, ob die Zahl im A-Register größer ist als die Zahl im B-Register, kann man mit Hilfe des Befehls SBA (Subtrahiere) die Differenz A  B bilden und anschließend das Vorzeichen-Flag N auswerten. Ist es gesetzt, war A < B. Der Wert der Differenz ist jetzt im A-Register gespeichert. Interessiert man sich nicht für ihn, kann man statt SBA den Befehl CBA anwenden. Bei ihm wird ebenfalls die Differenz A  B berechnet und das Flag-Register gesetzt. Der Wert der Differenz wird jedoch nicht gespeichert. Man hat anschließend also die ursprünglichen Operanden im A- und B-Register zur Verfügung. Eine Reihe weiterer Befehle, bei denen außer den Flags kein Ergebnis gespeichert wird, ist in Tab. . zusammengestellt. Unbedingte SprÜnge Ein unbedingter Sprung wird ohne Abfrage des Flag-Registers durchgeführt. Dabei wird zwischen absoluter und relativer Adressierung unterschieden. Bei absolut adressierten Sprüngen (Jump) gibt man die Adresse an, auf die der ProgrammZähler gesetzt werden soll. Dabei kann man wiederum zwei Methoden anwenden, nämlich die vollständige Adressierung und die indizierte Adressierung. Die Adresse wird dabei entweder als Hexzahl oder als Marke angegeben. So ergeben sich mit Tab. . die in Abb. . gezeigten Beispiele:

      

 C F E D A B

BNE BEQ BCC BLS BHI BCS BVC BVS BGE BLE BGT BLT BPL BMI SWI RTI WAI

D



BSR JSR RTS

JMP BRA

rel.

Symbolisch Adressier-Arten

Tab. 19.10. Sprungbefehle des Mikroprozessors MC  

Unbedingte Sprünge Springe immer Verzweige immer Unterprogramm-Sprünge Verzweige ins Unterprogramm Springe ins Unterprogramm Kehre zurück vom Unterprogramm Bedingte Sprünge Verzweige wenn 6=  Verzweige wenn =   Verzweige wenn       Verzweige wenn   Bedingung bei  Verzweige wenn >  Betrags-Arithmetik    Verzweige wenn <   Verzweige wenn V =     Verzweige wenn V =     Verzweige wenn   Bedingung bei Zweierkomplement-Arithmetik Verzweige wenn      Verzweige wenn >      Verzweige wenn <  Verzweige wenn b =  Verzweige wenn b =  Interrupt-Sprünge Software Interrupt Kehre zurück aus Interrupt-Routine Warte auf Interrupt

Operation

BD

E

ext.

AD

E

inx.

F B E



inher.

Z= Z= C= C+Z = C+Z = C= V = V = N ˚V = Z + (N ˚ V ) =  Z + (N ˚ V ) =  N ˚V = N = N =

Kurzbeschreibung der Sprungbedingung

  19 Mikrocomputer-Grundlagen

 

19.3 Befehls-Satz a) Vollständige Adressierung Adr. .. .  .. .  F

Hex-Code .. . E .. .

 .. .

F .. .

Mnem.

Operand

Kommentar

JMP $  F .. .. . . Nächster auszuführender Befehl

b) Indizierte-Adressierung Adr. .. .  .. . X + A

Hex-Code

Mnem.

.. . E .. .

.. . JMP $ A,X .. .. . . Nächster auszuführender Befehl

A .. .

Operand

Kommentar

c) Relative Adressierung Adr. .. .  .. . +E =

Hex-Code

Mnem.

Operand

 E

BRA .. .

$ E

Kommentar

Nächster auszuführender Befehl

Abb. 19.3. Adressierarten von unbedingten Sprüngen

Bei relativ adressierten Sprüngen (Branch) wird nicht die absolute Adresse des nächsten auszuführenden Befehls angegeben, sondern ein Offset, um den der Programmzähler weitergestellt werden soll. Das hat den Vorteil, daß man das Programm nicht ändern muß, wenn man es in einem anderen Adressenbereich laufen lassen will. Die Angabe des Offsets erfolgt durch eine bit-Zahl in Zweierkomplement-Darstellung. Der Sprungbereich ist also auf   : : : +  Programmschritte beschränkt. Damit ergibt sich z.B. folgender Programmablauf: Der Offset wird von dem nächsten auf den Branch-Befehl folgenden Befehl ausgehend gezählt. Bei Offset  erhält man demnach den normalen Programmablauf ohne Sprung. Bedingte SprÜnge Bedingte Sprünge werden nur dann ausgeführt, wenn die entsprechende Abfrage des Flag-Registers wahr ist. Es handelt sich dabei ausschließlich um relative Verzweigungsbefehle. Ist die Abfragebedingung nicht erfüllt, läuft das Pro-

 

19 Mikrocomputer-Grundlagen

Adr.      

A

Hex-Code CE   F A  C 

C   F

C



Marke

LOOP

Mnem. LDX CLR A STA A INC A INX CPX BNE

Operand #$ 

Kommentar

,X

Schleifenbeginn

$  LOOP

Rücksprung nach LOOP wenn X < M

RTS

Tab. 19.11. Programm zum Laden des Speichers von der Adresse  an mit ; ;  : : :

gramm ohne Sprung mit dem auf den Branch-Befehl folgenden Befehl weiter. In Tab. . sind die wichtigsten Verzweigungsbefehle zusammengestellt. Bei den Befehlen, die sich auf die Zweierkomplement-Arithmetik beziehen, wird das Vorzeichen auch bei einem Überlauf richtig interpretiert, da das ÜberlaufFlag mit ausgewertet wird. Maßgebend ist immer die in der Kurzbeschreibung angegebene logische Verknüpfung. Sie gibt auch Aufschluß darüber, wie man bei beliebiger Zahlendarstellung einen Test auf bestimmte Bit-Kombinationen durchführen kann. Die Anwendung der bedingten Sprungbefehle wollen wir an einem Beispiel erläutern. Es soll die Zahlenfolge ; ; ;  : : : in den Speicherbereich  bis M   geladen werden. Das obere Byte der Adresse M sei in dem Register  gespeichert, das untere Byte in dem Register . Bei dem in Tab. . aufgelisteten Programm wird zunächst die  bit-Zahl Hex in das Indexregister geladen und der Akkumulator A gelöscht. Zu Beginn der Schleife wird der Inhalt des Akkumulators A indiziert abgespeichert. Anschließend werden der Akkumulator A und das Indexregister inkrementiert, d.h. ihr Inhalt wird um  erhöht. Ist die dabei entstehende Adresse kleiner als M, springt der Programmzähler zurück. Auf diese Weise wird der nächste Wert der Zahlenfolge in das nächste Register abgespeichert usw. Wenn X = M wird, entfällt der Rücksprung, und das Programm springt bei dem Befehl RTS in das Hauptprogramm zurück.

Unterprogramme Der Sprung in ein Unterprogramm (BSR, JSR) ist ein unbedingter Sprung mit der zusätzlichen Eigenschaft, daß die Adresse des nächsten Befehls als Rücksprungadresse in einem besonderen Register festgehalten wird. Man hat dadurch die Möglichkeit, häufig benötigte Routinen von verschiedenen Stellen des Hauptprogramms anzuspringen. Mit dem Befehl RTS (Return from Subroutine) springt der Programmzähler zu der jeweils gespeicherten Rücksprungadresse zurück.

 

19.3 Befehls-Satz Operation

Push Akkumulator

Sym- Adressier-Arten bolisch ext. dir. PSH A

Kurzbeschreibung inx.

imm.

E

PSH B Pull Akkumulator

PUL A PUL B

Lade Stapelzeiger

LDS

BE

E

AE

Speichere Stapelzeiger

STS

BF

F

AF

Erhöhe Stapelzeiger INS Erniedrige Stapelzeiger DES

inher.  A ! MSP , SP minus  ! SP  B ! MSP , SP minus  ! SP  SP plus  ! SP, [MSP ] ! A  SP plus  ! SP, [MSP ] ! B [M] ! SPH , [M + ] ! SPL SPH ! M, SPL ! M +   SP plus  ! SP  SP minus  ! SP

Stapelz.!Indexreg.

TSX



SP plus  ! X

Indexreg.!Stapelz.

TXS



X minus  ! SP

Tab. 19.12. Stapel-Operationen beim MC  -Mikroprozessor

Es ist möglich, aus einem Unterprogramm heraus in ein weiteres Unterprogramm zu springen (Verschachtelung). Da der vorhergehende Rücksprung noch nicht erfolgt ist, muß zusätzlich die zweite Rücksprungadresse gespeichert werden usw. Der erste Rücksprung muß zu der zuletzt gespeicherten Adresse erfolgen, der zweite zu der zweitletzten usw. Zur Organisation dieses Ablaufs dient ein besonderes  bit-Register in der CPU, der Stapelzeiger (Stackpointer). Zur Speicherung der Rücksprungsadressen definiert man einen RAM-Bereich, der nicht anderweitig benutzt wird. Er wird als Stupel (Stack) bezeichnet. Seine Größe kann je nach der Zahl der vorgesehenen Verschachtelungen frei gewählt werden. Nach dem Einschalten des Mikroprozessors lädt man die höchste Adresse dieses Bereichs mit dem in Tab. . aufgeführten Befehl LDS in den StapelZeiger der CPU. Wird nun mit dem Befehl BSR oder JSR ein Sprung in ein Unterprogramm ausgeführt, wird die Rücksprungadresse (unteres Byte) automatisch in den Speicher geladen, dessen Adresse vom Stapelzeiger angezeigt wird. Anschließend wird der Inhalt des Stapelzeigers um Eins erniedrigt und das obere Byte der Rücksprungadresse bei der jetzt angezeigten Adresse gespeichert. Danach wird der Inhalt des Stapelzeigers wieder um Eins erniedrigt und zeigt damit auf die nächste freie Adresse. Erfolgt nun innerhalb des Unterprogramms ein Sprung in ein weiteres Unterprogramm, wird die zweite Rücksprungadresse auf dieselbe Weise in den beiden nächst niedrigen Adressen des Stapels gespeichert. Der Stapel wächst also immer weiter nach unten, je mehr Unterprogramme ineinandergeschachtelt werden.

 

Abb. 19.4. Zweimaliger Aufruf eines Unterprogramms

19 Mikrocomputer-Grundlagen

Abb. 19.5. Aufruf von zwei verschachtelten Unterprogrammen

Mit dem Befehl RTS (Return from Subroutine) wird die zuletzt gespeicherte Rücksprungadresse vom Stapel in den Programmzähler geladen und der Inhalt des Stapelzeigers um zwei erhöht. Auf diese Weise werden, wie verlangt, die Rücksprungadressen in der umgekehrten Reihenfolge ihres Auftretens abgearbeitet (Last In First Out: LIFO). Abbildung . zeigt schematisch den Programmablauf für den Fall, daß ein Unterprogramm zweimal vom Hauptprogramm aufgerufen wird. In Abb. . ist der Ablauf für den Fall dargestellt, daß von einem Unterprogramm aus ein weiteres Unterprogramm aufgerufen wird. Die dabei jeweils zu speichernden Rücksprungadressen sind in den Stapel eingezeichnet. Der Stapel kann auch dazu verwendet werden, den Inhalt der Akkumulatoren auf einfache Weise zwischenzuspeichern. Dazu dienen die inherenten Befehle PSH A bzw. PSH B. Damit wird der Inhalt bei derjenigen Adresse gespeichert, die der Stapelzeiger anzeigt. Dessen Inhalt wird anschließend um  erniedrigt, da die Datenwortbreite im Unterschied zur Adressenwortbreite nur bit beträgt. Die Daten werden mit den Befehlen PUL A bzw. PUL B wieder zurückgeholt. Es ist klar, daß man die Daten, die man auf diese Weise zwischengespeichert hat, jeweils auf derselben Unterprogrammebene wieder zurückholen muß, da sonst Rücksprungadressen und Daten verwechselt werden. Interrupt Eine Interrupt-Routine ist eine spezielle Form eines Unterprogramms. Sie unterscheidet sich von einem gewöhnlichen Unterprogramm dadurch, daß der Aussprung aus dem laufenden Programm nicht durch einen Sprungbefehl ausgelöst wird, der an einer bestimmten Stelle des Programms steht, sondern willkürlich

 

19.3 Befehls-Satz Adresse

Stapel

 FF  FE

Rückesprungadresse Rückesprungadresse

Low High

 FD  FC

Akkumulator A Akkumulator B

 FB  FA

Rückesprungadresse Rückesprungadresse

Low High

 F  F

 F  F  F  F  F Stapelzeiger !  F .. .

Rückesprungadresse Rückesprungadresse Index-Register Index-Register Akkumulator A Akkumulator B Flag-Register

Low High Low High

. Unterprogramm PSH A PSH B

. Unterprogramm                   

Interrupt

Tab. 19.13. Beispiel für den Inhalt des Stapels

aufgrund eines externen Steuersignals. Dieses Steuersignal muß an den InterruptEingang IRQ (Interrupt Request) der CPU angelegt werden. Die Startadresse der Interrupt-Routine wird an einer besonderen Stelle außerhalb des Programms gespeichert. Für diesen Zweck sind beim MC   die Adressen FFF (oberes Byte) und FFF  (unteres Byte) festgelegt. Da der Aussprung an einer beliebigen Stelle des Programms erfolgen kann, muß Vorsorge getroffen werden, daß das Programm nach dem Rücksprung fehlerfrei fortfahren kann. Dazu müssen die ursprünglichen Daten wieder in den Arbeitsregistern der CPU stehen. Aus diesem Grund werden bei einem Interrupt automatisch die Inhalte der Akkumulatoren A und B, des Indexregisters und des Flag-Registers im Stapel zwischengespeichert. Bei dem Befehl RTI (Return from Interrupt) werden sie wieder in die CPU zurückgeladen. Als Beispiel haben wir in Tab. . den Stapel-Inhalt nach einem Interrupt aufgeschrieben. Dabei sind wir davon ausgegangen, daß sich das ablaufende Programm vor dem Interrupt gerade in einer zweiten Unterprogrammebene befand und im Verlauf des ersten (noch nicht abgeschlossenen) Unterprogramms der Inhalt der Akkumulatoren A und B in den Stapel gespeichert wurde. Nach Beendigung der Interrupt-Programme findet ein Rücksprung in das . Unterprogramm statt und von dort in das erste. Auf dieser Ebene müssen die beiden PSH-Befehle durch die entsprechenden PUL-Befehle wieder rückgängig gemacht werden. Dann kann der Rücksprung ins Hauptprogramm erfolgen. In diesem Zustand zeigt der Stapelzeiger wieder auf die höchste Adresse des Stapels (im Beispiel:  FF).

 

19 Mikrocomputer-Grundlagen

Abb. 19.6. Flußdiagramm für die Verarbeitung des Interrupts IRQ und des Rücksprungs RTI

Interrupt-Maske Mit Hilfe des Interrupt-Flags I im Flag-Register hat man die Möglichkeit, den Interrupt-Eingang IRQ zu blockieren. Ein Sprung in die Interrupt-Routine wird nur dann ausgeführt, wenn das Signal IRQ in die CPU gegeben wird und das Flag I gelöscht ist. Deshalb wird dieses Flag auch als „Interrupt-Maske“ bezeichnet. Es kann mit den in Tab. . auf S.   angegebenen Befehlen SEI und CLI gesetzt bzw. gelöscht werden. Beim Sprung in eine Interrupt-Routine wird es automatisch gesetzt, damit dieselbe Routine nicht erneut aufgerufen werden kann, bevor sie abgeschlossen ist. Zusammenfassend ergibt sich bei einem Interrupt der in Abb. . aufgezeichnete Programm-Ablauf. Mit der Steuerleitung NMI (Non maskable Interrupt) hat man die Möglichkeit, in eine zweite Interrupt-Routine zu springen, deren Start-Adresse bei FFF C (obe-



19.3 Befehls-Satz

res Byte) und FFF D (unteres Byte) gespeichert ist. Bei dieser Interrupt-Art wird die Interrupt-Maske nicht abgefragt; deshalb kann man die beiden InterruptRoutinen auch ineinander verschachteln. Eine dritte Interrupt-Routine kann über den Befehl SWI (Software Interrupt) angesprungen werden. Ihre Start-Adresse wird ebenfalls nicht im Programm, sondern bei den Adressen FFF A und FFF B gespeichert. Der Vorteil gegenüber einem normalen Sprungbefehl besteht darin, daß die Arbeitsregister ohne Zusatzbefehle im Stapel zwischengespeichert werden. Der Rücksprung erfolgt mit dem Befehl RTI. Die Interrupt-Maske wird nicht getestet.

Restart Eine zusätzliche Möglichkeit, mit einem Steuersignal in ein laufendes Programm einzugreifen, besteht über den Reset-Anschluß der CPU. Dieser Eingang wird zum Starten des Rechners benutzt. Wenn das Steuersignal „Reset“ von der CPU erkannt wird, lädt sie den Programmzähler mit der „Restart“-Adresse. Diese muß permanent in den Registern FFFE und FFFF gespeichert sein (z.B. fest verdrahtet oder mit Schaltern oder in einem ROM). Eine Übersicht über die verschiedenen Start-Adressen ist in Tab. . zusammengestellt. Nach dem Einschalten der Betriebsspannung enthält der Stapelzeiger einen Zufallswert. Deshalb muß am Beginn des Programms mit Hilfe des Befehls LDS eine definierte Adresse in den Stapelzeiger geladen werden, wenn irgendwelche Stapeloperationen vorgesehen sind.

Adresse

Speicherinhalt

FFFF FFFE

Startadresse Startadresse

Low High

FFFD FFFC

Startadresse Startadresse

Low High

FFFB FFFA

Startadresse Startadresse

Low High

FFF FFF

Startadresse Startadresse

Low High

SprungBedingung:

Auslösung:

Restart

Reset-Eingang

Non-maskable Interrupt

NMI-Eingang

SoftwareInterrupt

SWI-Befehl

InterruptRequest

IRQ-Eingang







Tab. 19.14. Festlegung der Speicherplätze für die Startadressen der Interrupt-Routinen



19 Mikrocomputer-Grundlagen

19.4

Entwicklungshilfen Wie schon erwähnt, werden Mikrocomputer in der Regel nicht als frei programmierbare Rechner sondern als fest programmierte Steuer- und Rechenwerke eingesetzt. Ihr Programm ist dabei in einem PROM gespeichert. Im vorhergehenden Abschnitt haben wir bereits gezeigt, wie man mit Hilfe einer Programmiertabelle ein Programm unmittelbar im Hex-Code erstellen kann. Das fertige Programm könnte man mit Hilfe eines Programmiergerätes in einem PROM speichern und dieses in eine Mikrocomputer-Anordnung gemäß Abb. . einsetzen. Dabei wird sich jedoch in der Mehrzahl der Fälle herausstellen, daß das Programm nicht funktioniert, weil es noch Fehler enthält. Da man bei dieser Anordnung keine Möglichkeit hat, versuchsweise einzelne Befehle abzuändern, ist die Fehlersuche sehr schwierig und zeitraubend. In den nächsten Abschnitten wollen wir einige Verfahren erörtern, wie man Programme entwickeln und testen kann, bevor sie in das PROM geschrieben werden. 19.4.1 Programmierung im Hex-Code Wenn man ein Programm in der Entwicklungsphase noch ändern möchte, muß man es statt in einem PROM in einem RAM speichern und in diesem Zustand testen. Im einfachsten Fall kann man dazu einen normalen Mikrocomputer nach Abb. . verwenden, in dessen PROM ein sogenanntes Monitorprogramm installiert ist. Es wird von vielen Herstellern in Verbindung mit Single-BoardMikrocomputern geliefert. Der wesentliche Bestandteil des Monitor-Programms sind Routinen zur Ein- und Ausgabe. Eingaberoutine: Abfrage eines hexadezimalen Tastenfeldes und laden der entsprechen den Bitkombination in den Akkumulator. Ausgaberoutine: Ausgabe des Akkumulators auf eine hexadezimale Anzeige. Aus diesen beiden Unterprogrammen sind die eigentlichen Bedienungsprogramme zusammengesetzt, die mit speziellen Tasten aufgerufen werden. Speicher-Ein-/Ausgabe: Man gibt die gewünschte Registeradresse M in Form einer vierstelligen Hex-Zahl ein und erhält in der Anzeige den entsprechenden Inhalt in Form einer zweistelligen Hex-Zahl gemäß folgendem Beispiel: Eingabe einer Adresse

F

C







E

Inhalt anzeigen bzw. verändern

19.4 Entwicklungshilfen

 

Der angezeigte Inhalt läßt sich durch Eingabe neuer Zahlen verändern. Der zuletzt angezeigte Inhalt wird in das aufgerufene Register abgespeichert. Anschließend wird automatisch die nächst höhere Adresse aufgerufen. Mit dieser Funktion des Bedienungsprogramms läßt sich das Benutzerprogramm in den gewünschten RAM-Bereich speichern. Voraussetzung ist natürlich, daß man das Programm vorher mit Hilfe einer Programmiertabelle von Hand in den Hex-Code übersetzt („Do-it-yourself-Assembler“). Das Verfahren ist deshalb nur für erste Gehversuche geeignet. Nach der Eingabe des Programms schaltet man die Restart-Adresse vom Startpunkt des Bedienungsprogramms auf den Startpunkt des Benutzerprogramms um und startet mit einem Reset-Signal. Häufig ist jedoch die Startadresse fest auf den Beginn des Monitorprogramms eingestellt. Zum Start des Benutzerprogramms benötigt man dann eine besondere Startroutine (GO), mit der die Startadresse vom Tastenfeld eingelesen und in den Programmzähler geladen wird. Die meisten Monitorprogramme besitzen noch zusätzlich einen Dump- bzw. Load-Befehl, mit dem man Programme auf Tonband speichern und wieder einlesen kann. Eine andere, bequemere Art, kleinere Programme aufzubewahren, besteht darin, sie mit einem Burn-Kommando in ein EPROM zu programmieren. Es gibt eine Vielzahl kleiner käuflicher Mikrocomputer, die diese Möglichkeiten besitzen. 19.4.2 Programmierung mit Assembler Für die Erstellung größerer Programme ist die Programmierung im Hex-Code indiskutabel. Man schreibt das Programm im symbolischen Code mit Hilfe eines Editors, der Textkorrekturen erlaubt. Den Programmschritten wird zunächst noch keine Adresse zugewiesen. Sprungadressen werden ausschließlich durch Marken definiert. Kommentare werden zusammen mit den Programmschritten eingegeben. Den so entstandenen Text bezeichnet man als das Quellenprogramm (Source Code). Es ist naturgemäß sehr viel umfangreicher als das zugehörige Maschinenprogramm. Das Verhältnis liegt in der Größenordnung von  : . Um es zu speichern, benötigt man einen Massenspeicher in Form einer Magnetplatte oder Floppy Disk. Anschließend wird das Quellenprogramm mit Hilfe des AssemblerProgramms in den Hex-Code übersetzt. Zweckmäßigerweise zerlegt man größere Aufgaben in mehrere Teile und übersetzt diese Teile getrennt. Dann ist die Fehlersuche einfacher, da man die Teile einzeln testen kann. Jedes Teilprogramm (Modul) beginnt bei der Adresse . Im nächsten Schritt gibt man an, welche Module in welcher Reihenfolge zu einem Gesamtprogramm zusammengefügt werden sollen. Wenn im Programm die Namen von Routinen aus der Bibliothek erscheinen, werden diese Routinen automatisch aus der Bibliothek kopiert und zum Programm hinzugefügt. Diese



19 Mikrocomputer-Grundlagen

Abb. 19.7. Ablauf der Programmerstellung mit einem Entwicklungssystem

Aufgabe wird vom „Linker-Programm“ durchgeführt. Als Ergebnis erhält man ein zusammenhängendes Programm, dessen Schritte bei  beginnend durchnumeriert sind. Im dritten und letzten Schritt gibt man die Startadresse des Programms an, die es im Zielcomputer erhalten soll. Mit dieser Angabe numeriert das „LoaderProgramm“ alle Programmschritte und speichert den Hex-Code in einem Datenfeld. Dort steht es für Simulationsläufe oder für den EPROM-Programmierer zur Verfügung. In Abb. . ist der ganze Ablauf in Form eines Flußdiagramms zusammengestellt. Ein Computer, auf dem die beschriebenen Schritte durchgeführt werden können, heißt Entwicklungssystem. Die Hardware-Konfiguration ist in Abb. .

dargestellt. Da die ganze Übersetzungsarbeit ein rein formaler Vorgang der Textverarbeitung ist, muß die CPU des Entwicklungssystems nicht mit derjenigen des Zielcomputers übereinstimmen. Man kann als Host-Rechner z.B. PersonalComputer (PCs) einsetzen, die in großer Vielfalt kostengünstig erhältlich sind. Die erforderliche Cross-Software, bestehend aus Assembler, Linker und Loader wird von verschiedenen Software-Häusern und von den MikrocomputerHerstellern für praktisch alle Typen angeboten.

Abb. 19.8. Hardware eines Entwicklungssystems

19.5 TypenÜbersicht



19.4.3 Simulation und Emulation Der Assembler prüft ein Programm beim Übersetzen auf Syntaxfehler. Logische Fehler kann er nicht erkennen. Deshalb muß ein Programm nach der Entwicklung erprobt werden. Dazu gibt es zwei Hilfsmittel: den Simulator und den Emulator. Der Simulator ist ein Programm, das auf dem Rechner des Entwicklungssystems (z.B. PC) die CPU des Zielsystems nachbildet. Man kann dann die Registerinhalte, den Stack-Bereich und weitere Speicherbereiche bei der Ausführung des Programms beobachten. Bei besseren Simulatoren kann man sogar Ein/AusgabeSchaltungen mit in die Simulation einbeziehen und die Reaktion auf externe Signale testen. Auf diese Weise lassen sich die meisten logischen Programmfehler finden. Die Hardware des zu entwickelnden Zielsystems ist beim Einsatz des Simulators noch nicht erforderlich. Daher können Hardware- und Softwareentwicklung parallel laufen. Der Nachteil der Simulatoren ist, daß sie um Größenordnungen langsamer laufen als die CPU des Zielsystems. Das Echtzeit-Verhalten läßt sich damit also nicht untersuchen. Für den endgültigen Test benötigt man daher einen Emulator (In Circuit Emulator, ICE). Er besteht aus einer Interface-Hardware und Software, die eine Verbindung zwischen dem Entwicklungssystem und dem Zielsystem schaffen. Der Emulator enthält den Mikroprozessor des zu entwickelnden Geräts und wird über ein Kabel an dessen Prozessor-Sockel angeschlossen. Er ermöglicht es, das Programm in Echtzeit mit der Ein/Ausgabe des Zielsystems zu testen. Zur Kontrolle kann man „Breakpoints“ in das Programm eintragen, bei deren Erreichen die Register und die interessierenden Speicherbereiche angezeigt werden. Emulatoren sind spezifisch für den jeweils zu entwickelnden Mikroprozessor. Man muß sie daher zusammen mit der Software austauschen, wenn man Programme für einen anderen Mikroprozessor schreiben will. Einfache Ausführungen sind für ,– bis ,– DM erhältlich. Leistungsfähige Emulatoren kosten bis zu .,– DM. Emulatoren für Ein-Chip-Mikrocomputer enthalten häufig einen EPROM-Programmierer für das EPROM des speziellen Mikrocomputers. 19.5

TypenÜbersicht Aus der Vielzahl verschiedener Mikroprozessoren heben sich zwei große Familien heraus. Die eine basiert auf dem Typ   von Motorola, die andere auf dem Typ   von Intel. In den Tabellen . und . sind die wichtigsten Vertreter beider Familien zusammengestellt. Der   und der   haben heute nur noch historische Bedeutung. Ihr Register-Satz findet sich aber auch in neueren Weiterentwicklungen wieder. Darauf aufbauend sind in beiden Familien leistungsfähigere Mikroprozessoren entwickelt worden. Die Erhöhung der Leistungsfähigkeit wird durch mehrere Maßnahmen erreicht.

 Typ

19 Mikrocomputer-Grundlagen Befehlssatz

Datenbus Breite [bit]

Adreß Raum

DatenRegister

AdreßRegister

[byte]

[bit]

[bit]

Relativer Sprungbereich

MultiplikationsBefehl

-Familie von Rockwell, WDC, VLSI  C 

 +



/

k M



  

 =

˙ ˙k

 

˙ ˙ ˙k ˙k ˙k ˙k ˙k ˙G ˙G ˙G

 



      

Relativer Sprungbereich

MultiplikationsBefehl

 -Familie von Motorola, Hitachi, Thomson, Valvo (  )          

          

             +  ++  +++  +++







    

k k k M M M M G G G







 

 

 

 

 

 

 

         

Tab. 19.15. Übersicht über Mikroprozessoren der  -Familie

Typ

Befehlssatz

Datenbus Breite [bit]

Adreß Raum

DatenRegister

AdreßRegister

[byte]

[bit]

[bit]





              

 

 

        

  ˙k ˙k ˙k ˙k ˙k ˙G ˙G

        







 

   

˙ ˙ ˙k ˙G





 

 -Familie von Intel, Siemens, AMD, NEC

 

 

 



 



 

 

 

 

 

 

 

 +

 +

 ++

 ++

 +++





    

k k M M M M M G G

Z -Familie von Zilog, NEC, SGS, Sharp Z  Z  Z  Z

 + Z + Z ++ Z +



/ 

k k M G

Datentypen: T = Bit, B = Byte, W = Word ( bit), L = Long Word ( bit), Q = Quad Word ( bit), D = Decimal (BCD), A = ASCII, S = String Tab. 19.16. Übersicht über Mikroprozessoren der  -Familie



19.5 TypenÜbersicht Taktfrequenz std/max [MHz]

Zugriffszeit std/min [ns]

Rechenleistung bei fmax [MIPS]

DatenTypen

Besonderheiten

/ /

/  / 

, ,

B,D B,D,W

CP

/ / / / / 

/ / / /

/ / / / /  /  / /

/

, , , , , ,

,   

B,D B,D B,D,W B,D,W,L,T B,D,W,L,T B,D,W,L,T B,D,W,L,T B,D,W,L,T,Q B,D,W,L,T,Q B,D,W,L,T,Q

Taktfrequenz std/max [MHz]

Zugriffszeit std/min [ns]

Rechenleistung bei fmax [MIPS]

DatenTypen

Besonderheiten

/ / / /

/

/ / / ,/

/ /  / / / / / / /

, , , , , , ,

, 

B,D B,D B,D,W B,D,W B,D,W,A,S B,D,W,A,S B,D,W,A,S B,D,W,A,S,Q B,D,W,A,S,Q

CP CP CP, TIM, DMA, IRC CP, TIM, DMA, IRC CP, SY, MMU, VM CP, SY, MMU, VM CP, SY, MMU, VM, CA, MCP

/

/ /,

/

/ / /  /

, , ,

B,T,T B,D,T B,D,W,L,S,T B,D,W,L,S,T,Q

RC RC, MMU, DMA, TIM RC, MMU, DMA, TIM, CA SY, MMU, CA

 byte RAM SY SY SY, VM, MMU, DMA, TIM SY, VM SY, VM, CA, CP SY, VM, CA, MMU, CP SY, VM, CA, MMU, CP, MCP

Besonderheiten: CP = Coprozessor-Interface, TIM = Timer, DMA = Direct Memory Access, IRC = Interrupt Controller, MMU = Memory Management Unit, SY = Betriebsart System bzw. Supervisory, VM = Virtual Memory, CA = Cache, MCP = Mathem. Coprozessor, RC = Refresh Controller



19 Mikrocomputer-Grundlagen

Eine Maßnahme ist die Erhöhung der Wortbreite in den Datenregistern von

auf  bzw.  bit und eine entsprechende Verbreiterung des Datenbusses. Dadurch können  bzw.  byte in einem Zyklus übertragen und verarbeitet werden. Um dies zu ermöglichen, werden auch die entsprechenden Datentypen definiert. Ebenso wird die Wortbreite in den Adreßregistern von  über  und  bis auf  bit erhöht. Dadurch vergrößert sich der Adreßraum auf bis zu  Gbyte. Gleichzeitig vergrößert sich auch der Sprungbereich für die relative Adressierung. Dadurch ist es bei den meisten neueren Mikroprozessoren möglich, auch große Programme positionsunabhängig (relokativ) zu schreiben. Eine weitere Leistungssteigerung wird durch Erweiterung des Befehlssatzes erreicht. Mit neuen leistungsfähigen Befehlen wie z.B. einem Multiplikationsbefehl lassen sich einige Operationen viel schneller und ohne lange Programme ausführen. Zusätzliche Adressierarten sollen den Zugriff auf Tabellen vereinfachen und beschleunigen. Die Erhöhung der Taktfrequenz wird durch moderne Technologie ermöglicht. Allerdings erniedrigt sich dadurch auch die erforderliche Zugriffszeit für die RAMs und ROMs. Die Qualität eines Mikroprozessors zeigt sich darin, daß er selbst bei hoher Taktfrequenz noch keine extrem niedrigen Zugriffszeiten fordert. Anderenfalls sind die in Frage kommenden RAMs bzw. ROMs sehr kostspielig. Man kann zwar die Zugriffszeit durch Einfügen von „Wait States“ verlängern; das reduziert aber die Rechenleistung. Die in Tab. ./. angegebenen Werte beziehen sich auf den Betrieb ohne Wait States. Wenn in größeren Systemen Bustreiber erforderlich werden, verkürzt sich die Zugriffszeit um deren Laufzeit. Ein Maß für die Rechenleistung sind die MIPS (Million Instructions Per Second). Sie geben an, wie viele Befehle der Mikroprozessor je Sekunde im Mittel verarbeiten kann. Dabei muß man bedenken, daß ein  bit-Prozessor auch dann schon leistungsfähiger ist als ein bit-Prozessor, wenn er genauso viele MIPS hat. Er kann mit einem einzigen Befehl einen  bit-Operanden verarbeiten. Dafür braucht der bit-Prozessor mehrere Befehle. Die Rechenleistung ist naturgemäß proportional zur Taktfrequenz. Der angegebene Wert gilt für die maximale Taktfrequenz. Ein begrenzender Faktor für die Rechenleistung ist neben der Zugriffszeit der Speicher auch die Bus-Bandbreite. Um selbst bei mäßigen Anforderungen (und Kosten) eine hohe Rechenleistung zu erhalten, wurden verschiedene Mechanismen entwickelt. Eine verbreitete Technik ist der „Prefetch“. Hier wird während der Verarbeitung eines Befehls schon der nächste (gegebenenfalls auch der übernächste) geholt, wenn der Bus frei ist. Probleme gibt es beim Prefetch, wenn Verzweigungen im Programm auftreten. Dann steht erst nach der Verarbeitung des Befehls fest, welches der nächste ist. Hier kann es vorkommen, daß die im Prefetch gepufferten Befehle verworfen werden müssen. Bei der ProgrammEntwicklung ist der Prefetch in der Emulations-Phase meist hinderlich, da der Befehl, der gerade geladen wird, nicht als nächster (vielleicht sogar überhaupt nicht) ausgeführt wird. Deshalb ist der Prefetch-Mechanismus meist abschaltbar.

19.5 TypenÜbersicht



Eine andere Methode, den Zugriff auf Programm und sogar auch Daten zu beschleunigen, besteht im Einsatz eines „Cache-Speichers“. Ein Cache ist ein kleiner, schneller Pufferspeicher, der häufig in dem Mikroprozessor selbst integriert ist. In ihm werden die zuletzt benötigten Befehle (und Daten) gespeichert. Da die meisten Programme relativ kleine Laufschleifen enthalten, besteht eine große Wahrscheinlichkeit dafür, daß die benötigten Befehle und Operanden noch im Cache stehen. Dann entfallen viele relativ lang dauernde Bus-Zugriffe. Die Beobachtbarkeit des Programms wird natürlich auch hierdurch verschlechtert. Der große Adreßraum, den die neuen Mikroprozessoren bereitstellen, ist für den Programmierer und den Anwender sehr unübersichtlich. Deshalb schaltet man hier häufig eine „Memory-Management-Unit“ (MMU) zwischen den Mikroprozessor und den Speicher. Sie ermöglicht eine weitgehend beliebige Zuordnung zwischen den logischen Adressen des Prozessors und den physikalischen des Speichers. Diese „Abbildung“ geschieht mittels einer Tabelle, die in die MMU geladen wird. Zusätzlich lassen sich für jedes Speichersegment Attribute angeben, wie z.B. Schreibschutz. Ein Nachteil der MMU-Technik ist, daß die AdreßÜbersetzung zusätzliche Zeit kostet. Daher muß man häufig einen (weiteren) Waite State einfügen. In dieser Beziehung ist es günstig, wenn die MMU auf dem Prozessor-Chip integriert ist, da dann die Verzögerung klein bleibt. Die neueren Mikroprozessoren unterstützen auch den Betrieb mit virtuellem Speicher (Virtual Memory, VM). Diese Technik ermöglicht es, Daten und Programme auf einem Massenspeicher (z.B. Plattenlaufwerk) so anzusprechen, als ob sie unmittelbar im RAM verfügbar wären. Im Zuge einer Programmausführung kann dabei der Fall eintreten, daß ein Operand benötigt wird, der nicht im RAM, sondern im externen Massenspeicher steht. In diesem Fall wird die Ausführung des Befehls unterbrochen. Das Betriebssystem lädt das Datensegment, in dem der Operand steht, vom Massenspeicher in das RAM und schaltet dann wieder auf die Ausführung des begonnenen Befehls zurück. Auf diese Weise läßt sich z.B. der immense Adreßraum von  Gbyte nutzen. Die Leistungsfähigkeit eines Mikroprozessors läßt sich deutlich steigern, indem man einen Coprozessor parallelschaltet, der die Ausführung komplizierter Operationen übernimmt, die den Mikroprozessor stark belasten würden. Die verbreitetsten Typen sind Arithmetik-Coprozessoren, die nicht nur die vier Grundrechenarten im Festkomma- und IEEE-Format (s. Kap. .) ausführen, sondern auch transzendente Funktionen berechnen und Zahlendarstellungen umwandeln können. Daneben gibt es auch noch Grafik-, Text-, und DMA-Coprozessoren. Voraussetzung für den Einsatz eines Coprozessors ist, daß der Mikroprozessor ein Coprozessor-Interface besitzt, über das der Datenaustausch und die Synchronisation erfolgt. Bezüglich der Programmierung ist der Coprozessor sehr transparent: Er fügt einfach ein paar Befehle zum Befehlssatz des Mikroprozessors hinzu. Bei der Programm-Ausführung erkennen die Prozessoren am Befehlscode, wer von ihnen die Ausführung des jeweiligen Befehls übernehmen muß.



19 Mikrocomputer-Grundlagen

19.6

Ein-Chip-Mikrocomputer Ein Mikrocomputer, der mit einem Programmspeicher von  kbyte, einem 

byte-RAM und einer Ein-/Ausgabe-Schaltung bestückt ist, stellt schon ein sehr leistungsfähiges Instrument dar, das in der Lage ist, eine Vielzahl verschiedener Hardware-Schaltwerke zu ersetzen. Bei der Lösung spezifischer Aufgabenstellungen kann man deshalb häufig auf eine modulare Erweiterbarkeit verzichten und dadurch eine starke Reduzierung des Hardware-Aufwandes erzielen. Auf diese Möglichkeit wollen wir im folgenden etwas näher eingehen. Die Fortschritte der Großintegration haben es möglich gemacht, nicht nur ein RAM auf dem Prozessorchip mit unterzubringen, sondern zusätzlich ein ROM und mehrere Peripherieschaltungen. Auf diese Weise vollzieht sich eine Entwicklung vom Ein-Chip-Mikroprozessor zum Ein-Chip-Mikrocomputer. Als Beispiel ist in Abb. . das Blockschaltbild des Typs MC  HC  A dargestellt. Seine CPU ist gegenüber dem  -Mikroprozessor stark erweitert. Sie besitzt ein zweites Indexregister, und die beiden Akkumulatoren A und B lassen sich zu einem  bit-Register zusammenfassen. Neben einer Vielzahl neuer Befehle ist auch eine

 bit-Multiplikation vorhanden. Der Speicher besteht aus einem kbyte-ROM am oberen Ende des Adreßraums und einem  byte-RAM in der „Base Page“ (siehe Abb. .). Zusätzlich besitzt dieser Mikrocomputer ein EEPROM, das sich ohne zusätzliche Programmierspannung im laufenden Betrieb programmieren und löschen läßt. Darin lassen sich Daten speichern wie z.B. Eichwerte, die einerseits nicht von vornherein feststehen, andererseits aber bei Stromausfall nicht verloren gehen

Abb. 19.9. Innerer Aufbau des -Chip-Mikrocomputers MC  HC  A



19.6 Ein-Chip-Mikrocomputer

Abb. 19.10. Adressenbelegung beim MC  HC  A

dürfen. Man kann im EEPROM aber auch Programme speichern, z.B. ein kurzes Hauptprogramm, das eine im ROM gespeicherte Programmbibliothek benutzt. Zur Ein-/Ausgabe besitzt der MC  HC  A fünf Schnittstellen. Über die beiden parallelen Schnittstellen (Port B und C) lassen sich Adreß- und Datenbus von außen zugänglich machen. Dadurch erhält man die Möglichkeit, während der Programmentwicklung externe RAMs als Programmspeicher anzuschließen. Die serielle Schnittstelle besteht aus einer asynchronen Schnittstelle zum Anschluß eines Terminals und einer synchronen Schnittstelle zum Anschluß von seriell angesteuerten Anzeigen oder DA-Umsetzern oder zur Kommunikation mit weiteren Mikrocomputern in demselben Gerät. Zur Auswertung analoger Signale besitzt der Mikrocomputer einen ADUmsetzer mit bit Genauigkeit. Ein vorgeschalteter Multiplexer ermöglicht die Abfrage von verschiedenen Quellen. Wenn diese Genauigkeit nicht ausreicht, kann man sie dadurch etwas erhöhen, daß man entweder den Mittelwert über viele Messungen bildet oder den Meßbereich in mehrere Teilbereiche aufteilt. Bei höheren Genauigkeitsanforderungen ist zweckmäßig, einen externen ADUmsetzer an die synchrone serielle Schnittstelle anzuschließen. Der programmierbare Zähler kann nicht nur Ereignisse zählen, sondern läßt sich auch zur Frequenz- und Zeitmessung sowie als Echtzeituhr einsetzen. Im Zusammenhang damit ist auch ein Wachhund (watchdog) vorhanden, der auf eine regelmäßige Aktion des Programms wartet und einen Restart ausführt, wenn sie ausbleibt. Dadurch läßt sich erreichen, daß der Mikrocomputer automatisch wieder die gewünschte Funktion aufnimmt, falls er einmal durch einen Programmfehler oder einen Störimpuls aus dem Programm herausspringt. Die Störempfindlichkeit ist jedoch bei Einchip-Mikrocomputern sehr viel geringer als bei Multichip-Lösungen, da die Leitungslängen auf dem Chip um Größenordnungen kleiner sind. Darin ist ein wesentlicher Vorteil zu sehen, den man nicht durch Verwendung externer Programmspeicher zunichte machen sollte.



19 Mikrocomputer-Grundlagen

Abb. 19.11. Betrieb eines Einchip-Mikrocomputers im „Expanded Multiplexed Mode“ mit einer „Port Replacement Unit“

Um die Stromaufnahme klein zu halten, wird der  HC  in CMOSTechnologie hergestellt. Man kann zusätzlich Strom sparen, indem man die Taktfrequenz nicht höher wählt als es die Verarbeitungsgeschwindigkeit erfordert. Günstiger und genauso stromsparend ist es jedoch, den Mikrocomputer mit voller Taktfrequenz arbeiten zu lassen und ihn anzuhalten, wenn zeitweise nichts zu verarbeiten ist; dadurch ergeben sich kürzere Reaktionszeiten. Eine derartige Umschaltung der Betriebsart wird praktisch durch alle Mikrocomputer in CMOS-Technologie unterstützt. Mit einem WAIT-Befehl wird die CPU abgeschaltet, der Taktgenerator und die Zähler laufen jedoch weiter, so daß die CPU mit einem vorprogrammierten Timer-Interrupt von allein wieder in den aktiven Zustand zurückkehrt. Die niedrigste Stromaufnahme ergibt sich im STOP- bzw. SLEEP-Betrieb. Hier wird auch der Taktgenerator angehalten, bis ein externer Interrupt eintrifft. Der Speicherinhalt des RAMs bleibt dabei erhalten, da die CMOS-RAMs durchweg statisch sind. Es gibt bei praktisch allen Einchip-Mikrocomputern die Möglichkeit, den Adreß- und Datenbus von außen zugänglich zu machen. Dann hat man die Möglichkeit, zusätzliche Programm- und Datenspeicher sowie Ein/Ausgabeschaltungen anzuschließen. Diese Möglichkeit ist in Abb. . dargestellt. Man erkennt, daß man dadurch  Port-Anschlüsse verliert. Um nicht noch weitere Leitungen einzubüßen, werden die unteren Adreßleitungen mit den Datenleitungen im Multiplexverfahren betrieben. Das Adreß-Strobe-Signal AS gibt an, ob gerade Adressen oder Daten übertragen werden. Um normale Speicher und I/O-Schaltungen benutzen zu können, speichert man die unteren

Adreßbits in einem Latch. Danach steht dann ein regulärer  bit-Adreßbus und bit-Datenbus wie bei einem normalen Multichip-Mikroprocomputer zur Verfügung. Allerdings verliert man praktisch auch alle Vorteile eines SinglechipMikrocomputers. Um nämlich die verlorenen Port-Anschlüsse wieder zu gewinnen, muß man eine „Port-Replacement-Unit“ anschließen, die über einen Adreß-

19.6 Ein-Chip-Mikrocomputer



Decoder genau bei denjenigen Adressen selektiert wird, die die durch den externen Programmspeicher belegten Ports des Mikrocomputers hatten. Einen derartigen Aufwand treibt man nur in Emulatoren, wo man darauf angewiesen ist, den Microcomputer exakt zu emulieren. Hier ist ein externer Programmspeicher unumgänglich, weil er vom Entwicklungssystem geladen werden muß. Eine Übersicht über einige gebräuchliche Mikrocomputer zeigen die Tab. . und . . Man sieht, daß es praktisch zu jedem der einfacheren Mikroprozessoren auch die äquivalenten Mikrocomputer gibt. Ihr Befehlssatz ist zum Teil erweitert bzw. reduziert, aber praktisch nie identisch. Zusätzlich sind häufig Befehle für Operationen mit einem einzigen Bit vorhanden. So kann man z.B. mit einem einzigen Befehl ein Bit setzen oder löschen oder auch verzweigen, wenn ein Bit gesetzt oder gelöscht ist. Der Programmspeicher der Mikrocomputer wird in der Basisversion immer als (vom Hersteller) maskenprogrammiertes ROM ausgeführt. Wegen der hohen Maskenkosten (z.B.  ,– DM und mehr) ist diese Ausführung jedoch nur für große Stückzahlen interessant. Dann lassen sich allerdings Preise für einen Mikrocomputer erreichen, die deutlich unter ,– DM je Stück liegen. Für die Programm-Entwicklung und für Kleinserien werden je nach Typ vier verschiedene Varianten für den Programmspeicher angeboten: ) ohne Programmspeicher, ) mit EPROM und Quarzfenster ) mit EPROM im Plastikgehäuse ) mit EEPROM. Bei der Ausführung ohne Programmspeicher muß man ein externes RAM oder EPROM anschließen. Dabei verliert man – wie in Abb. . gezeigt –  PortAnschlüsse. Leider reichen die verbleibenden Ports meist nicht aus. Daher muß man den relativ umständlichen Weg gehen und sie durch eine zusätzliche parallele Schnittstellen-Schaltung ersetzen. Wesentlich günstiger sind die Varianten . bis ., bei denen der Anwender das Programm selber laden und ändern kann, ohne dabei Ports zu verlieren. Deshalb wurden für die Übersicht in Tab. . und . Mikrocomputer bevorzugt, die diese Varianten bieten. Bei dem EPROM aufdem Chip läßt sich der Programmspeicher wie ein normales EPROM programmieren und löschen. Hier gibt es auch Ausführungen im Plastikgehäuse ohne Fenster. Solche OTP (One Time Programmable) bzw. ZTAT (Zero Turn-Around Time) Versionen sind deutlich billiger und bis zu  Stück meist kostengünstiger als Masken-programmierte Typen. Daß sie sich nicht löschen lassen, ist für die Serienfertigung kein Nachteil. Die modernen Nachfolger für EPROMs zur Programmspeicherung sind die EEPROMs. Sie bieten sich besonders bei den Mikrocomputern an, die ohnehin schon ein kleines EEPROM zur Speicherung von Eichwerten enthalten. Diese Variante gibt es bei einigen neueren Mikrocomputern in CMOS-Technologie.



19 Mikrocomputer-Grundlagen

Typ ROM Version

Typ EPROM Version

Hersteller

Befehlssatz

Gehäuse

MC HCK MC HCP MC HCC A MC HCL MC HCB MC HC XL

MC HC KJ MC HC PA MC HC C A MC HC L MC HC B MC HC  XL MC HC  MP

Motorola Motorola Motorola Motorola Motorola Motorola Motorola

             

 



   

MC HCD MC HCG MC HCP

MC HC D MC HC G MC HC P MC HCB

Motorola Motorola Motorola Motorola

 +  +  +  +









MC HCX

MC HCX MC F

Motorola Motorola

 +  

 

[pins]

Tab. 19.17. Beispiele für Ein-Chip-Mikrocomputer der  -Familie in CMOS Technologie

Typ ROM Version

Typ EPROM Version

Hersteller

CFA

CGB

CFB

LFC

CB

CFA

CGB

CFB

LFC

CB

Intel Intel Intel Intel Intel

 +

 +

 +

 +

 +

 

  

C 

CL

C

C

C

XAG

C  

CL

C

C

C  XAG 

Philips Philips Philips Philips Philips Philips

 +

 +

 +

 +

 +

 +

   

 

C

C A

C

C A

Siemens Siemens

 +

 +





A

A

Temic

 +



  

Befehlssatz

Gehäuse [pins]

EEPROM als Programmspeicher auch als OTP-EPROM erhältlich EPROM aufsteckbar (Piggy-Back)

Tab. 19.18. Ein-Chip-Mikrocomputer der  -Familie in CMOS Technologie



19.6 Ein-Chip-Mikrocomputer RAM/ROM

Auschlüsse Ein./Ausg. [bit]

Serielle Ein./Ausg.

/ k  / k / k /k  /k k/k /k

     

– Sy As, Sy Sy As As, Sy As, Sy



              

/ k /k k/k k/k

   

As, Sy As, Sy As, Sy As, Sy

        









DOG DOG, PWM, EE DOG, PWM, EE  EE DOG

k/k k/k



As, Sy As, Sy

     





PWM PWM

Serielle Ein./Ausg.

Zähler

[byte]

Auschlüsse Ein./Ausg. [bit]

ADU [Kanäle  bit]

 / k / k /k /k k/k

 

  

Sy Sy Sy Sy

              





 

DOG, PWM DOG, PWM DOG, PWM VDD = ; : : : ; V DOG

/ k  / k  / k /k k/k /k

   





– AS As As As, Sy As

                 

 





 

billig VDD = ; : : :  V DOG DOG DOG DOG, PWM

/ k /k





Sy As, Sy

     

 

[byte]

RAM/ROM

k/k

Zähler [bit]

[bit]

ADU [Kanäle  bit]

Besonderheiten

 

 



 

billig billig



   LCD EE  PWM

Besonderheiten

DOG, PWM DOG, Math. Coproz. DOG, PWM

EE: Bytes des zusätzlichen EEPROMs PWM: Pulse Width Modulator DOG: Watch DOG

Literatur

[.] [.]

Schief. R.: Einführung in die Mikroprozessoren und Mikrocomputer. Attempto  . Flick, T., Liebig, H.: Mikroprozessortechnik. Springer  .

Kapitel 20: Modularer Aufbau von Mikrocomputern

Im vorhergehenden Kapitel stand die Programmierung von Mikrocomputern im Vordergrund. Im folgenden soll nun näher auf die Schaltungstechnik eingegangen werden. Dabei wird ein modular aufgebautes System beschrieben, das über den Mikrocomputer-Bus verbunden wird. 20.1

Mikroprozessor-Platine Abbildung . zeigt die Anschlüsse des Mikroprozessors MC  . Alle Ein- und Ausgänge sind TTL-kompatibel. Die Bedeutung der meisten Anschlüsse wurde in den vorangehenden Abschnitten beschrieben. Sie ist in Tab. . zusammengestellt. Wie wir in Abb. . auf S.  bereits gesehen haben, werden in einem Mikrocomputer die Datenanschlüsse von CPU, Speichern und Peripherieschaltungen parallel verbunden. Eine solche Anordnung wird als „BUS“ bezeichnet. Es ist klar, daß immer nur genau ein Teilnehmer Daten auf den BUS ausgeben kann. Zur Auswahl dieses Teilnehmers dient der Adreßbus. Über den Kontrollbus werden zusätzliche Steuersignale zur Festlegung der Datenrichtung und zur Synchronisation übertragen. An einem Mikroprozessorausgang lassen sich höchstens  MOS- oder  Low-Power-Schottky-Eingänge anschließen. Deshalb benötigt man für größere Systeme Verstärker (Buffer) an allen Ausgängen. Abbildung . zeigt, wie sie am Mikroprozessor anzuschließen sind. Für den bidirektionalen Datenbus muß

Abb. 20.1. Anschlüsse des Mikroprozessors MC  



20 Modularer Aufbau von Mikrocomputern

Signal

Richtung

Funktion

a : : : a d : : : d

Ausg., Tristate Eing., Ausg., Tri.

Adresse Daten

R=W

Ausg., Tristate

Read/Write. Schreib-Lese-Umschaltung.

VMA

Ausg.

Valid Memory Address. Ein High-Pegel zeigt an, daß eine gültige Adresse ausgegeben wird.

BA

Ausg.

Bus Available. Prozessor im HALT-Zustand; alle TristateAusgänge sind hochohmig.

E

Ausg.

Enable (früher  ). Systemtaktausgang.

EXtal

Eing.

Externer Takteingang. Ein Viertel der angelegten Frequenz erscheint bei E als Systemtakt.

Xtal

Ausg.

Quarzausgang. Dient zusammen mit EXtal als Quarzanschluß für den internen Taktgenerator.

HLT

Eing.

Halt. Low-Pegel hält den Prozessor an. Alle Tristate Ausgänge werden hochohmig. Es wird BA =  und VMA = .

MR

Eing.

Memory Ready. Der Prozessor wartet im Zustand E = , solange MR =  ist. Alle Ausgänge bleiben gültig. Maximale Dauer:  s.

IRQ

Eing.

Interrupt Request. Normaler Interrupt-Eingang.

NMI

Eing.

Non-Maskable Interrupt. Nicht abschaltbarer Interrupt.

RES

Eing.

Reset-Eingang.

RE

Eing.

RAM-Enable. Low-Pegel schaltet das eingebaute RAM ab.

Tab. 20.1. Beschreibung der Eingangs- bzw. Ausgangssignale des Mikroprozessors  

man bidirektionale Buffer verwenden. Sie bestehen aus jeweils zwei antiparallel geschalteten Verstärkern mit Tristate-Ausgang, die wechselseitig mit Hilfe des Richtungsumschalters DIR aktiviert werden. Zur Umschaltung dient das R=W -Signal des Mikroprozessors. Der Enable-Anschluß EN der Buffer wird mit dem BA-Ausgang des Mikroprozessors verbunden. Dadurch wird der Datenbus hochohmig, wenn der Mikroprozessor angehalten wird. Diese Betriebsart ist für den direkten Speicherzugriff (DMA) vorgesehen. Aus demselben Grund werden auch am Adreßbus und am R=W -Ausgang Tristate-Buffer verwendet. Folgende Tristate-Buffer in Low-Power-Schottky-TTL-Technik sind für MikroprozessorAnwendungen gut geeignet: Unidirektional:

bit:  LS 

Bidirektional:

bit:  LS 

20.2 Parallele Schnittstelle



Abb. 20.2. Anschluß des Mikroprozessors   über Treiber am Adreß-, Daten- und Kontrollbus

20.2

Parallele Schnittstelle 20.2.1 Feste Datenrichtung Die einfachste Möglichkeit zur parallelen Dateneingabe besteht darin, wie in Abb. . Tristate-Buffer am Datenbus anzuschließen, die mit Hilfe eines Adressendekodierers aktiviert werden. Beim Aufruf der eingestellten Adresse erscheinen die externen Daten auf dem Datenbus und werden vom Mikroprozessor eingelesen. Dieser Vorgang ist genau derselbe wie der Aufruf eines Speichers. Die Eingabe-Operation unterscheidet sich also von einer Speicheroperation nur durch die Wahl der entsprechenden Adresse. Mit dem Aufruf einer Adresse kann man bei einem bit-Datenbus externe Anschlüsse parallel abfragen. Ein Ausgaberegister läßt sich auf ganz ähnliche Weise realisieren. Damit die Daten gültig bleiben, bis neue Werte ausgegeben werden, verwendet man FlipFlops zur Zwischenspeicherung, wie es in Abb. . dargestellt ist. Wenn die im Adressendekodierer eingestellte Adresse gültig wird und ein Schreibvorgang vorliegt (R=W = ), wird C = . Mit der abfallenden Flanke von E wird wieder BS =  und damit auch C = . Zu diesem Zeitpunkt liegen gültige Daten an



Abb. 20.3. Parallele bit-Eingabe

20 Modularer Aufbau von Mikrocomputern

Abb. 20.4. Parallele bit-Ausgabe

den Flip-Flop-Eingängen. Sie werden mit der ansteigenden Flanke von C an die Ausgänge übertragen und bleiben dort bis zur nächsten Ausgabe stehen. 20.2.2 Bidirektionale Parallel-Schnittstellen Zur wahlweisen Ein- oder Ausgabe kann man die beiden Schaltungen in Abb. . und . miteinander kombinieren. Es ist für solche Anwendungen jedoch einfacher, monolithisch integrierte bidirektionale Schnittstellen zu verwenden, z.B. das PIA (Peripheral Interface Adapter)  , dessen Blockschaltbild in Abb. . dargestellt ist. Es besitzt zwei bit-Ein-/Ausgabe-Kanäle. Die auszugebenden Daten werden in je einem Ausgabe-Register gespeichert. Ihnen zugeordnet ist je ein Datenrichtungsregister, mit dem sich für jede Leitung festlegen läßt, ob sie als Eingang oder Ausgang arbeiten soll. Außerdem steht noch je ein Kontrollregister zur Verfügung, das weitere Anschlüsse zur Auslösung und Quittierung von Interrupt-Anforderungen besitzt. Das PIA enthält also insgesamt sechs bit-Register. Mit Hilfe der beiden verfügbaren Adresseneingänge kann man aber nur  Register auswählen. Deshalb erhalten die Datenregister und die jeweils zugeordneten Richtungsregister je eine gemeinsame Adresse. Die Unterscheidung erfolgt mit Hilfe eines Bits des entsprechenden Kontrollregisters. Die Zuordnung der Adressen ist in Tab. . zusammengestellt.



20.2 Parallele Schnittstelle

Abb. 20.5. Innerer Aufbau des PIA  

Abbildung . zeigt den Anschluß des PIAs am Mikrocomputerbus. Es wird im Prinzip genauso betrieben wie ein RAM. Ein Unterschied besteht jedoch darin, daß das Enable-Signal E nicht am Adressendekodierer sondern an einem speziellen Eingang des PIAs angeschlossen wird. Das ist notwendig, weil die InterruptEingänge nur bei der Enable-Flanke abgefragt werden, andererseits aber eine Adresse a a 















Umschaltbit u uA = 

Register DDRA

Richtungs-Register A

uA =  uA = bel: uB = 

PRA CRA DDRB

Daten -Register A Kontroll -Register A Richtungs-Register B

uB =  uB = bel:

PRB CRB

Daten -Register B Kontroll -Register B

Tab. 20.2. Adressierung der sechs Register im PIA



20 Modularer Aufbau von Mikrocomputern

Abb. 20.6. Anschluß des PIA am Mikrocomputer-Bus

Interrupt-Anforderung auch dann möglich sein muß, wenn das PIA nicht adressiert ist. Zusätzlich steht ein Reset-Eingang zur Verfügung, mit dem sich alle Register löschen lassen. Die Programmierung des PIAs wollen wir anhand eines Beispiels erläutern. Dabei soll auf der A-Seite über die Anschlüsse PA : : : PA  die Ausgabe der Bitkombination  erfolgen. Danach soll die an den Anschlüssen PA : : : PA  anliegende Information in den Akkumulator B geladen werden. Das entspreAdr.

Hex-Code

Mnem.

Operand

     B D F

CD F

 A

 A

 A

F   F    D 

LDX CLR LDA A STA A LDA A STA A LDA A STA A

#$ F ,X #&   , X #&   , X #&   , X

DDRA

 

E 



LDA B RTS

, X

PRA

Tab. 20.3. Beispiel für die Programmierung des PIA

Ang. Reg. CRA

Kommentar Basisadresse des PIA u =  (DDRA-Zugriff) PA : : :  auf Eingabe PA : : :  auf Ausgabe

CRA

u =  (PRA-Zugriff)

PRA

Ausgabe von  auf PA : : :  Einlesen von PA : : : 



20.3 Serielle Schnittstelle

chende Programm ist in Tab. . aufgelistet. Als Basis-Adresse des PIAs haben wir FHex gewählt. Im Kontrollwort bedienen wir nur das an der drittletzten Stelle angeordnete Umschaltbit u. Die übrigen setzen wir Null. Damit sind alle Interrupt-Funktionen abgeschaltet. Wenn das Programm durchlaufen ist, enthält der Akkumulator B folgende Information: B=

PA

PA 

PA 

PA 









20.3

Serielle Schnittstelle Die serielle Datenübertragung besitzt gegenüber der parallelen den Vorteil, daß man nur wenige Verbindungsleitungen benötigt. Dies ist insbesondere bei der Datenübertragung über große Entfernungen von Bedeutung. Aber auch bei kurzen Strecken verwendet man meist die serielle Übertragung, wenn von vornherein feststeht, daß die geringere Übertragungsgeschwindigkeit nicht stört. Aus diesem Grund besitzen Bildschirm-Terminals und Drucker in der Regel serielle Schnittstellen. 20.3.1 Serielle ¿bertragung Mit Hilfe von parallelen Ein-/Ausgabe-Schaltungen kann man auch einen bitseriellen Datenaustausch vornehmen, indem man nur einen Ausgang benutzt. Zu diesem Zweck muß man das auszugebende Datenwort nach jedem Ausgabeschritt per Software um eine Stelle verschieben. Bei der Eingabe läßt sich das Datenwort durch schrittweise Verschiebung und Addition zusammensetzen. Man erkennt jedoch, daß die serielle Übertragung sicher nicht sehr schnell ablaufen kann, da für jedes einzelne Bit mehrere Rechenschritte erforderlich sind. Es ist deshalb günstiger, die Parallel-Serienwandlung bzw. die SerienParallelwandlung mit einer speziellen Schaltung hardwaremäßig vorzunehmen. Der Kern einer solchen Schaltung besteht aus einem Schieberegister mit parallelen Ladeeingängen, wie es in Abschnitt .. auf S.  beschrieben wurde. Zusätzlich benötigt man eine Ablaufsteuerung. Sie sorgt dafür, daß bei der Ausgabe die Bits nacheinander mit der gewünschten Geschwindigkeit (Bit-Rate) übertragen werden. Ein zentrales Problem bei der seriellen Datenübertragung ist die Synchronisation zwischen Sender und Empfänger. Dazu unterteilt man die serielle Bitfolge in einzelne Blöcke („Übertragungsrahmen“). Bei der synchronen Übertragung fügt man zur Synchronisation eine bestimmte Bitfolge (Synchronwort) ein, die sonst nicht auftreten kann. Auf diese Weise kann der Empfänger den Beginn eines Datenblocks erkennen. Wenn keine Daten vorliegen, werden nur Synchronworte gesendet. Auf diese Weise kann sich der Taktgenerator im Empfänger immer auf das ankommende Signal synchronisieren.



20 Modularer Aufbau von Mikrocomputern

Abb. 20.7. Asynchrone Übertragung des ASCII-Zeichens „S“  = Frühest möglicher Zeitpunkt des nächsten Startbits

Bei der asynchronen Übertragung werden Sende- und Empfangstakt nicht synchronisiert, sondern nur ungefähr (˙ %) auf dieselbe Frequenz eingestellt. Aus diesem Grund können auch nur kurze Datenblöcke zwischen zwei Synchronisationszeichen übertragen werden. Man überträgt üblicherweise ASCII-Zeichen, die Datenbits enthalten, fügt noch ein Paritätsbit hinzu und rahmt diesen Block mit einem Start- und Stopbit ein. In Abb. . ist der entstehende Übertragungsrahmen dargestellt. Wenn keine Daten zu übertragen sind, gibt es eine entsprechende Pause bei der asynchronen Übertragung. 20.3.2 Das ACIA Man erkennt, daß zur Steuerung des seriellen Datenaustausches in der beschriebenen Form ein erheblicher Schaltungsaufwand erforderlich ist. Es stehen dafür jedoch monolithisch integrierte Schaltungen zur Verfügung, z.B. das ACIA MC   (Asynchronous Communications Interface Adapter), dessen Blockschaltbild in Abb. . dargestellt ist. Es enthält vier Register, die auf folgende Weise mit Hilfe des Adresseneingangs RS und der Schreib-/Lese-Umschaltung selektiert werden: RS

R=W

   

   

Senderegister zur Parallel-Serienwandlung Empfangsregister zur Serien-Parallel-Wandlung Kontrollregister zur Festlegung der Betriebsart Statusregister zur Anzeige des Betriebszustandes

Diese Aufteilung ist deshalb möglich, weil das Empfangs- und das Statusregister zwei reine Leseregister darstellen und das Sende- bzw. Kontrollregister zwei reine Schreibregister. Mit Hilfe des bit-Kontrollregisters kann man den Übertragungsrahmen und die Paritätsbedingung auswählen. Zusätzlich läßt sich festlegen, durch welche Bedingung ein Interrupt ausgelöst werden soll. Außerdem kann man eine Frequenzteilung für den Bit-Takt programmieren (n = , , ). Bei den Einstellungen

20.3 Serielle Schnittstelle



Abb. 20.8. Innerer Aufbau des ACIA  

n =  und n =  erfolgt beim Empfang eine automatische Synchronisation auf das Startbit. Nach dem Einschalten der Betriebsspannung muß man das ACIA durch einen „Master-Reset“ in Bereitschaft versetzen. Da kein Hardware-RESET-Anschluß vorhanden ist, muß man diese Operation per Software durchführen, indem man eine bestimmte Bitkombination ins Kontrollregister schreibt.

20.3.3 Anschlu an den Mikrocomputer Bus Abbildung . zeigt den Anschluß des ACIA an den Mikrocomputer-Bus. Der Adreß-Decoder und der Datenbus-Treiber arbeiten genauso wie bei der parallelen Schnittstelle in Abb. .. Der Bit-Takt läßt sich auf einfache Weise mit dem Bitratengenerator COM  von Standard Microsystems erzeugen. Er wird mit einem ,

MHz-Quarz betrieben. Man hat damit die Möglichkeit, mit Hilfe der vier Schalter das fache der in Tab. . dargestellten genormten Bitraten einzustellen. Die eingezeichneten Treiber auf der Peripherie-Seite dienen als Pegelumsetzer für eine V.-Schnittstelle. Ihre Funktionsweise wird in Abschnitt .. noch genauer erklärt.



20 Modularer Aufbau von Mikrocomputern

Abb. 20.9. Anschluß des ACIA am Mikrocomputer und an einer V.-Schnittstelle beim Betrieb als Datenendeinrichtung (DEE). Die Zahlen an den V.-Anschlüssen geben die Stiftnummern im -poligen Canon-Stecker an

  110 

 300  1200

, k , k 2,4 k , k

, k , k 9,6 k , k

Einheit:  bit/s =  Baud Tab. 20.4. Zusammenstellung der genormten Bitraten. Fett gedruckt: übliche Bitraten

20.3.4 Programmierung des ACIAs Die Bedienung des ACIAs wollen wir anhand des Programmbeispiels in Tab. . erläutern. Mit dem Programm P wird der Master-Reset durchgeführt und der Übertragungsrahmen eingestellt. Dabei bedeutet das Kontrollwort Hex :  Startbit, Datenbits, gerades Paritätsbit,  Stopbit



20.3 Serielle Schnittstelle Adr.

Hex-Code

Marke

Mnem.

Operand

Ang. Reg.

    B

CE F  C  E  C  E  

P

LDX LDA B STA B LDA B STA B RTS

#$ F #$  , X #$  , X

    B

CE F  E  C   FA A  

P M

LDX LDA B BIT B BEQ STA A RTS

#$ F , X #$  M , X

Transmit

   

A

CE F  E    FB A  

P M

LDX LDA B ROR B BCC LDA A RTS

#$ F , X

Status

M , X

Receive

Kommentar Initialisierung

Control

Master Reset

Control

Takt, Rahmen Ausgabe

Status Transmit Reg. leer? Byte ausgeben Eingabe Receive Reg. voll? Byte einlesen

Tab. 20.5. Beispiel für die Programmierung des ACIA

sowie eine Frequenzteilung von  für den Bit-Takt und abgeschaltete Interruptanforderung. Als Basisadresse für das ACIA haben wir FHex angenommen. Wenn ein Datenwort ausgegeben werden soll, muß man zunächst abfragen, ob das Senderegister leer ist. Dazu dient die Abfrageschleife im Ausgabeprogramm P, die das Bit  im Statusregister testet. Erst wenn es Eins wird, darf das nächste Datenwort in das Senderegister geschrieben werden. Das Eingabeprogramm P muß zunächst warten, bis ein Datenwort im Empfangsregister steht. Dazu wird das Bit  im Statusregister abgefragt. Eine Eins zeigt an, daß gültige Daten vorliegen, die dann in den Akkumulator geladen werden können. Mit einem Bit im Kontrollregister läßt sich auch das Interruptsystem im ACIA einschalten. Dann wird immer ein Interrupt generiert, wenn neue Daten im Empfangsregister stehen. Auf diese Weise läßt sich erreichen, daß der Rechner nur dann einen Lesevorgang durchführt, wenn neue Daten vorliegen. Für die übrige Zeit steht er für die Bearbeitung anderer Programme zur Verfügung. An weiteren Statusbits kann man erkennen, ob die Paritätsbedingung erfüllt ist oder ob ein Wortverlust durch Überschreiben des Empfangsregisters eingetreten ist, weil der Rechner das vorhergehende Wort nicht rechtzeitig abgerufen hat.



20 Modularer Aufbau von Mikrocomputern

20.3.5 Der ASCII-Code Bei der seriellen Datenübertragung werden in der Regel Buchstaben und Zahlen als ASCII-Zeichen kodiert übertragen. Dies gilt auch für die Datenübertragung mit dem IEC-Bus (siehe Abschnitt .) und für die Anzeige von Daten. Die Zuordnung zwischen den alphanumerischen Zeichen und der zugehörigen Binärdarstellung ist durch den ASCII-Code (American Standard Code for Information Interchange) genormt. Er ist in Tab. . dargestellt zusammen mit den Hexadezimal-Äquivalenten [.]. Es gibt  alphanumerische Zeichen. Dabei sind die Ziffern  bis  den HexZahlen  bis  zugeordnet. Die zu einer ASCII-Ziffer gehörige Dualzahl läßt sich also einfach durch Subtraktion von Hex ermitteln. Die beiden ersten Spalten in Tab. . enthalten nicht-darstellbare Sonderzeichen, deren Bedeutung in Tab. . zusammengestellt ist. Die wichtigsten wie Wagenrücklauf CR und Zeilenvorschub LF können an Tastaturen über besondere Tasten aufgerufen werden. Die übrigen werden mit Hilfe der Taste Control (CTRL) in Verbindung mit dem entsprechenden Zeichen in der Spalte  bzw.    Hex durch gleichaufgerufen. So ergibt sich z.B. das Zeichen BEL (Klingel) = zeitiges Drücken der Tasten CTRL und G. Ein weiteres wichtiges Sonderzeichen  Hex . ist die Leertaste, SP (Space) =

Tab. 20.6. ASCII-Zeichensatz. Auf der rechten Seite der Spalten, soweit abweichend: Zeichensatz nach DIN 



20.3 Serielle Schnittstelle HexCode        07 08  0A B C 0D E F         

 A 1B C D E F 20 7F

ASCIIZeichen NUL SOH STX ETX EOT ENQ ACK BEL BS HT LF VT FF CR SO SI DLE DC DC DC DC NAK SYN ETB CAN EM SUB ESC FS GS RS US SP DEL

Meaning

Bedeutung

Null Start of Heading Start of Text End of Text End of Transmission Enquiry Acknowledge Bell Backspace Horizontal Tabulation Line Feed Vertical Tabulation Form Feed Carriage Return Shift Out Shift In Data Link Escape Device Control  Device Control  Device Control  Device Control  Negative Acknowledge Synchronous Idle End of Transmission Block Cancel End of Medium Substitute Escape File Separator Group Separator Record Separator Unit Separator Space Delete

Füllzeichen Anfang des Kopfes Anfang des Textes Ende des Textes Ende der Übertragung Stationsaufforderung Positive Rückmeldung Klingel Rückwärtsschritt Horizontal-Tabulator Zeilenvorschub Vertikal-Tabulator Formularvorschub Wagenrücklauf Dauerumschaltung Rückschaltung Datenübertr. Umschaltung Gerätesteuerung  Gerätesteuerung  Gerätesteuerung  Gerätesteuerung  Negative Rückmeldung Synchronisierung Ende des Übertragungsbl. Ungültig Ende der Aufzeichnung Substitution Umschaltung Hauptgruppen-Trennung Gruppen-Trennung Untergruppen-Trennung Teilgruppen-Trennung Zwischenraum Löschen

Tab. 20.7. Bedeutung der Sonderzeichen im ASCII-Code nach DIN 

20.3.6 RS 232 C-, V.24-Schnittstelle In der RS -Norm (DIN , , CCITT V.) ist ein High-Pegel als Spannung zwischen + V und + V definiert, ein Low-Pegel als Spannung zwischen   V und   V. Dabei werden die Daten in negativer Logik, die Steuersignale in positiver Logik übertragen. Die klassischen integrierten Pegelumsetzer sind die Typen 

/ . Nachteilig ist dabei jedoch, daß man zwei zusätzliche Betriebsspannungen von ˙  V benötigt, die man häufig nur für den Betrieb der V.-Schnittstelle bereitstellen muß. In dieser Hinsicht bringt die MAX Familie von Maxim bzw. der LT   von Linear Techn. eine nennenswerte Vereinfachung. Sie enthalten neben zwei Pegelumsetzern in jeder Richtung auch die



20 Modularer Aufbau von Mikrocomputern

Abb. 20.10. Anordnung der Pegelumsetzer für die Datensignale einer V.-Schnittstelle. Die Namen der Signale gelten für die Verbindung von zwei Datenendeinrichtungen

erforderlichen Spannungswandler in einer integrierten Schaltung. Der MAX  bietet darüber hinaus galvanische Trennung der vier Kanäle, so daß damit Probleme mit Masseschleifen sicher verhindert wurden. Abbildung . zeigt die Signalleitungen einer V.-Übertragungsstrecke mit den zugehörigen Pegelumsetzern. Die genormten Baudraten sind in Tab. . zusammengestellt. Die Leitungslänge ist auf  m beschränkt, da die Übertragung sonst wegen Masseschleifen störanfällig wird. In der V.-Schnittstelle sind neben den beiden Signalleitungen sechs Steuerleitungen definiert, die zur Steuerung des Datenaustausches eingesetzt werden können. Sie sind ursprünglich für die Datenübertragung mit einem Modem (Modulator/Demodulator) vorgesehen worden. Dabei werden Daten durch Frequenzumtastung kodiert im Tonfrequenzbereich über Telefonleitungen übertragen. Die Bezeichnung der V.-Signale und ihre sinngemäße Übersetzung ist in Tab. . zusammengestellt. Neben den beiden Datensignalen TXD und RXD gibt es zwei Steuersignale RTS und CTS, mit denen der Computer bzw. das Terminal angeben können, ob sie bereit sind, Daten zu empfangen. Am häufigsten wird von dieser Steuermöglichkeit bei Druckern Gebrauch gemacht, die eine höhere Datenübertragungsgeschwindigkeit als ihre Druckgeschwindigkeit zulassen. Sie

Stift

Abkürzung

Signal-Name

Bedeutung

     

 

FG TXD RXD RTS CTS DSR SG DCD DTR RI

Frame Ground Transmit Data Receive Data Request To Send Clear To Send Data Set Ready Signal Ground Data Carrier Detected Data Terminal Ready Ring Indicator

Schutzerde Sendedaten vom DEE Empfangsdaten für DEE DEE kann Daten übertragen DÜE kann Daten übertragen DÜE betriebsbereit Masse DÜE hat Verbindung erkannt DEE betriebsbereit DÜE hat Rufzeichen erkannt

DEE = Datenendeinrichtung z.B. Terminal, Drucker, Computer DÜE = Datenübertragungseinrichtung z.B. Modem, Computer Tab. 20.8. Bezeichnung und Verwendung der Signale einer V.-Schnittstelle

20.3 Serielle Schnittstelle



Abb. 20.11a Verbindung einer Datenübertragungseinrichtung (DÜE) mit einer Datenendeinrichtung (DEE) mittels einer V.-Schnittstelle. Die Zahlen an den Anschlüssen geben die Stiftnummern im -poligen Canon-Stecker an

Abb. 20.11b Verbindung von zwei Datenendeinrichtungen mit einem „Null-Modem“

Abb. 20.11c Verbindung von zwei Datenendeinrichtungen bei X-On/X-Off-Handshake



20 Modularer Aufbau von Mikrocomputern

nehmen dann das RTS-Signal weg, bevor ihr Pufferspeicher überläuft, und stoppen damit vorübergehend die Datenausgabe des Computers. Entsprechend kann der Computer ein Terminal über das CTS-Signal anhalten, wenn er mit der Datenannahme nicht nachkommt. Die Steuersignale DSR und DTR haben eine ähnliche Funktion; sie werden manchmal statt der Signale RTS und CTS für einen Handshake eingesetzt. Die Steuersignale DCD und RI besitzen nur bei Modems eine Bedeutung. Bei der Verbindung von V.-Schnittstellen muß man zunächst festlegen, ob es sich um Datenendeinrichtungen (DEE) wie z.B. Terminals oder Drucker handelt oder um Datenübertragungseinrichtungen (DÜE) wie z.B. Modems. Computer werden meist wie in Abb. . auf S.  als DEE ausgeführt, daneben aber auch als DÜE. Ob es sich bei einer V.-Schnittstelle um ein DEE oder DÜE handelt, kann man an der Signalrichtung erkennen, die in Abb. .a eingezeichnet ist. Bei einem DEE ist z.B. das TXD-Signal ein Ausgang, bei einem DÜE ist es ein Eingang. Man erkennt in Abb. .a, daß die Verbindung von einem DÜE mit einem DEE über ein -adriges, parallel verdrahtetes Kabel erfolgt. Zur Verbindung von zwei gleichartigen V.-Schnittstellen muß man die korrespondierenden Signale über Kreuz verbinden. Abbildung .b zeigt dies am Beispiel von zwei Datenendeinrichtungen. Die erforderliche Vertauschung der Signalleitungen läßt sich im Prinzip mit einem speziell verdrahteten Verbindungskabel erreichen. Universeller ist es jedoch, ein normales paralleles V.Kabel einzusetzen und die Vertauschungen in einem zwischengeschalteten Adapter vorzunehmen, den man als „Null-Modem“ bezeichnet. Wenn man die Steuerleitungen nicht benutzen will, darf man die entsprechenden Eingänge auf beiden Seiten nicht einfach offen lassen. Ein offener Eingang wird nämlich meist als Null interpretiert und kann den Computer bzw. das Terminal blockieren. Um dies zu verhindern, kann man eine lokale Rückkopplung vorsehen, indem man die Anschlüsse ,  und , ,  in beiden Steckern miteinander verbindet, wie es in Abb. .c dargestellt ist. Einer der beteiligten Anschlüsse ist jeweils ein Ausgang, der im Normalbetrieb auf  liegt und so die angeschlossenen Eingänge befriedigt. Wenn man trotzdem nicht auf einen Handshake verzichten möchte, kann man das „X-On/X-Off-Protokoll“ verwenden. Hier wird das ASCII-Sonderzeichen (s. Tab. . ) DC = Hex = Dez zum Stoppen des Senders bzw. DC = Hex =  Dez zum Wieder-Einschalten des Senders über die Datenleitungen TXD und RXD übertragen. Auf diese Weise ist es möglich, V.-Schnittstellen lediglich mit einem -adrigen Kabel zu verbinden, wie man in Abb. .c erkennt.

20.3 Serielle Schnittstelle



20.3.7 Stromschnittstelle Für Datenübertragung über größere Entfernungen ist eine Potentialtrennung unbedingt erforderlich, um Störsignale zu unterdrücken, die durch Ausgleichsströme in der Masseleitung entstehen können. Diese Eigenschaft besitzt die in Abb. . dargestellte Stromschnittstelle. Die Stromschnittstelle, auch unter dem Namen Linienstrom-,  mA-, Current-Loop- oder TTY-Schnittstelle bekannt, ist nicht genormt. Sie hat sich aber weltweit durchgesetzt. In der DIN  Teil  (Entwurf) „Schnittstellen und Steuerungsverfahren für die Datenübermittlung für den klinisch-chemischen Bereich“ ist diese Schnittstelle näher beschrieben. Bei der Kopplung zweier Geräte werden eine Sende- und eine Empfangsschleife geschlossen. In diese Schleife wird wie in Abb. . ein Strom von  mA eingeprägt. Dazu wird häufig einfach ein an  V angeschlossener Widerstand verwendet. Man kann den Strom entweder auf der Sende- oder der Empfangsseite einspeisen. Die Schnittstelle, die die Stromquelle enthält, wird als aktiv bezeichnet. Die Stromquelle braucht nicht erdfrei zu sein, da es genügt, das Potential auf einer Seite der Schleife zu trennen. Man wählt dafür zweckmäßigerweise die passive Seite. Eine logische  entspricht einem Stromfluß, eine logische  keinem Strom. Als Übertragungsgeschwindigkeiten sind die in Tab. . angegebenen Baudraten bis , kBaud zugelassen. Die Leitungslänge darf bis zu  m betragen.

Abb. 20.12. Anordnung einer Stromschnittstelle. Die Zahlen an den Anschlüssen geben die Stiftnummern im -poligen Cannon-Stecker nach DIN  an



20 Modularer Aufbau von Mikrocomputern

Abb. 20.13. Anordnung einer RS -Schnittstelle

20.3.8 RS 449-Norm Die RS  C-Schnittstellen-Norm ist schon ziemlich alt und für niedrige Datenraten konzipiert. Die neue RS -Norm läßt wesentlich höhere Datenraten über große Entfernungen zu. Bezüglich der elektrischen Auslegung werden dabei zwei Ausführungen unterschieden: eine unsymmetrische Schnittstelle (RS  A, CCITT V.) für maximal  kbit/s und eine symmetrische Schnittstelle (RS  A, CCITT V.) für maximal  Mbit/s. Unsymmetrische Schnittstelle (RS 423 A) Abbildung . zeigt die Datenübertragung über eine unsymmetrische Leitung (single-ended, unbalanced). Die Spannungspegel sind typisch auf ˙ ; V festgelegt. Die Leitung muß mit dem Wellenwiderstand abgeschlossen werden. Die maximale Datenrate beträgt  kbit/s bei  m Leitungslänge und reduziert sich bis auf  kbit/s bei  m Leitungslänge. Symmetrische Schnittstelle (RS 422 A, RS 485) Die höchste Datenrate und die größte Leitungslänge läßt sich bei symmetrischer Übertragung gemäß Abb. . erzielen. Bis zu einer Leitungslänge von  m

Abb. 20.14. Anordnung einer RS -Schnittstelle



20.4 IEC-Bus-Schnittstelle Eigenschaft

RS  C (V.)

Übertragungsart

unsymmetrisch Leitungsart verdrillt Leitungslänge max.  m Datenrate max.  kbit/s Treiber-Ausgang unbelastet max. ˙  V Treiber-Ausgang belastet max. ˙  : : : ˙  V Empfänger-Eingang minimal ˙V Sender-IC MAX  Empfänger-IC MAX  Hersteller Maxim

StromRS  schnittstelle (V.)

RS  (V.)

RS  

unsymmetrisch verdrillt  m  kbit/s

unsymmetrisch koaxial  m  kbit/s

symmetrisch symmetrisch verdrillt  m  Mbit/s

koaxial  m  Mbit/s

 mA

˙V

˙  V Diff.

˙  V Diff.

 mA

˙ ;  V

˙  V Diff.

˙ ;  V Diff.

 mA Optokoppler Optokoppler viele

˙ ; V Am  LS  Am  LS  AMD

˙ ; V Diff. Am  LS  Am  LS  AMD

˙ ; V Diff. SN   SN   Texas Inst.

Tab. 20.9. Vergleich der Eigenschaften von seriellen Schnittstellen. Es gibt viele weitere ICs von Linear Technology, Maxim und Texas Instruments

kann man maximal  Mbit/s übertragen. Bei größeren Längen reduziert sich die Datenrate bis auf  kbit/s bei  m Leitungslänge. In Tab. . ist eine Übersicht über die wichtigsten elektrischen Eigenschaften der vier beschriebenen seriellen Schnittstellen zusammengestellt. 20.4

IEC-Bus-Schnittstelle Im Abschnitt . haben wir gesehen, daß es mit Hilfe des Bus-Prinzips möglich ist, eine Vielzahl von Bausteinen auf einfache Weise miteinander zu verbinden. Dasselbe Prinzip läßt sich auch vorteilhaft auf den Datenaustausch zwischen verschiedenen Geräten anwenden. Um Geräte unterschiedlicher Hersteller beliebig kombinieren zu können, wurde eine international gültige Schnittstellen-Norm geschaffen, und zwar für die USA der IEEE-Standard 

- und für Europa die IEC-Norm ., die kurz als die IEC-Bus-Norm bezeichnet wird. Bis auf die Festlegung des Anschlußsteckers sind die beiden Normen identisch. Mit dem General Purpose Interface Adapter (GPIA) MC  

steht ein hochintegrierter Baustein zur Verfügung, der die Verbindung des Mikrocomputerbusses mit dem IEC-Bus sehr einfach macht. Um seine Funktionsweise erläutern zu können, wollen wir zunächst etwas auf den IEC-Bus eingehen. Sein Blockschaltbild ist in Abb. . dargestellt. Der IEC-Bus besteht aus Daten- und Steuerleitungen. Im Unterschied zum Mikrocomputerbus werden die Adressen der angesprochenen Geräte mit über die Datenleitungen übertragen. Ihre Kennzeichnung erfolgt mit Hilfe des Steuersignals „Attention“ (ATN ). Ein weiterer Unterschied zum Mikrocomputerbus besteht darin, daß die Datenübertragung nicht synchron mit einem Taktsignal, sondern asynchron in Form eines Quittierungsverfahrens erfolgt. Dazu dienen die Steu-



20 Modularer Aufbau von Mikrocomputern

Abb. 20.15. Anschluß der Geräte an den IEC-Bus. Die Namen der Bus-Leitungen wurden zum besseren Verständnis abweichend von der Norm in positiver Logik angegeben

ersignale „Ready for Data“ (RFD), „Data Valid“ (DAV ) und „Data Accepted“ (DAC). Mit Hilfe eines solchen „Dreidraht-Handshakes“ ist es möglich, Daten von jeweils einem Sprecher an eine beliebige Zahl von Hörern zu übertragen, ohne irgendwelche Vorschriften über die Übertragungsgeschwindigkeit machen zu müssen: Die Daten werden so lange gültig gehalten, bis sie vom langsamsten Hörer übernommen worden sind. Abbildung . zeigt den Ablauf des Dreidraht-Handshakes. Wenn der Sprecher ein neues Byte zur Verfügung hat, schreibt er es auf den Datenbus und testet das Signal RFD. Es ist mit Hilfe von Open-Collector-Ausgängen wiredand-verknüpft und wird infolgedessen erst dann Eins, wenn alle angeschlossenen Geräte zur Datenaufnahme bereit sind. Ist dies der Fall, meldet der Sprecher die Daten gültig, indem er DAV =  setzt. Die Hörer reagieren darauf zunächst mit RFD = , um anzuzeigen, daß sie vorläufig keine weiteren Daten verarbeiten können, und übernehmen das anstehende Byte in ihren Eingangsspeicher. Die vollständige Übernahme der Daten durch alle adressierten Hörer wird durch das wired-and-verknüpfte Signal DAC =  angezeigt. Daraufhin setzt der Sprecher DAV = . Die Hörer erkennen daran, daß ihr DAC-Signal angekommen ist. Sie setzen es deshalb auf Null zurück. In diesem Augenblick beginnt die Verarbeitung der Daten. Das Ende der Verarbeitungsphase wird mit dem Steuersignal „Ready for Data“ angezeigt. Wenn alle Geräte wieder bereit sind, wird RFD = . Dies ist für den Sprecher das Zeichen, daß ein neues Byte übertragen werden kann. Zum besseren Verständnis haben wir in Abb. . zusätzlich zum Zeitdiagramm zwei Flußdiagramme aufgenommen, mit denen die Beteiligung des Sprechers und eines Hörers am Handshake dargestellt wird.

20.4 IEC-Bus-Schnittstelle



Abb. 20.16. Zeit- und Flußdiagramme für den -Draht-Handshake

Man erkennt, daß bei der Datenübertragung vom Sprecher zu den Hörern keine Beteiligung des Steuergerätes erforderlich ist. Es tritt erst in Aktion, wenn ein neuer Sprecher oder neue Hörer adressiert werden sollen. Dazu setzt das Steuergerät ATN =  und überträgt die entsprechenden Adressen über die Datenleitungen. Dabei läuft der normale Handshake ab. Damit dies richtig funktioniert, wurde in der Norm festgelegt, daß alle Geräte spätestens  ns nach ATN =  an den Beginn des Hörerhandshakes gehen, und zwar völlig unabhängig von der augenblicklichen Aktivität. Die Adressen der Geräte wurden in der Norm in Form von ASCII-Zeichen festgelegt. Als Hörer-Adressen sind die Zeichen der Spalten  und  in Tab. . zugelassen, als Sprecher-Adressen die Spalten  und . Hörer- und SprecherAdressen sind an einem Gerät nicht unabhängig voneinander wählbar, sondern müssen in den letzten  bit übereinstimmen. Zu der Sprecheradresse „T“ gehört demnach die Höreradresse „“. Das Zeichen „?“ ist fest vergeben und bedeutet



20 Modularer Aufbau von Mikrocomputern

Abb. 20.17. Anschluß des GPIAs am Mikrocomputer und am IEC-Bus. Die Zahlen an den IEC-Bus-Leitungen geben die Stiftnummern im -poligen IEEE-Amphenol-Stecker an. In Klammern stehen die Stiftnummern des -poligen IEC-Cannon-Steckers

„Unlisten“. Es dient zum Abschalten aller Hörer. Die zugehörige Sprecheradresse „ “ bedeutet „Untalk“ und dient zum Abschalten des gegenwärtigen Sprechers. Es ist jedoch meist entbehrlich, da ein Sprecher automatisch abgeschaltet wird, sobald eine andere Sprecheradresse auf dem Bus erscheint. Man kann  Hörerund  Sprecheradressen frei wählen. Die übrigen ASCII-Zeichen sind als Spezialbefehle definiert; z.B. steht DC  für „Device Clear“. Abbildung . zeigt den Anschluß des GPIAs am Mikrocomputerbus. Mit den unteren drei Adressenbits kann man auf Schreib- und Leseregister zugreifen. Die Ein-/Ausgabe der Daten erfolgt über das Register . Die übrigen Register dienen zur Festlegung der Betriebsart bzw. zur Anzeige des jeweiligen Betriebszustandes. Die Geräteadresse wird im Register  gespeichert. Sie muß per Software



20.4 IEC-Bus-Schnittstelle

dorthin geladen werden. Häufig möchte man sie jedoch von Hand einstellbar machen. Dazu dient der Adressenschalter: Wenn das Register  des GPIAs gelesen wird, bleiben die Datenausgänge hochohmig. Stattdessen werden mit dem Signal ASE die Tristate-Treiber am Schalter aktiviert. Dadurch erscheint die eingestellte Adresse auf dem Datenbus und kann von der CPU eingelesen werden. An dem Schalter werden die unteren  bit der ASCII-Adresse eingestellt. Mit den oberen  bit kann man die Sonderbetriebsarten „Talk Only“ bzw. „Listen Only“ einstellen. Die Bedienung des GPIAs ist verhältnismäßig einfach, da die Reaktion auf Bus-Kommandos und die Abwicklung des Handshakes automatisch erfolgt. Die Umschaltung der Übertragungsrichtung der IEC-Bus-Treiber erfolgt ebenfalls automatisch in Abhängigkeit davon, ob das Interface als Hörer oder Sprecher adressiert wurde. Das Programmbeispiel in Tab. . soll die Verhältnisse verdeutlichen. Als Basisadresse des GPIAs haben wir dabei FHex zugrunde gelegt. In der Initialisierungsroutine haben wir die einfachste Betriebsart gewählt. Sie reicht für viele Anwendungen aus.

Adr.

Hex-Code

Marke

Mnem.

Operand

    B D F

CE F  E  E  F  f  C  E  

P

LDX LDA B STA B CLR CLR LDA B STA B RTS

#$ F , X , X , X , X #$  , X

    A C

E     A  BD   F 

P

LDA B ROR B BCC LDA A JSR BRA RTS

, X

     B C

E  C    BD  A   

   

D CE

D DC

D EA  FA

M P

M P M

MI  , X V P

LDA B BIT B BEQ JSR STA A BRA RTS

, X #$  M V  , X P

BSR BSR BSR BSR

P P P M

Ang. Reg.

Kommentar

Address Address Command Interrupt

Initialisierung Lese Adressenschalter Speichere Geräte Adr. Lösche Reset Bit Schalte Interrupt aus

Addr. Mode

Normale Adressierart

Status

Eingabe

Input

Zeichen angekommen? Hole Zeichen Verarbeite Zeichen

Status

Ausgabe

Output

Ausgabereg. leer? Stelle Zeichen bereit Gebe Zeichen aus

Tab. 20.10. Beispiel für die Programmierung des GPIAs

Hauptprogramm Initialisierung Eingabe Ausgabe Wiederholung



20 Modularer Aufbau von Mikrocomputern

In der Eingabe-Routine wird getestet, ob ein Zeichen vom IEC-Bus eingelesen wurde. Wenn ja, wird das Zeichen in den Akkumulator A geladen. Mit diesem Lesevorgang wird bei der gewählten Betriebsart automatisch RFD =  gesetzt und damit der Handshake abgeschlossen. Durch Wahl einer anderen Betriebsart kann man das RFD-Signal jedoch auch auf Null festhalten und damit den IECBus blockieren, bis das Zeichen verarbeitet ist. In diesem Fall muß man RFD mit einem besonderen Befehl zum gewünschten Zeitpunkt auf Eins setzen. Nach der Verarbeitung des Zeichens erfolgt ein Rücksprung zum Beginn der Eingaberoutine. Wenn in der Zwischenzeit kein weiteres Zeichen angekommen ist, wird die Eingabe-Routine verlassen. In der Ausgabe-Routine wird zunächst geprüft, ob das Ausgabe-Register frei ist. Wenn ja, wird das auszugebende Zeichen vom Akkumulator A in das AusgabeRegister geladen und von dort automatisch mit dem Handshake auf den IEC-Bus ausgegeben. Der Abschluß des Handshakes läßt sich daran erkennen, daß das Ausgabe-Register wieder als frei gemeldet wird. Dann kann das nächste Zeichen ausgegeben werden. Ist dies nicht der Fall, wird die Ausgabe-Routine verlassen. Das Hauptprogramm ruft die beiden Routinen abwechselnd auf. Damit wird erreicht, daß das Gerät für den IEC-Bus jederzeit als Hörer oder Sprecher verfügbar ist.

20.5

Datenausgabe auf Anzeigeeinheiten Zur sichtbaren Darstellung von Daten kann man die in Kapilel . auf S.  beschriebenen Leuchtdioden- oder Flüssigkristall-Anzeigen einsetzen. Dabei können die dort gezeigten Schaltungen über einen parallelen Schnittstellenbaustein vom Mikroprozessor angesteuert werden. Um die Zahl der benötigten Treiber und Leitungen klein zu halten, ist es jedoch bei mehrstelligen Anzeigen zweckmäßig, sie als Matrix zu verbinden und im Zeitmultiplex zu betreiben. Dies ist für das Beispiel einer stelligen -Segment-LED-Anzeige in Abb. . dargestellt. Die entsprechenden Segmente aller Anzeigen werden parallel geschaltet. Damit nun nicht die gleichen Segmente aller Stellen gleichzeitig leuchten, schaltet man über den -aus- -Decoder jeweils nur eine Stelle ein. Man benötigt also zum Betrieb einer stelligen -Segment-Anzeige nur  Leitungen. Als Mikroprozessor-Schnittstelle reicht eine einzige Parallelschnittstelle mit bit aus. Man kann den -aus- -Decoder und den -Segment-Decoder sogar direkt am Mikrocomputer-Bus anschließen, wenn sie interne Speicher besitzen. Einige -Segment-Decoder sind in Tab. . auf S.  zusammengestellt. Anoden- bzw. Katodentreiber folgen in Tab. .. Der Multiplex-Betrieb wird vom Mikroprozessor per Programm durchgeführt. Dazu gibt man jeweils mit vier Bit die Stellennummer und mit den anderen vier Bit das darzustellende Zeichen im BCD-Code aus. Dann wiederholt man diese Ausgabe für die nächste Stelle. Damit sich eine flimmerfreie Anzeige ergibt, sollte der ganze Anzeigezyklus mindestens  mal in der Sekunde durchlaufen werden.



20.5 Datenausgabe auf Anzeigeeinheiten

Abb. 20.18. Anschluß einer stelligen Siebensegmentanzeige an einer parallelen AusgabeSchnittstelle (z.B. nach Abb. .)

Es gibt viele Anwendungen – besonders in einfachen Geräten – bei denen die für die Anzeigesteuerung erforderliche Rechenzeit übrig ist. Stören kann jedoch, daß die Anzeige flackert, wenn der Mikroprozessor längere Zeit für andere Aufgaben benötigt wird.

Typ

Hersteller

Anzahl

max. Strom

Spannungsabfall bei Imax

Anodentreiber (Stromquellen) IRF  Intern. Rect. DS

 National UDN   Allegro TD   Toshiba







 mA  mA  mA  mA

, V Konstantstrom , V , V

Katodentreiber IRF  CA  SN  DS

 TPIC   TB  NE  TPIC 6273 UDN  A TD   SN 

   



8





 mA  mA  mA  mA  mA  mA  mA 250 mA  mA  mA  mA

, V , V , V Konstantstrom , V , V , V 0,8 V , V , V , V



(Stromsenken) Intern. Rect. Harris Texas Instr. National Texas Instr. Toshiba Philips Texas Instr. Allegro Toshiba Texas Instr.

Logic Level Mosfets, ansteuerbar mit  V

Tab. 20.11. Leistungstreiber für die Ansteuerung von LED-Anzeigen und andere Anwendungen, die große Ausgangsströme benötigen



20 Modularer Aufbau von Mikrocomputern

Abb. 20.19. Selbstlaufende Multiplex-Anzeige mit Datenspeicher

Wenn die Anzeige ohne Mikroprozessor-Unterstützung arbeiten soll, muß sie zusätzlich zu Abb. . einen Anzeigespeicher und eine interne MultiplexEinrichtung besitzen. Die resultierende Schaltung ist in Abb. . dargestellt. Die Anzeigedaten werden vom Mikroprozessor in einen -Tor-Speicher (siehe Kapitel .. auf S. ) geschrieben, der wie ein normales RAM am Mikrocomputerbus angeschlossen wird. Unabhängig davon wird der Anzeigeinhalt aus dem -Tor-Speicher ausgelesen. Der Dualzähler stellt dabei zyklisch die Adressen bereit und aktiviert über den -aus- -Decoder die zugehörigen Stellen. Anzeigetreiber, die nach diesem Prinzip arbeiten, sind als voll integrierte Schaltungen in großer Vielfalt erhältlich. Einige Typen sind in Tab. . zusammengestellt. Neben den Typen mit parallelem Dateneingang gibt es auch Ausführungen, bei denen die Anzeigedaten in einem Schieberegister gespeichert werden. Sie benötigen zur Ansteuerung nur eine einzige serielle Datenleitung und keine Adressen. Erweitern lassen sich beide Ausführungsformen. Bei den RAM-Typen selektiert man über einen -aus-n-Decoder den gewünschten Baustein; bei den Schiebe-Register-Typen lassen sich die Anzeigedaten seriell durch mehrere in Reihe geschaltete Bausteine schieben. Bei einigen LED-Anzeigen sind die Multiplex-Treiber bereits eingebaut. Solche „intelligente Anzeigen“ sind in Tab. . ebenfalls aufgeführt. Flüssigkristall-Anzeigen benötigen zur Anzeige eine Wechselspannung mit bestimmter Amplitude. Sie wird nur bei den Treibern für wenige Segmente nach dem in Abb. . auf S.  beschriebenen Gegentakt-Verfahren erzeugt. Bei größeren Segmentzahlen werden auch Flüssigkristall-Anzeigen als Matrix verbunden, um die Anzahl der Anschlußleitungen in Grenzen zu halten. Zur Ansteuerung solcher Flüssigkristall-Matrizen benötigt man jedoch drei Spannungspegel (außer Masse), um zu erreichen, daß die selektierten Segmente eine ausrei-



20.6 Analog-Ein-/Ausgabe Typ

Hersteller

Stellen

Segmente je Stelle

Gemeinsam

DatenEingang

   





Anode Katode Katode Katode Katode Katode

 bit

bit  bit  bit  bit  bit

für LEDs Treiber für LED-Anzeigen ICM  Harris MM C National MC  Motorola MM C National MAX  Maxim ICM  Harris

LED-Anzeigen mit eingebautem Treiber PD  Siemens  PD  Siemans  HDSP   Hewlett-Pack.  PD   Siemens

HDSP  HP, Siemans





   

bit

bit  bit

bit

bit

für LCDs Treiber für LCD-Anzeigen ICM  Harris ICM  Harris HD  Hitachi ICM  Harris HD  Hitachi HD  Hitachi





  bel.





stat./mux. stat. mux. stat. mux. mux. stat.

 bit  bit  bit  bit

bit  bit

Tab. 20.12. Integrierte Anzeige-Schnittstellenbausteine mit Datenspeicher

chend große und die übrigen eine hinreichend kleine Wechselspannung erhalten. Diese spezielle Art der Multiplex-Technik wird als Triplex-Verfahren bezeichnet. 20.6

Analog-Ein-/Ausgabe Ein Mikrocomputer wird oft zur digitalen Verarbeitung analoger Signale eingesetzt. Dazu sind zwei spezielle Interface-Schaltungen erforderlich: Eine AnalogDigital-Umsetzer-Baugruppe zur Eingabe und eine Digital-Analog-UmsetzerBaugruppe zur Ausgabe analoger Signale. Wie die dazu erforderlichen AD- bzw. DA-Umsetzer arbeiten wird in Kapitel  auf S.  genauer beschrieben. Hier sollen die beim Anschluß an einen Mikrocomputer spezifischen Aspekte erklärt werden. 20.6.1 Analog-Eingabe Der prinzipielle Aufbau einer Analog-Eingabe-Schaltung ist in Abb. . dargestellt. Zur Durchführung einer Umsetzung speichert man zunächst den Ana-



20 Modularer Aufbau von Mikrocomputern

Abb. 20.20. Beispiel für eine Analog-Eingabe-Schaltung mit einem  bit-Analog-DigitalUmsetzer

logwert mit einem Abtast-Halteglied und gibt dann erst dem Analog-DigitalUmsetzer (ADU) den Startbefehl. Dazu dienen die beiden Univibratoren, die durch einen Lesevorgang bei der Adresse Basis + aktiviert werden. Wenn sich die Eingangsspannung nur langsam ändert (um weniger als  LSB während der Umsetzungsdauer) kann man das Abtast-Halteglied und die Univibratoren auch weglassen. 20.6.2 Analog-Ausgabe Ein Beispiel für eine Analog-Ausgabe-Schaltung mit  bit Auflösung ist in Abb. . dargestellt. Die Schaltung arbeitet wie die Parallel-Ausgabe in Abb. . auf S. . Die oberen  bit werden bei der Adresse Basis + gespeichert. Anschließend werden die unteren bit bei der Adresse Basis + gespeichert. Erst in diesem Augenblick dürfen die oberen  bit an den DigitalAnalog-Umsetzer (DAU) angelegt werden. Deshalb müssen die oberen Bits doppelt gepuffert werden. Ohne den zusätzlichen Speicher würden – zumindest vorübergehend – die neuen oberen  bit zusammen mit den alten unteren bit als Spannung ausgegeben. Man sollte die flankengetriggerten D-Flip-Flops auch nicht durch D-Latches (transparente D-Flip-Flops) ersetzen, weil sonst die Daten vom Mikroprozessor während der ganzen Zeit, in der E =  ist, an den DAU weitergegeben werden. Gültige Daten erscheinen jedoch erst kurz vor Ende des Zyklus. Dadurch würden am Analogausgang Störimpulse mit hoher Amplitude auftreten.

20.6 Analog-Ein-/Ausgabe



Abb. 20.21. Beispiel für eine Analog-Ausgabe-Schaltung mit einem  bit-Digital-AnalogUmsetzer

Literatur

[.] [.]

Deutsche Normen: Informationsverarbeitung: -Bit-Code. DIN . Berlin, Köln: Beuth. Schief, R.: Einfuhrung in die Mikroprozessoren und Mikrocomputer. Attempto  .

http://www.springer.com/978-3-540-42849-7

Suggest Documents