| 4.3 Die V.24-Schnittstelle | Lösungsvorschläge zu den Selbsttestaufgaben |
Zu P4.2-1:
I. "Programmieren" des Ports PA:
Selektion des Datenrichtungsregisters DDRA (Adresse $F000) durch Bit2=0 im Steuerregister CRA (Adresse: $F001):
Taste A: $F001 ($XX)
Taste D: $00
Taste -: $F000 $AA PB7...PB0 = OIOI OIOI (I=Input/O=Output)
Taste +: $F001 $04 Selektion des Datenregisters DRA
Taste -: $F000 xyxyxyxy x: ausgegebenes, y: eingelesenes Bit
$FF Eingabe von $FF
Tasten +,-: $FF Ausgabebits O auf 1, offene Eingänge I auf 1
$00 Eingabe von $00
Tasten +,-: $55 Ausgabebits O auf 0, offene Eingänge I auf 1
II. Programmieren des Ports PB:
Taste A: $F003 ($XX) Taste D: $00 Taste -: $F002 $0F PB7...PB0 = IIII OOOO (I=Input/O=Output) Taste +: $F003 $04 Selektion des Datenregisters DRB Taste -: $F002 $0X X: ausgegebene Tetrade Taste +: $F003 $04 (dient nur zur Neuanwahl von DRB) Taste -: $F002 $YX Y: eingelesene, X: ausgegebene Tetrade
(Die letzten beiden Schritte können nun beliebig wiederholt werden.)
III. Verbindung der Portleitungen von PB:
Taste A: $F003 ($XX) Taste D: $00 Taste -: $F002 $0F PB7...PB0 = IIII OOOO (I=Input/O=Output) Taste +: $F003 $04 Selektion des Datenregisters DRB Taste -: $F002 $0X X: ausgegebene Tetrade Taste +: $F003 $04 (dient nur zur Neuanwhl von DRB) Taste -: $F002 $YX X=Y: eingelesene = ausgegebene Tetrade
(Die letzten beiden Schritte können nun beliebig wiederholt werden.)
Zu P4.2-2:
I. Belegung des Steuerregisters CRB (Adresse $F003):
| Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |||||||||||||
| |||||||||||||||||||||
| CB1- | CB2- | CB2-Steuerung | DRB | CB1- | |||||||||||||||||
| Flag | Flag | DDRB | Steuerung | ||||||||||||||||||
Also wird das Register CRB mit dem Wert $26 geladen.
Taste A: $F003 ($xx) Taste D: $26 Betriebsart gewählt und DRB selektiert (Bit 2=1)
II. Erzeugung des "langen" Strobe-Impulses:
durch Schreiben eines Wertes ins Datenregister DRB
$F003 $26 CB1-Flag gelöscht, kein Interrupt * Taste -: $F002 $XX LED an CB2 erlischt Taste +: $F003 $26 CB1-Flag gelöscht, kein Interrupt Impuls über Taste an CB1: LED an CB2 leuchtet Taste A: $F003 $A6 CB1-Flag gesetzt, Interruptanforderung Taste -: $F002 ($XX) löscht CB1-Flag Taste +: $F003 $26 CB1-Flag tatsächlich gelöscht weiter mit Aktion *.
Hinweise:
III. Erzeugung des "kurzen" Strobe-Impulses:
Der Wert im Steuerregister CRB muß geändert
werden zu: $2E.
Nach Einschreiben eines Wertes ins Datenregister
leuchtet die LED an CB2 kurz auf (Hier liegt ein Programmierfehler im Simulator vor. Der reale Baustein legt den Ausgang kurzeitig auf L-Potential.). Dieser Impuls dauert beim Praktikumsrechner
nur 1 ms und ist deshalb nicht mit dem bloßen Auge zu erkennen (Das er im 6809-Simulator zu beobachten ist, liegt darin, daß dieser langsamer arbeitet als der Praktikumsrechner und daher alle Operationen verlängert werden.).
Zu P4.2-3:
Programm zur Erzeugung einer Rechteckschwingung an CB2:
1 F003 CRB EQU $F003 2 F160 DLY1MS EQU $F160 3 4 0400 ORG $0400 5 0400 86 34 LOOP LDA #$34 6 0402 B7 F0 03 STA CRB ;LED an CB2 aus 7 0405 BD F1 60 JSR DLY1MS ;Verzögerung 8 0408 86 3C LDA #$3C 9 040A B7 F0 03 STA CRB ;LED an CB2 an 10 040D 1E 23 EXG Y,U 11 040F BD F1 60 JSR DLY1MS ;Verzögerung 12 0412 1E 23 EXG Y,U 13 0414 20 EA BRA LOOP
Zu P4.3-1:
Die Ausgabe des ASCII-Zeichens 'K' geschieht durch Einschreiben des Wertes $4B in das Sende-Datenregister der ACIA unter der Adresse $F008. Dies führt zur folgenden Darstellung im Emulatorfenster:

Ein (bitweiser) Vergleich mit dem Zeitdiagramm der Musterlösung zu Selbsttestaufgabe S4.3-1 zeigt, daß beide Ausgaben übereinstimmen. (Dabei muß man nur berücksichtigen, daß Start-, Daten-, Paritäts- und Stopbits in negativer Logik übertragen werden.)
Zu P4.3-2:
Die Ausgabe der ASCII-Zeichen 'vV' geschieht durch Einschreiben der Werte $76 (v), $56 (V) in das Sende-Datenregister der ACIA unter der Adresse $F008. Dies führt zu der im folgenden Bild dargestellten Emulatorfenster.
Durch Betägigen des waagerechten Verschiebebalkens wird auch das 2. Zeichen vollständig dargestellt. Ein (bitweiser) Vergleich mit dem Zeitdiagramm der Musterlösung zu Selbsttestaufgabe S4.3-2 zeigt, daß beide Ausgaben übereinstimmen. (Dabei muß man nur berücksichtigen, daß Start-, Daten-, Paritäts- und Stopbits in negativer Logik übertragen werden.)

Zu P4.3-3:
1 2 ; Register der ACIA R6551 3 F008 DR EQU $F008 ; Datenregister 4 F009 SR EQU $F009 ; Statusregister 5 F00A IR EQU $F00A ; Befehlsregister 6 F00B CR EQU $F00B ; Steuerregister 7 8 ; Monitor-Hilfsroutinen 9 F110 CLRDISP EQU $F110 ; Löschen der Anzeige 10 F120 SHOWB7SG EQU $F120 ; Darstellen eines Bytes 11 F123 SHOWD7SG EQU $F123 ; Darstellen zweier Bytes 12 F140 KEY EQU $F140 ; Tastaturabfrage ohne Halt 13 F156 SHOWADR EQU $F156 ; Adresse einlesen und anzeigen 14 15 0400 ORG $0400 16 0400 BD F1 10 KOMM JSR CLRDISP ; Anzeige löschen 17 0403 F7 F0 09 STB SR ; Programmed Reset 18 0406 86 0B LDA #$0B ; Programmieren des 19 0408 B7 F0 0A STA IR ; Befehlsregisters 20 040B C6 98 LDB #$98 ; Programmieren des 21 040D F7 F0 0B STB CR ; Steuerregister 22 0410 8E 00 06 LDX #$0006 ; Anzeige S6 selektieren 23 0413 C6 AA LDB #$AA ; Kennung fuer Anfangsadresse 24 0415 BD F1 20 JSR SHOWB7SG ; ausgeben 25 0418 8E 00 02 LDX #$0002 ; Anzeige S2 selektieren 26 041B BD F1 56 JSR SHOWADR ; Anfangsadresse einlesen 27 041E BD F1 10 JSR CLRDISP ; Anzeige löschen 28 29 0421 B6 F0 09 LOOP LDA SR ; Abfrage des Statusregisters 30 0424 84 08 ANDA #$08 ; RDRF-Bit maskieren 31 0426 27 F9 BEQ LOOP ; falls kein Zeichen empfangen 32 33 0428 F6 F0 08 LDB DR ; Empfangs-Datenregister lesen 34 042B 8E 00 00 LDX #$0000 ; Anzeige S0 selektieren 35 0433 BD F1 20 JSR SHOWB7SG ; Zeichen darstellen 36 0436 E7 A0 STB ,Y+ ; Zeichen im Speicher ablegen 37 0438 C1 2E CMPB #$2E ; Abfrage auf "." 38 043A 26 01 BNE WEITER 39 043C 3F SWI ; Sprung in den Monitor 40 043D 1F 20 WEITER TFR Y,D ; Adresse nach Akku D 41 043F 30 02 LEAX 2,X ; Anzeige S2 selektieren 42 0441 BD F1 23 JSR SHOWD7SG ; neue Adresse darstellen 43 0444 20 E0 BRA LOOP ; Schleife 44 45 0446 END
Zu P4.3-4:
1 2 ; Register der ACIA R6551 3 F008 DR EQU $F008 ; Datenregister 4 F009 SR EQU $F009 ; Statusregister 5 F00A IR EQU $F00A ; Befehlsregister 6 F00B CR EQU $F00B ; Steuerregister 7 8 ; Monitor-Hilfsroutinen 9 F110 CLRDISP EQU $F110 ; Löschen der Anzeige 10 F120 SHOWB7SG EQU $F120 ; Darstellen eines Bytes 11 F123 SHOWD7SG EQU $F123 ; Darstellen zweier Bytes 12 F140 KEY EQU $F140 ; Tastaturabfrage ohne Halt 13 F156 SHOWADR EQU $F156 ; Adresse einlesen und anzeigen 14 15 0400 ORG $0400 16 0400 BD F1 10 KOMM JSR CLRDISP ; Anzeige löschen 17 0403 F7 F0 09 STB SR ; Programmed Reset 18 0406 86 0B LDA #$0B ; Programmieren des 19 0408 B7 F0 0A STA IR ; Befehlsregisters 20 040B C6 98 LDB #$98 ; Programmieren des 21 040D F7 F0 0B STB CR ; Steuerregister 22 0410 8E 00 06 LDX #$0006 ; Anzeige S6 selektieren 23 0413 C6 AA LDB #$AA ; Kennung fuer Anfangsadresse 24 0415 BD F1 20 JSR SHOWB7SG ; ausgeben 25 0418 8E 00 02 LDX #$0002 ; Anzeige S2 selektieren 26 041B BD F1 56 JSR SHOWADR ; Anfangsadresse einlesen 27 041E BD F1 10 JSR CLRDISP ; Anzeige löschen 28 29 0421 8E 00 02 LOOP LDX #$0002 ; Anzeige S2 selektieren 30 0424 1F 20 TFR Y,D ; aktuelle Adresse 31 0426 BD F1 23 JSR SHOWD7SG ; anzeigen 32 0429 E6 A0 LDB ,Y+ ; Zeichen aus Datenbereich lesen 33 042B 30 1E LEAX -2,X ; Anzeige S0 selektieren 34 042D BD F1 20 JSR SHOWB7SG ; Zeichen darstellen 35 36 0430 B6 F0 09 NFREI LDA SR ; Abfrage des Statusregisters 37 0433 84 10 ANDA #$10 ; TDRE-Bit maskieren 38 0435 27 F9 BEQ NFREI ; Sprung, falls Sender nicht frei 39 40 0437 F7 F0 08 STB DR ; Zeichen ausgeben 41 42 043A C1 2E CMPB #$2E ; Abfrage auf "." 43 043C 26 E3 BNE LOOP ; Schleife 44 043E 3F SWI ; Sprung in den Monitor 45 46 043F END
| 4.3.4 Kommunikation mit dem PC | Lösungsvorschläge zu den Selbsttestaufgaben |