Tech-Ecke / DOS Inhalt / INP OUT

 

LPT-Port in QBASIC über INP/OUT Befehl ansprechen
 

Hinweis: Die hier gezeigten Programmierbeispiele beziehen sich auf den LPT1 und LPT2 mit der Adresse $378h bzw. $278h. Die Adresse muss jedoch in dezimaler Schreibweise angegeben werden, also 888 beim LPT1 und 632 beim LPT2.

QBasic bietet wohl die einfachste Möglichkeit den LPT-Port anzusprechen, wobei der Rechner aber auch in einer echten DOS-Umgebung laufen muss. In der Eingabeaufforderung unter Windows ist es leider nicht möglich den LPT-Port anzusprechen.
Die Befehl zum Ansteuern lauten OUT(XXX),Y  und INP(XXX).


   LPT-Port

Der LPT-Port ist in drei Register unterteilt, das Datenregister (8Bit), das Steuerregister(4Bit) und das Statusregister (5Bit). Für den Bastler ist eigentlich nur das Datenregister, welches 8 Ausgänge bereit hält und das Statusregister welches mit 5 digitalen Eingängen
aufwartet interessant. Am Port selbst finden wir die Ausgänge am Pin 2-9 (Data 0 - 7) und die Eingänge am Pin 10-13 und 15.

 

           
  1 Strobe 10 Acknowledge [E] 19 GND
  2 Data 0 [A] 11 Busy [E] 20 GND
  3 Data 1 [A] 12 Paper End [E] 21 GND
  4 Data 2 [A] 13 Select [E] 22 GND
  5 Data 3 [A] 14 Auto Feed 23 GND
  6 Data 4 [A] 15 Error [E] 24 GND
  7 Data 5 [A] 16 Init 25 GND
  8 Data 6 [A] 17 Select In    
  9 Data 7 [A] 18 GND    

Weitere Infos zum LPT-Port gibt es hier


 

   Out(XXX),y  (Ausgang - Datenregister)

Setzt man mit OUT einen Bit im Datenregister des LPT-Ports, so kann man am entsprechenden Pin eine Spannung von +5V messen. Folgende Tabelle zeigt welcher Bit welchen Pin unter Spannung setzt.

Ausgang Nr. 1 2 3 4 5 6 7 8
OUT(888), 1 2 4 8 16 32 64 128
+5Volt an Pin 2 3 4 5 6 7 8 9
Pinbezeichnung Data 0 Data 1 Data 2 Data 3 Data 4 Data 5 Data 6 Data 7

Um demnach am LPT1 den Ausgang 1 (Pin 2) zu setzen, lautet der entsprechende Syntax im Programm.

   OUT(888),1
 

Um mehrere Ausgänge gleichzeitig zu schalten, nimmt man die Quersumme der Werte in Zeile 2. Möchte man also den Ausgang 2 und 5 Schalten so ist der Wert 18 (2 + 16)

   OUT(888),18
 

Die so gesetzten Werte bleiben immer solange erhalten bis sie durch einen anderen überschrieben werden. Um alle Ausgänge wieder auf "Null" zu setzen (alles aus) setzt man "0"

   OUT(888),0
 
Achtung!
Der LPT-Port ist eine sehr empfindliche Schnittstelle, er kann nur wenige mA verkraften. Eine stärkere LED reicht bereits aus um ihn in die "Ewigen Jagdgründe" zu schicken. Keines falls kann man hier Relais oder sonstige Verbraucher direkt anschließen. Dazu bedarf es einer Signalverstärkung die mittels Transistoren oder dem IC ULN2803 erledigt werden kann. Eine passende Schaltung hierfür werde ich demnächst auf der Tech-Ecke bereitstellen.


   INP(
XXX(Eingang - Statusregister)

Um nun Informationen von Außen in den PC und somit in sein eigenes Programm zu schleusen benutzt man die Bits des Statusregisters, welches die Pins 10-13 und 15 umfasst. Das Statusregister liegt eine Adresse oberhalb des Datenregisters, also 889 statt 888 beim LPT1 und 633 statt 632 beim LPT2.

 

X = INP(889)

 

Beanschlagt man nun einen oder mehrere Eingangspins des Statusregisters (10-13 und 15) mit Masse (GND) so wird sich der Wert der Variablen X entsprechend ändern.

Hinweis!
Um einen Dateneingang zu realisieren empfehle ich Masse (Pin 18-25) an den entsprechenden "Eingangs-Pin" (Pin 10-13 und 15) zu legen. Es können auch mehrere Pins gleichzeitig beanschlagt werden.


   Schaltungsbeispiele

Die Option Drucken funktioniert erst ab Netscape V4.0 bzw. I-Explorer 5.0 !

[letzte Aktualisierung 01.02.2008]