Professional Documents
Culture Documents
NOTE
Q quantum electronics
Box 391262
Bramley'
2018
Intel Corporation makes no warranty for the use of its products and assumes no responsibility for any errors
which may appear in this document nor does it make a commitment to update the information contained herein.
BXP, CREDIT, i, ICE, 121CE,ICS, iDBP, iDIS, iLBX, im, iMMX, Insite, INTEL,
intel, Intelevision, Intellec, Inteligent Programming, Intellink, iOSP, iPDS,
iRMX, iSBC, iSBX, iSDM, iSXM, Library Manager, MCS, Megachassis,
Micromainframe, MULTIBUS, Multichannel, Plug·A·Bubble, MULTIMODULE,
PROMPT, Ripplemode, RMX/80, RUPI, System 2000, and UPI, and the
combination of ICE, iCS, iRMX iSBC, MCS or UPI and a numerical suffix.
MDS is an ordering code only and is not used as a product name or trademark. MDS'" is a registered trademark
of Mohawk Data Sciences Corporation.
Intel Corporation
Literature Department
3065 Bowers Avenue
Santa Clara, CA 95051
INTRODUCTION .
DESCRIPTION OF REGISTERS. . . . . . . . . . .. 23
Hardware Reset. . . . . . . . . . . . . . . . . . . . . .. 32
PROGRAMMING 33
Initialization 33
Operating the Serial Interface . . . . . . . . . .. 33
Transmitting 33
Receiving 35
Operating the Parallel Interface 35
Loading Port 1 and 2 35
Reading Port 1 and 2 37
Operating the Event CounterlTimers 37
Loading Event CounterlTimers 37
Reading Event CounterlTimers 38
APPLICATION EXAMPLE 39
Description of the Line Printer
Multiplexer 39
Description of the Hardware 42
Description of the Software. . . . . . . . . . . .. 46
Buffer Management 49
Using the LPM with the MDS SERIES /I
OR SERIES 1/1 .........•...••..•••.•. 50
APPENDIX A-1
Listing of the Line Printer Multiplexer
Software A-1
Listing of the WRITE Program B-1
MUART Registers C.1
inter
The INTEL 8256 MUART is a Multifunction Univer- The MUART contains 16 internal directly addressable
sal Asynchronous Receiver Transmitter designed to be read/write registers. Four of the eight address/data
used for serial asynchronous communication while lines are used to generate the address. When using
also providing hardware support for parallel I/O, tim- 8-bit microprocessors such as MCS-85, MCS-48 and
ing, counting and interrupt control. Its versatile MCS-5I, ADO - AD3 are used to address the 16 inter-
design allows it to be directly connected to the nal registers while Address/Data line 4 (AD4) is not
MCS<!'-85, iAPX-86, iAPX-88, iAPX-186, and used for addressing. For 16-bit systems, ADI - AD4
are used to generate the address for the internal data
iAPX-188 microcomputer systems plus the MCS-48
registers and ADO is used as a second active low chip
and MCS-51 family of single-chip microcomputers.
select.
The four commonly used peripheral functions con-
tained in the MUART are: RD, WR, CS
The 8256 bus interface uses the standard bus control
I) Full-duplex, double-buffered serial asynchronous signals which are compatible with all Intel peripherals
Receiver/Transmitter with an on-chip Baud Rate and microprocessors. The chip select signal (CS),
Generator typically derived from an address decoder, is latched
2) Two - 8-bit parallel I/O ports along with the address on the falling edge of ALE. As
3) Five - 8-bit counters/timers a result, chip select does not have to remain low for
4) 8-level priority interrupt controller the entire bus cycle. However, the data bus buffers
will remain tristated unless an RD or a WR signal
This manual can be divided into two parts. The first becomes active while chip select has been latched in
part describes the MUART in detail, including its low.
functions, registers and pins. This section also
describes the interface between the MUART and Intel
CPUs plus a discussion on programming considera-
tions. The second section provides an application ex- The INT and INTA signals are used to interrupt the
ample: a MUART-based line printer multiplexer. The CPU and receive the CPU's acknowledgment to the
Appendix contains software listings for the line interrupt request. The MUART can vector the CPU to
printer multiplexer and some useful reference infor- the appropriate service routine depending on the
mation. source of the interrupt.
The MUAR T can be logically partitioned into seven When a high level occurs on the RESET pin, the
sections: the microprocessor bus interface, the com- MUART is placed in a known initial state. This initial
mand and status registers, clocking circuitry, asyn- state is described under "Hardware Reset."
chronous serial communication, parallel I/O, timer/e-
vent counters, and the interrupt controller. This can
Command and Status Register
be seen from the block diagram of the 8256 MUART
as shown in Figure I. The MUART's pin configura- There are three command registers and one status
tion can be seen in Figure 2. register as shown in Figure I. The three command
registers are read/write registers while the status
Microprocessor Bus Interface register is a read only. The command registers con-
figure the MUART for its operating environment (Le.,
The microprocessor bus interface is the hardware 8 or 16 bits CPU, system clock frequency). In addi-
section of the MUART which allows a ,..P to com- tion, they direct its higher level functions such as con-
municate with the MUART. It consists of tristate trolling the UART, selecting modes of operation for
bi-directional data-bus buffers, an address latch, a the interrupt controller, and choosing the fundamen-
chip select (CS) latch and bus control logic. In order to tal frequency for the timers. Command Register 3 is
provide all of the MUART's functions in a 40-pin DIP the only register in the MUART which is a bit set/reset
while retaining direct register addressing, a multi- register, allowing the programmer to simply perform
plexed address/data bus is used. one write to set or reset any of the bits.
inter
AD
w.
ALE
RESET
INTA
INT
AD4 P13
DB5 P14
The clock for the five timers and baud rate generator
DB6 P15
is derived from the system clock. The system clock,
DB7 P16 pin 17 (CLK), is fed into a system clock prescaler
ALE PH which in turn feeds the five timers and the baud rate
RD P20 generator. The MUART's system clock can be asyn-
chronous to the microprocessor's clock.
WR P21
RESET P22
System Clock Prescaler
CS P23
The system clock prescaler is a programmable divider
INTA P24
which normalizes the internal clocking frequency for
INT P25
the timers and baud rate generator to 1.024MHz. It
EXTINT P26 divides the system clock (CLK) by I, 2, 3, or 5, allow-
ClK P27 ing clock frequencies of 1.024MHz, 2.048MHz,
TxD
3.072MHz or 5.12MHz. (The commonly used
RxC
6.144MHz crystal frequency for the 8085 results in a
RxD TxC
3.072MHz frequency from the 808S's CLK pin.) If the
GND CTS system clock is not one of the four frequencies men-
tioned above, then the frequency of the baud rate
Figure 2. MUART Pin Configuration generator and the timers will be nonstandard;
infel
however, the MUART will still run as long as the or at the rising edge of the internal baud clock. When
system clock meets the data sheet tcy spec. the receiver is enabled but inactive, the receive logic is
sampling RxD at either 32 or 64 times the bit rate,
looking for a change from the Mark (high) to the
Space (low) state. This is commonly referred to as the
The timer prescaler permits the user to select one of start bit search mode. When this state change occurs,
two fundamental timing frequencies for all of the the receive logic waits one half of a bit time and then
MUART's timers, either 1KHz or 16KHz. The fre- samples RxD again. If RxD is still in the Space state,
quency selection is made via Command Register O. the receive logic begins to clock in the receive data
beginning one bit period later. If RxD has returned to
Asynchronous Serial Interface the Mark state (i.e., false start bit), the receive logic
The asynchronous serial interface of the MUART is a will return to the start bit search mode.
full-duplex double-buffered transmitter and receiver
with separate control registers. The standard asyn- Normally the received data is sampled in the center of
chronous format is used as shown in Figure 3. The each bit, however it is possible to adjust the location
operation of the UART section of the MUART is very where the bit is sampled. This feature is controlled by
similar to the operation of the 8251A USART. the modification register.
If the receiver interrupt level is enabled, break will The MUART has three transmit break features:
generate an interrupt request regardless of whether the Break-In Detect, Transmit Break (TBRK), and Single
receiver is enabled. Another receive interrupt will not Character Break (SBRK).
be generated until the RxD pin returns to the Mark
state. Break-In Detect - A Break-In condition occurs when
the MUART is sending a serial message and the
transmission line is forced to the space state by the
receiving station. Break-In is usually used with half-
The serial asynchronous transmitter section of the duplex transmission so that the receiver can signal a
MUART consists of a transmit buffer, a transmit break to the transmitter. Port 16 must be connected
(shift) register, and the associated control logic. There externally to the transmission line in order to detect a
are two bits in the status register which indicate the Break-In. If transmission voltage levels other than
status of the transmit buffer and transmit register: TTL are used, then proper buffering must be provided
TBE (transmit buffer empty) and TRE (transmit so that Port 16 on the MUART will receive the correct
register empty). polarity and voltage levels.
When Break-In Detect is enabled, Port 16 is polled in- define where within the receive data bits the MUART
ternally during the transmission of the last or only will sample.
stop bit of a character. If this pin is low during
transmission of the stop bit, the Break Detect status
bit (BD) will be set. Break-In Detect and receive Break
The MUART contains 16 parallel I/O pins which are
Detect are OR-ed to set the BD status bit. (Either one
can set this bit.) The distinction can be made through divided into two 8-bit ports. These two parallel I/O
the interrupt controller. If the transmit and receive in- ports (Port I and Port 2) can be used for basic digital
terrupts are enabled, a Break-In will generate an inter- I/O such as setting a bit high or low, or for byte
rupt on level 5 , the transmit interrupt, while Break will transfers using a two-wire handshake. Port I is bit
generate an interrupt on level 4, the receive interrupt. programmable for input or output, so any combina-
If RxC and TxC are used for the serial bit rates, tion of the eight bits in Port I can be selected as either
Break-In cannot be detected. an input or an output. Port 2 is nibble programmable,
which means that all four bits in the upper or lower
Transmit Break - This causes the TxD pin to be forced nibble have to be selected as either inputs or outputs.
low for as long as the TBRK bit in Command Register For byte transfers using the two- wire handshake,
3 is set. While Transmit Break is active, data transfers Port 2 can either input or output the byte while two
from the Transmit Buffer to the Transmit register will bits in Port I are used for the handshaking signals.
be inhibited.
All of the bits in Port I have alternate functions other
If both the Transmit Buffer and the Transmit Register than I/O ports. As mentioned above, when using the
are full, and a Transmit Break command is issued byte handshake mode, two bits on Port I are used for
(command register 3, TBRK = I), the entire character the handshaking signals. As a result, these two bits
in the Transmit register is sent including the stop bits. cannot be used for general purpose I/O. The other six
TxD is then driven low and the character in the bits in Port I also have alternate functions if they are
Transmit Buffer remains there until Transmit Break is not used as I/O ports. Table I lists each bit from Port
disabled (command register 3, TBRK =0). At this time I and its corresponding alternate function.
TxD will go high for one bit time and then send the
character in the Transmit Buffer. The bits in the Port I Control Register select whether
the pins on Port I are inputs or outputs. The pins on
Single Character Break - This causes TxD to be set Port I are selected as control pins through the other
low for one character including start bit, data bits, programming registers which are relevant to the con-
parity bit, and stop bits. The user can send a specific trol signal. Configuring a bit in Port I as a control
number of Break characters using this feature. function overrides its definition in the Port I Control
Register. If the pins on Port I are redefined as control
If both the Transmit Buffer and the Transmit Register signals, the definition of whether the pin is an input or
are full and a Send Break command is issued (com- an output in the Port I Control Register remains un-
mand register 3, SBRK = I) the entire character in the changed. If the pins on Port I are converted back to
Transmit Register is sent including the stop bits. TxD 1/0 pins, they assume the state which was defined in
is driven low for one complete character time followed the Port I Control Register.
by a high for two bit times after which the character in
the Transmit Buffer is sent. Each parallel I/O port has a latch and drivers. When
the port is in the output mode, the data written to the
port is latched and driven on the pins. The data which
Modification Register
is latched in the 1/0 ports remains unchanged unless
The modification register is used to alter two standard the port is written to again. Reading the ports,
functions of the receiver (start bit check, and sampling whether the port is an input or output, gates the state
time) and to enable a special indicator flag for half- at the pins onto the data bus. Writing to an input port
duplex operation (transmitter status). Disabling start has no effect on the pin, but the data is stored in the
bit check means that the receiver will not return to the latch and will be output if the direction on the pin is
start bit search mode if RxD has returned to the Mark changed later. Writing to a control pin on Port I has
state in the center of the start bit. It will simply pro- the same effect as writing to an input pin. If pins 2, 3,
ceed to assemble a character from the RxD pin 5, and 6 in Port I are used for control signals, the con-
regardless of whether it received a false start bit or tents of the respective output latches will be read, not
not. The modification register also allows the user to the state of the control signals. If pins 0, I, and 7 on
inter
Pin Pin
Symbol Number Control Function Condition
PIO 39 ACK Control signals for Port 2 Mode register
Pll 38 OBF 8-bit handshake output P2C2 - P2CO = 101
PIO 39 STB Control signals for Port 2 Mode register
Pll 38 IBF 8-bit handshake input P2C2 - P2CO = 100
PI2 37 Event counter 2 Mode register
clock input CT2=1
PI3 36 Event counter 3 Mode register
clock input CT3=1
PI4 35 Internal baud rate Mode word
generator clock output P2CO - P2C2 = III
Port I control word PI4= I
Command Register 2
B3 - BO> 3H
PI5 34 Timer 5 trigger input Mode register
T5C=I
PI6 33 Break-In detection input Command Register I
BRKI=I
PI7 32 External edge sensitive Command Register I
interrupt input BITI= I
Port I are used for control signals, the state of the first data byte must be written to Port 2 and complete-
control signals will be read. If pin 4 on Port I is used ly transferred before an interrupt will occur, or the
as a test output for the internal baud rate, this clock two-wire handshake interrupt is enabled while ACK is
signal will be output through the output latch, thus the low, and then ACK goes high.
information in the output latch will be lost.
To set up the two-wire handshake output using inter- When the counters/timers are configured as timers
rupts one must first program the Mode Register, and their clock source passes through two dividers: the
then enable the interrupt via the interrupt mask system clock prescaler, and the timer prescaler. As
register. An interrupt will not occur immediately after mentioned before, the system clock prescaler normali-
the two-wire handshake interrupt is enabled. The in- zes the internal system clock to 1.024 MHz. The timer
terrupt is triggered by the rising edge of ACK. There prescaler receives this normalized system clock and
are two ways to generate the first interrupt. Either the devides it down to either 1 kHz or 16 kHz, depending
INT OBF
INTA ACK
RD
Processor 8256 Equipment
WR
Databus P20·P27
on how Command Register I is programmed. If more bit in the interrupt mask register is automatically
timing resolution is needed the clock frequency can be reset, preventing further interrupt requests from oc-
input externally through the I/O ports. curing.
By programming the Mode Register, four of the 8-bit The event counters/timers can be used in the follow-
counters/timers can be cascaded to form two l6-bit ing modes of operation:
counters. Counters/timers 3 and 5 can be cascaded
together, and counters/timers 2 and 4 can be cascaded Timer 1
together. Counters/timers 2 and 3 are the lower bytes, - Serves as an 8-bit timer.
while counters/timers 4 and 5 are the upper bytes in
the cascaded mode. Event Counter/Timer 2
- Serves as an 8-bit timer or event counter, or
Each counter can be loaded with an arbitrary initial cascaded with Timer 4 as a 16-bit timer or event
value. Timer 5 is the only timer which has a special counter.
save register which holds its initial value. Whenever
Timer 5 is loaded with an initial value the special save Event Counter/Timer 3
register is also loaded with this value. Timer 5 can be - Serves as an 8-bit timer or event counter, or
reloaded to its initial value from the detection of a cascaded with Timer 5 as a 16-bit timer or event
high-to-low transition on Port P15. counter, with the additional modes of operation
selectable for Timer 5.
The counters are decremented on the first rising edge
of the clock after the initial value has been loaded. Timer 4
The setup time for loading the counter when using an - Serves as an 8-bit timer, or cascaded with Event
external clock is specified in the data sheet. When us- Counter/Timer 2 as a 16-bit timer or event
ing internal clocks, the user has no way of knowing counter.
the phase relationship of the clock to the write pulse;
therefore the timing accuracy is one clock period. Timer 5
I) Non-retriggerable 8-bit timer
The timers are counting continuously, and an inter- 2) Retriggerable 8-bit timer whose initial value is
rupt request is issued any time a single counter or pair loaded from a save register which starts following
of cascaded counters reaches zero. If the timers are the negative transition of an external signal. Subse-
going to be used with interrupts, then the programmer quent transitions of this signal after the counting
should first load the timer with the initial value, then has started, reloads the initial value and restarts the
enable the interrupt. If the programmer enables the in- counting.
terrupt first, it is possible that the interrupt will occur 3) Cascaded with Event Counter/Timer 3, non-
before the initial value is loaded. When an interrupt retriggerable 16-bit timer, which can be loaded
from anyone of the timers occurs, the corresponding with an initial value by two write operations.
inter
INTA
or
--- ...• ...•....
RO
®........ ....
,
\
\
CD The 8256 signals with INT that the equipment has accepted the last character and that the output latches are empty again.
INTA ISF
RD
Processor 8256 Equipment
Oatabus P20·P27
,
4) Cascaded with event counter/timer 3, non- be met when the CPU must execute a main program as
retriggerable 16-bit event counter, which can well as subroutines. Usually each peripheral has its
be loaded with an initial value by two write own request to response time requirements; therefore
operations. the user must establish a priority scheme.
5) Cascaded with Event Counter/Timer 3, retrig-
gerable 16-bit timer. The most significant byte The interrupt method provides certain advantages
(Timer 5) will be loaded with its initial value from over the polling method. When a peripheral device
the save register, while the least significant byte needs service it signals the CPU through hardware
(Event Counter/Timer 3) will be set to OFFH asynchronously, thus reducing the overhead of polling
automatically, Loading, starting, and retriggering a device which does not need service. The CPU would
operations follow the same pattern as in 2). typically finish the instruction it is executing, save the
6) Cascaded with Event Counter/Timer 3, retrig- important registers, and acknowledge the peripheral's
gerable 16-bit event counter. The most significant interrupt request. During the acknowledgment, the
byte (Timer 5) will be loaded with its initial value CPU reads a vector which directs the CPU to the start-
ing location of the appropriate interrupt service
from the save register, while the least significant
routine. If several interrupt requests occur at the same
byte (Event Counter/Timer 3) will be set to OFFH
time, special logic can prioritize the requests so that
automatically. Loading, starting, and retriggering
when the CPU acknowledges the interrupt, the highest
operations follow the same pattern as in 2). priority request is vectored to the CPU.
An interrupt driven system requires additional hard-
Interrupt Controller ware to control the interrupt request signal, priority,
In a microcomputer system there are several ways for and vectoring. The 8256 integrates this additional
the CPU to recognize that a peripheral device needs hardware onto the chip. The interrupt controller on
service. Two of the most common ways are the polling the MUART is directly compatible with the MCS-85,
method and the interrupt service method. iAPX-86, iAPX-88, iAPX-186, iAPX-188 family of
microcomputer systems, and it can also be used with
In the polling method the CPU reads the status of other microprocessors as well. It contains eight priori-
each peripheral to determine whether it needs service. ty levels, however, there are a total of 12 interruptable
If the peripheral does not need service, the time the sources: 10 internal and 2 external. Since there are
CPU spends polling is wasted; therefore this overhead eight priority levels, only eight interrupts can be used
results in increasing the execution time. Some systems at one time. The assignment of the interrupts used is
must meet a specific request to response time such as a selected by Command Register 1 and by the mode
real time signal. In this case the programmer must register. The MUART's interrupt sources have a fixed
guarantee that the peripheral is polled at a certain fre- priority. Table 2 displays how the 12 interrupt sources
quency. This polling frequency cannot always easily are mapped into the 8 priority levels.
IBF
/1
INT
~
INTA
CD The equipment indicates with the falling edge of STB (Strobe) that a new character is available at port 2. The 8256
acknowledges the indication by activating IBF (Input Buffer Full).
0Thereupon, the equipment releases STB and the 8256 latches the character.
®The 8256 informs the microprocessor through INT that a new character is ready for transfer.
@The microprocessor reads the character.
CD The rising edge of signal RD resets signalliiF.
® This action signals to the equipment that the input latches of the 8256 are empty and the next character can be transferred.
inter Ap·153
Priority Source
Highest LO Timer I
L1 Timer 2 or Port Interrupt
L2 External Interrupt (EXTINT)
L3 Timer 3 or Timers 3 & 5
lA Receiver Interrupt
RST 7.5
L5 Transmitter Interrupt RST 6.5
RST 5.5
L6 Timer 4 or Timers 2 & 4
Lowest L7 Timer 5 or Port 2 Handshaking
," ~"
INTERRUPT TYPE 255 IFFHI
INTERRUPT TYPE 254 (FEH)
.
~:;) ~~
.
INTERRUPT TYPE 71 (47H) 11CH
INTERRUPT TYPE 70 (46H) 11SH
INTERRUPT TYPE 69 (45H) l14H
MUART'S
INTERRUPT TYPE 6S 144HI 110H
INTERRUPT
LEVELS INTERRUPT TYPE 67 (43H) lOCH
INTERRUPT TYPE 66 (42H) 10SH
INTERRUPT TYPE 65 (41H) 104H
I:R
..
INTERRUPT TYPE 64 140Hl
~~
l00H
Once the service routine is completed the main pro- sent between RSTO in the 8085 mode and a hardware
gram may be reentered by using an IRET (Interrupt reset, because both expect instructions starting at
Return) instruction. The IRET instruction will pop the address OH. However, there is a way to distinguish
pre-interrupt instruction pointer, code segment and between the two. After a hardware reset, all control
flags off the stack. Thus the main program will r,~gisters are reset to a value of OH; therefore when
resume where it was interrupted with the same flag 'Jsing Timer I, Reset and RSTO can be distinguished
status regardless of changes in the service routine. by reading one of the control registers of the 8256
Note especially that this includes the state of the IF which has not been programmed with a value of OH.
flag; thus interrupts are re-enabled automatically The control registers will contain the previously
when returning from the service routine. For further programmed values if RSTO occurs.
information refer to the iAPX 86,88 User's Manual.
Interrupt Registers
Using the 8256's Interrupt Controller
The 8256's interrupt controller has several registers
Without INTA
associated with it: an Interrupt Mask Register, an In-
There are several configurations where the 8256 will terrupt Address Register, an Interrupt Request
not have an INTA signal connected to it. Some ex- Register, an Interrupt Service Register, and a Priority
amples are when using the 8256 with an 8051 or 8048, Controller. Only the Interrupt Mask Registers and the
or when connecting the INT pin on the 8256 to the Interrupt Address Register can be accessed by the
8085's RST 7.5, RST 6.5, or RST 5.5 inputs. In these user.
configurations the IAE bit in Command Register 3 is
set to 0, and the INTA pin on the 8256 is tied high. Interrupt Mask Registers
When the interrupt occurs the CPU should branch to The Interrupt Mask Registers consist of two write
a service routine which reads the interrupt address registers - the Set Interrupts Register and Reset Inter-
register to determine which interrupt request level oc- rupts Register, and one read register - the Interrupt
cured. The interrupt address register contains the level
Enable Register. Each one of the eight levels of inter-
of the interrupt multiplied by four. Reading the inter-
rupts may be individually enabled or disabled through
rupt address register is equivalent in effect to the
these registers. Writing a one to any of the bits in the
rnTA signal; it clears the INT pin and indicates to the
MUART that the interrupt request has been Set Interrupts Register enables the corresponding in-
acknowledged. After the CPU reads the value in the terrupt level, while writing a one to a bit in the Reset
interrupt address register, it can add an offset to this Interrupts Register disables the corresponding inter-
value and branch to an interrupt vector table which rupt level. Reading the Interrupt Enable Register
contains jump instructions to the appropriate inter- allows the user to determine which interrupt levels are
rupt service routines. An 8085 program which enabled. The bits which are set to one in the Interrupt
Enable Register correspond to the levels which are
demonstrates this routine is given is Figure 8.
enabled. All of the interrupt levels will remain enabled
Table 3 summarizes the priority levels and the in- until disabled by the Reset Interrupts Register except
terrupt vectors which the 8256 sends back to the CPU. the counter/timer interrupts which automatically
Note that when using Timer I there is a conflict pre- disable themselves when they reach zero.
Restart Inter-
Com- rupt
mand 'Vector Inter· Sources
Interrupt 8085 8086 rupt Trigger (Only one source can be Selection
Level mode mode Address Mode assigned at any time) by
Highest RSTO 40H OH edge Timer I -
Priority
0
I RSTI 41H 4H edge Event Counter/Timer 2 or Command
external interrupt request word I BIT!
on Port I PI7 (bit 2)
2 RST2 42H 8H level Input EXTINT -
3 RST3 43H CH edge Event Counter/Timer 3 or Mode word
cascaded event counters/ T35 (bit 7)
timers 3 and 5
4 RST4 44H IOH edge Serial receiver -
5 RST5 45H 14H edge Serial transmitter -
6 RST6 46H 28H edge Timer 4 or cascaded event Mode word
counters/timers 2 and 4 T24 (bit 6)
7 RST7 47H ICH edge Timer 5 or Port 2 with Mode word
Lowest handshaking interrupt P2C2 - P2CO
Priority request (bits 2 ... 0)
Note:
If no interrupt requests are pending and INTA cycle occurs, interrupt level 2 will be the default value vectored to the CPU.
,
I
I
,
EI OR STI
I •
--l • rINTERRUPT-"
SERVICE I
I ROUTINE 4 I
I
• I I
I
•
• L.-.- I
I I
t I
t I
I I I
I t I
I IRET I .JI
-
RET OR
____
! -
,-iNTERRUP"T-'
I SERVICE I
ROUTINE 2 I
I I
I I
I I
t I
I
I t I
I I
I t I
I RET
_. OR IRET I.JI
______
r-INTERRuPr- ,
I SERVICE I
i ROUTINE 6 I
I I
I I I
I I
I I
~I RET OR
_______ IRET JI
troller compares the Interrupt Request Register to the an EOI (End Of Interrupt) command is issued, the
Interrupt Service Register. If the bit set in the Request highest priority bit in the Service Register is reset.
Register is of a higher priority than the highest priority
bit set in the Service Register, the MUART will ac- Figure 10 shows an example of the program flow using
tivate the INT signal and update the Interrupt Address the nested mode of interrupts. During the main pro-
Register. If the bit in the Request Register is of equal gram an interrupt request is generated from Level 4.
or lower priority than the highest priority bit set in the Since the interrupt flag is enabled, the interrupt
Service Register, the INT signal will not be activated. acknowledge signal is activated, and the
When an INTA signal is activated or the Interrupt microprocessor is vectored to Service Routine 4.
Address Register is read, the corresponding bit in the During Service Routine 4, Level 2 requests an inter-
Request Register which caused the INT signal to be rupt. Since Level 2 is a higher priority than Level 4,
asserted is reset and set in the Service Register. When the 8256 activates its INT signal. An interrupt
I EI OR STI I
:--f
r INTERRUPT ..,
I R~EURT~~CEE
4 I
~c:::=;- i I
.--
: I
I
I
II
•
•
I
I
INTERRUPT
I REOUEST 2
r- ijijiERRUPT-
SERVICE
,
I
EI OR STI I! I ROUTINE 2 I
I ; ~I
I EI OR STI
T II I
··
I I
I
I I
I
I
·
I I
I I
II EOI I I
Ir I
I EOI I I
I I RET OR IRET I I I
... ..J I rRET OR IRET II
J
r INTERRUPT ..,
I R~mY~1:E6 I
II EI OR STI I I
I I
I I
II EOI I I
I I
I I RET OR IRET I I
I I
'- ____ ...1
8085
808ll
INTR
Using the configuration in Figure 11, when the acknowledge. An example of this type of interrupt
microprocessor receives an interrupt, it generates an acknowledge is given in Figure 8. If the last MUART
interrupt acknowledge and branches into an interrupt in the chain indicated an external interrupt, the
service routine. For the interrupt service routine of the microprocessor would simply return to the main pro-
external interrupt, EXTINT Level 2, the micro- gram; however, this would be an error condition
processor will read the next MUART's interrupt ad- caused by a spurious interrupt. A flow chart of the
dress register and branch to the appropriate service software to handle cascaded interrupts is given in
routine. In effect, this would be a software interrupt Figure 12.
Figure 12. Flow Chart to Resolve Interrupt Request When Cascading MUART
Interrupt Controllers
the interrupts when cascading MUARTs. If all of the If interrupts are not used, the only other way to con-
MUART's Level 0 and Levell interrupts are disabled, trol the MUART is to poll it. It is still possible to use
the highest priority interrupt is the EXTlNT. In this the priority structure of the MUART with polling. In
case the last MUART in the chain would have the this mode of operation the MUART's INT signal (Pin
highest priority; however, it would take the longest 15) is not used, and the INTA pin is tied high. Since
time to propagate back to the CPU. If, however, the INT pin's level is duplicated in the MSB of the
Level 0 or Level I interrupts were enabled, the closer Status Register, a program can poll this bit. When it
to the microprocessor the MUART is, the higher the becomes set, the program could read the Interrupt
priority these two levels would have. Address Register to determine the cause. Either the
normal or nested mode of operation can be used. Note
When using the 8256 interrupt controller along with that the functions used with this polled method must
some other interrupt controller, such as the 8259A, have their interrupts enabled.
the MUART's INT signal would simply be tied to one
of the interrupt controller's request inputs. The ser- It is also possible to poll the counters/timers, parallel
vice routine for the MUART's interrupt request would I/O, and UART separately. To control the UART,
initially perform the software interrupt acknowledge one could poll the Status Register. Byte handshakes
before servicing the MUART's interrupt request. with the parallel I/O can be controlled by polling Port
A block diagram of this configuration is given in I. Finally, each counter/timer has its own register
Figure 13. which can be polled.
Symbol Pin No. Type Name and Function Symbol Pin No. Type Name and Function
ADO-AD4 1-5 1/0 Address/Data: Three- INTA 14 I Interrupt Acknowledge:
state address/data lines If the MUART has been
DB5-DB? 6-8
which interface to the enabled to respond to in-
lower 8 bits of the micro- terrupts, this signal in-
processor's multiplexed forms the MUART that
address/ data bus. The
its interrupt request is be-
5-bit address is latched on
ing acknowledged by the
the falling edge of ALE.
microprocessor. During
In the 8-bit mode, ADO·
this acknowledgement the
AD3 are used to select the
MUART puts an RSTn
proper register, while
instruction on the data
ADI-AD4 are used in the
bus for the 8-bit mode or
16-bit mode. AD4 in the
a vector for the 16-bit
8-bit mode is ignored as
mode.
an address, while ADO in
the 16-bit mode is used as o Interrupt Request: A high
a second chip select, active signals the microproc-
low. essor that the MUART
needs service.
ALE 9 I Address Latch Enable: I External Interrupt: An ex-
Latches the 5 address lines ternal device can request
on ADO-AD4 and CS on interrupt service through
the falling edge. this input. The input is
level sensitive (high),
RD 10 I Read Control: When this
therefore it must be held
signal is low, the selected
high until an INTA occurs
register is gated onto the
or the interrupt address
data bus.
register is read.
WR II I Write Control: When this
System Clock: The
signal is low, the value on
reference clock for the
the data bus is written in-
baud rate generator and
to the selected register.
the timers.
RESET 12 I Reset: An active high
I/O Receive Clock: If the
pulse on this pin forces
baud rate bits in Com-
the chip into its initial
mand Register 2 are all 0,
state. The chip remains in
this pin is an input which
this state until control in-
clocks serial data into the
formation is written.
RxD pin on the rising
CS 13 I Chip Select: A low on this edge of RxC. If baud rate
signal enables the
MUART. It is latched bits in Command Register
with the address on the 2 are programmed from
falling edge of ALE, and I-OFH, this pin outputs a
RD and WR have no ef- square wave whose rising
fect unless CS was latched
low during the ALE cycle.
intel
Symbol Pin No. Type Name and Function Symbol Pin No. Type Name and Function
edge indicates when the If 0.75 stop bits is chosen,
data on RxD is being the CTS input is edge sen-
sampled. This output re- sitive. A negative edge on
mains high during start, CTS results in the im-
stop, and parity bits. mediate transmission of
I Receive Data: Serial data the next character. The
input. length of the stop bits is
determined by the time in-
I Clear To Send: This input terval between the begin-
enables the serial trans- ning of the first stop bit
mitter. If I, 1.5, or 2 stop and the next negative edge
bits are selected, CTS is on CTS. A high-to-Iow
level sensitive. As long as transition has no effect if
CTS is low, any character the transmitter buffer is
loaded into the transmit- empty or if the time inter-
ter buffer register will be val between the beginning
transmitted serially. A of the stop bit and next
single negative going negative edge is less than
pulse causes the transmis- 0.75 bits. A high or a low
sion of a single character level or a low-to-high
previously loaded into the transition has no effect on
transmitter buffer the transmitter for the
register. If a baud rate 0.75 stop bit mode.
from I-OFH is selected,
CTS must be low for at TxC 22 I/O Transmit Clock: If the
least 1/32 of a bit, or it baud rate bits in com-
will be ignored. If the mand register 2 are all set
transmitter buffer is emp- to 0, this input clocks data
ty, this pulse will be ig- out of the transmitter on
nored. If this pulse occurs the falling edge. If baud
during the transmission of rate bits are programmed
a character up to the time for I or 2, this input per-
where 1/2 of the first (or mits the user to provide a
only) stop bit is sent out, 32x or 64x clock which is
it will be ignored. If it oc- used for the receiver and
curs afterwards, but transmitter. If the baud
before the end of the stop rate bits are programmed
bits, the next character for 3-0FH, the internal
will be transmitted im- transmitter clock is out-
mediately following the put. As an output it
current one. If CTS is still delivers the transmitter
high when the transmitter clock at the selected bit
register is sending the last rate. If I V, or 0.75 stop
stop bit, the transmitter bits are selected, the
will enter its idle state un- transmitter divider will be
til the next high-to-Iow asynchronously reset at
transition on CTS occurs. the beginning of each
inter Ap·153
L11 LO I S1 I so I BRKII BITI 180861 FRO I 0 I L11 LO I S1 SO I BRKII BITI 180861 FROI
Command 1 Command 1
I TJSI T241 TSC I CTJI CT21 P2C21 P2C1J P2coI 0 0 1 I T3S1 T241 TSC I CT31 CT21 P2C2! P2C11 P2C~
Mode Mode
I PHI P161 PIS I P141 P131 P12 I P11 I P10 I I PHI P161 P1s1 P141 P131 P121 P11 I P10 I
Port 1 Control Port 1 Control
L7 I L6 I LS I L4 I L3 I L2 L1 LO I 0 1 I L7 I L6 I LS I L4 I L3 I L2 L1 LO I
Interrupt Enable Set Interrupts
D7 I D6 I DS I D4 I D3 I D2 I D1 I DO I 0 0
I
L7 I L6 I LS I L4
I
L3 L2 I L1 LO I
Interrupt Address Reset Interrupts
D7 I D6 I DS I D4 I D3 I D2 D1 I DO I 0 1
I D7 I 061 DS I D4 I D3 I D2 I D1 I DO I
Receiver Butter Transmitter Buffer
D7 I D6 I DS I D4 I D3 I D2 D1 I DO I 1 0 I D7 I D6 I DS I D4 D3 I D2 I D1 I DO I I
Port 1 Port 1
I D7 I D6 1 DS I D4 I D3 I D2 I D1 I DO I 1 1
I
D7 I D6 I DS I D4 I D3 I D2 I D1 I 001
Port 2 Port 2
D7 D6 I DS I D4 I D3 D2 I D1 I DO I 1 I D7 I 061 DS D4 I D3 I D2 I D1 I DO I
Timer 1 Timer 1
D7
I D6 I DS I D4 I D3 I D2 I D1 I DO I 1 1 I D7 I D6 I DS
I
D4 I D3 I D2 I D1 I 00 I
Timer 2 Timer 2
I D7 I D6 I DS D4 I D3 I D2 I D1 I DO I 1 0 I D7 06 DS I D4 I D3 I D2 I D1 I 00 I
Timer 3 Timer 3
I D7 I D6 I DS D4 I D3 I D2 I D1 I DO I 1 I D7 I D6 DS I D4 I D3 I D2 I D1 I DO I
Timer 4 Timer 4
I D7 I D6 I DS D4 I D3 I D2 I D1 I DO I
1 I D7 106 I
DS I D4 I D3 I D2 I D1 100 I
Timer 5 TlmorS
Bits 3 to
o (Hex.) TxC RxC
o Input: 1 x baud Input: 1 x baud
rate clock for the rate clock for the
Programming bits 0 ... 3 with values from 3H to FH transmitter receiver
enables the internal baud rate generator as a common Input 32 x or 64 x Output: receiver bit
clock source for the transmitter and receiver and baud rate for trans- clock with a low-to-
determines its divider ratio. mitter and receiver high transition at
data bit sampling
Programming bits 0 ... 3 with values of IH or 2H time. Otherwise:
enables input TxC as a common clock source for the high level
transmitter and receiver. The external clock must pro-
vide a frequency of either 32x or 64x the baud rate. Output: baud rate Output: as above
clock of the
The data transmission rates range from 0 ... 32
Kbaud. transmitter
If bits O... 3 are set to 0, separate clocks must be input As an output, RxC outputs a low-to-high transition at
to pin RxC for the receiver and pin TxC for the sampling time of evary data bit of a character. Thus,
transmitter. Thus, different baud rates can be used for data can be loaded, e.g., into a shift register external-
lMMtu MO P",'~t. 11do" "or 0""
ty, and stop bits (RxC = high).
ror "ort. pMi- also high. Writing a byte with Bit 7 low resets any bits
which were high. If any bit 0-6 is low, no change oc-
curs to that bit. When Command Register 3 is read,
As an output, TxC outputs the internal baud rate bits 0, 3, and 7 will always be zero.
clock of the transmitter. There will be a high-to-Iow
transition at every beginning of a bit.
(marking) state. If both TBRK and SBRK are set, P2C2, P2C1, P2CO - Port 2 Control
break will be set as long as TBRK is set, but SBRK will
be cleared after one character time of break. If SBRK Direction
is set again, it remains set for another character. The P2C2 P2C1 P2CO Mode Upper Lower
user can send a definite number of break characters in o 0 0 nibble input input
this manner by clearing TBRK after setting SBRK for o 0 1 nibble input output
the last character time. o 1 0 nibble output input
o I 1 nibble output output
END - End of Interrupt 1 0 0 byte handshake input
1 0 1 byte handshake output
If fully nested interrupt mode is selected, this bit resets 1 I 0 DO NOT USE
the currently served interrupt level in the Interrupt I I 1 test
Service Register. This command must occur at the end
of each interrupt service routine during fully nested in- If test mode is selected, the output from the internal
terrupt mode. END is automatically cleared when the baud rate generator is placed on bit 4 of Port I (pin
Interrupt Service Register (internal) is cleared. END is 35).
ignored if nested interrupts are not enabled.
To achieve this, it is necessary to program bit 4 of Port
NIE - Nested Interrupt Enable I as an output (Port I Control Register Bit PI4 = 1),
When NIE equals 1, the interrupt controller will and to program Command Register 2 bits B3 - BO
operate in the nested interrupt mode. When NIE with a value ~.3H.
equals 0, the interrupt controller will operate in the
normal interrupt mode. Refer Jo the" Interrupt con- Note:
If Port 2 is operating in handshake mode, Interrupt Level 7 is
troller" section under "Normal Mode" and "Nested
not available for Timer 5. Instead it is assigned to Port 2 hand-
Mode" for a detailed description of these operations. shaking.
Each bit in the Port I Control Register configures the A high-to-Iow transition on PI5 (Pin 34) loads the
direction of the corresponding pin. If the bit is high, timer with the save register and starts the timer.
the pin is an output, and if it is low the pin is an input.
Every Port I pin has another function which is con- Port 16 - Break·ln Detect
trolled by other registers. If that special function is If Break-In Detect is enabled by BRKI in Command
disabled, the pin functions as a general I/O pin as Register I, then this input is used to sense a Break-In.
specified by this register. The special functions for If Port 16 is low while the serial transmitter is sending
each pin are described below. the last stop bit, then a Break-In condition is signaled.
If byte handshake mode is enabled for input on Port Interrupts are enabled by writing to the Set Interrupts
2, STB is an input. IBF is driven low after STB goes Register (5W). Interrupts are disabled by writing to
low. On the rising edge of STB the data from Port 2 is the Reset Interrupts Register (6W). Each bit set by the
latched. Set Interrupts Register (5W) will enable that level in-
terrupt, and each bit set in the Reset Interrupts
Register (6W) will disable that level interrupt. The
user can determine which interrupts are enabled by
reading the Interrupt Enable Register (5R).
Port 12, 13 - Counter 2,3 Input
Priority Source
If Timer 2 or Timer 3 is programmed as an event Highest LO Timer I
counter by the Mode Register, then Port 12 or Port 13 L1 Timer 2 or Port Interrupt
is the counter input for Event Counter 2 or 3, respec- L2 External Interrupt (EXTINT)
tively. L3 Timer 3 or Timers 3 & 5
L4 Receiver Interrupt
Port 14 - Baud Rate Generator Output Clock L5 Transmitter Interrupt
L6 Timer 4 or Timers 2 & 4
If test mode is enabled by the Mode Register and Lowest L7 Timer 5 or
Command Register 2 baud rate select is greater than 2, Port 2 Handshaking
then Port 14 is an output from the internal baud rate
generator.
If transmission mode is disabled (in Modification The break character received will not be loaded into
Register), then FE indicates a framing error. A fram- the receiver buffer register.
ing error is detected during the first stop bit. The error
is reset by reading the Status Register or by a chip If Break -In Detection is enabled and a Break -In condi-
reset. A framing error does not inhibit the loading of tion occurs, Status Register Bit 3 will be set and in ad-
the Receiver Buffer. If RxD remains low, the receiver dition an interrupt request on Level 5 is generated.
will assemble the next character. The false stop bit is
treated as the next start bit, and no high-to-Iow transi- The BD status bit will be reset on reading the status
tion on RxD is requied to synchronize the receiver. register or on a hardware or software reset. For more
information on Break/Break-In, refer to the "Serial
When the TME bit in the Modification Register is set, Asynchronous Communication" section under
FE is used to indicate that the transmitter was active "Receive Break Detect"and "Break-In Detect."
during the reception of a character, thus indicating
that the character received was transmitted by its own TRE - Transmit Register Empty
transmitter. FE is reset when the transmitter is not ac- When TRE is set the transmit register is empty and an
tive during the reception of character. Reading the interrupt request is generated on Level 5 if enabled.
status register will not reset the FE bit in the transmis- When TRE equals 0 the transmit register is in the pro-
sion mode. cess of sending data. TRE is set by a chip reset and
when the last stop bit has left the transmitter. It is
reset when a character is loaded into the Transmitter
Register. If CTS is low, the Transmitter Register will
If the user does not read the character in the Receiver be loaded during the transmission of the start bit. If
Buffer before the next character is received and CTS is high at the end of a character, TRE will remain
transferred to this register, then the OE bit is set. The
high and no character will be loaded into the
OE flag is set during the reception of the first stop bit
Transmitter Register until CTS goes low. If the
and is cleared when the Status Register is read or when
transmitter was inactive before a character is loaded
a hardware or software reset occurs. The first
into the Transmitter Buffer, the Transmitter Register
character received in this case will be lost.
will be empty temporarily while the buffer is full.
However, the data in the buffer will be transferred to
PE - Parity Error
the transmitter register immediately and TRE will be
This bit indicates that a parity error has occurred dur- cleared while TBE is set.
ing the reception of a character. A parity error is pres-
ent if value of the parity bit in the received character TBE - Transmitter Buffer Empty
is different from the one expected according to com- TBE indicates the Transmitter Buffer is empty and is
mand word 2 bits 6 EP. The parity bit is expected and ready to accept a character. TBE is set by a chip reset
checked only if it is enabled by command word 2 bit 7 or the transfer of data to the Transmitter Register,
PEN. and is cleared when a character is written to the
transmitter buffer. When TBE is set, an interrupt re-
A parity error is set during the first stop bit and is reset quest is generated on Level 5 if enabled.
by reading the Status Register or by a chip reset.
RBF - Receiver Buffer Full
BD - Break/Break·ln
RBF is set when the Receiver Buffer has been loaded
The BD bit flags whether a break character has been with a new character during the sampling of the first
received, or a Break-In condition exists on the stop bit. RBF is cleared by reading the receiver buffer
transmission line. Command Register I Bit 3 (BRKI) or by a chip reset.
enables the Break-In Detect function.
INT - Interrupt Pending
Whenever a break character has been received, Status
Register Bit 3 will be set and in addition an interrupt The INT bit reflects the state of the INT Pin (Pin 15)
request on Level 4 is generated. The receiver will be and indicates an interrupt is pending. It is reset by
idled. It will be started again with the next high-to-Iow INTA or by reading the Interrupt Address Register if
transition at pin RxD. only one interrupt is pending and by a chip reset.
FE, OE, PE, RBF, and Break Detect all generate a
Level 4 interrupt when the receiver samples the first RS4 RS~ RS2 RS1 RSC Point of time between
stop bit. TRE, TBE, and Break-In Detect generate a start of bit and end of
Level 5 interrupt. TRE generates an interrupt when bit measured in steps of
TBE is set and the Transmitter Register finished 1/32 bit length
transmitting. The Break-In Detect interrupt is issued
0 I I 1 1 1 (Start of Bit)
at the same time as TBE or TRE.
0 1 1 1 0 2
0 1 1 0 1 3
0 1 1 0 0 4
0 1 0 1 1 5
0 1 0 1 0 6
0 1 0 0 1 7
0 1 0 0 0 8
0 0 1 1 1 9
0 0 1 1 0 10
DSC disables the receiver's start bit check. In this state
the receiver will not be reset if RxD is not low at the 0 0 1 0 1 11
center of the start bit. 0 0 1 0 0 12
0 0 0 1 1 13
TME - Transmission Mode Enable 0 0 0 1 0 14
TME enables transmission mode and disables framing 0 0 0 0 1 15
error detection. For information on transmission 0 0 0 0 0 16 (Bit center)
mode see the description of the framing error bit in the 1 1 1 1 1 17
Status Register. 1 1 1 1 0 18
1 1 1 0 1 19
RSO, RS1, RS2, RS3, RS4 - Receiver Sample 1 1 1 20
0 0
Time
1 1 0 1 1 21
The number in RSn alters when the receiver samples 1 1 0 1 0 22
RxD. The receiver sample time can be modified only if 1 1 0 0 1 23
the receiver is not clocked by RxC. 1 1 0 0 0 24
1 0 1 1 1 25
Note: 1 0 1 1 0 26
The modification register cannot be read. Reading from ad-
1 0 1 0 1 27
dress OFH, 8086: lEH gates the contents of the status register
onto the data bus. 1 0 1 0 0 28
1 0 0 1 1 29
1 0 0 1 0 30
- A hardware reset (reset, Pin 12) resets all modifica- 1 0 0 0 1 31
tion register bits to 0, i.e.: 1 0 0 0 0 32 (End of Bit)
* The start bit check is enabled.
* Status Register Bit 0 (FE) indicates framing error.
* The sampling time of the serial receiver is the bit
center. 1) Command registers I, 2 and 3, mode register, Port
1 control register, and modification register are
A software reset (Command Word 3, RST) does not reset. Thus, all bits of the parallel interface are set
affect the modification register. to be inputs and event counters/timers are con-
figured as independent 8-bit timers.
PROGRAMMING
Initialization
Reset has no effect on the contents of receiver buffer In general the MUART's functions are independent of
register, transmitter buffer register, the intermediate each other and only the registers and bits associated
latches of parallel ports, and event counters/timers, with a particular function need to be initialized, not
respectively. the entire chip. The command sequence is arbitrary
since every register is directly addressable; however,
Command Word I must be loaded first. To put the
device into a fully operational condition, it is
necessary to write the following commands:
This section describes the hardware interface between
the 8256 MUART and the 8085, 8086, 8088, and 80186 Command byte I
microprocesors. Figures 14 through 19 display the Command byte 2
block diagrams for these interfaces. The MUART can Command byte 3
be interfaced to many other microprocessors using Mode byte
these basic principles. Port I control
Set Interrupts
In all cases the 8256 will be connected directly to the
The modification register may be loaded if required
CPU's multiplexed address/data bus. If latches or
for special applications; normally this operation is not
data bus buffers are used in a system, the MUART
necessary. It is a good idea to reset the part before in-
should be on the microprocessor side of the ad-
itialization. (Either a hardware or a software reset will
dress/data bus. The MUART latches the address in-
do.)
ternally on the falling edge of ALE. The address con-
sists of Chip Select (CS) and four address lines. For
8-bit microprocessors, ADO-AD3 are the "ddress Operating the Serial Interface
lines. For 16-bit microprocessors, ADI-AD4 are the The microprocessor transfers data to the serial inter-
address lines; ADO is used as a second chip select face by writing bytes to the Transmit Buffer Register.
which is active low. Since chip select is internally lat- Receive characters are transferred by reading the
ched along with the address, it does not have to re- Receiver Buffer Register. The Status Register provides
main active during the entire instruction cycle. As long all of the necessary information to operate the serial
as the chip select setup and hold times are met, it can I/O, including when to write to the Transmit Buffer,
be derived from multiplexed address/data lines or and when to read the Receive Buffer and error infor-
multiplexed address/status lines. mation.
]n Figure 15, the 8088 min mode, the 8205 chip select Transmitting
decoder is connected to the 8088's address bus lines The transmitter and the receiver may be operated by
A8-AI5. These address lines are stable throughout the using either polling or interrupts. If polling is used
entire instruction cycle. However, the MUART's chip then the software may poll the Status Register and
select signal could have been derived from AI6/S3- write a byte to the Transmit Buffer whenever TBE = I.
AI9/S6. Writing a byte to the Transmit Buffer clears the TBE
inter
a:
o
~ 10 M
a:
.•
o
o
} 5erialliO
status bit. If the CTS pin is low, then the Transmit byte must be written to the Transmit Buffer. After the
Buffer will transfer the data to the Transmit Register first byte has been written to the Transmit Buffer, a
when it becomes empty. When this transfer takes transmit interrupt request will occur, providing the
place the TRE bit is reset, and the TBE bit is set in- transmitter is enabled.
dicating the next byte may be written to the Transmit
Buffer. If ffi is high, disabling the transmitter, the There are three sources of transmitter interrupt re-
data byte will remain in the Transmit Buffer and TBE quests: TBE=I, TRE=I, and Break-In Detect.
will remain low until CTS goes low. The transmitter Assuming the Break-In Detect feature is disabled,
can only buffer one byte if it is disabled. after the transmit interrupt is enabled and the first
There is no way of knowing that the transmitter is byte is written, a transmit interrupt request will be
generated by TBE going active. The microprocessor
disabled unless the CTS signal is fed into one of the
I/O ports. Using the transmitter interrupt will free up can immediately write a byte to the Transmit Buffer
without reading any status. However if Break-In
the CPU to perform other functions while the
Detect is enabled, the Status Register must be read to
transmitter is disabled or while the Transmit Buffer is
determine whether the transmit interrupt request was
full.
generated by Break-In Detect or TBE.
To enable the transmit interrupt feature Bit L5 in the
Set Interrupt Register must be set. An interrupt re- The TRE interrupt request can be used to indicate
quest will not occur immediately after this bit has been when the transmitter has completely sent ail of the
set. Before any transmit interrupt request will occur a data. For example, using half-duplex communica-
intel
A.-Au AD DR
CLK AD,·AD,
PORT 2
MN/MX AlJO.AD4
DS-D7
AbS
RD
WR
READY 101M
INTR
8088 INTA INTA
8284A INTR
CLK A,JS3·A,,lS6 RESET
WR
READY AD
R3 ALE
CLK
tions, all of the data written to the MUART must be occurs the Receive Buffer may be read, but the status
transmitted before the line can be turned around. register should also be read since the receive interrupt
After the last byte is written, an interrupt request will could have been generated by the Break Detect. Also,
be generated by TBE. If this interrupt is acknowl- reading the status register will indicate whether there
edged without writing another byte, then the next were any errors in the received character.
transmitter interrupt request, TRE = I, will indicate
that the transmitter is empty and the line may be
turned around.
Data can be transferred to or read from Port 1 and
Port 2 by using the appropriate write and read opera-
Valid data may be read from the Receive Buffer tions.
whenever the RBF bit in the Status Register is set.
Reading the Receive Buffer resets the RBF status bit.
The RBF bit in the Status Register can be used for
polling. When the RBF bit is set, the three receive Writing to the ports transfers the data present on the
status bits, PE, OE, and FE are updated. These three data bus into the output latches. This operation is in-
status bits are reset when they are read. Therefore dependent of the programmed I/O characteristics of
when the status register is read with RBF set, the three the individual port pins. Writing to control or input
error status bit should be tested too. ports has no effect on the state of the pins. Pins de-
fined as outputs immediately assume the state which is
If interrupts are used for serial receive data, the associated with the transferred data. If inputs or con-
receiver must be enabled by setting the RxE bit in trol pins are reprogrammed into outputs, they assume
Command Register 3, and Bit L4 must be set in the Set the states stored in their output latches which were
Interrupt Register. When the receive interrupt request transferred by the most recent port write operation.
intel
8284
CLOCK
GENERATOR
RES
----,
I
I
I
ADD'AD"
A,,-A.. ADDRIDATA
BHE II
II
I:IL-!L---i:
II
r-----'
~OE 8286 I
I TRANS I
(16) CEIVER I I
: (2) I I
I II
L. JJ
OPTIONAL
FOR INCREASED
DATA BUS DRIVE
BHE A, CHARACTERISTICS
0 0 WHOLE WORD
0 1 UPPER BYTE FROMITO ODD ADDRESS
1 0 LOWER BYTE FROMITO EVEN ADDRESS
1 1 NONE
EVEN ADDRESS
BYTE PERIPHERALS
UO MArPED
intel
~
Serial I/O
ADo·ADn
A ••·A ••
BHE
~
SERIAL 110
RESET
Rii
WR
INTO
INTAO
ALE
~
SERIAL 110
Therefore, it is necessary to repeat the whole reading once if The Line Printer Multiplexer allows up to eight
the value of the least significant event counter/timer is OFFH. workstations to share one printer. The workstations
Doing this will avoid working with a wrong value (correct transmit serial asynchronous data to the LPM. The
value + 255). LPM receives the serial data, buffers it, then transmits
it to the line printer using a two-wire byte handshake The buffer size on the LPM was chosen to comple-
Dataproducts interface. A conceptual diagram of this ment the disk access time on the workstations. Figure
system is shown in Figure 20. Note that only one 21 illustrates the buffer size calculation. The line
workstation can transmit at a time. This workstation printer can print up to 300 lines per minute, or ap-
will transmit its entire file before another workstation proximately 660 characters per second. This cor-
will be allowed to transmit. responds to a serial transmission rate of 6,600bps
(assuming ASCII character codes and a parity bit) as
shown in equation I.
The LPM sequentially polls each of the eight RS-232
ports for a Request To Send .@:IS). When it finds a
(I) Serial bit rate = (300 lines/min)'(132 char/line)'(10 hits/char)
serial port which has asserted RTS, it configures itself
for the line printer (60 see/min)
for the appropriate data format and bit rate,
establishes the connection and sends back to the serial
The bottleneck in this data transfer is the line printer
port a Clear To Send (CTS) which enables transmis-
since the MUART and the workstations can both
sion. The LPM receives the serial asynchronous data,
transmit and receive at 19.2Kbps. To realize the max-
buffers it in a software FIFO, and transmits the data
imum data transfer rate of this system the LPM must
to the line printer. If the LPM detects an error in any
guarantee that the average transfer rate to the line
of the serial characters it receives, it transmits an error
printer is 660 characters per second. The maximum
message to the serial port and ignores the bad
amount of dead time that the serial port on the
character. If the LPM does not receive a serial
workstation is not transmitting, multiplied by 660 is
character after 18 seconds, it assumes that the
the number of bytes which the LPM should buffer. It
transmission is complete. It transmits the final status
to the serial port, and returns to scanning. was determined through experimentation that it takes
about 3 seconds to load 40K bytes of data from the
disk into the workstation's RAM. During these 3
This LPM was designed to be used with single-user seconds no serial data is being sent; therefore the buf-
workstations and a 300 lines per minute line printer. fer size on the LPM should be 2K bytes. (Note: even
These workstations are not multitasking; therefore in though only a 2K byte FIFO is required, this design
the middle of a file transfer when the CPU needs to used an 8 Kbyte FIFO.)
reload its buffer from the disk, no serial data is
transmitted. During this time the LPM is emptying its To keep the LPM's buffer full the serial data rate must
FIFO; thus, the line printer never stops printing. be greater than 6.6Kbps. The two bit rates which the
inteJ
9.600 BPS
OR
LPM
660 CHAR/SEC= @
Ii
19.200 BPS 6,600 BPS
t----
Ll La
a a 8·BIT
a 1 7
1 a 6
a a 5
LOWER NIBBLE
~
BAUD RATE SELECT
B3 B2 Bl BO illT RATE
o 0 0 0 DO NOT USE
o 0 0 1 DO NOT USE
o 0 1 0 DO NOT USE
o 0 1 1 19200
01009600
01014800
01102400
o 1 1 1 1200
1000600
1001300
1010200
1 0 1 1 150
1 1 0 0 110
1 1 0 1 100
1 1 1 0 75
1 1 1 1 50
workstations use are 9.6Kbps and 19.2Kbps. The CTS When a serial port receives an ASCII ESC character
signal is used to control the flow of the serial data so (IBH), it puts that port in the program mode. The
that the LPM buffer will not overflow. next two bytes will program these three parameters.
Only the lower nibbles of these two bytes are used,
Each serial port on the LPM can have a different bit and the upper nibbles are discarded. The format of
rate, character length, and parity format. These these programming words is given in Figure 22. If the
parameters are programmable through the serial port. word following the ESC is an ASCII NUL (0), the
When the LPM powers up, or is reset, it expects a bit LPM will exit from the programming mode and not
rate of 9600 bps, 7 bit characters, and odd parity. change any of its parameters.
intel
Description of the Hardware full. Parallel Port 2 and two bits from Port I are con-
nected to the line printer implementing a two-wire
Figure 23 shows a block diagram of the LPM. In addi-
byte handshake transfer. These signals are passed
tion to the standard components of most
through a line driver so that they can reliably drive a
microprocessor systems such as CPU, RAM, and
long cable.
ROM this particular design requires a UART, timers,
parallel I/O and an interrupt controller. The MUART
is the ideal choice for this design since it integrates There are three timing functions needed for the LPM:
these four functions onto one device. a scan timer, a debounce timer, and a recieve timeout.
The Scan timer determines the amount of time spent
The eight serial I/O ports use four signals: Transmit sampling RTS on each port before the next port is ad-
Data (TxD), Receive Data (RxD), Request To Send dressed. By using one of the MUART's timers to do
(RTS), and Clear To Send (CTS). These four signals, this function, the CPU is free to perform other func-
controlled by the MUART, are connected to one port tions instead of implementing the timer in software. If
at a time using TTL multiplexers. The TTL multiplex- RTS is recognized as true, the CPU branches into a
ers are interfaced to RS-232 transceivers to be elec- debounce procedure. This procedure uses another one
trically compatible with the RS-232 spec. The serial of the MUART's timers to wait lO msec then sample
port select address is derived from three bits of the RTS again, thus preventing any glitches from register-
MUART's parallel I/O port (Port I). Two more bits ing as a false RTS. The receive timeout timer uses two
from Port I control CTS and RTS, and another bit S-bit timers in the cascaded mode to measure an
lights up an LED to indicate when the LPM's buffer is IS-second interval. After a valid RTS is recognized,
r---------- ----------l
I I
I I
I I
I I
I I
I I
I I
L ~2~
the LPM sends back a CTS and initializes the receive registers occupy even addresses from 0 to IEH. Using
timeout timer for 18 seconds. Each time a character is an 8088 CPU the MUART must be placed in the 8086
received by the LPM, this timer is reinitialized. If this mode since the INTA signal is used; hence the register
timer times out, the LPM considers the transmission addresses are all even numbers.
complete and returns to scanning.
The line printer used provides a choice of two stan-
The schematic diagram of the LPM is shown in Figure dard parallel interfaces: Centronics or Dataproducts.
24. The CPU is an 8088 used in the min mode. It is in- The Centronics interface uses a two-wire handshake
terfaced directly to the 8256. An 8282 latch is pulsed strobe where the transmitter asserts a complete
employed in the system so that nonmultiplexed bus strobe pulse before an acknowledge is received. The
memory can be used. A 2716 holds the entire pro- Dataproducts interface is an interlocking two-wire
gram, and six 2016s (2K x 8 static RAMs) are used to handshake. The Dataproducts interface was chosen
store the buffer, temporary data, stack area, and in- since it is directly compatible with the MUART's
terrupt vector table. The 2716 is located in the upper two-wire byte handshake. The MUART could also be
2K of the 8088 address space (FF8oo-FFFFFH) so that connected to the Centronics interface; however, addi-
the reset vectors can be stored starting at location tional hardware would be necessary to generate the
FFFFOH. The RAM address space spans 0-2FFFH so pulsed strobe for correct interrupt operation. Figure
that the interrupt vector tab'le can be stored starting at 25 shows the timing of the Dataproducts interface and
location O. The MUART is I/O mapped and its Table 6 lists the connector pin configuration.
Table 6. Dataproducts Interlace Line Functions
$'(STEM
RESET
-l
r
TYPICAL
0••
2K.a
STATIC
RAMS,
2OHI(A)
THRU
201.fl
TO 2121(0)
TO 2121(C)
TO 2128(11)
infel
~~~
. ,,
""
"
+,"
,,
~ER~L
So- 6 74lS251
I
~I-hi I m.
== too""3- h , ""
I-h
rn •
toD 2
0", ~
At.
~H~
3 '20~
l'g
'-'c >h
¢." ,n ~
g~~A4\12~ ~ 12
inter
~l
1
I~
,
~ r-- 50 N~EC MIN
__________
DATA STROBE i ~1,L/
V
\~--
Only ten signals are used to interface the LPM to the connected above are interrupt procedures. They are
line printer: Data Request, Data Strobe, and the eight entered when the MUART interrupts the CPU and
data lines. The most significant data line is not used vectors an indirect address to it.
since the character code is 7-bit ASCII. Data Strobe
The LPM program uses nested interrupts; the priority
connects to OBF on the MUART; however, for the
Dataproducts interface this signal must be inverted. of the interrupt procedures is given in Table 7.
Data Request is connected to ACK on the MUART. Table 7. Line Printer Multiplexers' Interrupt
When the line printer is ready to accept data, the Data Priority
Request signal goes high. The 8256 will not interrupt
Priority Source
the CPU to transmit parallel data unless this signal is
high. Debounce timer
Not Used
The Dataproducts interface is slightly different from Not Used
the MUART's two-wire handshake in that it latches Receive timer
the data on the leading edge of the strobe signal. RxD Interrupt
When the MUART receives bytes it latches the data on TxD Interrupt
the trailing edge. As a result the Dataproducts inter- Scan timer
face has a 50 nsec setup time for data stable to the LP Interrupt
leading edge of Data Strobe. In the LPM hardware a
The priority of the interrupts is not programmable but
delay line was used to realize this setup time.
they are logically oriented so that for this application
the priority is correct. In the steady state of the LPM's
operation the UART will be receiving data, and the
The software is written in PL/M and is broken up into parallel port will be transmitting data. The serial
four separate modules, each containing several pro- receiver should be the highest priority since it can have
cedures. A block diagram of the software structure is overrun errors. This is the case because the debounce
given in Figure 26. The modules are identified by the timer will be disabled, and the receive timeout inter-
dotted boxes, and the procedures are identified by the rupt will only occur when serial reception has ended.
solid boxes. Two or more procedures connected by a Therefore the RxD request can interrupt any other ser-
solid line means the procedure above calls the pro- vice routine, thus preventing any possibility of an
cedure below. The procedures without any solid lines overrun error.
rM;IN-=-';O;
I
- ~c':- - - - - i I
- --, J
I
I
I I
I POWERSON I I
L J I
I I
L J
--------------- ---,
I
I
~ I
-------------'
-------.,
I
I
_____ ...JI
On power-up the CPU branches from OFFFFOH to servicing any interrupts which may occur. When the
the INITCODE routine which is included in the appropriate timer interrupt occurs, the interrupt ser-
machine code by the MDS locater utility. INITCODE vice routine will set the global flag which causes the
initializes the SOSS's segment registers, stack pointer, CPU to exit the loop and proceed to the next section
and instruction pointer, then it disabled interrupts and of code. An example can be seen from the scan flow
jumps into MAIN_MOD. The first executable in- chart in Figure 27.
struction in MAIN~OD calls POWER$ON, which
The first thing the program does before entering the
initializes the MUART, flags, variables, and arrays.
loop is set the flag (in this case SCAN$DELAY)
The MAIN~OD calls LOAD$INT$TABLE, which
TRUE. The timer is initialized and the loop is entered.
initializes the interrupt vector table. The CPU's inter-
As long as SCAN$DELA Y is TRUE the CPU will
rupt is then enabled and the program enters into a DO
continue to sample RTS. If RTS remains false for
FOREVER loop which scans the eight serial ports for
more than 100 msec, the timer interrupts the CPU and
an RTS.
the interrupt service routine sets SCAN$DELAY
There are three software functions which employ the FALSE. This causes the CPU to exit the loop and ad-
MUART's timers and interrupt controller to measure dress the next port. The process is then repeated. If
time intervals: SCAN, debounce, and INIT- RTS becomes true while it is being sampled, the DE-
$RECEIVER. DEBOUNCE and INIT$RECEIVER BOUNCE procedure is called.
procedures, employ the MUART's timers and inter- DEBOUNCE does nothing more than wait 10 msec
rupt controller to measure time intervals. The CPU re- and sample RTS again using the same technique
mains in a loop for a specific amount of time before it discussed above. If RTS is still valid IN-
proceeds with the next section of code. In this loop the IT$RECEIVER is called, otherwise the CPU returns
CPU is waiting for a global status flag to change while to scan.
Figure 27. Scan Flow Chart
INIT$RECEIVER calls CONFIGURE which pro- are any errors in the received character, an ERROR
grams the MUART for the bit rate, number of bits in a procedure is called which reports back to the serial
character, and parity format. This information is port what the error condition was. The character in er-
stored in an array called SERIAL$FORMAT, which ror is discarded and the routine returns. The other
contains a byte for each port. The bytes in the
condition is that if the received character is an ASCII
SERIAL$FORMAT array have the same bit definition
ESC, the PROGRAM procedure is called. If neither
as the two nibbles in the programming words in Figure
one of these conditions occurs, the character is placed
22. Upon returning to INIT$RECEIVER the receiver
in the FIFO by the BUFF$IN procedure.
is enabled, the receive timeout timer is initialized. and
the timer and receiver interrupts are enabled. CTS on
the serial port is then set true, and the CPU enters a The LP interrupt routine is entered when the byte
loop which does nothing except wait for 18 seconds. If handshake interrupt request is acknowledged. This
no characters are received within 18 seconds, the routine simply calls the BUFF$OUT procedure, which
receive timeout interrupt occurs and the loop flag is extracts a byte out of the FIFO. BUFF$OUT returns
set false, which causes the CPU to exit the loop. If a the byte to the LP interrupt procedure, which then
character is received, a receive interrupt occurs, and writes it to Port 2. One small problem with getting the
the CPU vectors into the RxD interrupt service handshake interrupt going is that the first byte has to
routine. be written to Port 2 before the first handshake inter-
rupt will occur. The problem is that the line printer
may not be ready for the first byte. This would be in-
Figure 28 shows a flow chart of the RxD interrupt ser- dicated by DATA REQUEST being low. If the byte
vice routine. This routine begins by reading the receive was written to the LP while DATA REQUEST is low,
buffer and reinitializing the receive timeout timer. it would be lost. Note that if the handshake interrupt
There are two conditions to check for before the is enabled while DATA REQUEST is low, then DATA
character can be inserted into the FIFO. First, if there REQUEST goes high, the interrupt will occur without
inter
writing the first byte. There are several ways to solve by the LP interrupt routine, the byte in the array
this problem. Port I can be read to find out what'the pointed to by OUT$POINTER is read.
state of the DATA REQUEST line is. If DATA RE- OUT$POINTER is incremented, and the byte which
QUEST is low, the CPU can simply wait for the inter- was read is passed back to the LP interrupt routine.
rupt without writing the first byte. If DATA RE- Since IN$POINTER and OUT$POINTER are always
QUEST is high, then the first data byte may be writ- incremented, they must be able to roll over when they
ten. Another solution would be to write a NUL hit the top of the 8K byte address space. This is done
character as the first byte to Port 2. If DATA by clearing the upper three bits of each pointer after it
REQUEST is low, then a worthless character is lost. If is incremented.
DATA REQUEST is high, the NUL character would
be sent to the line printer; however, it is not printed IN$POINTER and OUT$PONTER not only point to
since NUL is a nonprintable character. The LPM pro- the locations in the FIFO, they also indicate how
gram uses the NUL character solution. many bytes are in the FIFO and whether the FIFO is
full or empty. When a character is placed into the
FIFO and IN$POINTER is incremented, the FIFO is
full if IN$POINTER equals OUT$POINTER. When
The FIFO implementation uses an 8K byte array to
a character is read from the FIFO and OUT$-
store the characters. There are two pointers used as in-
POINTER is incremented, the FIFO is empty if
dexes in the array to address the characters:
OUT$POINTER equals IN$POINTER. If the buffer
IN$POINTER and OUT$POINTER. IN$POINTER
is neither full nor empty, then it is in use. A byte called
points to the location in the array which will store the
BUFFER$STATUS is used to indicate one of these
next byte of data inserted. OUT$POINTER points to three conditions.
the next byte of data which will.be removed from the
array. Both IN$POINTER and OUT$POINTER are
The software uses the buffer status information to
declared as words. Figure 29 illustrates the FIFO in a
control the flow into and out of the FIFO. When the
block diagram.
FIFO is empty the handshake interrupt must be turned
The BUFF$IN procedure receives a byte from the off. When the FIFO is full, CTS must be sent false so
RxD interrupt routine and stores it in the array loca- that no more data will be received. If the buffer status
tion pointed to by IN$POINTER, then IN$POINTER is in use, CTS is true and the handshake interrupt is
is incremented. Similarly, when BUFF$OUT is called enabled.
APPENDIX A
LISTING OF THE LINE PRINTER
MULTIPLEXER SOFTWARE
inter
/**************************~*************************************************
*
MAIN MODULE FOR THE LINE PRINTER MULTIPLEXER
*************************************.**************************************1
.
•
*
1****************************************************************************
* PORT 1 BIT CONFIGURATION *
** BUFFER FULL CTS ADDRESS RTS TWO WIRE HANDSHAKE
**
* B7 B6 B5 B4 B3 B2 Bi BO *
*****************************************************************************1
TEMP BYTE.
SCAN$DELAY BYTE PUBLIC,
DEBDUNCE$DELAY BYTE PUBLIC.
RECEIVE$DELAY BYTE PUBLIC.
PDRT$PTR BYTE PUBLIC.
SERIAL$FDRMAT(S)BYTE PUBLIC. 1* PEN EP LI LO B3 B2 BI BO *1
1******************************************** •• ***********************
* EXTERNAL PROCEDURE DECLARATIONS *
*********************************************************************1
1*********************************************************************
* SET THE BIT RATE AND DATA FORMAT FOR THE SERIAL PORT *
*********************************************************************1
1*********************************************************************
* INITIALIZE SERIAL RECEIVER *
*********************************************************************1
12 I INIT$RECEIVER· PROCEDURE;
13 2 CALL CONFIGURE.
14 2 RECEIVE$DELAY=TRUE;
15 2 OUTPUT(CMD$3)=OCOH, I*Enable serlal receiver*1
16 2 OUTPUT(RECEIVE$TIMER)=70, 1*18 second TIMESOUT*I
17 2 OUTPUT(SET$INT)=lSH; I*Enable RECEIVER and TIME$OUT lnterrupts*1
IS 2 IF (BUFFER$STATUS<>FULL)
THEN
19 2 OUTPUT<PORTS1)=<INPUT<PORT$1) AND OBFH); I_Send CTS
20 2
21 3
22 2 OUTPUT(SET$INT)=TRANSMIT$INT,
23 2 J=O.
24 2 MESSAGE$PTR= @DKCO),
25 2 CAUSE$INTERRUPT C45H);
inter
1*********************************************************************
* DEB OUNCE RTS *
*********************************************************************1
DEBOUNCE, PROCEDURE;
DEBOUNCESDELAY=TRUE,
OUTPUT(DEBOUNCESTIMER)=10. 1* 10 msec deb ounce time delay *1
OUTPUT(SETSINT)=DEBOUNCESINT;
DO WHILE DEBOUNCESDELAY=TRUE;
END;
IF RTS~O THEN CALL INITSRECEIVER;
END DEBOUNCE;
1*********************************************************************
* BEGIN MAIN PROGRAM *
*********************************************************************1
39
40
41
42
43 2 SCANSDELAY=TRUE,
44 2 OUTPUT<SCANSTIMER)=100i I*Spend 100 msec on e~ch serlal port sampling RT5*1
45 2 OUTPUT(SETSINT)=SCANSINT,
46 2 DO WHILE SCANSDELAY=TRUE;
47 3 IF RTS=O
THEN
48 3 CALL DEBOUNCE;
49 3
1*********************************************************************
MESSAGES SENr TO SERIAL PORTS *
*********************************************************************1
1*********************************************************************
* EXTERNAL PROCEDURES CALLED BY THE INTERRUPT ROUTINES *
*********************************************************************1
4 1 ERROR; PROCEDURE (STATUS> EXTERNAL,
S 2 DECLARE STATUS BYTE;
6 2 END ERROR;
1*****************************************4**4************.***********
• LOAD THE INTERRUPT TABLE *
*****************************************************************-***1
inter
21 2 END LOAD$INT$TABLE,
1*********************************************************************
* INTERRUPT ROUTINES *
*********************************************************************1
1*********************************************************************
* SET SCAN DELAY FLAG FALSE *
*********************************************************************1
ENABLE,
SCAN$DELAY=FALSE,
OUTPUT(CMD$3,=88H,
END SCAN$TIME,
1*********************************************************************
* SET DEBOUNCE DELAY FLAG FALSE *
*********************************************************************1
DEBOUNCE$TIME.PROCEDURE INTERRUPT 40H,
DEBOUNCE$DELAY=FALSE,
OUTPUT(CMD$3)=88H,
END DEBOUNCE$TIME,
1*********************************************************************
* SET RECEIVE DELAY FLAG FALSE *
*********************************************************************1
1*********************************************************************
* READ SERIAL RECEIVE BUFFER *
*********************************************************************1
STATUS BYTE,
CHAR BYTE,
CHAR=INPUT(RX$BUFFl,
OUTPUT(RECEIVE$TIMER,=70, /* REINITIALIZE RECEIVE TIME OUT 0/
STATUS=Ir;PUT(STATtJS$REGl AND OFH,
inter
41 2 IF STATUS<>O
rHEN
42 2 CALL ERROR (STATUS),
43 2 ELSE IF CHAR=ESC
THEN
44 2 CALL PRClGRAI'1i
ELSE
45 2 CALL BUFF$IN (CHAR) i
46 2 oUTPUT(CMD$3)=88H.
47 2 END RXD.
1*********************************************************************
* SEND A BYTE TO THE LINE PRINTER *
*********************************************************************1
LP:PROCEDURE INTERRUPT 47H;
ENABLE.
OUTPUT(PORTS2)=BUFFSOUT;
oUTPUT(CMD$3)=88H.
END LP.
1*********************************************************************
* SEND A BYTE TO THE SERIAL PORTS
**************-******************************************************1
53 I
54 2
55 2 ENABLE.
56 2 I=MESSAGE (J ) ,
57 2 IF 1<>0
THEN oUTPUT(TX$BUFF)=I.
59 2 ELSE oUTPUT(RST$INT)=TRANSMIT$INT.
60 2 J=J+li
61 2 OUTPUTCCMOS3)=88H,
62 2 END TXD.
63
1*********************************************************************
FIFol8l92) BYTE.
IN$POINTER WORD PUBLIC,
oUT$PoINTER WORD PUBLIC,
BUFFER$STATUS BYTE PUBLIC;
1*********************************************************************
* INSERT CHARACTER INTO FIFO *
*************************************************_*******************1
1*********************************************************************
* REMOVE CHARACTER FROM FIFO *
*********************************************************************1
20 ! BUFF$OUT:PROCEDURE BYTE PUBLIC,
2! 2 DECLARE CHAR BYTE,
22 2 CHAR=FIFO(OUT$POINTER),
23 2 OUT$POINTER=«OUT$POINTER+!1 AND !FFFH),
24 2 IF OUT$POINTER=IN$POINTER 1* If the buffer i. EMPTY di.able the output to LP *1
THEN
25 2 DO,
26 3 DISABLE,
27 3 BUFFER$STATUS=EMPTY,
28 3 OUTPUT(RST$INT)=HANDSHAKE$INT,
29 3 ENABLE,
30 3 END,
37 2
/***********************************~********************************
* SEND ERROR MESSAGE TO SERIAL PORT *
*********************************************************************1
38 ! ERROR: PROCEDURE (STATUS) PUBLIC'
39 2 DECLARE STATUS BYTE.
MESSAGE BASED MESSAGE$PTR(!) BYTE'
40 2 IF (STATUS AND 02HI>0
THEN
4! 2 STATUS=2,
42 2 ELSE IF (STATUS AND 04HI>0
THEN
43 2 STATUS=3,
44 2 ELSE IF (STATUS AND 08H»0
THEN
45 2 STATUS=4,
46 2 ELSE IF (STATUS AND O!HI>O
THEN
47 2 STATUS=!,
DO CASE STATUS,
49 3
50 3 MESSAGE$PTR=@FRAME(O),
MESSAGE$PTR=@OVER$RUN(O);
MESSAGE$PTR=@PARITY(O);
MESSAGE$PTR=@BREAK(O)i
END;
1*********************************************************************
* RELOAD SERIAL PORT CONFIGURE BYTE *
*********************************************************************1
~9 1 PROGRAM: PROCEDURE PUBLIC;
60 2 DECLARE TEMP BYTE,
CHAR BYTE;
61 2
62 ::I
63 :2
64 2 IF CHAR~O
THEN
65 2 DO;
66 3 OUTPUT(RECEIVE$TIMER)=70;
67 3 CALL BUFF$IN (CHAR);
68 3 RETURN;
69 3 END;
70 2
71 2
72 3
73 2
74 2
75 2
76
1***************************************************************************
** POWER ON INITIALIZATION OF THE LINE PRINTER MULTIPLEXER
*
*
*
*****************************************.*********************************1
*
5 2
6 2
13 :2
14 :2 BUFFER$STATUS=EMPTY;
15 2 INSPOINTER=O; OUTSPOINTER=O;
17 :2 PORT$PTR=O;
18 :2
inteJ
1*****************************-***************************************
"* WRITE PROGRAM: READS A FILE FROM A DISK AND COPIES "
* IT TO SERIAL CHANNEL 2 ON THE MOS. *
"" SYNTAX OF WRITE: WRITE :DEVICE: NAME EXTENSION "
"
"****************************************************************··****1 *
DECLARE LIT LITERALLY .L ITERALL Y '.
USART5DATA LIT 'OF6H'.
USART$STATUS LIT 'OF7H'.
RTS LIT '20H'.
TXEN LIT '01H'.
RXE LIT '04H',
CR LIT 'ODH' ,
LF LIT 'OAH '.
TAB LIT '09H'.
SP LIT '20H'.
ESC LIT , ISH',
FORMSFEED LIT 'OCH'.
1*********************************************************************
* "AIT UNTIL USART TRANSMITTER IS READY *
*********************************************************************1
PROCEDURE;
DO "HILE ( (INPUT(USART$STATUS) AND OIH)
END;
END TXRDY;
1*********************************************************************
* BEGIN MAIN PROGRAM *
*********************************************************************1
IF STATUS <> 0
THEN
GO TO DONE;
IF STATUS <> 0
THEN
GO TO DONE;
IF STATUS <> 0
THEN
GO TO DONE;
intel
43 2
44 2
45 3 CALL TXROY,
46 3 OUTPUT(USART$DATA)=SP;
47 3 CHAR$COUNT=CHAR$COUNT+I;
48 3 DO WHILE «CHAR$COUNT AND 0007H)<)0);
49 4 CALL TXRDY;
50 4 OUTPUT(USART$DATA)=SP;
51 4 CHAR$COUNT=CHAR$COUNT + I.
52 4
53 3
64 3 IF ( (BUFFER(I)=CR) OR (BUFFER(I)=LF) )
THEN 1* Reset CHARSCOUNT for CR or LF *1
65 3 CHAR$COUNT=O.
66 3
67 2
68 IF ACTUAL 32000 /*If the flle is more than 32K, get some more data *1
THEN
69 GO TO REPEAT;
70 CALL TXRDY, /. Termlnate flle unth CR, LF. and FF .,
71 OUTPUT(USART$DATAl=CR.
72 CALL TXRDY.
inter
73 OUTPUT<USARTSDATA)=LF.
74 CALL TXROY.
75 OUTPUTCUSART$OATA'=FORM$FEEO;
76
77
83
84
85
86
87
APPENDIX C
MUART REGISTERS
Timer Frequency Select
8086 Mode Enable
Interrupt on Bit Change
Break-in Detect Enable
Stop Bit Length
Character Bit Length
Command 3
Software Reset
Transmit Break
I I
Single Character Break
End of Interrupt
------------ Nested Interrupt Enable
Interrupt Acknowledge Enable
Receiver Enable
Bit Set/Reset
Port 2 Control
Counter/Timer 2
------------ Counter/Timer 3
Timer 5 Retriggerable
Cascade Counter/Timer 2&4
Cascade Counter/Timer 3&5
Disable Start Bit Check
Transmit Mode Enable
Receiver Sampling Point
intel~
Response to INTA
SOSS-Mode (RST-instruction in response to INTA)
o
------------
0 0 I 0 I D2I Dl rDOl
~
I. 8256 User's Manual, SIEMENS.
2. Application Note, AP-59: Using the 8259A
Programmable Interrupt Controller, Intel Corp.,
CA.
3. MCS-85 User's Manual, Intel Corp., CA.
4. iAPX 86,88 User's Manual, Intel Corp., CA.
5. Printronix 300 Applications Manual, Printronix,
CA.
6. High Integration LSI for Low Cost Asynchronous
Communications, By Charles Yager Professional
Program Session Record 13, Electro/82.
INTEL CORPORATION, 3065 Bowers Avenue, Santa Clara, CA 95051 (408) 987-8080