Basic information about parallel port programming

Please note: We use the conventional trailing h to indicate a hexadecimal number.

Pin assignments

Signal name Register bit SUB-D Centronics
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
Groand GND 18-25   19-30  

Port address

The most parallel ports are located at a base address of 378h, 278h, or 3BCh. To find the base address of a parallel port in Windows 95, open the "Control panel", then click on "System", "Device manager", "Ports", select an LPT port, then click the "Resources" tab. The addresses of installed parallel ports are also displayed in the CMOS setup screens that you can access when you boot your computer.

Visual Basic

In Visual BASIC you have to use a DLL to access the ports. Jan Axelson programmed two DLLs which allow you to use the QBASIC INP and OUT instructions. You can download the DLLs at http://www.janaxelson.com/parport.htm. Inpout16.dll is for use with 16-bit programs, and Inpout32.dll is for use with 32-bit programs. Although the program code to call the Inp and Out routines is identical for both types, each requires a different DLL and declarations.

Instructions to read and write to the port

Read instruction: xx=INP(address)
Write insruction: OUT(address),xx

You can write to the data port (D0-D7) at the base address. D0 is the least significant bit and D7 is the most significant bit. For example "OUT(889),85" writes 01010101(=85 decimal)to the port address 378h (= 889 decimal).

You can read the status port (S3-S7) at the base address+1. At Bit 7(S7) you will read the inverted signal of the connector. S0 - S2 are usually not in use and read as low signals. When all signals are high you will read 78h (01111000 = 120decimal = 78h).

You can write to the control port (C0-C3) at base address+2. The bits 0,1 and 3 are inverted so if you write 04h (00000100), all four bits will be going high and when you write 0Bh (00001011) all four bits will be going low.

Do you want to learn more about the parallel port?

Then take a look at Jan Axelson´s book: Parallel Port Complete. -Highly recommended!