| 4.9 Bausteine zur A/D- und D/A-Wandlung | Inhaltsverzeichnis |
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.
| 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.
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: + 44F: AF=0 CD + 06 D3 + 60 1 33 |
ii) CF 89 + 98AF, CF=1 1 21 + 06 1 27 + 60 1 87 |
| 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.
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
(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
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
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
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
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
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
![]()
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
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 | ||
| ... |
A3 = E3 Ù A2 = E2 Ù A1 = E1 Ù A0 = E0 Ù |


| 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 |


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


Bild L4.6-4: Zeitlicher Ablauf eines Schreibzugriffs

Bild L4.6-5: Zeitdiagramm der bidirektionalen Übertragung
| PA0,...,PA7 | <---> | DATA1-8 |
| <---> | ||
| <---> | |

Bild L4.6-6: Programm zur Zeichenausgabe
SCLKDIV = 0.5 ×12 288 000 / 9600 - 1 = 639 = 0x027F
SCLKDIV = 0.5 × 12,288 / 2,048 - 1 = 2 = 0x0002
RFSDIV = (Frequenz von SCLK) / (Frequenz von RFS) - 1 = 2048 / 8 - 1 = 255 = 0x00FF

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