| 4.9 Bausteine zur A/D- und D/A-Wandlung |  | Inhaltsverzeichnis |

## Lösungsvorschläge zu den Selbsttestaufgaben von Kapitel 2

Hinweis: Beachten Sie bitte die in den Zeichnungen dieser Lösungsvorschläge verwendeten älteren Symbole für die logischen Grundschaltungen. Ihre Bedeutungen sind in den folgenden Zeichnungen jeweils angegeben. Im weiteren steht Sn.m-k für Selbsttestaufgabe n.m-k.

Zu S2.2-1:

Zum HOLD-Signal

- Dieses Signal wird während des normales Betriebes des µP-Systems aktiviert und zeigt an, daß eine andere Komponente Bus Master werden will.

- Der µP gibt den Systembus in der Regel nach Beendigung des augenblicklichen Buszugriffs frei, indem er seine Ausgänge hochohmig schaltet. In bestimmten Situationen kann er diese Freigabe hinauszögern, z.B. dann, wenn der augenblickliche Buszugriff unmittelbar einen weiteren Zugriff bedingt.

- Der Prozessor kann intern den augenblicklich ausgeführten Befehl oder einen anderen Befehl in seiner Warteschlange (weiter-)bearbeiten.

- Unmittelbar nach der Deaktivierung des Signals kann der Prozessor erneut auf den Systembus zugreifen.

Zum HALT-Signal

- Dieses Signal wird nur in Ausnahmesituationen aktiviert und zeigt häufig das Vorliegen eines nicht (vom Prozessor) zu behebenden Fehlers an.

- Der µP gibt den Systembus unbedingt und sofort nach Beendigung des augenblicklichen Buszugriffs frei, indem er seine Ausgänge hochohmig schaltet. Alle Steuersignale, auch die, die nicht der Steuerung des Systembusses dienen, werden inaktiv geschaltet.

- Der Prozessor stellt jegliche Befehlsbearbeitung ein.

- Eine Weiterarbeit des Prozessors kann nur durch das Zurücksetzen des Systems oder einen Interrupt veranlaßt werden, in der Regel natürlich erst nach Behebung eines festgestellten Fehlers.

Zu S2.3-1:

Zeitpunkt | I2 - I0 | Ereignis
0 | 2 | Laden durchs Betriebssystem
1 | 3 | Interrupt der Klasse 3
2 | 4 | Interrupt der Klasse 4
3 | 3 | Fortsetzung des Interrupts der Klasse 3
4 | 2 | Beendigung des Interrupts der Klasse 3
5 | 3 | 2. Interrupt der Klasse 3
6 | 7 | NMI
7 | 3 | Fortsetzung des 2. Interrupts der Klasse 3
8 | 5 | Interrupt der Klasse 5
9 | 3 | Fortsetzung des 2. Interrupts der Klasse 3
10 | 2 | Beendigung des 2. Interrupts der Klasse 3

Die Interruptanforderung der Klasse 1 wird hier nie ausgeführt, da vom Betriebssystem die Klasse 3 als Klasse niedrigster Priorität verlangt wird.

Zu S2.4-1:

Zunächst skizzieren wir im Bild L2.4-1 den Aufbau eines parallelen Addierers/Subtrahierers, der die Subtraktion als Addition im Zweierkomplement ausführt: A – B = A + B2k = A ++ 1.

Die Antivalenzschaltungen übernehmen darin die bitweise Invertierung des Operanden B, der Übertragseingang Ü0 = AS = 1 sorgt für die Addition der 1.

Bild L2.4-1: Paralleles Addier-/Subtrahierwerk

(Im folgenden stehen: = für die Äquivalenz, <> für die Antivalenz, ˆ für die UND-Verknüpfung, v für die ODER-Verknüpfung, ¬ für die bitweise Negation und «–» für "genau dann, wenn").

1. CF und AF:

Für das Übertrags-Ausgangssignals Ük+1 (Carry/Borrow) des Volladdierers VAk gilt bekanntlich:

Ük+1 = (Ak ˆ (Bk <> AS)) v (Ak ˆ Ük) v ((Bk <> AS) ˆ Ük) = (Ak ˆ (Bk <> AS)) v (Ük ˆ (Ak v (Bk <> AS))) .

Beginnend mit Ü0 = AS kann man daraus nun iterativ AF = Ü4 und CF = Ü8 berechnen. Wir wollen hier auf die sture Ausrechnung verzichten. (Führen Sie sie doch zur Übung einmal für AF selbst durch.)

OF:

Bei der Addition kann ein Überlauf nur auftreten, wenn beide Operanden das gleiche Vorzeichen haben, aber das Ergebnis das entgegengesetzte Vorzeichen hat. Hier gilt also:

OF+ = (A7 = B7) ˆ (A7 <> F7) ˆ (¬ AS) .

Bei der Subtraktion tritt ein Überlauf nur dann auf, wenn beide Operanden entgegengesetztes Vorzeichen haben und das Ergebnis ein anderes Vorzeichen als der Operand A hat. Also gilt:

OF– = (A7 <> B7) ˆ (A7 <> F7) ˆ AS .

Durch die ODER-Verknüpfung beider Fälle erhält man:

OF = (A7 <> F7) ˆ (((A7 = B7) ˆ (¬ AS)) v ((A7<> B7) ˆ AS)) = (A7<> F7) ˆ (A7 = B7= (¬ AS)) .

Zur Berechnung der nächsten drei Flags ist nichts weiter zu sagen:

ZF = ¬ (F7 v F6 v ... v F1 v F0) ,

SF = F7 ,

EF = ¬ F0 .

PF:

Die (ungerade) Parität wird durch die modulo-2-Summe der Ergebnisbits F7,..,F0 gegeben. Diese Summe wird bekanntlich durch die Antivalenz-Verknüpfung der Summanden ermittelt. Also folgt:

PF = F7<> F6<> .... <> F1<> F0 .

2. a) A, B vorzeichenlose ganze Zahlen:

- A < B «–» A - B < 0 «–» CF = 1 (Borrow aus "Stelle 8"),

- A >= B «–» ¬ (A < B) «–» CF = 0 ,

- A > B «–» (A - B >= 0) ˆ (A-B <> 0) «–» (CF = 0) ˆ (ZF = 0) ,

- A <= B «–» ¬(A > B) «–» (CF = 1) v (ZF = 1) .

b) A, B vorzeichenbehaftete Zahlen im Zweierkomplement:

Aus AS = 1, SF = F7 und der oben hergeleiteten logischen Funktion des Überlauf-Bits OF folgt zunächst:

OF = OF– = (A7 <> B7) ˆ (A7 <> SF)

= [(¬ A7) ˆ B7ˆ SF] v [A7ˆ (¬B7) ˆ (¬SF)].

Daraus folgt weiter:

SF=1 «–» OF = (¬ A7) ˆ B7 ,

SF=0 «–» OF = A7ˆ (¬B7) .

Nun kann man die vier Möglichkeiten für die Wahl von SF und OF genauer untersuchen:

OF | SF | Bedingung | Ergebnis
0 | 0 | kein Überlauf, F positiv: 0 <= A - B <= 27-1 | A >= B
0 | 1 | kein Überlauf, F negativ: -27<= A - B < 0 | A < B
1 | 0 | (A7 = 1) ˆ (B7 = 0): A negativ, B positiv | A < B
1 | 1 | (A7 = 0) ˆ (B7 = 1): A positiv, B negativ | A > B

Daraus ergeben sich nun unmittelbar die gesuchten Beziehungen:

- A < B «–» (OF <> SF) = 1 ,

- A <= B «–» (A < B) v (A = B) «–» (OF <> SF) v ZF = 1 ,

- A > B «–» ¬(A <= B) «–» (OF <> SF) v ZF = 0 ,

- A >= B «–» ¬(A < B) «–» (OF <> SF) = 0 .

3.

Bild L2.4-2: Erzeugung der Flags und Testmultiplexer

4. Durch die Addition kann der BCD-Zahlenbereich in der unteren Hälfte des Ergebnisses durch zwei Möglichkeiten verlassen werden:

a) Es tritt eine Pseudotetrade A, B, C, D, E, F auf. Diese wird durch die folgende logische Funktion angezeigt:

L = F3 ˆ (F2 v F1) .

b) Durch das Flag AF wird ein Übertrag in die obere Hälfte des Ergebnisses gemeldet.

In beiden Fällen, angezeigt durch L v AF = 1 , muß die ALU zum Ergebnis F den Wert $06 addieren. Entsprechend kann in der oberen Ergebnishälfte eine Pseudotetrade oder ein Übertrag auftreten, der hier durch das Flag CF gemeldet wird. Daher muß die ALU immer dann, wenn

CF v H := CF v [F7 ˆ (F6 v F5)] = 1

ist, zum Ergebnis F den Wert $60 addieren. Das Ergebnis der Addition wird nun durch das Übertragsbit CF und das korrigierte Ergebnis F' dargestellt.

Beispiele:

Korrektur der unteren Tetrade Korrektur der oberen Tetrade | i) CF A: 89 B: + 44 F: AF=0 CD + 06 D3 + 60 1 33 | ii) CF 89 + 98 AF, CF=1 1 21 + 06 1 27 + 60 1 87

Zu S2.4-2:

| CF | A | CF
Anfangswert | 0 | 10101101 | 0
Verschieben |  |  |
logisch/arithmetisch, n. links | 1 | 01011010 |
logisch, nach rechts |  | 01010110 | 1
arithmetisch, nach rechts |  | 11010110 | 1
Rotieren |  |  |
nach rechts |  | 11010110 |
nach links |  | 01011011 |
nach rechts mit Übertragsbit |  | 11010110 | 1
nach links mit Übertragsbit | 1 | 01011011 |
n. rechts durchs Übertragsbit |  | 01010110 | 1
n. links durchs Übertragsbit |  | 01011010 | 1

IVN wird auf die höherwertigen Eingänge B3 – B10 des Adreßaddierers gelegt, die niederwertigen werden konstant mit '0' belegt. Dadurch wird IVN um drei Bits nach links verschoben bzw. mit 8 multipliziert.

Zu S2.4-3:

a) Im Bild 2.4-3 ist eine Realisierung aus logischen Grundschaltungen für den 4-bit-Multiplexer skizziert. Wegen der Einfachheit der Schaltung verzichten wir hier auf weitere Erklärungen.

Bild L2.4-3: 4-bit-Multiplexer

b) Im Bild L2.4-4 ist der Aufbau des Schieberegisters skizziert.

Bild L2.4-4: Aufbau des Schieberegisters

Es ist aus D-Flipflops aufgebaut, deren Eingängen jeweils ein Multiplexer vorgeschaltet ist. Diese Multiplexer werden durch zwei Signale S1, S0 gesteuert und dienen zur Auswahl genau einer der letzten drei aufgeführten Funktionen. Den Aufbau der Multiplexer ersieht man aus Bild L2.4-1, wenn man darin das oberste UND-Gatter des Eingangs E0 entfernt. Die erstgenannte Funktion "Registerinhalt unverändert lassen" wird im Fall S0 = S1 = 0 dadurch erreicht, daß der Takt T (durch die UND/ODER-Gatterkombination) von den Flipflops abgetrennt wird.

c) S. Bild L2.4-5.

Bild 2.4-5: Skalierung der IVN mit 8

Zu S2.5-1:

(AP: Adreßpuffer, DBP: Datenbuspuffer, F: Ergebnis des Addierers, Ri: Register i=1,2)

B0 —> R2 Basisadresse nach R2

DBP —> R1 Offset nach R1

F := R2 + R1 Addition (B0)+<Offset>

F —> R1 Zwischenergebnis nach R1

I0 —> R2 Index nach R2

F := R2 + R1 Addition [(B0)+<Offset>]+(I0)

F —> AP Operandenadresse nach AP

Inkrement R2 (I0)+1

F —> I0 neuer Indexwert nach I0

Zu S2.6-1:

Als Wiederholung skizzieren wir zunächst im Bild L2.6-1 eine Lösungsmöglichkeit für jede der vier Betriebsarten, die das Register zur Verfügung stellen soll: Links/Rechts-Schieben, Vorwärts/Rückwärts-Zählen. Das Register ist bei allen vier Möglichkeiten aus JK-Master-Slave-Flipflops aufgebaut, die mit einem gemeinsamen Takt T versorgt werden. Die verlangte Funktion des Rücksetzens wird durch die statischen Reset-Eingänge R der Flipflops erreicht, die parallel miteinander verbunden werden. Diese Funktion wird im folgenden nicht weiter betrachtet. (Beachten Sie bitte, daß aus zeichentechnischen Gründen im Bild das niederstwertige Bit links gezeichnet ist, so daß hier - im Unterschied zu Abschnitt 2.4 - ein Vorwärtsschieben ein Rechtsschieben bedeutet.)

S1 | S0 | Funktion
0 | 0 | Vorwärts-Zählen
0 | 1 | Rückwärts-Zählen
1 | 0 | Vorwärts-Schieben
1 | 1 | Rückwärts-Schieben

Bild L2.6-1: Darstellung der zu realisierenden Funktionen

Im Bild L2.6-2 sind nun alle vier Teilfunktionen in einem Register vereint. Die Auswahl einer Funktion geschieht über die 4-auf-1-Multiplexer (MUX), die allen Flipflop-Eingängen vorgeschaltet sind. Die beiden Steuereingänge S0, S1 der Multiplexer haben folgende Wirkung:

Bild L2.6-2: Das gesuchte Multifunktions-Register

Zu S2.7-1:

Der Adreßbustreiber ist im Bild L2.7-1 dargestellt. Durch das Signal G (Gate) können beide Tristate-Treiber hochohmig geschaltet werden und damit der Programmzähler und der Adreßpuffer vom Adreßbus getrennt werden. Das Signal S selektiert genau eines der beiden angeschlossenen Register.

Bild L2.7-1: Der Aufbau des Adreßbustreibers

Zu S2.7-2:

Im Bild L2.7-2 wurde der Adreßbustreiber aus Bild L2.7-1 um einen bidirektionalen Datenbustreiber nach Bild 2.7-4 erweitert. Zwei Auswahlsignale S1, S0 legen fest, welches Register mit dem externen Daten-/Adreßbus verbunden wird, und zwar nach folgender Beziehung:

S1 | S0 | ausgewähltes Register
0 | 0 | kein Register ausgewählt, Busleitungen hochohmig
0 | 1 | Adreßpuffer
1 | 0 | Programmzähler
1 | 1 | Datenbuspuffer

Die Aktivierung des Datenbustreibers geschieht durch die zusätzliche Steuerleitung G. Bei dieser Lösung kann der Prozessor ein Datum in den Datenbuspuffer schreiben, auch wenn dieser noch nicht auf den externen Bus geschaltet ist, d.h. der Eingang OA auf L-Potential liegt. Durch Aktivierung der Eingänge G und OE kann der Prozessor jederzeit den Inhalt des Datenbuspuffers lesen.

Bild L2.7-2: Treiber eines bidirektionalen Multiplexbusses

## Lösungsvorschläge zu den Selbsttestaufgaben von Kapitel 3

Zu S3.1-1:

Aus 2n = 10x folgt x = n · log10 2, also ungefähr 0.3 · n . Daraus folgt:

32-bit-Format

vorzeichenlos: 0 <= Z < (232 = 109.633) < 4.3 × 109

vorzeichenbehaftet: -231 <= Z < (231 = 109.332) < 2.15 × 109

64-bit-Format

vorzeichenlos: 0 <= Z < (264 = 1019.266) < 1.85 × 1019

vorzeichenbehaftet: -263 <= Z < (263 = 1018.965) < 9.23 × 1018

Zu S3.1-2:

a) 32-bit-Format

kleinste positive Zahl: min = 21-127 × (1.0)2 , also ungefähr 1.175 × 10-38

größte positive Zahl: max = 2254-127 × (1.111...1)2 , also ungefähr 2128 oder 3.40 × 1038

64-bit-Format

kleinste positive Zahl: min = 21-1023 × (1.0)2 , also ungefähr 4.49 × 10-307

größte positive Zahl: max = 22046-1023 × (1.111...1)2 , also ungefähr 21024 oder 1.80 × 10308

b) Z1 = -1.75 = (-1)1 × 2127-127 × (1.1100...0)2

Z2 = 36 864 = 215 + 212 = (-1)0 × 2142-127 × (1.0010...0)2

Zu S3.2-1:

a) R = A - B · [A/B] , wobei [..] den ganzzahligen Anteil einer Zahl bezeichnet.

FLD FR1,A; A ins Register FR1

FLD FR2,B; B ins Register FR2

FDIV FR1,FR2; Division A/B, nach FR1

FRNDINT FR1; Abrunden zur ganzen Zahl

FMUL FR1,FR2; Multiplikation B · [A/B], nach FR1

FLD FR2,A; A ins Register FR2

FSUB FR1,FR2; Subtraktion B· [A/B] - A, nach FR1

FCHS FR1; Vorzeichenwechsel

FST FR1,C; Abspeichern nach C

b) FGETEXP

160 = (-1)0 × 27 × 1.25 = (-1)0 × 2127+7 × (1.01)2 = 0 | 10000110 | 0100..002

FGETMAN

- 1.625 = (-1)1 × 20 × (1.101)2 = 1 | 01111111 | 10100..002

Zu S3.3-1:

1. Berechnung der effektiven Adresse:

EA = ($00,((PC)+1)+1),($00,((PC)+1))+(Y)

Herleitung:

(PC)+1 Adresse des Offsets im Befehl

((PC)+1) Offset

$00,((PC)+1) =: PAL Zeiger auf das L-Byte

$00,((PC)+1)+1 =: PAH Zeiger auf das H-Byte der Operanden-Basisadresse im Speicher

(PAH),(PAL) =: ZA Operanden-Basisadresse im Speicher

ZA+(Y) effektive Operandenadresse

(',' kennzeichnet darin die Konkatenation zweier Bytes zu einer 16-bit-Adresse.)

Das Bild L3.3-1 zeigt die symbolische Darstellung dieser Adressierungsart.)

Bild L3.3-1: Postindizierte indirekte Zero-Page-Adressierung

2.

$E000 | SUM: | LDA | #$00 | ; Löschen der Speicher-
|  | STA | $A2 | ; zellen $A2, $A3 für das
|  | STA | $A3 | ; Ergebnis
| LOOP: | CLC |  | ; Carry-Flag löschen
|  | LDA | $A2 | ; Laden des L-Bytes der
|  | ADC | ($A0),Y | ; Summe, Addition des
|  | STA | $A2 | ; Datums und Speichern
|  | LDA | $A3 | ; Laden des H-Bytes der
|  | ADC | #$00 | ; Summe, Auswertung des
|  | STA | $A3 | ; Carry Flags, Speichern
|  | DEY |  | ; Y dekrementieren
|  | BNE | LOOP | ; Verzweigung, falls nicht
|  |  |  | ; letztes Datum
|  | RTS |  | ; Rücksprung
|  | LDA | #$FF | ; Basisadresse-1 (=$0FFF)
|  | STA | $A0 | ; nach $00A0
|  | LDA | #$0F | ; und $00A1
|  | STA | $A1 | ; speichern
|  | LDY | #$80 | ; Y mit 128 laden
|  | JSR | $E000 | ; Aufruf von SUM
|  | ... |  |

## Lösungsvorschläge zu den Selbsttestaufgaben von Kapitel 4

### Zu S4.2-1:

1. Logische Funktionen: Ai = Ei Ù j>ij Ù , also:

   | A3 = E3 Ù , A2 = E2 Ù 3 Ù , A1 = E1 Ù 2 Ù 3 Ù , A0 = E0 Ù 1 Ù 2 Ù 3 Ù .

   Im Bild L4.2-1 sind die Realisierungen dieser Funktionen gezeigt.
   Bild L4.2-1: 4-bit-Prioritätsdecoder
2. Bild L4.2-2: 8-bit-Prioritätsdecoder
   Ein Ausgang Ai, i=0,..,3, des "niederwertigen" Decoders PD0 darf nur dann aktiviert werden, also auf H-Potential gebracht werden, wenn alle Eingänge des "höherwertigen" Decoders PD1 inaktiv sind, also auf L-Pegel liegen. Dies erreicht man dadurch, daß man auf den -Eingang von PD0 die Oder-Verknüpfung der Eingänge E4,..,E7 von PD1 legt (s. Bild L4.2-2). Der -Eingang von PD1 wird fest mit Massepotential verbunden.

### Zu S4.3-1:

CE-Bit:
In seiner Wirkung entspricht dieses Bit dem -Eingang eines Peripheriebausteins. Jedoch gestattet es, den Baustein softwaremäßig (für gewisse Zeiten) abzuschalten. Dadurch werden alle Unterbrechungsanforderungen an seinen Eingängen unterdrückt.
I/P-Bit bzw. ENI-Eingang:
Durch diese wird nur die Weitergabe einer Unterbrechungsanforderung zum Prozessor gesteuert. Die Bausteineingänge bleiben jedoch stets aktiviert, und die Anforderungen werden in den Registern gespeichert und ausgewertet.

### Zu S4.5-1:

| 16 bit | 2x8 bit
dual | $4749 + 1 = 18 250 | ($47 + 1) × ($49 + 1) = 72 × 74 = 5 328
BCD | 4749 + 1 = 4 750 | (47 + 1) × (49 + 1) = 48 × 50 = 2 400

Hinweis:
Die Addition der '1' ist nötig, da voraussetzungsgemäß jeder Zählzyklus erst mit dem Ende des Null-Zustandes abgeschlossen ist.

### Zu S4.6-1:

1. Der Zustand Q des Flipflops DRi muß auf den Eingang Di zurückgekoppelt werden, wenn:
   - das Datenregister angesprochen wird, also ENDR=1 ist,
   - ein Lesezugriff stattfindet, also R/=1 ist,
   - die Portleitung Pi als Ausgang geschaltet ist, also das Bit DRRi=1 ist.
   Daraus ergibt sich die im Bild L4.6-1 dargestellte Beschaltung.
   Bild L4.6-1: 1. Variante der Portbeschaltung
2. Bei der 2. Variante wird bei jedem Lesezugriff auf das Datenregister die Portleitung Pi auf die Datenleitung Di durchgeschaltet - unabhängig von der gewählten Übertragungsrichtung der Portleitung. Deshalb entfällt hier die Verbindung des Bits DRRi zum Eingangstreiber. Im Bild L4.6-2 ist die Realisierung gezeigt.

   Bild L4.6-2: 2. Variante der Portbeschaltung

### Zu S4.6-2:

1. Lesezugriff (s. Bild L4.6-3):
   Bild L4.6-3: Zeitlicher Ablauf eines Lesezugriffs
   Nachdem der Baustein durch das -Signal und das Datenregister DR des Ports durch die Adreßsignale A1, A0 selektiert wurden, schaltet die negative Flanke des -Signals die Portleitungen PXi auf die Datenbusleitungen Di. Mit der positiven Flanke des -Signals wird das Datum in den µP übernommen. Dabei ist es sehr wohl möglich, daß sich - anders als im Bild dargestellt - der Zustand der Portleitungen noch während des -Signals (=0) ändert. Verlangt wird lediglich, daß während der Zeitspanne tDS (Data Setup) vor der positiven -Flanke das Datum stabil anliegt.
2. Schreibzugriff (s. Bild L4.6-4):

   Bild L4.6-4: Zeitlicher Ablauf eines Schreibzugriffs

   Nach der Anwahl des Bausteins und des Datenregisters DR durch die Signale , A1, A0 legt der Prozessor die Daten auf den Datenbus Di. Diese werden mit der positiven Flanke des -Signals in das Register DR übernommen. Mit einer kleinen Verzögerung td (Delay) erscheinen sie dann auf den Portleitungen PXi.

### Zu S4.6-3:

Ein Zeitdiagramm der bidirektionalen Übertragung ist im Bild L4.6-5 dargestellt.

Bild L4.6-5: Zeitdiagramm der bidirektionalen Übertragung

Der wichtigste Unterschied zum Bild 4.6-7 besteht darin, daß die Portleitungen PA7...PA0 (Peripheral Bus) immer dann hochohmig geschaltet sind, wenn nicht gerade ein Datum übertragen wird. Die Steuerung der Tristate-Treiber wird vom Peripheriegerät übernommen: Einerseits legt es selbst ein Datum auf diesen Bus und triggert die Übernahme in den Eingabepuffer IBA durch das Strobe-Signal . Andererseits schaltet es mit seinem Quittungs-Signal die Treiber des 8255 durch und übernimmt die vom Prozessor im Datenregister DRA abgelegte Information. Durch die negative Flanke des -Signals wird, wie im Bild 4.6-6 angedeutet, nur dasjenige Interrupt-Flipflop (FF) zurückgesetzt, das dem -Eingang zugeordnet ist.

### Zu S4.6-4:

Bei der angesprochenen Lösung bietet sich die folgende Zuordnung zwischen den Signalen des 8255 und der Centronics-Schnittstelle an:

PA0,...,PA7 | <---> | DATA1-8
| <---> |
| <---> | .

Dabei ergeben sich jedoch die nachstehenden Schwierigkeiten:

1. Es gibt keinen freien 8255-Eingang für das BUSY-Signal.
2. Die negative Flanke des (-)-Signals kann mit dem Zeitpunkt zusammenfallen, zu dem die Daten auf den PAi(-DATAi)-Leitungen stabil vorliegen. In diesem Fall wird die geforderte Zeitspanne (³ 0.5 µs) zwischen diesen beiden Ereignissen nicht eingehalten.
3. Das -Signal wird erst durch die positive Flanke des -Signals zurückgenommen. Bei der Centronics-Schnittstelle gibt das Peripheriegerät das -Signal jedoch erst nach der positiven Flanke des -Signals aus.

### Zu S4.6-5:

1. Modus 0. Port PA: Ausgang; Port PB: Eingang; Port PCL: Ausgang.
2. Das Flußdiagramm ist im Bild L4.6-6 dargestellt. Das Unterprogramm beginnt mit der Ermittlung des Gerätestatus und stellt dabei fest, ob ein "Papier Ende"-Fehler oder ein beliebiger "anderer Fehler2 vorliegt. Ist dies der Fall, wird das Programm sofort beendet.
   Im anderen Fall wird das Zeichen in den Port PA geschrieben. Es folgt die zeitgerechte Erzeugung des -Signals auf der Portleitung PC0.
   Nach der geforderten Zeitverzögerung von wenigstens 0.5 µs, während der die Daten weiterhin stabil vorliegen müssen, wird das BUSY-Signal an der Portleitung PB1 überprüft. Spätestens nach einer Sekunde muß dieses Signal einen L-Pegel annehmen. Ist dies nicht der Fall, so veranlaßt die Zeitüberwachung einen Abbruch des Programms. (Dabei kann eventuell wieder der Status des Gerätes über den Port PB ermittelt und die genauere Ursache für die Zeitüberschreitung ermittelt werden.)
   Wird die vorgegebene Zeit nicht überschritten, so schließt das Programm mit der Abfrage des -Signals an der Portleitung PB0. Dieses Signal muß zunächst den '0'-Zustand und danach wieder den '1'-Zustand einnehmen. Zur Beschleunigung der Übertragung kann der µP jedoch darauf verzichten, die Beendigung des -Signals abzuwarten. Diese Möglichkeit ist im Bild gestrichelt gezeichnet.

Bild L4.6-6: Programm zur Zeichenausgabe

Das angegebene Programm stellt die Übertragung eines einzelnen Zeichens dar. Die Sachlage ändert sich etwas, wenn - wie heute üblich - der Drucker über einen relativ großen Pufferspeicher (z.B. 32 Mbyte) verfügt. In diesem Fall sollte die Abfrage des Gerätezustandes vor jedem Zeichentransfer entfallen und nur noch nach einer Zeitüberschreitung ausgeführt werden. Das BUSY-Signal muß hier vom Drucker dazu benutzt werden, dem µP mitzuteilen, ob freier Pufferplatz zur Verfügung steht oder nicht.

### Zu S4.8-1:

1. Auflösen der Formel nach SCLKDIV liefert:
   SCLKDIV = (Frequenz von CLKOUT) / (2 × Frequenz von SCLK) - 1.
2. 1. Frequenz von SCLK = 9600 Hz:

      SCLKDIV = 0.5 ×12 288 000 / 9600 - 1 = 639 = 0x027F

   2. Frequenz von SCLK = 2,048 MHz:

      SCLKDIV = 0.5 × 12,288 / 2,048 - 1 = 2 = 0x0002

3. Auflösung der Formel nach RFSDIV liefert für die vorgegebenen Werte:

   RFSDIV = (Frequenz von SCLK) / (Frequenz von RFS) - 1 = 2048 / 8 - 1 = 255 = 0x00FF

### Zu S4.9-1:

UDA,max = UDA(2n - 1) = (2n - 1)×(Umax - Umin) / 2n + Umin = Umax - LSB
Umax entspricht 2n.

### Zu S4.9-2:

1. UDA($A0) = [$A0 × 5V + ($100-$A0) × 0V]/256 = 160 × 5/256 V = 3.125 V
2. Bild L4.9-1: Schaltung zur Erzeugung des PWM-Signals
   Der Digitalwert D wird in ein Register eingeschrieben. Ein Komparator vergleicht ihn kontinuierlich mit dem Zustand Z eines frei umlaufenden Dualzählers. Die Umlaufdauer dieses Zählers bestimmt die Schwingungsdauer TS des Ausgangssignals. Der Ausgang "D< Z" des Komparators ist immer dann im '1'-Zustand, wenn der Zähler den Wert D noch nicht erreicht hat, und danach bis zum Ende des Zyklus im '0'-Zustand.
3. TI = 1/(10 MHz) = 0.1 µs = 100 ns,
   TS = 2n × TI = 256 × 0.1 µs = 25.6 µs,
   TP = $A0 × TI = 160 × 0.1 µs = 16 µs.
   Maximale Wandlungsrate: 1/(25.6 µs) = 39.0625 kHz

| 4.9 Bausteine zur A/D- und D/A-Wandlung |  | Inhaltsverzeichnis |