Recent from talks
Nothing was collected or created yet.
Intel 8255
View on Wikipedia
The Intel 8255 (or i8255) Programmable Peripheral Interface (PPI) chip was developed and manufactured by Intel in the first half of the 1970s for the Intel 8080 microprocessor. The 8255 provides 24 parallel input/output lines with a variety of programmable operating modes.
The 8255 is a member of the MCS-85 family of chips, designed by Intel for use with their 8085 and 8086 microprocessors and their descendants.[1] It was first available in a 40-pin DIP and later a 44-pin PLCC packages.[2] It found wide applicability in digital processing systems and was later cloned by other manufacturers. The 82C55 is a CMOS version for higher speed and lower current consumption.
The functionality of the 8255 is now mostly embedded in larger VLSI processing chips as a sub-function. A CMOS version of the 8255 is still being made[3] by Renesas but mostly used to expand the I/O of microcontrollers.
Similar chips
[edit]The 8255 has a similar function to the Motorola 6820 PIA (Peripheral Interface Adapter) from the Motorola 6800 family, also originally packaged as 40-pin DIL. The 8255 provides 24 I/O pins with four programmable direction bits: one for Port A(7:0) (i.e., all pins in the port), one for Port B(7:0), one for Port C(3:0) and one for Port C(7:4). By contrast, the Motorola and MOS chips provide only 16 I/O pins plus 4 control pins, but the Motorola/MOS chips allow the direction (input or output) of all I/O pins to be individually programmed. Both have configurations that will do a certain amount of automatic handshaking and interrupt generation.
Other comparable microprocessor I/O chips are the 2655 Programmable Peripheral Interface from the Signetics 2650 family, the Z80 PIO, the Western Design Center WDC 65C21 (equivalent to the Motorola 6820/6821), and the MOS Technology 6522 VIA and 6526 CIA which had considerable additional functionality such as timers and shift registers.
Variants
[edit]
The industrial grade version of Intel ID8255A was available for US$17.55 in quantities of 100 and up.[4] The available Intel 8255A-5 version was for USD $6.55 in quantities of 100 or more.[5] The available 82C55A CMOS version was outsourced to Oki Electronic Industry Co., Ltd.[6] The available package from Intel branded 82C55 in 44-pin PLCC of sampling at fourth quarter of 1985.[7] In Eastern Europe, equivalent circuits were manufactured as the KR580VV55A in the Soviet Union and as the MHB8255A by Tesla in Czechoslovakia.
Applications
[edit]The 8255 was widely used in many microcomputer/microcontroller systems and home computers such as the SV-328 and all MSX models. The 8255 was used in the original IBM PC,[8] PC/XT, PC/jr and clones, along with numerous homebuilt computers such as the N8VEM.
Function
[edit]The 8255 gives a CPU or digital system access to programmable parallel I/O.[9] The 8255 has 24 input/output pins.[10] These are divided into three 8-bit ports (A, B, C).[11] Port A and port B can be used as 8-bit input/output ports. Port C can be used as an 8-bit input/output port or as two 4-bit input/output ports or to produce handshake signals for ports A and B.
The three ports are further grouped as follows:
- Group A consisting of port A and upper part of port C.
- Group B consisting of port B and lower part of port C.
Eight data lines (D0–D7) are available (with an 8-bit data buffer) to read/write data into the ports or control register under the status of the RD (pin 5) and WR (pin 36), which are active-low signals for read and write operations respectively. Address lines A1 and A0 allow to access a data register for each port or a control register, as listed below:
A1 A0 Port selected 0 0 port A 0 1 port B 1 0 port C 1 1 control register
The control signal chip select CS (pin 6) is used to enable the 8255 chip. It is an active-low signal, i.e., when CS = 0, the 8255 is enabled. The RESET input (pin 35) is connected to the RESET line of system like 8085, 8086, etc., so that when the system is reset, all the ports are initialized as input lines. This is done to prevent 8255 and/or any peripheral connected to it from being destroyed due to mismatch of port direction settings. As an example, consider an input device connected to 8255 at port A. If from the previous operation, port A is initialized as an output port and if 8255 is not reset before using the current configuration, then there is a possibility of damage of either the input device connected or 8255 or both, since both 8255 and the device connected will be sending out data.
The control register (or the control logic, or the command word register) is an 8-bit register used to select the modes of operation and input/output designation of the ports.[12]
Operational modes of 8255
[edit]There are two basic operational modes of 8255:
- Bit Set/Reset mode (BSR mode).
- Input/Output mode (I/O mode).
The two modes are selected on the basis of the value present at the D7 bit of the control word register. When D7 = 1, 8255 operates in I/O mode, and when D7 = 0, it operates in the BSR mode.
Bit Set/Reset (BSR) mode
[edit]The Bit Set/Reset (BSR) mode is available on port C only. Each line of port C (PC7 - PC0) can be set or reset by writing a suitable value to the control word register. BSR mode and I/O mode are independent and selection of BSR mode does not affect the operation of other ports in I/O mode.[13]

- D7 bit is always 0 for BSR mode.
- Bits D6, D5 and D4 are don't care bits.
- Bits D3, D2 and D1 are used to select the pin of Port C.
- Bit D0 is used to set/reset the selected pin of Port C.
Selection of port C pin is determined as follows:
| D3 | D2 | D1 | Bit/pin of port C selected |
|---|---|---|---|
| 0 | 0 | 0 | PC0 |
| 0 | 0 | 1 | PC1 |
| 0 | 1 | 0 | PC2 |
| 0 | 1 | 1 | PC3 |
| 1 | 0 | 0 | PC4 |
| 1 | 0 | 1 | PC5 |
| 1 | 1 | 0 | PC6 |
| 1 | 1 | 1 | PC7 |
As an example, if it is needed that PC5 be set, then in the control word,
- Since it is BSR mode, D7 = '0'.
- Since D4, D5, D6 are not used, assume them to be '0'.
- PC5 has to be selected, hence, D3 = '1', D2 = '0', D1 = '1'.
- PC5 has to be set, hence, D0 = '1'.
Thus, as per the above values, 0B (Hex) will be loaded into the Control Word Register (CWR).
| D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
|---|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 |
Input/Output mode
[edit]This mode is selected when D7 bit of the Control Word Register is 1. There are three I/O modes:[14]
- Mode 0 - Simple I/O
- Mode 1 - Strobed I/O
- Mode 2 - Strobed Bi-directional I/O
Control Word format
[edit]
- D0, D1, D3, D4 are assigned for port C lower, port B, port C upper and port A respectively. When these bits are 1, the corresponding port acts as an input port. For e.g., if D0 = D4 = 1, then lower port C and port A act as input ports. If these bits are 0, then the corresponding port acts as an output port. For e.g., if D1 = D3 = 0, then port B and upper port C act as output ports.
- D2 is used for mode selection of Group B (port B and lower port C). When D2 = 0, mode 0 is selected and when D2 = 1, mode 1 is selected.
- D5 & D6 are used for mode selection of Group A ( port A and upper port C). The selection is done as follows:
| D6 | D5 | Mode |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | X | 2 |
- As it is I/O mode, D7 = 1.
For example, if port B and upper port C have to be initialized as input ports and lower port C and port A as output ports (all in mode 0):
- Since it is an I/O mode, D7 = 1.
- Mode selection bits, D2, D5, D6 are all 0 for mode 0 operation.
- Port B and upper port C should operate as Input ports, hence, D1 = D3 = 1.
- Port A and lower port C should operate as Output ports, hence, D4 = D0 = 0.
Hence, for the desired operation, the control word register will have to be loaded with "10001010" = 8A (hex).
Mode 0 – simple I/O
[edit]In this mode, the ports can be used for simple I/O operations without handshaking signals. Port A, port B provide simple I/O operation. The two halves of port C can be either used together as an additional 8-bit port, or they can be used as individual 4-bit ports. Since the two halves of port C are independent, they may be used such that one-half is initialized as an input port while the other half is initialized as an output port.
The input/output features in mode 0 are as follows:
- Output ports are latched.
- Input ports are buffered, not latched.
- Ports do not have handshake or interrupt capability.
- With 4 ports, 16 different combinations of I/O are possible.
'Latched' means the bits are put into a storage register (array of flip-flops) which holds its output constant even if the inputs change after being latched. A buffer is a non-storage element that simply passes the current signal through when enabled.
The 8255's outputs are latched to hold the last data written to them. This is required because the data only stays on the bus for one cycle. So, without latching, the outputs would become invalid as soon as the write cycle finishes.
The inputs are not latched because the CPU only has to read their current values, then store the data in a CPU register or memory if it needs to be referenced at a later time. If an input changes while the port is being read then the result may be indeterminate.
Mode 0 – input mode
[edit]- In the input mode, the 8255 gets data from the external peripheral ports and the CPU reads the received data via its data bus.
- The CPU first selects the 8255 chip by making CS low. Then it selects the desired port using A0 and A1 lines.
- The CPU then issues an RD signal to read the data from the external peripheral device via the system data bus.
Mode 0 – output mode
[edit]- In the output mode, the CPU sends data to 8255 via system data bus and then the external peripheral ports receive this data via 8255 port.
- CPU first selects the 8255 chip by making CS low. It then selects the desired port using A0 and A1 lines.
- CPU then issues a WR signal to write data to the selected port via the system data bus. This data is then received by the external peripheral device connected to the selected port.
Mode 1 - Strobed Input/output mode
[edit]When we wish to use port A or port B for handshake (strobed) input or output operation, we initialise that port in mode 1 (port A and port B can be initialised to operate in different modes, i.e., for e.g., port A can operate in mode 0 and port B in mode 1). Some of the pins of port C function as handshake lines.
For port B in this mode (irrespective of whether is acting as an input port or output port), PC0, PC1 and PC2 pins function as handshake lines.
If port A is initialised as mode 1 input port, then, PC3, PC4 and PC5 function as handshake signals. Pins PC6 and PC7 are available for use as input/output lines.
The mode 1 which supports handshaking has following features:
- Two ports i.e. port A and B can be used as 8-bit i/o ports.
- Each port uses three lines of port С as handshake signal and remaining two signals can be used as i/o ports.
- Interrupt logic is supported.
- Input and Output data are latched.
Input Handshaking signals
- 1. IBF (Input Buffer Full) - It is an output indicating that the input latch contains information.
- 2. STB (Strobed Input) - The strobe input loads data into the port latch, which holds the information until it is input to the microprocessor via the IN instruction.
- 3. INTR (Interrupt request) - It is an output that requests an interrupt. The INTR pin becomes a logic 1 when the STB input returns to a logic 1, and is cleared when the data are input from the port by the microprocessor.
- 4. INTE (Interrupt enable) - It is neither an input nor an output; it is an internal bit programmed via the port PC4(port A) or PC2(port B) bit position.
Output Handshaking signals
- 1. OBF (Output Buffer Full) - It is an output that goes low whenever data are output(OUT) to the port A or port B latch. This signal is set to a logic 1 whenever the ACK pulse returns from the external device.
- 2. ACK (Acknowledge)-It causes the OBF pin to return to a logic 1 level. The ACK signal is a response from an external device, indicating that it has received the data from the 82C55A port.
- 3. INTR (Interrupt request) - It is a signal that often interrupts the microprocessor when the external device receives the data via the signal. this pin is qualified by the internal INTE(interrupt enable) bit.
- 4. INTE (Interrupt enable) - It is neither an input nor an output; it is an internal bit programmed to enable or disable the INTR pin. The INTE A bit is programmed using the PC6 bit and INTE B is programmed using the PC2 bit.
Mode 2 - Strobed Bidirectional Input/Output mode
[edit]Only port A can be initialized in this mode. Port A can be used for bidirectional handshake data transfer. This means that data can be input or output on the same eight lines (PA0 - PA7). Pins PC3 - PC7 are used as handshake lines for port A. The remaining pins of port C (PC0 - PC2) can be used as input/output lines if group B is initialized in mode 0 or as handshaking for port B if group B is initialized in mode 1. In this mode, the 8255 may be used to extend the system bus to a slave microprocessor or to transfer data bytes to and from a floppy disk controller. Acknowledgement and handshaking signals are provided to maintain proper data flow and synchronisation between the data transmitter and receiver.
References
[edit]- ^ R Theagarajan (1 January 2004). Microprocessor And Its Applications. New Age International. pp. 165–. ISBN 978-81-224-1040-2. Retrieved 3 June 2012.
- ^ Embedded Systems Programming. Miller Freeman Publications. July 1996. p. 256. Retrieved 3 June 2012.
- ^ "Product page for the 82C55A". Renesas Electronics. Retrieved 11 January 2023.
- ^ Intel Corporation, "Microcomputer Component: New industrial grade product line answers the demand for high-reliability components to operate in industrial applications.", Intel Preview, March/April 1979, Pg. 11
- ^ Intel Corporation, "Intel peripherals enhance 8086 system design", Intel Preview Special Issue: 16-Bit Solution, May/June 1980, Pg. 22
- ^ Intel Corporation, "NewsBit: Intel Licenses Oki on CMOS Version of Several Products", Solutions, July/August 1984, Page 1.
- ^ Ashborn, Jim; "Advanced Packaging: A Little Goes A Long Way", Intel Corporation, Solutions, January/February 1986, Page 2
- ^ Robert Jourdain (1986). Programmer's problem solver for the IBM PC, XT, & AT. Brady Communications Co. p. 3. Retrieved 3 June 2012.
- ^ Electronics world. Reed Business Pub. 1996. p. 947. Retrieved 3 June 2012.
- ^ "Intel 82c55 PPI Datasheet" (PDF).
- ^ "PCI 82C55A Datasheet" (PDF).
- ^ Byte. McGraw-Hill. 1981. p. 40. Retrieved 3 June 2012.
- ^ U. S. Shah. "11". Microprocessor & Interfacing Techniques (second ed.). Techmax Publication. pp. 11–5. ISBN 978-81-8492-305-6.
- ^ "i8255 introduction" (PDF).
External links
[edit]- drew.hickmans.net, Complete Description about the Intel 8255 IC
- ic-on-line.cn, Datasheet
- sharpmz.org, functions overview
- intel-assembler.it Archived 2016-04-23 at the Wayback Machine, Programming technical details and coding example
- bitsavers.informatik.uni-stuttgart.de, Intel 8080 Microcomputer Systems User's Manual (September 1975). Includes 8255 chip.
Intel 8255
View on GrokipediaHistory and Development
Origins and Design
The Intel 8255 Programmable Peripheral Interface (PPI) was developed in the early 1970s as a key component of Intel's MCS-80 family of microcomputer chips, introduced to support the 8080 microprocessor launched in April 1974.[4] This family aimed to provide a complete set of support devices for building microprocessor-based systems, addressing the limitations of earlier designs like the 8008, which required extensive external logic for input/output operations. The 8255 was specifically created to offer flexible parallel I/O capabilities, enabling efficient interfacing between the CPU and peripheral devices such as keyboards, displays, and sensors without relying heavily on discrete TTL components.[5] Designed by Intel engineer Peter Salmon, the 8255 was part of a broader effort to simplify system design and promote adoption of Intel's microprocessor ecosystem.[5] Development occurred concurrently with other peripherals like the 8251 USART and 8253 timer, with the 8255 originally slated for a different part number but renamed to 8255 before its design was finalized to align with Intel's 8xxx naming convention for the MCS-80 series.[6] The chip's architecture emphasized programmability, featuring three independent 8-bit ports (A, B, and C) that could be configured via software for input, output, or bidirectional modes, along with strobe and handshake signals for controlled data transfer. This design choice prioritized versatility and ease of integration, allowing a single chip to handle up to 24 I/O lines in various configurations to meet diverse application needs in embedded and control systems.[1] The origins of the 8255 reflect Intel's strategic shift toward offering turnkey solutions for microcomputer development, responding to customer feedback on the need for standardized I/O peripherals. By encapsulating common parallel interface functions into a single MOS integrated circuit, the chip reduced board space, power consumption, and design complexity compared to prior solutions using multiple discrete gates.[5] Fabricated using Intel's NMOS process, it operated at speeds compatible with the 8080's clock rates, ensuring seamless system performance. An enhanced version, the 8255A, later improved timing characteristics and added features like higher output drive capability, but the original 8255 established the foundational design that became widely emulated in subsequent generations.[1]Release and Adoption
The Intel 8255 Programmable Peripheral Interface was introduced in the early 1970s as a key support component in Intel's MCS-80 family, designed specifically to complement the 8080 microprocessor released in 1974. By September 1975, it was fully documented and available for integration in microcomputer systems, providing versatile parallel I/O functionality in a single 40-pin package powered by +5V.[7][2] The chip's adoption accelerated with the rise of hobbyist and commercial microcomputers, where its three 8-bit ports enabled straightforward interfacing for peripherals like keyboards, displays, and storage media without requiring custom hardware. It became a staple in early systems based on the 8080 and compatible Z80 processors, supporting applications from basic input scanning to interrupt-driven I/O operations.[8] A prominent example of its integration occurred in the IBM Personal Computer (model 5150), launched in 1981, where the 8255A variant on the system board handled keyboard data input via Port A (I/O address 0x60), speaker and timer control via Port B (0x61), and status monitoring via Port C (0x62), while also supporting cassette I/O and printer signaling in expansion adapters. This configuration facilitated essential user interactions and peripheral connectivity in one of the first mass-market PCs.[9][10] Beyond PCs, the 8255 found broad use in home computing platforms, notably all models of the MSX standard introduced in 1983, where it—or compatible implementations—managed joystick inputs, paddle controls, and cassette tape operations, often integrated into cost-reducing custom "MSX-Engine" ICs alongside sound and logic functions. Its reliability and programmability also drove adoption in industrial controllers and embedded systems throughout the 1980s, cementing its role in the transition from discrete logic to integrated peripherals.[8]Overview and Features
Purpose and Capabilities
The Intel 8255 is a general-purpose programmable peripheral interface (PPI) designed for use in Intel microcomputer systems to facilitate parallel input/output operations between the microprocessor and external devices. It functions as a versatile I/O adapter, enabling the connection of peripherals such as keyboards, displays, printers, and analog-to-digital converters by providing configurable digital ports for data transfer. The chip's primary purpose is to expand the limited I/O capabilities of early microprocessors like the 8080 and 8085, allowing flexible interfacing without requiring dedicated hardware for each peripheral.[1] At its core, the 8255 offers three 8-bit I/O ports (A, B, and C), delivering a total of 24 programmable lines that can be independently set as inputs or outputs via software commands. Port A supports 8 bits, Port B provides another 8 bits, and Port C can operate as a single 8-bit port or be split into two 4-bit sections (upper and lower) for finer control, such as generating timing signals or status flags. This structure supports up to 16 different I/O configurations in basic modes, making it suitable for applications ranging from simple switch monitoring to multi-device control in embedded systems. The ports interface through an 8-bit bidirectional data bus, with read/write logic ensuring compatibility with TTL-level signals in a 40-pin dual in-line package.[1] The 8255's capabilities extend to three primary operating modes that enhance its utility for synchronized data exchange. In Mode 0 (basic I/O), ports function as simple latched outputs or unlatched inputs without handshaking, ideal for straightforward digital interfacing. Mode 1 (strobed I/O) introduces handshaking via dedicated Port C lines (e.g., output buffer full, input buffer full, acknowledge, and interrupt request), enabling reliable data transfer with peripherals that require synchronization signals. Mode 2 (bidirectional bus) applies only to Port A, allowing 8-bit data flow in both directions with five Port C lines for control, supporting advanced protocols like those in printer interfaces. Additionally, a Bit Set/Reset (BSR) mode permits individual bit manipulation on Port C independently of other operations, useful for status bit control or LED driving. Interrupt generation on Port C lines further allows efficient CPU notification of peripheral events, reducing polling overhead.[1] These features collectively position the 8255 as a foundational component in 1970s and 1980s computing, compatible with Intel's 8-bit and higher microprocessors through standard control signals (RD, WR, CS, A0, A1, and RESET). Its programmable nature via a single control word register minimizes hardware complexity while maximizing adaptability for diverse I/O tasks in industrial control, instrumentation, and early personal computers.[1]Key Specifications
The Intel 8255 is a general-purpose programmable I/O device featuring 24 parallel I/O lines organized into three 8-bit ports: Port A, Port B, and Port C, with Port C capable of being divided into two independent 4-bit ports. It supports three major operating modes (0, 1, and 2) for flexible input/output configurations, including basic I/O, strobed I/O with handshaking, and bidirectional bus operation, along with bit set/reset functionality for individual pins. The device interfaces via an 8-bit bidirectional data bus and is designed for compatibility with Intel's 8080 microprocessor family, enabling interrupt requests.[11] Housed in a 40-pin dual in-line package (DIP), the 8255 operates on a single +5 V power supply with ±5% tolerance and is fabricated using NMOS technology, providing TTL-compatible logic levels. The 8255A variant draws a maximum supply current of 120 mA under typical operating conditions and dissipates up to 1 W of power. The device's I/O pins support sink currents up to 2.5 mA and source currents up to 250 μA, suitable for direct interfacing with TTL devices, though buffering may be required for heavier loads like Darlington transistor arrays.[1][11] Key electrical and physical specifications are summarized in the following table:| Parameter | Value | Unit | Conditions/Notes |
|---|---|---|---|
| Package Type | 40-pin DIP | - | Ceramic or plastic variants available |
| Supply Voltage (VCC) | +5 ±5% | V | Single supply; ground (VSS) at 0 V |
| Supply Current (ICC) | 120 max (8255A) | mA | VCC = 5 V, TA = 0°C to 70°C |
| Input High Voltage (VIH) | 2.0 min | V | Logic 1 input threshold |
| Input Low Voltage (VIL) | 0.8 max | V | Logic 0 input threshold |
| Output High Voltage (VOH) | 2.4 min (IOH = -400 μA) | V | For ports A, B, C and data bus |
| Output Low Voltage (VOL) | 0.45 max (IOL = 1.7 mA) | V | For ports A, B, C (data bus: 0.45 max at 2.5 mA) |
| Input Leakage Current | ±10 max | μA | VIN = 0 V to VCC |
| Power Dissipation | 1 max | W | Typical under full load |
| Operating Temperature | 0 to 70 | °C | Commercial grade |
| I/O Pins | 24 (3 × 8-bit ports) | - | Programmable as input/output; Port C split into 4-bit upper/lower |
Architecture
Internal Components
The Intel 8255A Programmable Peripheral Interface (PPI) features a modular internal architecture designed to facilitate flexible I/O operations with microprocessors, primarily through an 8-bit data bus interface. At its core, the chip integrates a data bus buffer that serves as the primary interface between the system data bus and internal registers, allowing bidirectional data transfer to and from the microprocessor. This buffer ensures efficient communication by latching data during read and write cycles, supporting the chip's role as a general-purpose I/O device.[1] The read/write control logic forms another essential block, decoding input signals such as chip select (CS), read (RD), write (WR), and address lines A1 and A0 to manage internal operations. This logic determines whether the chip is being accessed for reading from ports, writing to ports, or programming the control registers, thereby coordinating all data movements within the device. Complementing this are the Group A and Group B control logic sections, which independently manage the configuration and operation of the ports. The Group A logic oversees Port A and the upper half of Port C (PC7-PC4), while Group B handles Port B and the lower half of Port C (PC3-PC0), enabling independent mode selection and direction control for each group via a single control word.[1] Ports A, B, and C constitute the I/O endpoints, each comprising 8 bidirectional lines that can be programmed as inputs or outputs. Port A and Port B include dedicated output latches to hold data stable when configured for output, preventing glitches on the external lines during microprocessor bus cycles. Port C, uniquely, is divided into two 4-bit nibbles (upper and lower), allowing finer-grained control for handshaking or status signals, and supports bit set/reset operations independently of the main modes. Additionally, interrupt logic is integrated to support Mode 1 and Mode 2, for example in Mode 2 bidirectional operations on Port A using PC3–PC7 for control signals including interrupt requests based on strobe inputs, enhancing the chip's utility in interrupt-driven systems. These components interconnect via internal buses, with the control logics routing signals to configure port directions, latch data, and handle mode-specific behaviors like strobing in Mode 1.[1] The overall block diagram illustrates these elements in a hierarchical flow: external signals enter through the control logic, which decodes and routes data via the bus buffer to the appropriate port groups, ensuring isolation between input and output paths to maintain signal integrity. This design allows the 8255A to support up to 24 I/O lines while minimizing external circuitry needs.[1]Pin Configuration
The Intel 8255 is housed in a 40-pin dual in-line package (DIP), providing 24 programmable I/O lines divided into three 8-bit ports (A, B, and C), an 8-bit bidirectional data bus, and control signals for interfacing with a microprocessor bus.[1] These pins enable flexible configuration for input, output, or bidirectional operations depending on the programmed mode. The I/O ports occupy pins 1 through 24, allowing connection to peripheral devices such as keyboards, displays, or sensors. The control and address pins (25 through 30) manage register selection and data transfer, while pins 31 through 38 form the data bus for communication with the host processor. Power and ground pins complete the configuration, supporting a single +5V supply.[1] The following table details the pin assignments, including numbers, names, types, and functions:| Pin | Symbol | Type | Function |
|---|---|---|---|
| 1 | PA0 | I/O | Port A lower bit (LSB) |
| 2 | PA1 | I/O | Port A bit 1 |
| 3 | PA2 | I/O | Port A bit 2 |
| 4 | PA3 | I/O | Port A bit 3 |
| 5 | PA4 | I/O | Port A bit 4 |
| 6 | PA5 | I/O | Port A bit 5 |
| 7 | PA6 | I/O | Port A bit 6 |
| 8 | PA7 | I/O | Port A upper bit (MSB) |
| 9 | PB0 | I/O | Port B lower bit (LSB) |
| 10 | PB1 | I/O | Port B bit 1 |
| 11 | PB2 | I/O | Port B bit 2 |
| 12 | PB3 | I/O | Port B bit 3 |
| 13 | PB4 | I/O | Port B bit 4 |
| 14 | PB5 | I/O | Port B bit 5 |
| 15 | PB6 | I/O | Port B bit 6 |
| 16 | PB7 | I/O | Port B upper bit (MSB) |
| 17 | PC0 | I/O | Port C lower bit (LSB) |
| 18 | PC1 | I/O | Port C bit 1 |
| 19 | PC2 | I/O | Port C bit 2 |
| 20 | PC3 | I/O | Port C bit 3 |
| 21 | PC4 | I/O | Port C bit 4 |
| 22 | PC5 | I/O | Port C bit 5 |
| 23 | PC6 | I/O | Port C bit 6 |
| 24 | PC7 | I/O | Port C upper bit (MSB) |
| 25 | RESET | Input | Active-high reset; initializes all ports as inputs |
| 26 | A1 | Input | Address input 1 for register selection |
| 27 | A0 | Input | Address input 0 for register selection |
| 28 | CS | Input | Active-low chip select; enables the device |
| 29 | RD | Input | Active-low read; outputs data from 8255 to bus |
| 30 | WR | Input | Active-low write; latches data from bus to 8255 |
| 31 | D0 | I/O | Data bus lower bit (LSB) |
| 32 | D1 | I/O | Data bus bit 1 |
| 33 | D2 | I/O | Data bus bit 2 |
| 34 | D3 | I/O | Data bus bit 3 |
| 35 | D4 | I/O | Data bus bit 4 |
| 36 | D5 | I/O | Data bus bit 5 |
| 37 | D6 | I/O | Data bus bit 6 |
| 38 | D7 | I/O | Data bus upper bit (MSB) |
| 39 | VCC | Power | +5V supply |
| 40 | GND | Power | Ground |
Registers and Programming
Ports and Control Register
The Intel 8255 Programmable Peripheral Interface (PPI) incorporates three 8-bit I/O ports labeled A, B, and C, along with an 8-bit control register, enabling flexible parallel data transfer between a microprocessor and external peripherals.[1] These components are addressed using the two least significant address lines (A1 and A0) from the system bus, allowing selection of Port A (address offset 0), Port B (offset 1), Port C (offset 2), or the control register (offset 3) relative to the device's base address.[1] The ports feature internal latches and buffers to handle data direction and timing, ensuring compatibility with Intel's microprocessor family.[1] Port A, consisting of eight bidirectional lines (PA0 through PA7), serves as a versatile data port configurable as either input or output through the control register.[1] It includes an output latch for driving external loads when configured as an output and a buffer for reading data when in input mode, supporting all three operational modes (0, 1, and 2) of the 8255.[1] In Mode 2 (bidirectional), Port A functions as a transceiver for two-way data exchange, with Port C providing associated control signals.[1] Port B, also an 8-bit bidirectional port (PB0 through PB7), mirrors Port A's basic structure with input buffers and output latches but is restricted to Mode 0 (simple I/O) and Mode 1 (strobed I/O).[1] It is commonly used for less critical peripheral connections due to its mode limitations compared to Port A, and its direction is independently programmable.[1] In Mode 1, Port B can interface with handshaking signals from Port C's upper or lower nibble, facilitating controlled data transfers.[1] Port C comprises eight lines (PC0 through PC7), which can operate as a single 8-bit I/O port or be divided into two independent 4-bit nibbles: the upper nibble (PC4–PC7) and lower nibble (PC0–PC3).[1] Each nibble supports individual direction control, allowing mixed input/output configurations, and Port C lines often serve dual purposes as simple I/O in Mode 0 or as interrupt and handshake signals (e.g., STB for strobe, IBF for input buffer full) in Modes 1 and 2.[1] This flexibility makes Port C ideal for status monitoring or control functions in peripheral interfacing.[1] The control register, an 8-bit write-only register, governs the configuration of all ports by accepting control words that define operational modes, port directions, and group activations.[1] Writing to this register (with bit 7 set to 1 for mode control) programs the 8255's internal logic, dividing the ports into two groups—Group A (Ports A and upper C) and Group B (Ports B and lower C)—each with independent mode settings.[1] Changes to the control register take effect immediately upon write operations, enabling dynamic reconfiguration during system runtime without resetting the device.[1]Control Word Format
The control word of the Intel 8255 is an 8-bit value loaded into the control register to configure the device's operating modes, port directions, or to set/reset individual bits in Port C. This register is accessed when the chip select (CS) is active low and address lines A1 and A0 are both high, allowing the CPU to write the control word via the data bus. The format of the control word determines whether it configures I/O modes or performs bit set/reset (BSR) operations, with bit 7 (D7) serving as the distinguishing flag.[1] When D7 is set to 1, the control word operates in mode definition format, enabling selection of one of three I/O modes (Mode 0, Mode 1, or Mode 2) for the port groups and specifying input or output directions for Ports A, B, and the two halves of Port C. The 8255 organizes its ports into two groups: Group A (Port A and Port C bits 7-4) and Group B (Port B and Port C bits 3-0). Mode selection applies to these groups, with Mode 2 available only for Group A (bidirectional bus on Port A using Port C for handshaking). Bits 6 and 5 jointly define the mode for Group A: 0X for Mode 0 (basic input/output, X=don't care), 10 for Mode 1 (strobed input/output), and 11 for Mode 2 (bidirectional). Bit 3 selects the mode for Group B: 0 for Mode 0 or 1 for Mode 1 (Mode 2 not supported for Group B). Direction bits (0 for output, 1 for input) apply to the full ports in Mode 0, but in Modes 1 and 2, certain Port C bits are dedicated to control signals (e.g., strobes or interrupts), overriding direction settings for those bits. In Mode 2, bits 1 and 0 enable interrupts for Port A and Port B, respectively, instead of defining directions for Port C halves.[1][12] The mode definition format is detailed in the following table:| Bit | Function | Description |
|---|---|---|
| 7 | Mode Set Flag | 1 = Mode definition active; configures modes and directions. |
| 6 | Group A Mode Select (MSB) | 0 = Mode 0; 1 = Mode 1 or 2 for Port A and upper Port C. |
| 5 | Group A Mode Select (LSB) | Combined with bit 6: 0 = Mode 0/1; 1 = Mode 2 (requires bit 6 = 1). |
| 4 | Port A Direction | 0 = Output; 1 = Input (bidirectional in Mode 2). |
| 3 | Group B Mode Select | 0 = Mode 0; 1 = Mode 1 for Port B and lower Port C. |
| 2 | Port B Direction | 0 = Output; 1 = Input. |
| 1 | Port C Upper (bits 7-4) | 0 = Output; 1 = Input (or interrupt enable in Mode 1/2). |
| 0 | Port C Lower (bits 3-0) | 0 = Output; 1 = Input (or interrupt enable in Mode 1/2 for Port B). |
| Bit | Function | Description |
|---|---|---|
| 7 | BSR Flag | 0 = BSR mode active. |
| 6-4 | Don't Care | Ignored in BSR. |
| 3-1 | Port C Bit Select | 000-111 selects PC0-PC7. |
| 0 | Set/Reset Control | 0 = Reset (0); 1 = Set (1). |
Operating Modes
Bit Set/Reset Mode
The Bit Set/Reset (BSR) mode enables individual control over the eight bits of Port C in the Intel 8255, allowing each bit to be set high or reset low independently without impacting other bits in Port C or the states of Ports A and B. This functionality is essential for applications needing granular signal manipulation, such as driving discrete outputs for status indicators, enabling interrupts, or interfacing with simple peripherals like switches and displays, thereby minimizing software overhead compared to reading-modifying-writing the entire port.[1] Activation of BSR mode occurs by writing a dedicated 8-bit control word to the 8255's control register, distinct from the mode definition control words used for I/O operations. The BSR control word format prioritizes specificity to a single bit, with the following structure:| Bit | Name/Function | Description |
|---|---|---|
| D7 | Mode Select | 0 (indicates BSR mode; 1 would select I/O mode configuration) |
| D6 | Don't Care | Ignored by the device |
| D5 | Don't Care | Ignored by the device |
| D4 | Don't Care | Ignored by the device |
| D3 | Bit Select (MSB) | Part of the 3-bit field (D3-D1) selecting the Port C bit (000 = PC0, 001 = PC1, ..., 111 = PC7) |
| D2 | Bit Select | Part of the 3-bit field selecting the Port C bit |
| D1 | Bit Select (LSB) | Part of the 3-bit field selecting the Port C bit |
| D0 | Set/Reset | 1 to set the selected Port C bit high (logic 1); 0 to reset it low (logic 0) |
MVI A, 05H followed by OUT control_port, assuming the control register is mapped to control_port. Conversely, resetting PC4 requires 00010100 binary (04h: D0=0). These operations execute immediately and are non-destructive to the overall port configuration.[13]
BSR mode operates independently of the 8255's primary I/O modes (0, 1, or 2), allowing concurrent use for fine-tuned control signals even when Ports A or B are in handshake or bidirectional configurations. However, it exclusively targets Port C bits programmed as outputs via a prior mode set control word; attempts to set or reset input-configured bits in Port C have no effect, as those lines function in high-impedance read mode. Upon device reset, all Port C bits default to input, requiring an initial mode set to enable output capability before BSR usage. This separation enhances the 8255's versatility in embedded systems for efficient bit-level interfacing without full port reconfiguration.[1][14]
Mode 0: Basic Input/Output
Mode 0, also known as the basic input/output mode, provides the fundamental functionality of the Intel 8255 Programmable Peripheral Interface (PPI) by enabling straightforward data transfer between the CPU and external devices without handshaking or interrupt support. In this mode, the 24 I/O lines are divided into two 8-bit ports (Port A and Port B) and one 8-bit Port C, which can be configured as two independent 4-bit ports (upper and lower halves). Each port or port group can be individually programmed as either an input or output, allowing for 16 possible I/O configurations across the device.[1] To operate in Mode 0, the CPU must first initialize the 8255 by writing an 8-bit control word to the Control Register, which defines the mode and port directions. The control word format is as follows: bit D7 must be set to 1 to indicate a mode set operation; bits D6 and D5 select the mode for Group A (Port A and upper Port C), with 00 specifying Mode 0; bit D4 determines Port A direction (0 for input, 1 for output); bit D3 sets the upper Port C direction (0 for input, 1 for output); bit D2 selects the mode for Group B (Port B and lower Port C), with 0 specifying Mode 0; bit D1 sets Port B direction (0 for input, 1 for output); and bit D0 sets the lower Port C direction (0 for input, 1 for output). For full Mode 0 operation across both groups, bits D6, D5, and D2 are all 0. Once programmed, data output occurs by writing to the appropriate port register, where the data is latched and held on the output pins until the next write, ensuring stable signals to peripherals. Input data is read directly from the pins without latching, reflecting the instantaneous state of the connected device.[1][15] The latching mechanism for outputs in Mode 0 prevents data corruption during CPU write cycles, as the output buffers hold the previous value until explicitly updated, which is particularly useful for interfacing with devices like displays or simple sensors that require steady signals. Inputs, being unlatched, allow real-time monitoring but may require software polling to capture transient data. Access times are specified at 150 ns for data availability after a write, with a minimum read/write cycle time of 1 µs, synchronized to the system clock. This mode supports no additional control signals from Port C for handshaking, distinguishing it from higher modes, and is ideal for basic peripheral interfacing in systems like the Intel 8080-based setups.[1][16]| Control Word Bit | Function | Value for Mode 0 (Group A/B) |
|---|---|---|
| D7 | Mode Set | 1 |
| D6 | Group A Mode Select (MSB) | 0 |
| D5 | Group A Mode Select (LSB) | 0 |
| D4 | Port A I/O (0=input, 1=output) | Programmable |
| D3 | Port C Upper I/O (0=input, 1=output) | Programmable |
| D2 | Group B Mode Select | 0 |
| D1 | Port B I/O (0=input, 1=output) | Programmable |
| D0 | Port C Lower I/O (0=input, 1=output) | Programmable |
Mode 1: Strobed Input/Output
Mode 1 of the Intel 8255 Programmable Peripheral Interface operates as a strobed input/output mode, enabling controlled data transfers between the device and external peripherals through handshake signaling.[1] This mode allows Port A and Port B to function independently as either inputs or outputs, with the upper four bits of Port C (PC7–PC4) dedicated to handshaking for Port A and the lower four bits (PC3–PC0) for Port B.[1] It is particularly suited for applications requiring synchronized data exchange, such as interfacing with printers, displays, or other devices that use strobe and acknowledge signals to ensure reliable transmission without data loss or overrun.[1] In input configuration for either Port A or Port B, data from the peripheral is latched into the 8255's input buffer upon receiving a low-going STB (Strobe) signal on the corresponding Port C pin (PC4 for Port A input).[1] The IBF (Input Buffer Full) flag is then set high (on PC5 for Port A) to indicate that valid data is available in the buffer, and an INTR (Interrupt Request) signal is generated on the appropriate Port C pin (PC6 for Port A) to notify the CPU, provided the interrupt enable bit is set in the control word.[1] "A low on this input loads data into the input latch," as defined for the STB signal, ensuring the data is captured on the falling edge.[1] The CPU reads the data from the port, which resets IBF low but does not affect INTR directly; INTR is reset when the peripheral asserts ACK (on PC7 for Port A input, though often PC7 is free in input). In practice, the handshake completes with peripheral monitoring IBF and asserting ACK if configured, but basic operation relies on CPU read resetting IBF. Timing requirements include a minimum STB pulse width of 100 ns and setup/hold times for data relative to STB to prevent errors.[1] For output configuration, the CPU writes data to the output register, which latches the data and immediately enables the three-state output buffers, placing the data on the port lines. Simultaneously, OBF (Output Buffer Full) is set low (on PC7 for Port A output) to signal data availability, and INTR is pulsed high (on PC6) if enabled, notifying the CPU that the transfer can proceed to the next byte. The peripheral detects OBF low, reads the data from the port, and asserts ACK low (on PC5 for Port A output) to acknowledge receipt. The falling edge of ACK resets OBF high and INTR low, indicating the buffer is empty and ready for the next output cycle.[1][17] The ACK pulse must meet a minimum width of 100 ns, with defined delays for OBF reset and INTR clearing to synchronize with peripheral response times.[1] The handshake protocol in Mode 1 ensures bidirectional compatibility, where Port A can be input while Port B is output (or vice versa), sharing the interrupt line if both groups generate INTR simultaneously. Note that the specific Port C pins used for handshaking differ slightly between input and output configurations: for Port A output, PC7 (OBF), PC6 (INTR), PC5 (ACK); for input, PC6 (INTR), PC5 (IBF), PC4 (STB), with the unused pin available for general I/O.[1] This flexibility supports efficient peripheral control in systems like early microcomputers, where the 8255 interfaces with devices requiring precise timing, such as Centronics parallel printers using STB for data latching and ACK for readiness indication.[1] Overall, Mode 1 enhances reliability over simpler modes by incorporating status flags and interrupts, reducing CPU polling overhead in I/O operations.[1]Mode 2: Bidirectional Mode
Mode 2, also known as the strobed bidirectional mode, configures Port A of the Intel 8255 as an 8-bit bidirectional I/O port capable of data transfer in both directions under handshaking control. This mode is designed for applications requiring synchronized communication with peripherals that support bidirectional data flow, such as certain printers or memory-mapped devices, where data integrity is ensured through strobe and acknowledge signals. Unlike Mode 0 or Mode 1, Mode 2 is exclusive to Port A, while Port B operates independently in either Mode 0 (basic I/O) or Mode 1 (strobed I/O). Port C provides the necessary handshaking signals using its upper nibble (PC7–PC4), with the lower nibble (PC3–PC0) available for Port B control or general I/O if Port B is in Mode 0.[1] The handshaking protocol in Mode 2 employs five key signals to manage input and output transfers: STB (strobe), IBF (input buffer full), OBF (output buffer full), ACK (acknowledge), and INTR (interrupt request). These signals are mapped to Port C pins PC7–PC4 and facilitate a double-handshake mechanism for reliable data exchange. The protocol differs for input and output directions, with the 8255 automatically handling buffer management and status flags upon CPU read or write operations to Port A. Interrupt generation on INTR can be enabled or disabled via bit set/reset operations on specific Port C pins (PC6 for Port A interrupt enable). Polarity of STB and ACK can be configured via the control word to match peripheral requirements.[1] For input transfers (peripheral to 8255), the peripheral places data on Port A lines and asserts STB low on PC4 to signal validity. The 8255 latches the data into its input buffer on the falling edge of STB, sets IBF high on PC5 to indicate acceptance, asserts INTR high on PC6 if enabled to notify the CPU of available data, and sets Port A to high-impedance state. The peripheral monitors IBF high, removes the data from Port A, and asserts ACK low on PC7 to confirm transfer completion. Upon detecting the falling edge of ACK, the 8255 resets IBF low and INTR low. The CPU can read the latched data from Port A at any time after INTR is asserted; the read operation retrieves the data from the input latch but does not affect the handshake flags, which are reset by ACK. This ensures no data loss during high-speed transfers.[1] For output transfers (8255 to peripheral), the CPU writes data to Port A, which loads the output latch, enables the output buffers to drive the data onto Port A, sets OBF low on PC7 to signal data ready, and asserts INTR high on PC6 if enabled. The peripheral detects OBF low, reads the data from Port A, and asserts STB low on PC4 to acknowledge acceptance. Upon detecting the falling edge of STB, the 8255 resets OBF high, deasserts INTR low, and sets Port A to high-impedance state, preparing for the next transfer. In this mode, PC5 (normally IBF) is not actively used for output handshaking but may be available depending on configuration. Timing parameters, such as STB pulse width (minimum 100 ns) and delay from STB to OBF reset (maximum 150 ns), ensure compatibility with various peripheral speeds.[1]| Signal | Port C Pin | Function in Input Transfer | Function in Output Transfer |
|---|---|---|---|
| STB | PC4 (input) | Peripheral asserts low to present valid data on Port A | Peripheral asserts low to acknowledge data read from Port A |
| IBF | PC5 (output) | 8255 asserts high after latching data (signals acceptance to peripheral) | Not used for primary handshaking (available for I/O in some setups) |
| INTR | PC6 (output) | 8255 asserts high to request CPU interrupt (data available) | 8255 asserts high to request CPU interrupt (output cycle started) |
| ACK | PC7 (input) | Peripheral asserts low after seeing IBF high (confirms ready for next) | Not used for primary handshaking |
| OBF | PC7 (output) | Not used for primary handshaking | 8255 asserts low to indicate output data ready on Port A |
Applications
Peripheral Interfacing
The Intel 8255 Programmable Peripheral Interface (PPI) facilitates direct communication between a microprocessor and external peripherals by providing 24 programmable I/O lines organized into three 8-bit ports (A, B, and C), allowing flexible configuration for input, output, or bidirectional operations. This design enables efficient parallel data transfer without burdening the CPU's address or data buses, making it ideal for integrating devices such as keyboards, displays, and analog-to-digital converters (ADCs) in early microcomputer systems. The chip's control register allows dynamic mode selection and port direction, supporting seamless interfacing in resource-constrained environments.[1] In basic peripheral interfacing, Mode 0 of the 8255 is employed for straightforward input/output tasks, where ports can be independently set as inputs or outputs with latched buffering to maintain signal stability. For example, Port B is often used as an output port to interface with LED or seven-segment displays, driving the segments directly while Port C handles control signals like enabling or scanning digits. Similarly, Port A can serve as an input for scanning a keyboard matrix, where key closures are detected by reading port status, preventing issues like key bounce through software debouncing routines. This mode's simplicity suits static peripherals requiring no handshaking, as seen in early calculator or terminal applications.[1] For peripherals demanding synchronized data exchange, Mode 1 provides strobed input/output with dedicated handshake lines from Port C (e.g., STB for strobe, IBF for input buffer full, and ACK for acknowledge), ensuring reliable transfer under varying peripheral speeds. A common application is keyboard input, where the keyboard controller sends a strobe signal to the 8255 upon key press, triggering an interrupt (INTR) to the CPU for data reading from Port A; this prevents data loss in high-speed environments. In ADC interfacing, Mode 1 captures converted digital values by waiting for the ADC's end-of-conversion signal on a Port C line, then latching the 8-bit output into Port A for CPU retrieval, commonly used in data acquisition systems for sensors or instrumentation. Printers also leverage this mode for controlled output, where the 8255 sends character data to the printer while monitoring busy and acknowledge signals.[1] Mode 2 extends interfacing capabilities to bidirectional peripherals via Port A, using five Port C lines for advanced handshaking (e.g., OBFA for output buffer full and STBA for strobe A), enabling two-way data flow in a single port. This is particularly useful for devices like impact printers or shared bus peripherals, where the 8255 alternates between sending commands and receiving status or data, maintaining protocol compliance through timed signals. In display systems requiring feedback, such as those with status indicators, Mode 2 allows the microprocessor to output display data while reading back verification from the peripheral. Overall, these modes make the 8255 a cornerstone for peripheral expansion in 8-bit systems, reducing wiring complexity and enhancing reliability through buffered I/O.[1]System Integration Examples
The Intel 8255 Programmable Peripheral Interface (PPI) was integral to the input/output subsystem of the original IBM PC (model 5150), where it managed parallel I/O operations for several key peripherals. Configured in Mode 0 for basic input/output, the chip's ports were initialized by the BIOS with a control word of 0b10011001, assigning Port A as input for keyboard scan codes or DIP switch settings (e.g., floppy drive and display configuration), Port B as output for controlling the speaker, cassette motor, and RAM/I/O clocks, Port C upper bits for cassette data input, and Port C lower bits for receiving RAM size from DIP switches. This setup enabled reliable interfacing with the keyboard (via Port A and PB7 for acknowledgment), cassette drive, speaker, and system configuration switches, demonstrating the 8255's role in bridging the 8088 CPU to legacy peripherals in early personal computing.[18] In Intel's MCS-80 family microcomputer systems, such as those based on the 8080 CPU, the 8255 facilitated diverse parallel I/O tasks through isolated or memory-mapped addressing schemes, supporting up to 24 configurable lines via the system's bi-directional data bus and control signals like RD, WR, and CS. For instance, in an automatic computing scale application, it interfaced input from weighing units and keyboards (using input ports) with outputs to displays and printers, leveraging Mode 0 for simple I/O or Mode 1 for strobed handshaking in printer hammer control. Other configurations included floppy disk interfaces (Port A in Mode 1 for shift control, Port B in Mode 0 for status display) and CRT controllers (Port A for character generation, Port B for cursor positioning), highlighting its versatility in industrial and computing peripherals within the INTELLEC systems.[19] Home computers like the SVI-328 (an early MSX-compatible system) employed the 8255 to handle user input and storage devices, with Port A (address 98H, input, Mode 0) reading cassette data, joystick triggers, and end-of-conversion signals; Port B (99H, input, Mode 0) scanning keyboard columns; and Port C (96H, output, Mode 0) controlling keyboard clicks, cassette motor/audio, and line selection. This integration supported seamless operation of the keyboard, joysticks, paddles, and cassette tape system, controlled via a setup word at 97H (0b10010010), underscoring the chip's adoption in Z80-based consumer electronics for cost-effective peripheral expansion.[20] In scientific instrumentation, the 8255 was integrated into microprocessor-based systems for automated data acquisition, as seen in a respiration monitoring setup for sensory irritation studies. Here, it served as the primary interface between an 8085 CPU and measurement peripherals, using its three 8-bit ports to handle 24 parallel lines for input from sensors tracking breathing patterns during chemical exposures. Operating in basic I/O mode, the chip enabled rapid data transfer and control, reducing manual processing time from hours to seconds per experiment and supporting real-time integrity checks, which was critical for toxicological research.[21]Variants and Alternatives
Intel Variants
The Intel 8255 Programmable Peripheral Interface (PPI) was initially released in NMOS technology as the original 8255, providing 24 programmable I/O lines across three 8-bit ports (A, B, and C) configurable in basic input/output, strobed, or bidirectional modes. This variant was designed for early 8-bit microprocessors like the 8080 and 8085, emphasizing compatibility with TTL logic levels but limited by higher power consumption and slower access times compared to later iterations.[22] Subsequent improvements led to the 8255A, an enhanced NMOS version introduced as a drop-in replacement for the original 8255, maintaining pin compatibility while improving electrical characteristics such as reduced power dissipation to 1 W maximum. The 8255A featured refined timing specifications, with data access times of 320 ns for reads and 320 ns for writes in Mode 0, making it suitable for higher-throughput peripheral connections like printers and keyboards in mid-1970s computing environments. It supported system clocks up to approximately 3 MHz.[1] A further refinement, the 8255A-5, offered optimizations over the 8255A, primarily in signal timing requirements for faster system integration, with read access times reduced to 250 ns and write access times to 300 ns, while retaining the same 1 W power profile; this variant supported system clocks up to 5 MHz and was targeted at applications demanding quicker response without shifting to CMOS technology.[1] Similarly, the 8255B variant enhanced drive capability on output ports to support more capacitive loads, differing mainly in electrical specs like higher sink/source currents (up to 2.5 mA sink and 0.5 mA source on ports) but sharing the core functionality and speed profile of the 8255A-5.[1] In response to demands for lower power and higher speeds, Intel developed the 82C55 and 82C55A as CMOS implementations, fully pin-compatible with the NMOS 8255A and 8255A-5, but achieving up to 8 MHz clock rates with "zero wait state" operation in systems like the 8086/88 and 80186/188 and typical power consumption of approximately 50 mW (10 mA at 5 V), a significant reduction from the 1 W of NMOS variants. These CMOS versions preserved all operational modes and I/O configurations while improving efficiency for battery-powered or dense board designs, with extended temperature ranges (-40°C to 85°C) and supply voltages from 4 V to 7 V, marking a shift toward more versatile integration in 1980s embedded systems. The 82C55A remains available from manufacturers like Renesas for legacy and embedded applications as of 2025.[23][24]Comparable Devices
The Intel 8255 Programmable Peripheral Interface (PPI) was one of several similar devices developed by competing semiconductor manufacturers in the 1970s to provide flexible parallel I/O capabilities for microprocessors. These comparable chips typically featured multiple programmable ports, support for input/output modes, and compatibility with 8-bit systems, but varied in port count, operational modes, and integration with specific CPU families. Key examples include the Motorola MC6821 Peripheral Interface Adapter (PIA), the Signetics 2655 PPI, and the Zilog Z80 PIO, each designed to interface peripherals like keyboards, displays, and sensors to microprocessors such as the 6800, 2650, and Z80 series, respectively.[25][26][27] The Motorola MC6821 PIA, introduced for the M6800 family, provides two 8-bit bidirectional ports (A and B) along with four dedicated control lines, enabling programmable I/O per data line and handshake logic for strobed transfers. It operates in a single mode with flexible input/output configuration and interrupt capabilities, packaged in a 40-pin DIP similar to the 8255, but lacks a third port and advanced bidirectional bus mode. This made it suitable for simpler peripheral expansions in Motorola-based systems, such as early industrial controllers.[25] In contrast, the Signetics 2655 PPI, tailored for the 2650 microprocessor, mirrors the 8255 more closely with three 8-bit ports (A, B, C) offering 24 I/O lines and five operational modes: static I/O, strobed I/O, bidirectional I/O, serial I/O, and serial/timer I/O. It includes direct bit set/reset functions and supports both polled and interrupt-driven operations on a single +5V supply, with 300 ns access times, providing broader versatility including timer integration on Port B for event counting in embedded applications.[26] The Zilog Z80 PIO (Z84C20), optimized for the Z80 CPU, features two 8-bit bidirectional ports with four modes—output, input, bidirectional (Port A only), and bit control—along with integrated handshake lines and daisy-chain interrupt priority for up to four devices. Housed in a 40-pin DIP, it emphasizes efficient peripheral control in Z80 systems like early personal computers, but offers fewer ports than the 8255 while adding specialized bit manipulation for tasks such as driving Darlington transistors.[27]| Feature | Intel 8255 PPI | Motorola MC6821 PIA | Signetics 2655 PPI | Zilog Z80 PIO |
|---|---|---|---|---|
| Ports | 3 × 8-bit (24 I/O lines) | 2 × 8-bit (16 I/O lines) | 3 × 8-bit (24 I/O lines) | 2 × 8-bit (16 I/O lines) |
| Modes | 3 (basic, strobed, bidirectional) | 1 (programmable I/O with handshake) | 5 (static, strobed, bidirectional, serial, serial/timer) | 4 (output, input, bidirectional, bit control) |
| Pin Package | 40-pin DIP | 40-pin DIP | 40-pin DIP | 40-pin DIP |
| Key Integration | General 8080/8085/Z80 compatible | M6800 family interrupt/control | 2650 family with timer | Z80 daisy-chain interrupts |
| Supply/Access Time | +5V, ~250 ns (8255A) | +5V, ~1 µs | +5V, 300 ns | +5V, ~500 ns |
References
- https://en.wikichip.org/wiki/intel/mcs-80