4.3 Die V.24-Schnittstelle Lösungsvorschläge zu den Selbsttestaufgaben

Lösungsvorschläge zu den Praktischen Übungen

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

Bit76543210
 
--
100
1
1   0
 CB1-CB2-CB2-SteuerungDRBCB1-
 FlagFlag DDRBSteuerung

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:

  1. Wird nach der Interrupterzeugung über CB1 das CB1-Flag nicht gelöscht, wird durch ein erneutes Einschreiben eines Wertes ins Register DRB kein weiteres Strobe-Signal erzeugt. Dies verhindert ein "Überlaufen" (overrun) des Empfängers.
  2. Das CB1-Flag wird jedoch auch gelöscht, wenn Sie nach dem Impuls an CB1 zweimal hintereinander einen Wert in das Datenregister DRB schreiben. Das liegt daran, daß das Monitorprogramm nach dem ersten Einschreiben das Register DRB liest, um die Anzeige zu aktualisieren, und dadurch das Flag löscht.

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:

Bild

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

Bild

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