home *** CD-ROM | disk | FTP | other *** search
- {
- R C A Aldridge <RCA%IBM-B.RUTHERFORD.AC.UK@ib.rl.ac.uk>
-
- +-------------------------------------+
- | Input / Output via the printer port |
- +-------------------------------------+
- +--------------------------+------------------------------+
- | By: Rafe Aldridge, | E-Mail: |
- | Street Farm, | until July 1994: |
- | Dereham, | rca@ib.rl.ac.uk |
- | Garvestone, | |
- | Norfolk. | Sept 1994 to July 1995: |
- | NR9 4QT | rcaldrid@genvax.glam.ac.uk |
- | England. | |
- +--------------------------+------------------------------+
-
- Intro:
- ------
- This document is intended for people with a good knowledge
- of electronics and programming. It covers the basics of
- getting TTL signals in and out of the IBM PC and compatibles
- via the parallel port.
-
- Don't let the disclaimer section put you off. I have to say it
- to cover myself. Using the parallel port is a simple and fun way
- of interfacing your PC to the outside world.
-
- Please feel free to mail me with any problems or queries.
- I will be glad to help.
-
- ---------------------------------------------------------------------
-
- When building items to connect to the parallel port follow
- these simple (and hopefully blindingly obvious) rules:
- o Only use TTL levels with the parallel port.
- o Always buffer signals.
- o If you plan to interface mains with the PC:
- - MAKE SURE YOU KNOW WHAT YOU'RE DOING
- - always use mains rated isolators
- - make sure mains cannot come in contact with the TTL
- - ensure that things are adequatly earthed
-
- ---------------------------------------------------------------------
- Disclaimer:
- -----------
- THIS IS ONLY A ROUGH GUIDE FOR PEOPLE WHO ARE EXPERIENCED
- IN PROGRAMMING AND ELECTRONICS. DUE TO THE WIDE RANGE OF
- ITEMS THAT COULD BE CONNECTED TO THE PORT NO WARRANTY IS
- OFFERED. RAFE ALDRIDGE IS NOT LIABLE UNDER ANY CIRCUMSTANCES
- FOR DAMAGE OR PROBLEMS ARISING AS A RESULT OF APPLYING
- ANY INFORMATION HERE.
-
- ---------------------------------------------------------------------
- Programming:
- ------------
- Hopefully if I explain this first the following will make more sense.
-
- The following examples show how to input and output data to and from
- the parallel port in Turbo Pascal 6+.
-
- There are two ways of programming the parallel port.
- 1. Via the BIOS
- 2. Writing to the port directly.
-
- 1:
- --
- This is the method I use and seems to work okay.
-
- { get the status of the parallel port and return result in a byte }
- function input_from_parallel_port : byte; assembler;
- asm
- mov ah,2 { bios service }
- mov dx,0 { printer number; LPT1=0 LPT2=1 etc. }
- int 17h { interrupt }
- end;
-
- { send the byte b to the parallel port }
- procedure output_to_parallel_port ( b : byte ); assembler;
- asm
- mov ah,00 { bios service }
- mov al,b
- mov dx,0 { printer number; LPT1=0 LPT2=1 etc. }
- int 17h { interrupt }
- end;
-
- {
- 2:
- --
- I personally have never done it this way. Don't even know if it will
- work or not! The basic idea is to use the port array to send or
- recieve a byte directly. I have used $387 as the address which is
- LPT1 on my machine.
-
- { get the status of the parallel port and return result in a byte }
- function input_from_parallel_port : byte;
- begin
- input_from_parallel_port:=port [$387];
- end;
-
- { send the byte b to the parallel port }
- procedure output_to_parallel_port ( b : byte );
- begin
- port [$387]:=b;
- end;
-
- {
- Connector:
- ----------
- The parallel port on the PC is accessed via a 25 way female
- D type connector.
-
- ---------------------------------------------------------------------
- Pins:
- -----
- There are 5 pins available for input and 8 for output.
-
- - input pins
-
- | bit in AH | signal | pin | state of bit when pin high
- +-----------+------------+-----+-----------------------------------
- | 7 | busy | 11 | set to 1
- | 6 | -ack | 10 | set to 0
- | 5 | paper out | 12 | set to 1
- | 4 | select | 13 | set to 1
- | 3 | -i/o error | 15 | set to 0
- | 2 | unused | - |
- | 1 | unused | - |
- | 0 | timeout | - |
- +-----------+------------+-----+-----------------------------------
-
- If things don't work as expected try tying pin 11 high (set printer
- not busy). Some PCs don't like the printer being busy. Sometimes
- this is made obvious by the timeout bit being set to 1 after a call
- to output_to_parallel_port (1) above.
-
- - output pins
-
- | bit in AH | signal | pin
- +-----------+--------+-----
- | 7 | D7 | 9
- | 6 | D6 | 8
- | 5 | D5 | 7
- | 4 | D4 | 6
- | 3 | D3 | 5
- | 2 | D2 | 4
- | 1 | D1 | 3
- | 0 | D0 | 2
- +-----------+--------+-----
-
- - ground pins
-
- Pins 18-25 are ground pins. Connect all of these to the 0volt
- rail of the circuit under control.