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

Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0
- | - |
1 | 0 | 0
| 1 |
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:

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:

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 |