Das eBook Angewandte Mikroelektronik wurde von Hans Lohninger zur Unterstützung verschiedener Lehrveranstaltungen geschrieben. Weitere Informationen finden sie hier. |
Home Experimente I/O-Bausteine Experimente mit Z80-PIO Centronics-Schnittstelle | |||
Siehe auch: Z80-PIO (Z8420) | |||
|
|||
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.
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
|
|||
Home Experimente I/O-Bausteine Experimente mit Z80-PIO Centronics-Schnittstelle |