Know-How • Grundlagen der Parallelport Programmierung
Wollten sie schon immer mal etwas mit Ihrem PC anzusteuern? Schaltungen, Relais, Modelleisenbahnen, Lauflichter,... Es gibt eine Menge Anwendungsmöglichkeiten. Viele, selbst gelernte Elektroniker, denken das dies ziemlich kompliziert ist, aber das ist es wirklich nicht.
Die parallele Schnittstelle des PCs ist mit insgesamt 12 Ausgängen und 5 Eingängen besonders für eigene Entwicklungen geeignet. Die Signale entsprechen den TTL Pegeln, wobei die Ausgänge nicht sonderlich belastet werden können. Man sollte diese sowieso nur über ein Treiber-IC für Experimente nutzen, um bei einem Kurzschluss das Motherboard nicht zu gefährden. Mit einer Programmiersprache wie Basic kann man mit einfachen Befehlen wie "Out (Adresse),Byte" oder "Variable = Inp (Adresse)" Daten an eine Schnittstelle senden bzw. von ihr empfangen.
Hinweis: Alle folgenden Zahlenangaben ohne Kennzeichnung sind Dezimalzahlen! Hexadezimal Zahlen sind mit einem (h) hinter der Zahl gekennzeichnet.
Die Anschlußbelegung
| Bezeichnung | Register bit | SUB-D Stecker | Centronics | |||
| Pinnummer | GND | Pinnummer | GND | |||
| Data bit 0 | D0 | 2 | 19 | 2 | 20 | |
| Data bit 1 | D1 | 3 | 19 | 3 | 21 | |
| Data bit 2 | D2 | 4 | 20 | 4 | 22 | |
| Data bit 3 | D3 | 5 | 20 | 5 | 23 | |
| Data bit 4 | D4 | 6 | 21 | 6 | 24 | |
| Data bit 5 | D5 | 7 | 21 | 7 | 25 | |
| Data bit 6 | D6 | 8 | 22 | 8 | 26 | |
| Data bit 7 | D7 | 9 | 22 | 9 | 27 | |
| nError (nFault) | S3 | 15 | 23 | 32 | 29 | |
| Select | S4 | 13 | 24 | 13 | 28 | |
| PaperEnd | S5 | 12 | 24 | 12 | 28 | |
| nAck | S6 | 10 | 24 | 10 | 28 | |
| Busy | S7 | 11 | 23 | 11 | 29 | |
| nStrobe | C0 | 1 | 18 | 1 | 19 | |
| nAutoLF | C1 | 14 | 25 | 14 | 30 | |
| nInit | C2 | 16 | 25 | 31 | 30 | |
| nSelectIn | C3 | 17 | 25 | 36 | 30 | |
| Ground | GND | 18-25 | 19-30 | |||
Die Portadresse
Die Parallele Schnittstelle befindet sich meistens an der Adresse 378(h). Bei Windows findet man die Angabe der Adresse in der Systemsteuerung unter System -> Gerätemanager -> Anschlüsse -> LPT -> Ressourcen. Der Eintrag E/A-Bereich 378-37F bedeutet, dass die Basisadresse des Ports 378(h) ist. Über die Basisadresse erreicht man den Datenport, über die Basisadresse+1 den Statusport und über die Basisadresse+2 den Kontrollport.
Visual Basic
In Visual-Basic ist es leider nicht vorgesehen, direkt wie in Q-Basic mit den Inp/Out Befehlen auf die Schnittstellen zuzugreifen. Jan Axelson hat zwei DLL´s programmiert die den Einsatz dieser Befehle ermöglichen. Auf der Seite http://www.lvr.com kann man die Datei Inpout16.dll für den 16 bit Einsatz (Win3.x) und Inpout32.dll für den 32 bit Einsatz (Win 95/98) kostenlos herunterladen.
Das Lesen und Schreiben des Ports
In Quick Basic sowie in Visual Basic(mit DLL´s - siehe oben) erfolgt der Zugriff folgendermaßen:
Schreiben: OUT (Adresse),Byte
Lesen: Variable=INP(Adresse)
Bei den folgenden Beispielen gehe ich davon aus, dass der Parallelport an der Basisadresse 378(h) = 888 Dezimal liegt.
Der Datenport (Basisadresse) besteht aus den acht Ausgängen, D0 bis D7, wobei D7 das höchstwertige Bit darstellt und D0 das niederwertigste Bit. Der Befehl Out (888),85 setzt den ersten, dritten, fünften und siebten Ausgang auf high und den Rest auf low (85 Dezimal = Binär 01010101). Mit dem Out(888),00 setzt man alle acht Ausgänge auf low-Signal, mit dem Befehl Out(888),255 alle Ausgänge auf high-Signal.
Der Statusport (Basisadresse+1) besteht aus fünf Eingängen, S3 bis
S7. S0 bis S2 sind unbenutzt und werden als Nullen gelesen. S7 wird invertiert
gelesen. Wenn nach dem Befehl "Variable= Inp(889)" die Variable den Wert 120
hat, bedeutet dies, dass alle fünf Eingänge auf High Signal liegen.
(Dezimal 120=Binär 01111000, S7 invertiert ergibt 11111000).
Ein Schreiben auf den Statusport wird ignoriert.
Der Kontrollport (Basisadresse+2) besteht aus vier Ausgängen, C0 bis C3, wobei C0,C1 und C3 invertiert ausgegeben werden. Mit dem Befehl Out(890),04 setzt man alle vier Ausgänge auf High Signal. (Dezimal 04 =Binär 00000100, C0,C1,C3 invertiert ergibt 00001111) Mit dem Befehl Out(890),11 setzt man alle vier Ausgänge auf low Signal (Dezimal 11 =Binär 00001011-C0,C1,C3 inv. ergibt 00000000).







