Das eBook Angewandte Mikroelektronik wurde von Hans Lohninger zur Unterstützung verschiedener Lehrveranstaltungen geschrieben. Weitere Informationen finden sie hier.


Experiment: Aufbau einer Centronics-Schnittstelle

In diesem Experiment soll die Ansteuerung der Centronics-Schnittstelle gezeigt werden. Um den Aufbau sinnvoll einsetzen zu können, wird die Centronics-Schnittstelle mit der seriellen Schnittstelle kombiniert, so dass sich eine seriell ansteuerbare Druckerschnittstelle ergibt. Die Abbildung zeigt den Aufbau des Experiments. Es wird Kanal A der seriellen Schnittstelle zum Empfang der Zeichen benützt.

Die Centronics-Schnittstelle ist möglichst einfach implementiert. Dazu werden nur die Signale /STB, BUSY und die Datenleitungen benötigt. Das ansteuernde Programm fragt zuerst den Status der BUSY-Leitung ab. Signalisiert der Drucker, dass er nicht bereit ist, Daten zu empfangen (BUSY=HIGH), so wartet das Programm, bis das BUSY-Signal freigegeben wird. Dann wird das Datenbyte an den Port A des PIO gelegt und auf der Strobeleitung (/STB) ein kurzer Impuls gesendet.

Aufbau der seriellen Druckerschnittstelle

Das Steuerprogramm meldet sich zuerst mit der Meldung 'Serielle Druckerschnittstelle bereit' und geht dann in eine Warteschleife, in der permanent der Empfangspuffer der seriellen Schnittstelle und die Stellung der DIP-Switches auf Platine uP1 abgefragt werden. Wird ein Datenbyte empfangen, so wird dieses auf der Centronics-Schnittstelle ausgegeben. Das Protokoll der seriellen Schnittstelle kann mit Hilfe der DIP-Switches eingestellt werden.

;===================================================
;---- Experiment: Centronics-Schnittstelle ---------
;===================================================
;
            .GLOBAL CENTRX
CENTRX:     LD      A,0CFH      ;Port A - Modus 3
            OUT     (PIOAC),A
            LD      A,11111110B ;Bit 0 = /STB
            OUT     (PIOAC),A   ;Bit 1 = BUSY
            LD      A,00000111B ;keine Interrupts
            OUT     (PIOAC),A
;
            LD      A,0CFH      ;Port B - Modus 3
            OUT     (PIOBC),A
            LD      A,00000000B ;alle Bits Ausgang
            OUT     (PIOBC),A
            LD      A,00000111B ;keine Interrupts
            OUT     (PIOBC),A
            LD      A,1         ;/STB auf HIGH legen
            OUT     (PIOAD),A
;
            LD      HL,CENS1    ;Startmeldung
            CALL    PRTSTR
$1:         LD      HL,DSIMG    ;DIPSW geändert ?
            IN      A,(DIPSW)
            CP      (HL)
            LD      (HL),A
            CALL    NZ,SETDSW   ;neues Protokoll
            CALL    RDV24A      ;Zeichen eingelangt ?
            JR      C,$1
            CALL    OUTCEN      ;ja ---> drucken
            JR      $1
;
CENS1:      DEFB    'Serielle Druckerschnittstelle bereit'
            DEFB    0DH,0AH,0
;
;===================================================
;---- String auf Centronics-Schnittstelle drucken --
;===================================================
;
PRTSTR:     LD      A,(HL)      ;Zeichen holen
            CP      0           ;Ende des Strings ?
            RET     Z
            CALL    OUTCEN      ;drucken
            INC     HL          ;nächstes Zeichen
            JR      PRTSTR
;
;===================================================
;--- Zeichen auf Centronics-Schnittstelle drucken --
;===================================================
;
;ENTRY:     Zeichen in A
;EXIT:      Zeichen wird auf Centronics-Schnittstelle
;           ausgegeben
;
OUTCEN:     PUSH    AF
$1:         IN      A,(PIOAD)   ;warten bis BUSY ok
            AND     02H
            JR      NZ,$1
            POP     AF
            PUSH    AF
            OUT     (PIOBD),A   ;Zeichen ausgeben
            LD      A,1
            OUT     (PIOAD),A   ;/STB-Impuls
            LD      A,0
            OUT     (PIOAD),A
            LD      A,1
            OUT     (PIOAD),A
            POP     AF
            RET


Last Update: 2008-05-31