8255 Tutorial

11
8255 PPI IBM PC Interface Card Introduction The 8255 Programmable Peripheral Interface (PPI) is a versatile and easy to construct circuit card the plugs into an available slot in your IBM PC. Such a card allows you to do both digital input and output (DIO) to your PC. For example, you may want to have your PC turn on a switch, or have a switch electronically activate your PC to execute a program. The 8255 has 3 8-bit TTL-compatiable I/O ports. Thus technically you could control up to 24 individual devices. For example, with the circuit description that follows, you could build a home security device, with a digital input detecting if someone rang your doorbell, and having a digital output turning on a light switch, the other remaining 22 DIOs could then be used to detect for sound detection (broken glass say), doors being opened, digitally dial 911, detect smoke etc. Hopefully this preamble has excited your curiosity and imagination. This article is broken down as follows: Parts List with Potential Vendor Source Theory of Operation Construction QBasic Programming References For this card, Microsoft's QuickBasic will be used to do some simple programs. Parts List and Potential Vendor Source Below is a parts I used for my construction. Additionally, I list the source from which I bought it from, along with the vendor part number and cost (in 1998). I did some shopping around, and found these places to offer the best tradeoff between price and single-source parts availability - hopefully this saves you time! The first table is what is necessary to make a card. The second table is an additionally prototyping area circuit that interfaces with the card via a 40-pin ribbon cable. The parts in this table also include a simple testing circuit which is described later. A note about the Digikey parts: I did not find such a part in Jameco. I had these lying around in my parts box. Other similar sockets could be used. But I recommend that at least one be a wirewrap type, since I use both soldering and wirewrapping for the 8255 Card circuit. 1 of 11 11/18/00 1:43 PM 8255 http://www.boondog.com/\tutorials\8255\8255.htm

Transcript of 8255 Tutorial

Page 1: 8255 Tutorial

8255 PPI IBM PC Interface Card

Introduction

The 8255 Programmable Peripheral Interface (PPI) is a versatile and easy to construct circuit card theplugs into an available slot in your IBM PC. Such a card allows you to do both digital input and output(DIO) to your PC. For example, you may want to have your PC turn on a switch, or have a switchelectronically activate your PC to execute a program. The 8255 has 3 8-bit TTL-compatiable I/O ports.Thus technically you could control up to 24 individual devices. For example, with the circuit descriptionthat follows, you could build a home security device, with a digital input detecting if someone rang yourdoorbell, and having a digital output turning on a light switch, the other remaining 22 DIOs could then beused to detect for sound detection (broken glass say), doors being opened, digitally dial 911, detect smokeetc. Hopefully this preamble has excited your curiosity and imagination. This article is broken down asfollows:

Parts List with Potential Vendor Source Theory of Operation Construction QBasic Programming References

For this card, Microsoft's QuickBasic will be used to do some simple programs.

Parts List and Potential Vendor Source

Below is a parts I used for my construction. Additionally, I list the source from which I bought it from,along with the vendor part number and cost (in 1998). I did some shopping around, and found theseplaces to offer the best tradeoff between price and single-source parts availability - hopefully this savesyou time! The first table is what is necessary to make a card. The second table is an additionallyprototyping area circuit that interfaces with the card via a 40-pin ribbon cable. The parts in this table alsoinclude a simple testing circuit which is described later. A note about the Digikey parts: I did not find sucha part in Jameco. I had these lying around in my parts box. Other similar sockets could be used. But Irecommend that at least one be a wirewrap type, since I use both soldering and wirewrapping for the 8255Card circuit.

1 of 11 11/18/00 1:43 PM

8255 http://www.boondog.com/\tutorials\8255\8255.htm

Page 2: 8255 Tutorial

TABLE 1A: 8255 CARD PARTS LIST

PART DESCRIPTION VENDOR PART PRICE (1998) QUANTITY

8255 PPI 40 PIN IC JAMECO #52417 3.95 1

40 PIN WIREWRAP SOCKET JAMECO #41179 1.65 1

74HCT138 3-TO-8 DECODER JAMECO #44927 0.29 1

16-PIN SOLDER SOCKET JAMECO #37372 0.12 1

0.1 uF CAPACITORS JAMECO #15270 1.00 FOR 10 3

40 PIN HEADER CONNECTOR DIGIKEY #CHW40G-ND 5.11 2

40 PIN SOCKET CONNECTOR DIGIKEY #CSC40T-ND 2.45 2

2 ROW 8-POSITION JUMPER JAMECO #109516 0.39 1

SHORTING BLOCKS JAMECO #22023 0.20 2

PC BUS PROTOTYPING CARD JAMECO #21531 17.95 1

RIBBON CABLE 40 PIN JAMECO #105726 20.00 FOR 25 FT 3 FT

WIRE WRAP

TABLE 1B: BREADBOARD INTERFACE PARTS LIST

PART DESCRIPTION VENDOR PART PRICE (1995) QUANTITY

6 IN. SOLDERLESS BREADBOARD RADIO SHACK #276-174 12.49 2

74LS04 HEX INVERTOR JAMECO #46316 0.29 1

LEDS T1-3/4 JAMECO #34745 0.19 8

220 OHM RESISTORS

TERMINAL BLOCKS JAMECO #99426 0.59 14

Theory of Operation

This section is organized as follows:

The Base Address The Control Modes The Jumper Settings

The Base Address

This PC Interface Card plugs into any available 8 or 16-bit slot (also known as an AT-slot) on your PC'smotherboard, just like a sound card or disk drive controller card does. Your CPU (Central ProcessingUnit) communicates with cards by knowing the card's address. From IBM's Technical Reference Manuals,one can learn that the motherboard allows for several available addresses for any cards you wish to pluginto a slot. By physically using jumpers on the card, we can assign an address to the card. In software, wecan tell the CPU what this address is (more about this in the Programming section).

2 of 11 11/18/00 1:43 PM

8255 http://www.boondog.com/\tutorials\8255\8255.htm

Page 3: 8255 Tutorial

TABLE 2: EXPANSION SLOT ADDRESSES

ADDRESS (HEX/DEC) DESCRIPTION ADDRESS (HEX/DEC) DESCRIPTION

218-21F (536-543) AVAILABLE 390-39F (906-927) AVAILABLE

250-277 (592-631) AVAILABLE 3AA-3AF (938-943) AVAILABLE

280-2EF (640-751) AVAILABLE 3B0-3BF (944-959) AVAILABLE

300-31F (768-799) AVAILABLE 3F8-3FF COM 1

For notation purposes, a number with an H next to it denotes hexadecimal notation and plain numbers willdenote denote plain decimal. For this card, I chose to use 280H (640 Decimal) for the address of the card.This is because many other cards tend to use the traditional 300H. By choosing 280H the probability ofaddress conflict is a bit less. Thus 280H will known as the base address of the card. Of course, you canchange this, by using the table above as a guide, and physically changing the jumper configuration on theboard, as well as in your software program.

Control Modes

The 8255 allows for three distinct operating modes (Modes 0, 1 and 2) as follows:

Mode 0: Ports A and B operate as either inputs or outputs and Port C is divided into two 4-bitgroups either of which can be operated as inputs or outputs Mode 1: Same as Mode 0 but Port C is used for handshaking and control Mode 2: Port A is bidirectional (both input and output) and Port C is used for handshaking. Port Bis not used.

Each port is 8-bit TTL-compatiable. As such, the 8255 can conceivable be configured to control 24devices (1 bit/device). The various modes can be set by writing a special value to the control port. Thecontrol port is Base Address + 3 (hence 640+3 = 643 Decimal). The table below shows the special valuesneeded to configure Ports A, B and C for either input or output:

TABLE 3: 8255 (CONTROL) MODE CONFIGURATION

CONTROL WORD (HEX) CONTROL WORD (DECIMAL) PORT A PORT B PORT C

80 128 OUT OUT OUT

82 130 OUT IN OUT

85 137 OUT OUT IN

87 139 OUT IN IN

88 144 IN OUT OUT

8A 146 IN IN OUT

8C 153 IN OUT IN

8F 155 IN IN IN

As mentioned the Control Port is Base Address + 3. Port A is always at Base Address; Port B is Base

3 of 11 11/18/00 1:43 PM

8255 http://www.boondog.com/\tutorials\8255\8255.htm

Page 4: 8255 Tutorial

Address + 1; Port C is Base Address + 2. Thus in our example Ports A, B and C are at 640, 641 and 642(Decimal) respectively. By writing say, 128 to the Control port will then configure the 8255 to have allthree Ports set for output. This can be done using QuickBasic's OUT statement, for example:

110 BaseAddress = 640

120 PortA = BaseAddress

130 ControlPort = BaseAddress + 3

140 OUT ControlPort, 128

150 OUT PortA, 1

More software coding will be described later in the Programming Section.

Jumper Settings, the 74LS138 and IBM Expansion Bus

The 74LS138 is a 3-to-8 line decoder. It is a 16-pin IC, taking a 3-bit word on pins 1, 2 and 3. This leadsto 8 possible combinations, and explains how the jumper can be physically set to provide for the 8possible card address settings mentioned above. Examining the schematic in the Construction Sectionalong with the explanation that follows will provide more insight on how this physically works. If youexamine any PC card that plugs into the expansion slot on your motherboard, you can count 31 pads(typically gold) on each side of the card. See figure below:

Altogether there are 62 pads on this card. Such cards are also known as 8-bit ISA Bus (XT-style) cards.Due to the upward compatiability of PC systems, such cards can plug into expansion slots on XTs, ATs,386s, 486s and Pentiums. The following diagram shows the pinouts of such expansion slots:

4 of 11 11/18/00 1:43 PM

8255 http://www.boondog.com/\tutorials\8255\8255.htm

Page 5: 8255 Tutorial

Getting back to the 74LS138... address lines A8 and A9 on the bus drive the control inputs to the74LS138. Additionally, AEN (Address Enable), located at pin A11 is low when the card is recognized bythe microprocessor. When A8 and A11 is low and A9 is high, the 74LS138 will decode bus address linesA5, A6 and A7 which are the 3-bit inputs to the 74LS138. The following picture may provide moreinsight:

5 of 11 11/18/00 1:43 PM

8255 http://www.boondog.com/\tutorials\8255\8255.htm

Page 6: 8255 Tutorial

As a result, we can see that the jumper provides for 8 possible card address lines listed in the above figure.This in comparision with TABLE 2 shows that the only available only jumper position 5 is fully available,corresponding to 280H ((640).

Card Construction

This section is organized as follows:

General Intro and Schematic Card Construction Hightlights Breadboard Interface Construction

General Intro and Schematic

The schematic the figure below is relatively straightforward. I recommend however that you use acombination of soldering and wirewrapping using sockets for all IC component placement. Awirewrapping socket was used for both the 8255 and the 40-pin header. This provides for the easiest andmost straightforward way of connecting these two components. Be careful to note the headers pinouts andhow they lineup with the ribbon cable. That is, one row of the header will represent all even-numberedpinouts, while the other row represents all the odd-numbered pinouts. I used soldering (with 24 AWG)wire to connect the prototyping card's expansion bus pads. Note again that the component side representspads A1 to A31 and the solder side's pads are B1 to B31. The Construction Highlights section that followsmay give additional construction pointers.

Schematic

6 of 11 11/18/00 1:43 PM

8255 http://www.boondog.com/\tutorials\8255\8255.htm

Page 7: 8255 Tutorial

You can click below to download the Adobe Acrobat format of the schematic. I've tried to get a moregeneric format e.g. GIF or PS but with no success (as seen to above fuzzy picture). I tried to provide aWindows Meta File format but have found bad results e.g. doesn't load into Word well. If you don't knowwhat Acrobat is, visit Adobe to download a copy of its FREE PDF-file viewer.

Download the Acrobat (PDF) file of the schematic. Recommended! 10884 Bytes

Card Construction Highlights

The following photos (forgive the slight distortion) hopefully will give the builder a clearer idea of what isinvolved in the card's construction. I feel that such photos protray important information that a schematicalone cannot provide. Component placement is not critical.

7 of 11 11/18/00 1:44 PM

8255 http://www.boondog.com/\tutorials\8255\8255.htm

Page 8: 8255 Tutorial

Figure A

This figure shows the overall view of the card and the component placement. If one looks closely, one cansee the label 1 on both the 40-pin header and its ribbon cable (see also Figure C). Also the jumpers clearlyshow how jumper 5 has been shorted with a shorting block. One can also see the "tedious" solderingrequired along the card's pads (see Figure D as well). Again I emphasize that these pads represent pins A1to A31 of the card (component side).

Figure B

This is the solder side. This view was provided to show the wirewrapping involved. For clarity duringconstruction, I placed labels for pin 1 on both the 8255 wirewrapping socket and the 40-pin header. Recallthat with this 40-pin header, one row represented all odd numbers i.e. the ribbon's 1st, 3rd, 5th, 7th etcwire, while the other row represents all the even numbers, i.e. the ribbon's 2nd, 4th, 6th etc wire.

8 of 11 11/18/00 1:44 PM

8255 http://www.boondog.com/\tutorials\8255\8255.htm

Page 9: 8255 Tutorial

Figure C

Another view of the 40-pin header, but with the ribbon cable detached. Note that this is a polarized type ofheader socket.

Figure D

This is a clearer view of the prototyping card's 31 pins (A1-A31) and the soldering/wiring involved.

Breadboard Interface Construction

Breadboard

9 of 11 11/18/00 1:44 PM

8255 http://www.boondog.com/\tutorials\8255\8255.htm

Page 10: 8255 Tutorial

This section is necessary for two reasons. First, this breadboarding inteface provides a way to test your8255 card. Second, it facilitates the accessability of the 24 I/O lines by using the breadboard and screwterminal blocks. As the Figure (top) shows, the 24 I/Os are brought out from a 40-pin header to theterminal blocks, all on a single breadboard. Recall that in the card's construction in the sections above a40-pin ribbon cable and header connector were used to connect to the 8255's Ports A, B and C. It is thisopposite end of the ribbon cable that is brought to the breadboard and terminal blocks. It is simply amatter of matching up the correct ribbon wire with a terminal block. The Figure (botton) also shows asimple test circuit, the schematic of which is provided below. It uses all 8-bits of Port A configured foroutput. The Programming section below will show how to light up the LEDs, which would indicate thatPort A is working properly.

QBasic Programming

Taking care to check all your wiring, now it is possible to check if your circuit indeed works. Insert the8255 card into an empty slot in your PC's motherboard (assuming you turned off the power first!). Make

10 of 11 11/18/00 1:44 PM

8255 http://www.boondog.com/\tutorials\8255\8255.htm

Page 11: 8255 Tutorial

sure the card is seated properly and the wirewrapping socket pins do not come into contact with any othercards. Launch QBasic (I have not tried testing under Windows) under a DOS environment. Try executingthe following code:

100 REM 8255 PPI SET PORTS A,B,C TO OUTPUT

110 BASEADDR = 640: REM 280H/JUMPER AT POSITION 5

120 PORTA = BASEADDR

130 CNTRL = BASEADDR + 3

140 OUT CNTRL, 128

150 FOR SGNAL = 0 TO 255

160 OUT PORTA, SGNAL:PRINT "DECIMAL="; SGNAL

170 FOR DELAY = 1 TO 500: NEXT DELAY

180 NEXT SGNAL

999 END

If everything has been assembled correctly and the software properly compiled, then one should see the 8LEDs should "count" from 0 to 255 in a binary fashion.

Congradulations if you have gotten this far! In my experience troubleshooting should begin in checkingif the card is seated nicely in its slot on the motherboard. Also check the jumper. Check your wiring.

Of course the above is a simple circuit, but I leave it to your imagination to come up with otherpossibilities given that you have 24 digital inputs and outputs. Things like motor speed control, switchingon relays, reading thermistors, strain gages etc.

References

8255A/8255A-5 Programmable Peripheral Interface, Intel Order No. 231308-002 Build This Experimenter's I/O Card, Radio-Electronics, June 1990 pp. 73-78

Click here to go Paul's Main Page

Click here to go to Columbia University's Robotics Lab

Click here to email me

11 of 11 11/18/00 1:44 PM

8255 http://www.boondog.com/\tutorials\8255\8255.htm