Microprocessor 8085 Microcontroller
Microprocessor 8085 Microcontroller
1
UNIT 1 INTRODUCTION TO MICROPROCESSORS
Introduction, 8085 Architecture, Pin Diagram and signals, Addressing Modes, Timing
Diagram, Memory read, Memory write, I/O cycle, Interrupts and its types, Introduction
to 8086 microprocessors and its operation.
History of microprocessor:-
The invention of the transistor in 1947 was a significant development in the world of technology. It could
perform the function of a large component used in a computer in the early years. Shockley, Brattain and
Bardeen are credited with this invention and were awarded the Nobel prize for the same. Soon it was found
that the function this large component was easily performed by a group of transistors arranged on a single
platform. This platform, known as the integrated chip (IC), turned out to be a very crucial achievement and
brought along a revolution in the use of computers. A person named Jack Kilby of Texas Instruments was
honored with the Nobel Prize for the invention of IC, which laid the foundation on which microprocessors
were developed. At the same time, Robert Noyce of Fairchild made a parallel development in IC technology
for which he was awarded the patent.
ICs proved beyond doubt that complex functions could be integrated on a single chip with a highly
developed speed and storage capacity. Both Fairchild and Texas Instruments began the manufacture of
commercial ICs in 1961. Later, complex developments in the IC led to the addition of more complex
functions on a single chip. The stage was set for a single controlling circuit for all the computer functions.
Finally, Intel corporation's Ted Hoff and Frederico Fagin were credited with the design of the first
microprocessor.
The work on this project began with an order from a Japanese calculator company Busicom to Intel, for
building some chips for it. Hoff felt that the design could integrate a number of functions on a single chip
making it feasible for providing the required functionality. This led to the design of Intel 4004, the world's
first microprocessor. The next in line was the 8 bit 8008 microprocessor. It was developed by Intel in 1972
to perform complex functions in harmony with the 4004.
This was the beginning of a new era in computer applications. The use of mainframes and huge computers
was scaled down to a much smaller device that was affordable to many. Earlier, their use was limited to
large organizations and universities. With the advent of microprocessors, the use of computers trickled
down to the common man. The next processor in line was Intel's 8080 with an 8 bit data bus and a 16 bit
address bus. This was amongst the most popular microprocessors of all time.
Very soon, the Motorola corporation developed its own 6800 in competition with the Intel's 8080. Fagin left
Intel and formed his own firm Zilog. It launched a new microprocessor Z80 in 1980 that was far superior
to the previous two versions. Similarly, a break off from Motorola prompted the design of 6502, a derivative
of the 6800. Such attempts continued with some modifications in the base structure.
The use of microprocessors was limited to task-based operations specifically required for company projects
such as the automobile sector. The concept of a 'personal computer' was still a distant dream for the world
and microprocessors were yet to come into personal use. The 16 bit microprocessors started becoming a
commercial sell-out in the 1980s with the first popular one being the TMS9900 of Texas Instruments.
Intel developed the 8086 which still serves as the base model for all latest advancements in the
microprocessor family. It was largely a complete processor integrating all the required features in it. 68000
by Motorola was one of the first microprocessors to develop the concept of microcoding in its instruction
set. They were further developed to 32 bit architectures. Similarly, many players like Zilog, IBM and Apple
were successful in getting their own products in the market. However, Intel had a commanding position in
the market right through the microprocessorers.
The 1990s saw a large scale application of microprocessors in the personal computer applications developed
by the newly formed Apple, IBM and Microsoft corporation. It witnessed a revolution in the use of
2
computers, which by then was a household entity.
This growth was complemented by a highly sophisticated development in the commercial use of
microprocessors. In 1993, Intel brought out its 'Pentium Processor' which is one of the most popular
processors in use till date. It was followed by a series of excellent processors of the Pentium family, leading
into the 21st century. The latest one in commercial use is the Pentium Dual Core technology and the Xeon
processor. They have opened up a whole new world of diverse applications. Supercomputers have become
common, owing to this amazing development in microprocessors.
A microprocessor is a programmable electronics chip that has computing and decision making capabilities
similar to central processing unit of a computer. Any microprocessor-based systems having limited number
of resources are called microcomputers. Nowadays, microprocessor can be seen in almost all types of
electronics devices like mobile phones, printers, washing machines etc. Microprocessors are also used in
advanced applications like radars, satellites and flights. Due to the rapid advancements in electronic
industry and large scale integration of devices results in a significant cost reduction and increase application
of microprocessors and their derivatives.
Word: A word refers to the basic data size or bit size that can be processed by the arithmetic and logic unit
of the processor. A 16-bit binary number is called a word in a 16-bit processor.
System Bus: The system bus is a group of wires/lines used for communication between the microprocessor
and peripherals.
Memory Word: The number of bits that can be stored in a register or memory element is called a memory
word.
3
Address Bus: It carries the address, which is a unique binary pattern used to identify a memory location or
an I/O port. For example, an eight bit address bus has eight lines and thus it can address 28 = 256 different
locations. The locations in hexadecimal format can be written as 00H – FFH.
Data Bus: The data bus is used to transfer data between memory and processor or between I/O device and
processor. For example, an 8-bit processor will generally have an 8-bit data bus and a 16-bit processor will
have 16-bit data bus.
Control Bus: The control bus carry control signals, which consists of signals for selection of memory or I/O
device from the given address, direction of data transfer and synchronization of data transfer in case of
slow devices.
A typical microprocessor consists of arithmetic and logic unit (ALU) in association with control unit to
process the instruction execution. Almost all the microprocessors are based on the principle of store-
program concept. In store-program concept, programs or instructions are sequentially stored in the
memory locations that are to be executed. To do any task using a microprocessor, it is to be programmed
by the user. So the programmer must have idea about its internal resources, features and supported
instructions. Each microprocessor has a set of instructions, a list which is provided by the microprocessor
manufacturer. The instruction set of a microprocessor is provided in two forms: binary machine code and
mnemonics.
Microprocessor communicates and operates in binary numbers 0 and 1. The set of instructions in the form
of binary patterns is called a machine language and it is difficult for us to understand. Therefore, the binary
patterns are given abbreviated names, called mnemonics, which forms the assembly language. The
conversion of assembly-level language into binary machine-level language is done by using an application
called assembler.
Technology Used:
Classification of Microprocessors:
• 4-bit microprocessor
• 8-bit microprocessor
• 16-bit microprocessor
• 32-bit microprocessor
Based on application:
• General-purpose microprocessor- used in general computer system and can be used by programmer for
any
application. Examples, 8085 to Intel Pentium.
• Microcontroller- microprocessor with built-in memory and ports and can be programmed for any generic
4
control
application. Example, 8051.
• Special-purpose processors- designed to handle special functions required for an application. Examples,
digital signal processors and application-specific integrated circuit (ASIC) chips.
Based on architecture:
The 8085 microprocessor is an 8-bit processor available as a 40-pin IC package and uses +5 V for power. It
can run at a maximum frequency of 3 MHz. Its data bus width is 8-bit and address bus width is 16-bit, thus
it can address 216 = 64 KB of memory. The internal architecture of 8085 is shown is Fig. 1.2.
The ALU performs the actual numerical and logical operations such as Addition (ADD), Subtraction
(SUB), AND, OR etc. It uses data from memory and from Accumulator to perform operations. The results
of the arithmetic and logical operations are stored in the accumulator.
Registers
The 8085 includes six registers, one accumulator and one flag register, as shown in Fig. 1.3. In addition, it
has two 16-bit registers: stack pointer and program counter. They are briefly described as follows.
5
The 8085 has six general-purpose registers to store 8-bit data; these are identified as B, C, D, E, H and L.
they can be combined as register pairs - BC, DE and HL to perform some 16-bit operations. The programmer
can use these registers to store or copy data into the register by using data copy instructions.
The accumulator is an 8-bit register that is a part of ALU. This register is used to store 8-bit data and to perform
arithmetic and logical operations. The result of an operation is stored in the accumulator. The accumulator is also
identified as register A.
Flag register
The ALU includes five flip-flops, which are set or reset after an operation according to data condition of the result in
the accumulator and other registers. They are called Zero (Z), Carry (CY), Sign (S), Parity (P) and Auxiliary Carry
(AC) flags. Their bit positions in the flag register are shown in Fig. 4. The microprocessor uses these flags to test data
conditions.
For example, after an addition of two numbers, if the result in the accumulator is larger than 8-bit, the flip-flop uses to
indicate a carry by setting CY flag to 1. When an arithmetic operation results in zero, Z flag is set to 1. The S flag is just
a copy of the bit D7 of the accumulator. A negative number has a 1 in bit D7 and a positive number has a 0 in 2’s
complement representation. The AC flag is set to 1, when a carry result from bit D3 and passes to bit D4. The P flag is
set to 1, when the result in accumulator contains even number of 1s.
6
This 16-bit register deals with sequencing the execution of instructions. This register is a memory pointer. The
microprocessor uses this register to sequence the execution of the instructions. The function of the program counter is
to point to the memory address from which the next byte is to be fetched. When a byte is being fetched, the program
counter is automatically incremented by one to point to the next memory location.
The stack pointer is also a 16-bit register, used as a memory pointer. It points to a memory location in R/W memory,
called stack. The beginning of the stack is defined by loading 16-bit address in the stack pointer.
Instruction Register/Decoder
It is an 8-bit register that temporarily stores the current instruction of a program. Latest instruction sent here from
memory prior to execution. Decoder then takes instruction and decodes or interprets the instruction. Decoded
instruction then passed to next stage.
Control Unit
Generates signals on data bus, address bus and control bus within microprocessor to carry out the instruction, which
has been decoded. Typical buses and their timing are described as follows:
• Data Bus: Data bus carries data in binary form between microprocessor and other external units such as
memory.
It is used to transmit data i.e. information, results of
arithmetic etc between memory and the microprocessor. Data bus is bidirectional in nature. The data bus width of 8085
microprocessor is 8-bit i.e. 28 combination of binary digits and are typically identified as D0 – D7. Thus
size of the data bus determines what arithmetic can be done. If only 8-bit wide then largest number is 11111111 (255 in
decimal). Therefore, larger numbers have to be broken down into chunks of 255. This slows
microprocessor.
• Address Bus: The address bus carries addresses and is one way bus from microprocessor to the memory or
other devices. 8085 microprocessor contain 16-bit address bus and are generally identified as A0 - A15. The higher
order address lines (A8 – A15) are unidirectional and the lower order lines (A0 – A7) are multiplexed (time-
shared) with the eight data bits (D0 – D7) and hence, they are bidirectional.
• Control Bus: Control bus are various lines which have specific functions for coordinating and controlling
microprocessor operations. The control bus carries control signals partly unidirectional and partly bidirectional.
The following control and status signals are used by 8085 processor:
I. ALE (output): Address Latch Enable is a pulse that is provided when an address appears on the
AD0 – AD7 lines, after which it becomes 0.
II. RD (active low output): The Read signal indicates that data are being read from the selected I/O or
memory device and that they are available on the data bus.
III. WR (active low output): The Write signal indicates that data on the data bus are to be written into
a selected memory or I/O location.
IV. IO/M (output): It is a signal that distinguished between a memory operation and an I/O operation.
When IO/M = 0 it is a memory operation and IO/M = 1 it is an I/O operation.
V. S1 and S0 (output): These are status signals used to specify the type of operation being performed;
they are listed in Table 1.1
7
Table 1.1: Status signals and associated operations
The schematic representation of the 8085 bus structure is as shown in Fig. 1.5. The microprocessor
performs primarily four operations:
The 8085 processor performs these functions using address bus, data bus and control bus as shown in Fig.
1.5.
Properties:
• It is a 8-bit microprocessor
• Manufactured with N-MOS technology
• 40 pin IC package
• It has 16-bit address bus and thus has 216 = 64 KB addressing capability.
• Operate with 3 MHz single-phase clock
• +5 V single power supply
The logic pin layout and signal groups of the 8085nmicroprocessor are shown in Fig. 1.6. All the signals
8
are classified into six groups:
• Address bus
• Data bus
• Control & status signals
• Power supply and frequency signals
• Externally initiated signals
• Serial I/O signals
• A8 – A15 (output, 3-state): Most significant eight bits of memory addresses and the eight
bits of the I/O
addresses. These lines enter into tri-state high impedance state during HOLD and HALT
modes.
• AD0 – AD7 (input/output, 3-state): Lower significant bits of memory addresses and the
eight bits of the I/O addresses during first clock cycle. Behaves as data bus during third
and fourth clock cycle. These lines enter into tri-state high impedance state during
HOLD and HALT modes.
9
• WR :Write control signal
:
• IO/M , S1 and S0 : Status signals. Power
• X1, X2: A crystal having frequency of 6 MHz is connected at these two pins
• RESET IN : When the signal on this pin is low, the PC is set to 0, the buses are tri-stated
and the processor is reset.
• RESET OUT: This signal indicates that the processor is being reset. The signal can be
used to reset other
devices.
• READY: When this signal is low, the processor waits for an integral number of clock
cycles until it goes high.
• HOLD: This signal indicates that a peripheral like DMA (direct memory access)
controller is requesting the use of address and data bus.
• RST 7.5, RST 6.5, RST 5,5 – restart interrupt: These are vectored interrupts and have
highest priority than INTR interrupt.
• SID: Serial input signal. Bit on this line is loaded to D7 bit of register A using RIM
instruction.
• SOD: Serial output signal. Output SOD is set or reset by using SIM instruction.
Based on the design of the ALU provides and decoding unit, the microprocessor manufacturer
10
microprocessor. The instruction set for every machine code and instruction set consists
of both
mnemonics.
I. Data transfer operations: This group of instructions copies data from source to
destination. The content of the source is not altered.
II. Arithmetic operations: Instructions of this group perform operations like addition,
subtraction, increment & decrement. One of the data used in arithmetic operation is
stored in accumulator and the result is also stored in accumulator.
III. Logical operations: Logical operations include AND, OR, EXOR, NOT. The operations
like AND, OR and EXOR uses two operands, one is stored in accumulator and other can
be any register or memory location. The result is stored in accumulator. NOT operation
requires single operand, which is stored in accumulator.
IV. Branching operations: Instructions in this group can be used to transfer program
sequence from one memory location to another either conditionally or unconditionally.
V. Machine control operations: Instruction in this group control execution of other
instructions and control operations like interrupt, halt etc.
I. One-byte instructions: Instruction having one byte in machine code. Examples are
depicted in Table 1.2.
I. Two-byte instructions: Instruction having two byte in machine code. Examples are
depicted in Table 1.3
II. Three-byte instructions: Instruction having three byte in machine code. Examples are
depicted in Table 1.4.
11
Table 1.4 Examples of three byte
instructions
Opcode Operand Machine code/Hex code Byte description
JMP 9050H C3 First byte
50 Second byte
90 Third byte
LDA 8850H 3A First byte
50 Second byte
88 Third byte
The process of specifying the data to be operated on by the instruction is called addressing. The
various formats for specifying operands are called addressing modes. The 8085 has the following
five types of addressing:
1. Immediate addressing
4. Indirect addressing
5. Implicit addressing
Immediate Addressing:
In this mode, the operand given in the instruction - a byte or word – transfers to the destination
register or memory location.
Register direct addressing transfer a copy of a byte or word from source register to destination
register.
Ex: MOV B, C
12
Indirect Addressing:
Indirect addressing transfers a byte or word between a register and a memory location.
Ex: MOV A, M
Here the data is in the memory location pointed to by the contents of HL pair. The data is moved
to the accumulator.
Implicit Addressing
In this addressing mode the data itself specifies the data to be operated upon.
Ex: CMA
The instruction complements the content of the accumulator. No specific data or operand is
mentioned in the instruction
Instruction Cycle: The time taken by the processor to complete the execution of an instruction.
An instruction cycle consists of one to six machine cycles.
Machine Cycle: The time required to complete one operation; accessing either the memory or I/O
device. A machine cycle consists of three to six T-states.
T-State: Time corresponding to one clock period. It is the basic unit to calculate execution of
instructions or programs in a processor.
• Opcode fetch
• Operand fetch
• Memory read/write
• I/O read/write
• Memory read/write
• I/O read/write
13
It is the first step in the execution of any instruction. The timing diagram of this cycle is given in
Fig. 1.7.
The following points explain the various operations that take place and the signals that are
changed during the execution of opcode fetch machine cycle:
T1 clock cycle
i. The content of PC is placed in the address bus; AD0 - AD7 lines contains lower bit address and
A8 – A15 contains higher bit address.
ii. IO/M signal is low indicating that a memory location is being accessed. S1 and S0 also
changed to the levels as indicated in Table 1.
iii. ALE is high, indicates that multiplexed AD0 – AD7 act as lower order bus.
T2 clock cycle
i. Multiplexed address bus is now changed to data bus.
ii. The RD signal is made low by the processor. This signal makes the memory device load
the data bus with the contents of the location addressed by the processor.
T3 clock cycle
i. The opcode available on the data bus is read by the processor and moved to the instruction
register.
ii.The RD signal is deactivated by making it logic 1.
T4 clock cycle
i. The processor decode the instruction in the instruction register and generate the necessary
control signals to execute the instruction. Based on the instruction further operations such as
fetching, writing into memory etc takes place.
The memory read cycle is executed by the processor to read a data byte from memory. The machine cycle is exactly
same to opcode fetch except: a) It has three T-states b) The S0 signal is set to 0. The timing diagram of this cycle is given
in Fig. 1.8.
14
Fig. 1.8 Timing diagram for memory write machine cycle
The memory write cycle is executed by the processor to write a data byte in a memory location.
The processor takes three T-states and WR signal is made low. The timing diagram of this cycle
is given in Fig.1.8.
15
Fig.1. 10 Timing diagram I/O read machine cycle
The I/O write cycle is executed by the processor to write a data byte to I/O port or to a peripheral, which is I/O mapped
in the system. The processor takes three T-states to execute this machine cycle. The timing diagram of this cycle is given
in Fig. 1.11.
16
Ex: Timing diagram for IN 80H.
The instruction and the corresponding codes and memory locations are given in Table 5.
Table 5 IN instruction
Address Mnemonics Opcode
800F IN 80H DB
8010 80
i. During the first machine cycle, the opcode DB is fetched from the memory, placed in the
instruction register and decoded.
ii. During second machine cycle, the port address 80H is read from the next memory
location.
iii. During the third machine cycle, the address 80H is placed in the address bus and the
data read from that port address is placed in the accumulator.
17
In Opcode fetch ( t1-t4 T states ) –
• 00: lower bit of address where opcode is stored, i.e., 00
• 20: higher bit of address where opcode is stored, i.e., 20.
• ALE: provides signal for multiplexed address and data bus. Only in t1 it used as address bus to
fetch lower bit of address otherwise it will be used as data bus.
• RD (low active): signal is 1 in t1 & t4 as no data is read by microprocessor. Signal is 0 in t2 & t3
because here the data is read by microprocessor.
• WR (low active): Signal is 1 throughout, no data is written by microprocessor.
• IO/M (low active): Signal is 0 in throughout because the operation is performing on memory.
• S0 and S1: both are 1 in case of opcode fetching.
In Memory read ( t5-t7 T states ) –
• 00: lower bit of address where opcode is stored, i.e, 00
• 50: higher bit of address where opcode is stored, i.e, 50.
• ALE: provides signal for multiplexed address and data bus. Only in t5 it used as address bus to
fetch lower bit of address otherwise it will be used as data bus.
• RD (low active): signal is 1 in t5, no data is read by microprocessor. Signal is 0 in t6 & t7, data
is read by microprocessor.
• WR (low active): signal is 1 throughout, no data is written by microprocessor.
• IO/M (low active): signal is 0 in throughout, operation is performing on memory.
• S0 and S1 – S1=1 and S0=0 for Read operation.
In Memory write ( t8-t10 T states ) –
• 00: lower bit of address where opcode is stored, i.e, 00
• 50: higher bit of address where opcode is stored, i.e, 50.
• ALE: provides signal for multiplexed address and data bus. Only in t8 it used as address bus to
fetch lower bit of address otherwise it will be used as data bus.
• RD (low active): signal is 1 throughout, no data is read by microprocessor.
• WR (low active): signal is 1 in t8, no data is written by microprocessor. Signal is 0 in t9 & t10,
data is written by microprocessor.
• IO/M (low active): signal is 0 in throughout, operation is performing on memory.
• S0 and S1 – S1=0 and S0=1 for write operation.
18
Fig 1.13: timing diagram for MVI B,45
Timing diagram of MOV Instruction in Microprocessor
Problem – Draw the timing diagram of the given instruction in 8085,
MOV B, C
Given instruction copies the contents of the source register into the destination register and the
contents of the source register are not altered
OV B, C
Opcode: MOV
Operand: B and C
Bis the destination register and C is the source register whose contents need to be transferred to
the destination register.
Algorithm –
The instruction MOV B, C is of 1 byte; therefore the complete instruction will be stored in a single
memory address. For example:
2000: MOV B, C
Only opcode fetching is required for this instruction and thus we need 4 T states for the timing
diagram. For the opcode fetch the IO/M (low active) = 0, S1 = 1 and S0 = 1.
The timing diagram of MOV instruction is shown below:
19
Fig 1.14:Timing diagram for MOV B,C
20
Fig 1.15:Timing diagram for STA 526A
Note : The instruction, which involves stack mostly will take 6T states in opcode fetch.
8085 INTERRUPTS
Interrupt Structure:
21
Interrupt is the mechanism by which the processor is made to transfer control from its current program execution to
another program having higher priority. The interrupt signal may be given to the processor by any external peripheral
device.
The program or the routine that is executed upon interrupt is called interrupt service routine (ISR). After execution of
ISR, the processor must return to the interrupted program. Key features in the interrupt structure of any
microprocessor are as follows:
Types of Interrupts:
Interrupts are classified based on their maskability, IVA and source. They are classified as:
Vectored interrupts require the IVA to be supplied by the external device that gives the interrupt signal. This
technique is vectoring, is implemented in number of ways.
Non-vectored interrupts have fixed IVA for ISRs of different interrupt signals.
Maskable interrupts are interrupts that can be blocked. Masking can be done by software or hardware means.
Non-maskable interrupts are interrupts that are always recognized; the corresponding ISRs are executed.
Software interrupts are special instructions, after execution transfer the control to predefined ISR.
Hardware interrupts are signals given to the processor, for recognition as an interrupt and execution of the
corresponding ISR.
The following sequence of operations takes place when an interrupt signal is recognized:
i. Save the PC content and information about current state (flags, registers etc) in the stack.
ii. Load PC with the beginning address of an ISR and start to execute it.
iv. Return to the point in the interrupted program where execution was interrupted.
22
Software Interrupts:
8085 instruction set includes eight software interrupt instructions called Restart (RST) instructions. These are one
byte instructions that make the processor execute a subroutine at predefined locations. Instructions and their vector
addresses are given in Table 1.6
Table 1.6 Vector address
8085 have five hardware interrupts – INTR, RST 5.5, RST 6.5, RST 7.5 and TRAP. Their
IVA and priorities are given in Table 1.7.
Masking of Interrupts:
Masking can be done for four hardware interrupts INTR, RST 5.5, RST 6.5, and RST 7.5. The
masking of 8085 interrupts is done at different levels. Fig. 13 shows the organization of hardware
interrupts in the 8085.
23
Fig 1.17: Interrupt diagram
The Fig. 1.17 is explained by the following five points:
i. The maskable interrupts are by default masked by the Reset signal. So no interrupt is recognized
by the hardware reset.
iii. The three RST interrupts can be selectively masked by loading the appropriate word in
the accumulator and executing SIM instruction. This is called software masking.
RST 7.5 alone has a flip-flop to recognize edge transition. The DI instruction reset interrupt enable
flip-flop in the processor and the interrupts are disabled. To enable interrupts, EI instruction has
to be executed.
SIM Instruction:
The SIM instruction is used to mask or unmask RST hardware interrupts. When executed, the
SIM instruction reads the content of accumulator and accordingly mask or unmask the interrupts.
The format of control word to be stored in the accumulator before executing SIM instruction is
as shown in Fig. 1.18.
24
Fig. 1.18 Accumulator bit pattern for SIM instruction
In addition to masking interrupts, SIM instruction can be used to send serial data on the SOD line
of the processor. The data to be send is placed in the MSB bit of the accumulator and the serial
data output is enabled by making D6 bit to 1.
RIM Instruction:
RIM instruction is used to read the status of the interrupt mask bits. When RIM instruction is
executed, the accumulator is loaded with the current status of the interrupt masks and the pending
interrupts. The format and the meaning of the data stored in the accumulator after execution of
RIM instruction is shown in Fig. 15.
In addition RIM instruction is also used to read the serial data on the SID pin of the processor.
The data on the SID pin is stored in the MSB of the accumulator after the execution of the RIM
instruction.
Ex: Write an assembly language program to enables all the interrupts in 8085 after reset.
EI : Enable interrupts
MVI A, 08H : Unmask the interrupts
SIM : Set the mask and unmask using SIM instruction
Timing of Interrupts:
The interrupts are sensed by the processor one cycle before the end of execution of each
instruction. An interrupts signal must be applied long enough for it to be recognized. The longest
instruction of the 8085 takes 18 clock periods. So, the interrupt signal must be applied for at least
17.5 clock periods. This decides the minimum pulse width for the interrupt signal.
The maximum pulse width for the interrupt signal is decided by the condition that the interrupt
signal must not be recognized once again. This is under the control of the programmer.
It is a 16 bit µp. 8086 has a 20 bit address bus can access upto 220 memory locations ( 1 MB) . It
can support upto 64K I/O ports. It provides 14, 16-bit registers. It has multiplexed address and
data bus AD0- AD15 and A16 – A19. It requires single phase clock with 33% duty cycle to provide
internal timing. 8086 is designed to operate in two modes, Minimum and Maximum. It can
prefetches upto 6 instruction bytes from memory and queues them in order to speed up instruction
execution. It requires +5V power supply. A 40 pin dual in line package.
The minimum mode is selected by applying logic 1 to the MN / MX# input pin. This is a
25
single microprocessor configuration. The maximum mode is selected by applying logic
0 to the MN / MX# input pin. This is a multi micro processors configuration.
26
Fig 1.22: General purpose registers
8086 has two blocks BIU and EU. The BIU performs all bus operations such as
instruction fetching, reading and writing operands for memory and calculating the
addresses of the memory operands. The instruction bytes are transferred to the
instruction queue. EU executes instructions from the instruction system byte queue.
Both units operate asynchronously to give the 8086 an overlapping instruction fetch and
execution mechanism which is called as Pipelining. This results in efficient use of the
system bus and system performance. BIU contains Instruction queue, Segment registers,
Instruction pointer, Address adder. EU contains Control circuitry, Instruction decoder,
ALU, Pointer and Index register, Flag register.
It provides a full 16 bit bidirectional data bus and 20 bit address bus. The bus interface
unit is responsible for performing all external bus operations.
Instruction fetch, Instruction queuing, Operand fetch and storage, Address relocation
and Bus control. The BIU uses a mechanism known as an instruction stream queue to
implement a pipeline architecture.
27
This queue permits prefetch of up to six bytes of instruction code. When ever the queue
of the BIU is not full, it has room for at least two more bytes and at the same time the
EU is not requesting it to read or write operands from memory, the BIU is free to
look ahead in the program by prefetching the next sequential instruction. These
prefetching instructions are held in its FIFO queue. With its 16 bit data bus, the BIU
fetches two instruction bytes in a single memory cycle. After a byte is loaded at the input
end of the queue, it automatically shifts up through the FIFO to the empty location
nearest the output.
The EU accesses the queue from the output end. It reads one instruction byte after the
other from the output of the queue. If the queue is full and the EU is not requesting
access to operand in memory. These intervals of no bus activity, which may occur
between bus cyclesare known as Idle state. If the BIU is already in the process of fetching
an instruction when the EU request it to read or write operands from memory or I/O,
the BIU first completes theinstruction fetch bus cycle before initiating the operand read
/ write cycle. The BIU also contains a dedicated adder which is used to generate the 20
bit physical address that is output on the address bus. This address is formed by adding
an appended 16 bit segment address and a 16 bit offset address. For example, the
physical address of the next instructionto be fetched is formed by combining the current
contents of the code segment CS register and the current contents of the instruction
pointer IP register. The BIU is also responsible for generating bus control signals such
as those for memory read or write and I/O read or write.
EXECUTION UNIT : The Execution unit is responsible for decoding and executing all
instructions. The EU extracts instructions from the top of the queue in the BIU, decodes
them, generates operands if necessary, passes them to the BIU and requests it to perform
theread or write bys cycles to memory or I/O and perform the operation specified by
the instruction on the operands. During the execution of the instruction, the EU tests the
status and control flags and updates them based on the results of executing the
instruction. If the queue is empty, the EU waits for the next instruction byte to be fetched
and shifted to top ofthe queue. When the EU executes a branch or jump instruction, it
transfers control to a location corresponding to another set of sequential instructions.
Whenever this happens, the BIU automatically resets the queue and then begins to fetch
instructions from this new location to refill the queue.
28
Internal Registers of 8086
The 8086 has four groups of the user accessible internal registers. They are the
instruction pointer, four data registers, four pointer and index register, four segment
registers.
The 8086 has a total of fourteen 16-bit registers including a 16 bit register called the
status register, with 9 of bits implemented for status and control flags. Most of the
registers contain data/instruction offsets within 64 KB memory segment. There are four
different 64 KB segments for instructions, stack, data and extra data. To specify where
in 1 MB of processor memory these 4 segments are located the processor uses four
segment registers:
Stack segment (SS) is a 16-bit register containing address of 64KB segment with program
stack. By default, the processor assumes that all data referenced by the stack pointer
(SP) and base pointer (BP) registers is located in the stack segment. SS register can be
changed directly using POP instruction.
Data segment (DS) is a 16-bit register containing address of 64KB segment with program
data. By default, the processor assumes that all data referenced by general registers
(AX, BX, CX, DX) and index register (SI, DI) is located in the data segment. DS register
can be changed directly using POP and LDS instructions.
Extra segment (ES) is a 16-bit register containing address of 64KB segment, usually with
program data. By default, the processor assumes that the DI register references the ES
29
segment in string manipulation instructions. ES register can be changed directly using
POP and LES instructions. It is possible to change default segments used by general and
index registers by prefixing instructions with a CS, SS, DS or ES prefix.
All general registers of the 8086 microprocessor can be used for arithmetic and logic
operations. The general registers are:
Accumulator register consists of two 8-bit registers AL and AH, which can be combined
together and used as a 16-bit register AX. AL in this case contains the low-order byte of
the word, and AH contains the high-order byte. Accumulator can be used for I/O
operations andstring manipulation.
Base register consists of two 8-bit registers BL and BH, which can be combined together
and used as a 16-bit register BX. BL in this case contains the low-order byte of the word,
and BH contains the high-order byte. BX register usually contains a data pointer used
for based, based indexed or register indirect addressing.
Count register consists of two 8-bit registers CL and CH, which can be combined
together and used as a 16-bit register CX. When combined, CL register contains the
low-order byteof the word, and CH contains the high-order byte. Count register can be
used in Loop, shift/rotate instructions and as a counter in string manipulation,.
Data register consists of two 8-bit registers DL and DH, which can be combined together
and used as a 16-bit register DX. When combined, DL register contains the low-order
byte of the word, and DH contains the high- order byte. Data register can be used as a
port number in I/O operations. In integer 32-bit multiply and divide instruction the DX
register contains high-order word of the initial or resulting number.
Base Pointer (BP) is a 16-bit register pointing to data in stack segment. BP register is
usually used for based, based indexed or register indirect addressing.
Source Index (SI) is a 16-bit register. SI is used for indexed, based indexed and register
indirect addressing, as well as a source data address in string manipulation instructions.
Destination Index (DI) is a 16-bit register. DI is used for indexed, based indexed and
register indirect addressing, as well as a destination data address in string manipulation
instructions.
Other registers:
Instruction Pointer (IP) is a 16-bit register.Flags is a 16-bit register containing 9 one bit flags.
30
Overflow Flag (OF) - set if the result is too large positive number, or is too small
negativenumber to fit into destination operand.
Direction Flag (DF) - if set then string manipulation instructions will auto-decrement
indexregisters. If cleared then the index registers will be auto-incremented.
Single-step Flag (TF) - if set then single-step interrupt will occur after the next instruction.
Sign Flag (SF) - set if the most significant bit of the result is set.
Auxiliary carry Flag (AF) - set if there was a carry from or borrow to bits 0-3 in the AL
register.
Parity Flag (PF) - set if parity (the number of "1" bits) in the low-order byte of the
result iseven.
Carry Flag (CF) - set if there was a carry from or borrow to the most significant bit
duringlast result calculation.
Addressing Modes
Implied - the data value/data address is implicitly associated with the instruction.
Direct - the instruction operand specifies the memory address where data is located.
Based :- 8-bit or 16-bit instruction operand is added to the contents of a base register
(BXor BP), the resulting value is a pointer to location where data resides.
Based Indexed :- the contents of a base register (BX or BP) is added to the contents of
anindex register (SI or DI), the resulting value is a pointer to location where data
resides.
31
Based Indexed with displacement :- 8-bit or 16-bit instruction operand is added to the
contents of a base register (BX or BP) and index register (SI or DI), the resulting value
is a pointer to location where data resides.
Interrupts
When an interrupt occurs, the processor stores FLAGS register into stack, disables
further interrupts, fetches from the bus one byte representing interrupt type, and jumps
to interrupt processing routine address of which is stored in location 4 * <interrupt
type>. Interrupt processing routine should return with the IRET instruction.
NMI is a non-maskable interrupt. Interrupt is processed in the same way as the INTR
interrupt. Interrupt type of the NMI is 2, i.e. the address of the NMI processing routine
is stored in location 0008h. This interrupt has higher priority then the maskable
interrupt.
INT <interrupt number> instruction - any one interrupt from available 256
Single-step interrupt - generated if the TF flag is set. This is a type 1 interrupt. When
the CPU processes this interrupt it clears TF flag before calling the interrupt
processing routine.
The figure below shows the 256 interrupt vectors arranged in the interrupt vector
table inthe memory.
32
Fig 1.23 Interrupt Vector Table in the 8086
When the Minimum mode operation is selected, the 8086 provides all control signals
needed to implement the memory and I/O interface. The minimum mode signal can be
divided into the following basic groups : address/data bus, status, control, interrupt and
DMA.
Address/Data Bus : these lines serve two functions. As an address bus is 20 bits long and
consists of signal lines A0 through A19. A19 represents the MSB and A0 LSB. A 20bit
address gives the 8086 a 1Mbyte memory address space. More over it has an
independent I/O address space which is 64K bytes in length.
The 16 data bus lines D0 through D15 are actually multiplexed with address lines A0
33
through A15 respectively. By multiplexed we mean that the bus work as an address bus
during first machine cycle and as a data bus during next machine cycles. D15 is the MSB
and D0 LSB. When acting as a data bus, they carry read/write data for memory,
input/output data for I/O devices, and interrupt type codes from an interrupt controller.
34
Status line S5 reflects the status of another internal characteristic of the 8086. It is the logic
level of the internal enable flag. The last status bit S6 is always at the logic 0 level.
Control Signals : The control signals are provided to support the 8086 memory I/O
interfaces. They control functions such as when the bus is to carry a valid address in which
direction data are to be transferred over the bus, when valid write data are on the bus and
when to put read data on the system bus.
ALE is a pulse to logic 1 that signals external circuitry when a valid address word is on the
bus. This address must be latched in external circuitry on the 1-to-0 edge of the pulse at
ALE.
Another control signal that is produced during the bus cycle is BHE bank high enable.
Logic 0 on this used as a memory enable signal for the most significant byte half of the data
bus D8 through D1. These lines also serves a second function, which is as the S7 status line.
Using the M/IO and DT/R lines, the 8086 signals which type of bus cycle is in progress
and in which direction data are to be transferred over the bus.
The logic level of M/IO tells external circuitry whether a memory or I/O transfer is taking
place over the bus. Logic 1 at this output signals a memory operation and logic 0 an
I/O operation.
The direction of data transfer over the bus is 74ignallin by the logic level output at DT/R.
When this line is logic 1 during the data transfer part of a bus cycle, the bus is in the
transmit mode. Therefore, data are either written into memory or output to an I/O device.
On the other hand, logic 0 at DT/R signals that the bus is in the receive mode. This
corresponds to reading data from memory or input of data from an input port.
The signal read RD and write WR indicates that a read bus cycle or a write bus cycle is in
progress. The 8086 switches WR to logic 0 to signal external device that valid write or
output data are on the bus.
On the other hand, RD indicates that the 8086 is performing a read of data of the
bus. During read operations, one other control signal is also supplied. This is DEN
(data
enable) and it signals external devices when they should put data on the bus.
There is one other control signal that is involved with the memory and I/O interface.
This isthe READY signal.
READY signal is used to insert wait states into the bus cycle such that it is extended by a
number of clock periods. This signal is provided by an external clock generator device and
can be supplied by the memory or I/O sub- system to signal the 8086 when they are ready
topermit the data transfer to be completed.
35
Fig 1.26: Maximum mode
Maximum Mode Interface
When the 8086 is set for the maximum-mode configuration, it provides signals for
implementing a multiprocessor / coprocessor system environment. By multiprocessor
environment we mean that one microprocessor exists in the system and that each processor
is executing its own program. Usually in this type of system environment, there are some
system resources that are common to all processors. They are called as global resources.
There are also other resources that are assigned to specific processors. These are known as
local or private resources. Coprocessor also means that there is a second processor in the
system. In this two processor does not access the bus at the same time. One passes the
control of the system bus to the other and then may suspend its operation. In the maximum-
mode 8086 system, facilities are provided for implementing allocation of global resources
and passing bus control to other microprocessor or coprocessor.
8288 Bus Controller – Bus Command and Control Signals: 8086 does not directly provide all
the signals that are required to control the memory, I/O and interrupt interfaces. Specially
the WR, M/IO, DT/R, DEN, ALE and INTA, signals are no longer produced by the 8086.
Instead it outputs three status signals S0, S1, S2 prior to the initiation of each bus cycle.
This 3- bit bus status code identifies which type of bus cycle is to follow. S2S1S0 are input
to the external bus controller device, the bus controller generates the appropriately timed
command and control signals. The 8288 produces one or two of these eight command
signals for each b us cycles. For instance, when the 8086 outputs the code S2S1S0 equals
001, it indicates that an I/O read cycle is to be performed. In the code 111 is output by the
8086, it is 7 signalling that no bus
activity is to take place.
The control outputs produced by the 8288 are DEN, DT/R and ALE. These 3 signals
provide the same functions as those described for the minimum system mode. This set of
bus commands and control signals is compatible with the Multibus and industry standard
for interfacing microprocessor systems.
36
8289 Bus Arbiter – Bus Arbitration and Lock Signals:
This device permits processors to reside on the system bus. It does this by implementing
the Multibus arbitration protocol in an 8086-based system. Addition of the 8288 bus
controller and 8289 bus arbiter frees a number of the 8086 pins for use to produce control
signals that are needed to support multiple processors. Bus priority lock (LOCK) is one of
these signals.It is input to the bus arbiter together with status signals S0 through S2.
Queue Status Signals: Two new signals that are produced by the 8086 in the maximum-
mode system are queue status outputs QS0 and QS1. Together they form a 2-bit queue
status code, QS1QS0. Following table shows the four different queue status.
AX - the Accumulator BX - the Base Register CX - the Count Register DX - the Data Register
Normally used for storing temporary results. Each of the registers is 16 bits wide (AX, BX, CX,
DX). Can be accessed as either 16 or 8 bits AX, AH, AL
AX-Accumulator Register. Preferred register to use in arithmetic, logic and data transfer
instructions because it generates the shortest Machine Language Code. Must be used in
multiplication and division operations.Must also be used in I/O operations.
BX-Base Register.Also serves as an address register
CX- Count register. Used as a loop counter. Used in shift and rotate operations
DX- Data register. Used in multiplication and division. Also used in I/O operations
37
Fig 1.27 Pointers and index registers
• All 16 bits wide, L/H bytes are not accessible. Used as memory pointers
• Example: MOV AH, [SI]
• Move the byte stored in memory location whose address is contained in register SI to register AH.
IP is not under direct control of theprogrammer
The Stack
The stack is used for temporary storage of information such as data or addresses. When a CALL is
executed, the 8086 automatically PUSH es the current value of CS and IP onto the stack. Other
registers can also be pushed. Before return from the subroutine, POP instructions can be used to
pop values back from the stack into the corresponding registers.
High system throughput can be achieved by having more than one CPU. The system can be
expanded in modular form. Each bus master module is an independent unit and normally
resides on a separate PC board. One can be added or removed without affecting the others
in the system. A failure in one module normally does not affect the breakdown of the entire
system and the faulty module can be easily detected and replaced. Each bus master has its
own local bus to access dedicated memory or IO devices. So a greater degree of parallel
processing can be achieved.
Question Bank
Part A
1. Define microprocessor
2. In how many groups can the signals of 8085 be classified?
3. What is the technology used in the manufacture of 8085?
4. Draw the block diagram of the built-in clock generator of 8085
5. What is the purpose of CLK signal of 8085?
6. What are the widths of data bus (DB) and address bus (AB) of 8085?
7. The address capability of 8085 is 64 KB. Explain.
8. Does 8085 have serial I/O control
9. What jobs ALU of 8085 can perform?
10. How many hardware interrupts 8085 supports?
11. How many I/O ports can 8085 access?
12. Why the lower byte address bus (A0 – A7) and data bus (D0 – D7) are multiplexed?
39
13. Why the lower byte address bus (A0 – A7) and data bus (D0 – D7) are multiplexed?
14. List the interrupts of 8085
15. List the flag bits of 8086
PART B
1. Explain the architecture of 8085
2. Discuss the addressing modes of 8085
3. Draw the timing diagram for the given instructions
a. STA
b. CALL
c. LDA
d. MOV A,M
4. Explain the 8086 architecture with neat diagram
5. Explain the interrupts of 8085
40
SCHOOL OF ELECTRICAL AND ELECTRONICS
41
UNIT 2 PROGRAMMING 8085 MICROPROCESSOR
8085 assembly language programming, addressing modes, 8085 instruction set, Instruction formats,
Instruction Classification: data transfer, arithmetic operations, logical operations, branching
operations, machine control —Stack and subroutines, Example Programs
42
Opcode Operand Meaning Explanation
43
Example − LHLD 3225H
44
The instruction loads the
contents of the H and L
registers into the stack pointer
register. The contents of the H
Copy H and L registers to register provide the high-order
SPHL None
the stack pointer address and the contents of the
L register provide the low-order
address.
Example − SPHL
46
47
ARITHMETIC INSTRUCTIONS:
48
49
50
51
52
53
54
55
8085 Assembly Language Programs & Explanations
1. Statement: Store the data byte 32H into memory location 4000H.
Program 1:
Program 2:
(4000H)
HLT : Terminate program execution
Program 1:
accumulator
MOV B, A : Save the contents into B register
LDA 4000H : Get the contents of memory location 4000Hinto
accumulator
STA 2000H : Store the contents of accumulator at address 2000H
MOV A, B : Get the saved contents back into A register
STA 4000H : Store the contents of accumulator at address 4000H
Program 2:
LXI H 2000H : Initialize HL register pair as a pointer to
memory location 2000H.
LXI D 4000H : Initialize DE register pair as a pointer to
memory location 4000H.
MOV B, M : Get the contents of memory location 2000H into B
register.
LDAX D : Get the contents of memory location 4000H into A
register.
MOV M, A : Store the contents of A register into memory
location 2000H.
MOV A, B : Copy the contents of B register into accumulator.
STAX D : Store the contents of A register into memory location
4000H.
56
HLT
: Terminate program execution.
3.Sample problem
(4000H) = 14H
(4001H) = 89H
Result = 14H + 89H = 9DH Source program
4.Statement: Subtract the contents of memory location 4001H from the memory location 2000H and place
the result in memory location 4002H.
Sample problem:
(4000H) = 51H
(4001H) = 19H
Result = 51H - 19H = 38H
Source program:
5.Statement: Add the 16-bit number in memory locations 4000H and 4001H to the 16-bit number in
memory locations 4002H and 4003H. The most significant eight bits of the two numbers to be added are in
memory locations 4001H and 4003H. Store the result in memory locations 4004H and 4005H with the
most significant byte in memory location 4005H.
57
Program - 5.a: Add two 16-bit numbers - Source Program 1
Sample problem:
(4000H) = 15H
(4001H) = 1CH
(4002H) = B7H
(4003H) = 5AH
Result = 1C15 + 5AB7H = 76CCH (4004H) =
CCH
(4005H) = 76H
Source Program 1:
LHLD 4000H : Get first I6-bit number in HL
XCHG : Save first I6-bit number in DE
LHLD 4002H : Get second I6-bit number in HL
MOV A, E : Get lower byte of the first number
ADD L : Add lower byte of the second number
MOV L, A : Store result in L register
MOV A, D : Get higher byte of the first number
ADC H : Add higher byte of the second number with CARRY
MOV H, A : Store result in H register
SHLD 4004H : Store I6-bit result in memory locations 4004H and
4005H.
HLT : Terminate program execution
6.Statement: Add the contents of memory locations 40001H and 4001H and place the result in the memory
locations 4002Hand 4003H.
Sample problem:
(4000H) = 7FH
(400lH) = 89H
Result = 7FH + 89H = lO8H (4002H) =
08H (4003H) = 0lH
Source program:
58
ADC A :Add carry in the high byte result
INX H :HL Points 4003H
MOV M, A :Store the higher byte of result at 4003H
HLT :Terminate program execution
7.Statement: Subtract the 16-bit number in memory locations 4002H and 4003H from the 16-bit number in
memory locations 4000H and 4001H. The most significant eight bits of the two numbers are in memory
locations 4001H and 4003H. Store the result in memory locations 4004H and 4005H with the most
significant byte in memory location 4005H.
Sample problem
(4000H) = 19H
(400IH) = 6AH
(4004H) = I5H (4003H) = 5CH Result = 6A19H -
5C15H = OE04H (4004H) = 04H
(4005H) = OEH
Source program:
4005H.
SHLD 4004H : Store l6-bit result in memory locations 4004H and
4005H.
HLT : Terminate program execution
8.Statement: Find the l's complement of the number stored at memory location 4400H and store
the complemented number at memory location 4300H.
Sample problem:
(4400H) = 55H
59
Result = (4300B) = AAB
Source program:
9.Statement: Find the 2's complement of the number stored at memory location 4200H and store
the complemented number at memory location 4300H.
Sample problem:
(4200H) = 55H
Result = (4300H) = AAH + 1 = ABH
Source program:
10.Statement: Pack the two unpacked BCD numbers stored in memory locations 4200H and 4201H and store
result in memory location 4300H. Assume the least significant digit is stored at 4200H.
Source program
RLC
RLC
RLC
RLC : Adjust the position of the second digit (09 is changed to
90)
60
ANI FOH : Make least significant BCD digit zero
MOV C, A : store the partial result
LDA 4200H : Get the lower BCD digit
ADD C : Add lower BCD digit
STA 4300H : Store the result
HLT : Terminate program execution
11.Statement: Two digit BCD number is stored in memory location 4200H. Unpack the BCD number and
store the two digits in memory locations 4300H and 4301H such that memory location 4300H will have
lower BCD digit.
Sample problem
(4200H) = 58
Result = (4300H) = 08 and (4301H) = 05
Source program
RRC
RRC
RRC
RRC : Adjust higher BCD digit as a lower digit
STA 4301H : Store the partial result
LDA 4200H : .Get the original BCD number
ANI OFH : Mask higher nibble
STA 4201H : Store the result
HLT : Terminate program execution
12.Statement:Read the program given below and state the contents of all registers after
the execution of each instruction in sequence.
Main program:
61
Subroutine program:
13.Statement:Write a program to shift an eight bit data four bits right. Assume that data is in register C.
Source program:
MOV A, C
RAR
RAR
RAR
RAR
MOV C, A
HLT
14.Statement: Program to shift a 16-bit data 1 bit left. Assume data is in the HL register pair
Source program:
15.Statement: Write a set of instructions to alter the contents of flag register in 8085.
62
PUSH H : Save on stack
POP PSW : Back to flag register
HLT :Terminate program execution
16.Statement: Calculate the sum of series of numbers. The length of the series is in memory location 4200H
and the series begins from memory location 4201H.
1. Consider the sum to be 8 bit number. So, ignore carries. Store the sum at memory location 4300H.
2. Consider the sum to be 16 bit number. Store the sum at memory locations 4300H and 4301H
a. Sample problem
4200H = 04H
4201H = 10H
4202H = 45H
4203H = 33H
4204H = 22H
Result = 10 +41 + 30 + 12 = H
4300H =H
Source program:
LDA 4200H
MOV C, A : Initialize counter
SUB A : sum = 0
LXI H, 420lH : Initialize pointer
BACK: ADD M : SUM = SUM + data
INX H : increment pointer
DCR C : Decrement counter
JNZ BACK : if counter 0 repeat
STA 4300H : Store sum
HLT : Terminate program execution
b. Sample problem
Source program:
63
LDA 4200H
MOV C, A : Initialize counter
LXI H, 4201H : Initialize pointer
SUB A :Sum low = 0
MOV B, A : Sum high = 0
BACK: ADD M : Sum = sum + data
JNC SKIP
INR B : Add carry to MSB of SUM
SKIP: INX H : Increment pointer
DCR C : Decrement counter
JNZ BACK : Check if counter 0 repeat
STA 4300H : Store lower byte
MOV A, B
STA 4301H : Store higher byte
HLT :Terminate program execution
17.Statement: Multiply two 8-bit numbers stored in memory locations 2200H and 2201H by repetitive
addition and store the result in memory locations 2300H and 2301H.
Sample problem:
(2200H) = 03H
(2201H) = B2H
Result = B2H + B2H + B2H = 216H = 216H
(2300H) = 16H
(2301H) = 02H
Source program
LDA 2200H
MOV E, A
MVI D, 00 : Get the first number in DE register pair
LDA 2201H
MOV C, A : Initialize counter
LX I H, 0000 H : Result = 0
BACK: DAD D : Result = result + first number
DCR C : Decrement count
JNZ BACK : If count 0 repeat
SHLD 2300H : Store result
HLT : Terminate program execution
64
18.Statement:Divide 16 bit number stored in memory locations 2200H and 2201H by the 8 bit number stored at
memory location 2202H. Store the quotient in memory locations 2300H and 2301H and remainder in memory
locations 2302H and 2303H.
Source program
MOV C, A
LXI D, 0000H : Quotient = 0
BACK: MOV A, L
SUB C : Subtract divisor
MOV L, A : Save partial result
JNC SKIP : if CY 1 jump
DCR H : Subtract borrow of previous subtraction
SKIP: INX D : Increment quotient
MOV A, H
CPI, 00 : Check if dividend < divisor
JNZ BACK : if no repeat
MOV A, L
CMP C
JNC BACK
SHLD 2302H : Store the remainder
XCHG
SHLD 2300H : Store the quotient
HLT : Terminate program execution
19.Statement:Find the number of negative elements (most significant bit 1) in a block of data. The length of
the block is in memory location 2200H and the block itself begins in memory location 2201H. Store the number
of negative elements in memory location 2300H
Sample problem
(2200H) = 04H
65
(2201H) = 56H
(2202H) = A9H
(2203H) = 73H
(2204H) = 82H
Source program
LDA 2200H
MOV C, A : Initialize count
MVI B, 00 : Negative number = 0
LXI H, 2201H : Initialize pointer
BACK: MOV A, M : Get the number
ANI 80H : Check for MSB
JZ SKIP : If MSB = 1
INR B : Increment negative number count
SKIP: INX H : Increment pointer
DCR C : Decrement count
JNZ BACK : If count 0 repeat
MOV A, B
STA 2300H : Store the result
HLT : Terminate program execution
20.Statement:Find the largest number in a block of data. The length of the block is in memory location
2200H and the block itself starts from memory location 2201H.
Store the maximum number in memory location 2300H. Assume that the numbers in the block are all 8
bit unsigned binary numbers.
Sample problem
(2200H) = 04
(2201H) = 34H
(2202H) = A9H
(2203H) = 78H
(2204H) =56H
Result = (2202H) = A9H
Source program
LDA 2200H
MOV C, A : Initialize counter
XRA A : Maximum = Minimum possible value = 0
LXI H, 2201H : Initialize pointer
BACK: CMP M : Is number> maximum
JNC SKIP : Yes, replace maximum
66
MOV A, M
SKIP: INX H
DCR C
JNZ BACK
STA 2300H : Store maximum number
HLT : Terminate program execution
21.Statement:Write a program to count number of l's in the contents of D register and store the count
in the B register.
Source program:
MVI B, 00H
MVI C, 08H
MOV A, D
BACK: RAR
JNC SKIP
INR B
SKIP: DCR C
JNZ BACK
HLT
22.Statement:Write a program to sort given 10 numbers from memory location 2200H in the
ascending order.
Source program:
MOV D, M
MOV M, A
DCX H
MOV M, D
INX H : Interchange two numbers
SKIP:DCR C : Decrement counter 2
JNZ BACK : If not zero, repeat
DCR B : Decrement counter 1
JNZ START
HLT : Terminate program execution
67
23.Statement:Calculate the sum of series of even numbers from the list of numbers. The length of the list is in
memory location 2200H and the series itself begins from memory location 2201H. Assume the sum to be 8 bit
number so you can ignore carries and store the sum at memory location 2Sample problem:
2200H= 4H
2201H= 20H
2202H= l5H
2203H= l3H
2204H= 22H
Result 22l0H= 20 + 22 = 42H = 42H
Source program:
LDA 2200H
MOV C, A
MVI B, 00H
LXI H, 2201H
BACK: MOV A, M
ANI 0lH
JNZ SKIP
MOV A, B
ADD M
MOV B, A
SKIP: INX H
DCR C
JNZ BACK
STA 2210H
HLT
24.Statement:Calculate the sum of series of odd numbers from the list of numbers. The length of the list is in
memory location 2200H and the series itself begins from memory location 2201H. Assume the sum to be 16-bit.
Store the sum at memory locations 2300H and 2301H.
Sample problem:
2200H = 4H
2201H= 9AH
2202H= 52H
2203H= 89H
2204H= 3FH
Result = 89H + 3FH = C8H 2300H= H
Lower byte 2301H = H Higher byte
68
Source program
LDA 2200H
MOV C, A : Initialize counter
LXI H, 2201H : Initialize pointer
MVI E, 00 : Sum low = 0
MOV D, E : Sum high = 0
BACK: MOV A, M : Get the number
ANI 0lH : Mask Bit 1 to Bit7
JZ SKIP : Don't add if number is even
MOV A, E : Get the lower byte of sum
ADD M : Sum = sum + data
MOV E, A : Store result in E register
JNC SKIP
INR D : Add carry to MSB of SUM
SKIP: INX H : Increment pointer
DCR C : Decrement
25.Statement:Find the square of the given numbers from memory location 6100H and store the result from
memory location 7000H
Source Program:
MOV A, C
CPI 05H : Check for last number
JNZ BACK : If not repeat
HLT : Terminate program execution
26.Statement: Search the given byte in the list of 50 numbers stored in the consecutive memory locations
and store the address of memory location in the memory locations 2200H and 2201H. Assume byte is in the
C register and starting address of the list is 2000H. If byte is not found store 00 at 2200H and 2201H.
Source program:
69
LX I H, 2000H : Initialize memory pointer 52H
MVI B, 52H : Initialize counter
BACK: MOV A, M : Get the number
CMP C : Compare with the given byte
JZ LAST : Go last if match occurs
INX H : Increment memory pointer
DCR B : Decrement counter
JNZ B : I f not zero, repeat
LXI H, 0000H
SHLD 2200H
JMP END : Store 00 at 2200H and 2201H
LAST: SHLD 2200H : Store memory address
END: HLT : Stop
27.Statement: Two decimal numbers six digits each, are stored in BCD package form. Each number occupies
a sequence of byte in the memory. The starting address of first number is 6000H Write an assembly language
program that adds these two numbers and stores the sum in the same format starting from memory location
6200H
Source Program:
28.Statement: Add 2 arrays having ten 8-bit numbers each and generate a third array of result. It is
necessary to add the first element of array 1 with the first
70
element of array-2 and so on. The starting addresses of array l, array2 and array3 are 2200H, 2300H
and 2400H, respectively.
Source Program:
MOV A, L
CPI 0AH : Check pointer 1 for last number
JNZ BACK : If not, repeat
HLT : Stop
29.Statement: Write an assembly language program to separate even numbers from the given list of 50
numbers and store them in the another list starting from 2300H. Assume starting address of 50 number list is
2200H
Source Program:
30.Statement: Write assembly language program with proper comments for the following:
71
A block of data consisting of 256 bytes is stored in memory starting at 3000H. This block is to be shifted
(relocated) in memory from 3050H onwards. Do not shift the block or part of the block anywhere else in the
memory.
Source Program:
Two blocks (3000 - 30FF and 3050 - 314F) are overlapping. Therefore it is necessary to transfer last byte
first and first byte last.
31.Statement: Add even parity to a string of 7-bit ASCII characters. The length of the string is in
memory location 2040H and the string itself begins in memory location 2041H. Place even parity in the
most significant bit of each character.
Source Program:
LXI H, 2040H
MOV C ,M : Counter for character
REPEAT:INX H : Memory pointer to character
MOV A,M : Character in accumulator
ORA A : ORing with itself to check parity.
JPO PAREVEN : If odd parity place
ORI 80H even parity in D7 (80).
PAREVEN:MOV M , A : Store converted even parity character.
DCR C : Decrement counter.
JNZ REPEAT : If not zero go for next character.
HLT
32.Statement: A list of 50 numbers is stored in memory, starting at 6000H. Find number of negative, zero and
positive numbers from this list and store these results in memory locations 7000H, 7001H, and 7002H
respectively
72
Source Program:
33.Statement:Write an 8085 assembly language program to insert a string of four characters from the
tenth location in the given array of 50 characters
Solution:
Step 1: Move bytes from location 10 till the end of array by four bytes downwards.
Step 2: Insert four bytes at locations 10, 11, 12 and 13.
Source Program:
73
STAX D : Store at the new location
DCX D : Decrement destination pointer
DCX H : Decrement source pointer
MOV A, L : [check whether desired
CPI 05H bytes are shifted or not]
JNZ AGAIN : if not repeat the process
INX H : adjust the memory pointer
LXI D, 2200H : Initialize the memory pointer to point the string to
be inserted
REPE: LDAX D : Get the character
MOV M, A : Store it in the array
INX D : Increment source pointer
INX H : Increment destination pointer
MOV A, E : [Check whether the 4 bytes
CPI 04 are inserted]
JNZ REPE : if not repeat the process
HLT : stop
34.Statement:Write an 8085 assembly language program to delete a string of 4 characters from the tenth
location in the given array of 50 characters.
Solution: Shift bytes from location 14 till the end of array upwards by 4 characters i.e. from location
10 onwards.
Source Program:
of the array.
LXI D, 2l09H : Initialize destn memory pointer at the 10th location
of the array.
MOV A, M : Get the character
STAX D : Store character at new location
INX D : Increment destination pointer
INX H : Increment source pointer
MOV A, L : [check whether desired
CPI 32H bytes are shifted or not]
JNZ REPE : if not repeat the process
HLT : stop
35.Statement:Multiply the 8-bit unsigned number in memory location 2200H by the 8-bit unsigned number
in memory location 2201H. Store the 8 least significant bits of the result in memory location 2300H and the 8
most significant bits in memory location 2301H.
74
Sample problem:
Source program
RAL
JNC SKIP : Is carry from multiplier 1 ?
DAD D : Yes, Product =Product + Multiplicand
SKIP: DCR B : Is counter = zero
JNZ MULT : no, repeat
SHLD 2300H : Store the result
HLT : End of program
36.Statement:Divide the 16-bit unsigned number in memory locations 2200H and 2201H (most significant
bits in 2201H) by the B-bit unsigned number in memory location 2300H store the quotient in memory
location 2400H and remainder in 2401H
Assumption: The most significant bits of both the divisor and dividend are zero.
Source program
MVI E, 00 : Quotient = 0
LHLD 2200H : Get dividend
LDA 2300 : Get divisor
MOV B, A : Store divisor
MVI C, 08 : Count = 8
NEXT: DAD H : Dividend = Dividend x 2
MOV A, E
RLC
MOV E, A : Quotient = Quotient x 2
75
MOV A, H
SUB B : Is most significant byte of Dividend > divisor
JC SKIP : No, go to Next step
MOV H, A : Yes, subtract divisor
INR E : and Quotient = Quotient + 1
SKIP:DCR C : Count = Count - 1
JNZ NEXT : Is count =0 repeat
MOV A, E
STA 2401H : Store Quotient
Mov A, H
STA 2410H : Store remainder
HLT : End of program
37.DAA instruction is not present. Write a sub routine which will perform the same task as DAA.
Sample Problem:
Source Program:
76
RRC : Rotate number 4 bit right
CPI 0AH : Check if number is greater than 9
JC SKIPl : if no go to skip 1
MOV A, E : Get the number
ADI 60 H : Add 60 H in the number
JMP LAST : Go to last
SKIP1: JNC LAST : if carry flag = 0 go to last
MOV A, E : Get the number
ADI 60 H : Add 60 H in the number
LAST: HLT
38.Statement:To test RAM by writing '1' and reading it back and later writing '0' (zero) and reading it
back. RAM addresses to be checked are 40FFH to 40FFH. In case of any error, it is indicated by writing
01H at port 10H
Source Program:
Source Program:
77
MOV A, B :[Add two numbers]
BACK: ADD C :[Add two numbers]
MOV B, C : Current number is now previous number
MOV C, A : Save result as a new current number
DCR D : Decrement count
JNZ BACK : if count 0 go to BACK
HLT : Stop
40.Statement:Write a program to generate a delay of 0.4 sec if the crystal frequency is 5 MHz
Source Program:
START:MVI B, 00 ; Flag = 0
LXI H, 4150 ; Count = length of array
MOV C, M
DCR C ; No. of pair = count -1
INX H ; Point to start of array
LOOP:MOV A, M ; Get kth element
INX H
CMP M ; Compare to (K+1) th element
JNC LOOP 1 ; No interchange if kth >= (k+1) th
MOV D, M ; Interchange if out of order
MOV M, A ;
DCR H
MOV M, D
INX H
MVI B, 01H ; Flag=1
LOOP 1:DCR C ; count down
JNZ LOOP ;
DCR B ; is flag = 1?
78
JZ START ; do another sort, if yes
HLT ; If flag = 0, step execution
42.Statement: Transfer ten bytes of data from one memory to another memory block. Source memory block
starts from memory location 2200H where as destination memory block starts from memory location 2300H
Source Program:
MVI A, 54
LOOP : RRC
JC LOOP1
MVI M, 00 : store zero it no carry
JMP COMMON
LOOP2: MVI M, 01 : store one if there is a carry
COMMON: INX H
DCR B : check for carry
JNZ LOOP
HLT : Terminate the program
Source program
79
44.Statement:Write a program to find the Square Root of an 8 bit binary number. The binary number is
stored in memory location 4200H and store the square root in 4201H.
Source Program:
in D-reg
REP: MOV E,D : Save the initial value in E-reg
MOV A,B : Get the dividend(Y) in A-reg
MOV C,D : Get the divisor(X) in C-reg
CALL DIV : Call division subroutine to get initial
value(Y/X) in D-reg
MOV A, D : Move Y/X in A-reg
ADD E : Get the((Y/X) + X) in A-reg
MVI C, 02H : Get the divisor(02H) in C-reg
CALL DIV : Call division subroutine to get ((Y/X) + X)/2
in D-reg.This is XNEW
MOV A, E : Get Xin A-reg
CMP D : Compare X and XNEW
JNZ REP : If XNEW is not equal to X, then repeat
STA 4201H : Save the square root in memory
HLT : Terminate program execution
45.Statement:Write a simple program to Split a HEX data into two nibbles and store it in memory
Source Program:
RRC
RRC
RRC
RRC
INX H
MOV M,A : Store the upper nibble in memory
HLT : Terminate program execution
80
46.Statement: Add two 4 digit BCD numbers in HL and DE register pairs and store result in memory locations,
2300H and 2301H. Ignore carry after 16 bit.
Sample Problem:
Source program
47.Subtract the BCD number stored in E register from the number stored in the D register.
Source Program:
MVI A,99H
SUB E : Find the 99's complement of subtrahend
INR A : Find 100's complement of subtrahend
ADD D : Add minuend to 100's complement of subtrahend
DAA : Adjust for BCD
HLT : Terminate program execution
Source Program:
81
MVI C, Multiplier : Load BCD multiplier
MVI B, 00 : Initialize counter
LXI H, 0000H : Result = 0000
MVI E, multiplicand : Load multiplicand
MVI D, 00H : Extend to 16-bits
BACK: DAD D : Result Result + Multiplicand
MOV A, L : Get the lower byte of the result
ADI, 00H
DAA : Adjust the lower byte of result to BCD.
MOV L, A : Store the lower byte of result
MOV A, H : Get the higher byte of the result
ACI, 00H
DAA
MOV H, A
MOV A, B
ADI 01H
DAA
MOV B,A
CMP C
JNZ BACK
HLT
82
QUESTION BANK -UNIT II
PART A
1. Identify the addressing modes of LDA and LDAXB instruction
2. Identify the no of bytes of XTHL and LXI H,16bit
3. Define addressing modes
4. Classify the instruction sets of 8085
5. Explain SPHL instruction with example
6. What is the difference between CMP and SUB instruction
7. When the parity flag will set
8. What determines the number of bytes to be fetched from memory to execute an instruction?
9. What are the different instruction word sizes in 8085?
10. Give one example each of 1-byte, 2-byte and 3-byte instructions.
11. Mention the different types of operations possible with arithmetic, logical, branch and
machine control operations
12. What is an instruction?
13. What are the different types of data transfer operations possible?
14. What is the output in 9100 after executing the following instructions
MVI A, 09
MVI B, 04
ADD B
DAA
STA 9100
HLT
15. What is the content in DE register?
MVI A,09
ADI 77
PUSH PSW
POP D
HLT
PART B
1. Classify the instruction set based on the operations performed and explain with examples
2. Classify the instruction set based on the size of the instructions and explain with examples
3. Explain a. XTHL b.SPHL c.PCHL d.RAR e.SIM
4. Explain with example a.LDAX B b.PUSH PSW c.RLC d.JNC 16bit e.XRA A
5. Write an ALP to sort a given array in ascending order
6. Write an ALP to find a factorial of a number
7. Write an ALP to add two multibyte data
8. Write an ALP to generate fibonocci series
Note: Study all the programs
83
SCHOOL OF ELECTRICAL AND ELECTRONICS
84
UNIT 3 PERIPHERALS AND INTERFACING
Introduction, memory and I/O interfacing, data transfer schemes, Interface ICs’- USART (8251), programmable
peripheral interface (8255), programmable interrupt controller (8259), programmable counter/interval timer
(8254), Analog to Digital Converter (ADC), and Digital to Analog Converter (DAC).
86
Data Bus Buffer
This three-state bi-directional 8-bit buffer is used to interface the 8255 to the system data
bus. Data is transmitted or received by the buffer upon execution of input or output
instructions by theCPU. Control words and status information are also transferred through
the data bus buffer.
The function of this block is to manage all of the internal and external transfers of both Data
and Control or Status words. It accepts inputs from the CPU Address and Control busses
and in turn, issues commands to both of the Control Groups.
(CS) Chip Select. A "low" on this input pin enables the communication between the 8255
and the CPU.
(RD) Read. A "low" on this input pin enables 8255 to send the data or status information to
the CPU on the data bus. In essence, it allows the CPU to "read from" the 8255.
(WR) Write. A "low" on this input pin enables the CPU to write data or control words into
the 8255.
(A0 and A1) Port Select 0 and Port Select 1. These input signals, in conjunction with the RD
andWR inputs, control the selection of one of the three ports or the control word register.
They are normally connected to the least significant bits of the address bus (A0 and A1).
87
Fig 3.4 selection of Ports and Control reg
(RESET) Reset. A "high" on this input initializes the control register to 9Bh and all ports
(A, B,C) are set to the input mode.
The 8255 contains three 8-bit ports (A, B, and C). All can be configured to a wide variety of
functional characteristics by the system software but each has its own special features or
"personality" to further enhance the power and flexibility of the 8255.
Port A One 8-bit data output latch/buffer and one 8-bit data input latch. Both "pull-up" and
"pull- down" bus-hold devices are present on Port A.
Port B One 8-bit data input/output latch/buffer and one 8-bit data input buffer.
Port C One 8-bit data output latch/buffer and one 8-bit data input buffer (no latch for input).
This port can be divided into two 4-bit ports under the mode control. Each 4-bit port contains
a 4-bit latch and it can be used for the control signal output and status signal inputs in
conjunction with ports A and B.
I. Operational modes of 8255
The two modes are selected on the basis of the value present at the D7 bit of the Control Word
88
Register. When D7 = 1, 8255 operates in I/O mode and when D7 = 0, it operates in the BSR
mode.
The Bit Set/Reset (BSR) mode is applicable to port C only. Each line of port C (PC0 - PC7)
can be set/reset by suitably loading the control word register as shown in Figure 4. BSR
mode and I/O mode are independent and selection of BSR mode does not affect the operation
of other portsin I/O mode.
89
As an example, if it is needed that PC5 be set, then in the control word,
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
2. Input/Output mode
90
This mode is selected when D7 bit of the Control Word Register is 1. There are three I/O modes:
D0, D1, D3, D4 are assigned for lower port C, port B, upper port C 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 as shown in Figure 5.
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
selectionis done as follows:
91
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 Cand port A as output ports (all in mode 0):
2. Mode selection bits, D2, D5, D6 are all 0 for mode 0 operation.
Hence, for the desired operation, the control word register will have to be loaded with
"10001010" = 8A (hex).
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.
92
2. Input ports are buffered, not latched.
In the input mode, the 8255 gets data from the external peripheral ports and the
CPUreads the received data via its data bus.
The CPU first selects the 8255 chip by making CS low. Then it selects the
desiredport using A0 and A1 lines.
The CPU then issues an RD signal to read the data from the external
peripheraldevice via the system data bus.
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
databus. This data is then received by the external peripheral device connected to
the selected port.
Mode 1
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 initilalised 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.
93
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.
1. Two ports i.e. port A and B can be used as 8-bit i/o ports.
2. Each port uses three lines of port c as handshake signal and remaining two signals can
be used as i/o ports.
3. Interrupt logic is supported.
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.
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.
94
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 82C55 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.
Mode 2
Only group 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 froma floppy disk controller. Acknowledgement and handshaking signals
are provided to maintain proper data flow and synchronisation between the data
transmitter and receiver.
II. Interfacing 8255 with 8085 processor
95
Fig 3.7. Interfacing 8255 with 8085 processor
The 8255 can be either memory mapped or I/O mapped in the system. In the
schematic shown in above is I/O mapped in the system.
Using a 3-to-8 decoder generates the chip select signals for I/O mapped devices.
The address lines A4, A5 and A6 are decoded to generate eight chip select signals
(IOCS-0 to IOCS-7) and in this, the chip select IOCS- 1 is used to select 8255 as
shown in Figure 3.7.
The address line A7 and the control signal IO/M (low) are used as enable for
thedecoder.
The address line A0 of 8085 is connected to A0 of 8255 and A1 of 8085 is connected
toA1 of 8255 to provide the internal addresses.
The data lines D0-D7 are connected to D0-D7 of the processor to achieve parallel
datatransfer.
The I/O addresses allotted to the internal devices of 8255 are listed in table.
96
USART 8251 (Universal Synchronous/ Asynchronous Receiver Transmitter)
97
Figure 3.8 : Architecture of 8251
Transmitter Section
The transmitter section consists of three blocks—transmitter buffer register, output register
and the transmitter control logic block. The CPU deposits (when TXRDY = 1, meaning that
the transmitter buffer register is empty) data into the transmitter buffer register, which is
subsequently put into the output register (when TXE = 1, meaning that the output buffer is
empty). In the output register, the eight bit data is converted into serial form and comes out
98
via TXD pin. The serial data bits are preceded by START bit and succeeded by STOP bit,
which are known as framing bits. But this happens only if transmitter is enabled and the
CTS is low. TXC signal is the transmitter clock signal which controls the bit rate on the TXD
line (output line). This clock frequency can be 1, 16 or 64 times the baud.
Receiver Section
The receiver section consists of three blocks — receiver buffer register, input register and
the receiver control logic block. Serial data from outside world is delivered to the input
register via RXD line, which is subsequently put into parallel form and placed in the receiver
buffer register. When this register is full, the RXRDY (receiver ready) line becomes high.
This line is then used either to interrupt the MPU or to indicate its own status. MPU then
accepts the data from the register. RXC line stands for receiver clock. This clock signal
controls the rate at which bits are received by the input register. The clock can be set to 1,
16 or 64 times the baud in the asynchronous mode.
99
Pin Configuration of 8251 is shown in figure
11. D 0 to D 7 (l/O terminal)
This is bidirectional data bus which receive control words and transmits data from the
CPU andsends status words and received data to CPU.
A "High" on this input forces the 8251 into "reset status." The device waits for the
writing of"mode instruction." The min. reset width is six clock inputs during the operating
status of CLK.
CLK signal is used to generate internal device timing. CLK signal is independent of RXC or
TXC. However, the frequency of CLK must be greater than 30 times the RXC and TXC at
Synchronous mode and Asynchronous "x1" mode, and must be greater than 5 times at
Asynchronous "x16" and "x64" mode.
WR (Input terminal)
This is the "active low" input terminal which receives a signal for writing transmit
data andcontrol words from the CPU into the 8251.
RD (Input terminal)
This is the "active low" input terminal which receives a signal for reading receive data and
statuswords from the 8251.
C/D (Input terminal)
This is an input terminal which receives a signal for selecting data or command words and
statuswords when the 8251 is accessed by the CPU. If C/D = low, data will be accessed. If
C/D
= high, command word or status word will be
accessed.CS (Input terminal)
This is the "active low" input terminal which selects the 8251 at low level when the CPU
100
accesses. Note: The device won’t be in "standby status"; only setting CS = High.
This is an output terminal for transmitting data from which serial-converted data is sent out.
The device is in "mark status" (high level) after resetting or during a status when transmit
is disabled. It is also possible to set the device in "break status" (low level) by a command.
TXRDY (output terminal)
This is an output terminal which indicates that the 8251is ready to accept a transmitted data
character. But the terminal is always at low level if CTS = high or the device was set in "TX
disable status" by a command. Note: TXRDY status word indicates that transmit data
character isreceivable, regardless of CTS or command. If the CPU writes a data character,
TXRDY will be reset by the leading edge or WR signal.
TXEMPTY (Output terminal)
This is an output terminal which indicates that the 8251 has transmitted all the characters
and hadno data character. In "synchronous mode," the terminal is at high level, if transmit
data charactersare no longer remaining and sync characters are automatically transmitted.
If the CPU writes a data character, TXEMPTY will be reset by the leading edge of WR
signal. Note : As the transmitter is disabled by setting CTS "High" or command, data written
before disable will be sent out. Then TXD and TXEMPTY will be "High". Even if a data is
written after disable, that data is not sent out and TXE will be "High". After the transmitter
is enabled, it sent out. (Refer to Timing Chart of Transmitter Control and Flag Timing)
TXC (Input terminal)
This is a clock input signal which determines the transfer speed of transmitted data. In
"synchronous mode," the baud rate will be the same as the frequency of TXC. In
"asynchronous mode", it is possible to select the baud rate factor by mode instruction. It can
be 1, 1/16 or 1/64 the TXC. The falling edge of TXC sifts the serial data out of the 8251.
RXD (input terminal)
This is a clock input signal which determines the transfer speed of received data. In
"synchronous mode," the baud rate is the same as the frequency of RXC. In "asynchronous
mode," it is possible to select the baud rate factor by mode instruction. It can be 1, 1/16, 1/64
the RXC.
SYNDET/BD (Input or output terminal)
This is an input port for MODEM interface. The input status of the terminal can be
recognizedby the CPU reading status words.
DTR (Output terminal)
This is an output port for MODEM interface. It is possible to set the status of DTR by a
command.
CTS (Input terminal)
This is an input terminal for MODEM interface which is used for controlling a transmit
circuit. The terminal controls data transmission if the device is set in "TX Enable" status by
a command.
level.
102
RTS (Output terminal)
This is an output port for MODEM interface. It is possible to set the status RTS by a
command. The 8251 functional configuration is programmed by software. Operation
between the 8251 anda CPU is executed by program control. Table 1 shows the
operation between a CPU and thedevice.
Summary of Control Signals for 8251
Control Words
1) Mode Instruction
Mode instruction is used for setting the function of the 8251. Mode instruction will be in
"wait for write" at either internal reset or external reset. That is, the writing of a control
word after resetting will be recognized as a "mode instruction."
Items set by mode instruction are as follows:
103
Fig 3.10: Bit configuration of Mode instruction (Asynchronous)
• Synchronous/asynchronous mode
• Character length
• Parity bit
The bit configuration of mode instruction is shown in Figures 12 and 13. In the case of
synchronous mode, it is necessary to write one-or two byte sync characters. If sync characters
were written, a function will be set because the writing of sync characters constitutes part of
mode instruction.
104
Fig 3.11: Bit configuration of mode instruction(synchronous)
2) Command
Command is used for setting the operation of the 8251. It is possible to write a
commandwhenever necessary after writing a mode instruction and sync characters as
shown in figure 14.
• Receive Enable/Disable
• Internal resetting
106
Status Word
It is possible to see the internal status of the 8251 by reading a status word. The bit
configuration of status word is shown in Fig.15.
107
8253(8254) PROGRAMMABLE INTERVAL TIMER:
The 8254 programmable Interval timer consists of three independent 16-bit programmable
counters (timers). Each counter is capable of counting in binary or binary coded decimal.
The maximum allowable frequency to any counter is 10MHz. This device is useful whenever
the microprocessor must control real-time events. The timer in a personal computer is an
8253. To operate a counter a 16-bit count is loaded in its register and on command, it begins
to decrement the count until it reaches 0. At the end of the count it generates a pulse, which
interrupts the processor. The count can count either in binary or BCD Each counter in the
block diagram has 3 logical lines connected to it. Two of these lines, clock and gate, are
inputs. The third, labeled OUT is an output.
108
Data bus buffer- It is a communication path between the timer and the microprocessor. The
buffer is 8-bit and bidirectional. It is connected to the data bus of the microprocessor. Read
/write logic controls the reading and the writing of the counter registers. Control word register,
specifies the counter to be used and either a Read or a write operation. Data is transmitted
or received by the buffer upon execution of INPUT instruction from CPU as shown in figure
16. The data bus buffer has three basic functions,
The data bus buffer is connected to microprocessor using D7 – D0 pins which are also
bidirectional. The data transfer is through these pins. These pins will be in high- impedance (or this
state) condition until the 8253 is selected by a LOW or CS and either the read operation requested by a
LOW RD on the input or a write operation WR requested by the input going LOW.
Read/ Write Logic:
It accepts inputs for the system control bus and in turn generation the control signals for overall
device operation. It is enabled or disabled by CS so that no operation can occur to change the
function unless the device has been selected as the system logic.
CS : The chip select input is used to enable the communicate between 8253 and themicroprocessor by means
of data bus. A low an CS enables the data bus buffers, while a high disable the buffer. The CS input does not
109
have any affect on the operation of threetimes once they have been initialized. The normal configuration of a
system employs an decode logic which actives CS line, whenever a specific set of addresses thatcorrespond to
8253 appear on the address bus.
RD & WR :
The read ( RD ) and write WR pins central the direction of data transfer on the 8-bit bus.
Whenthe input RD pin is low. Then CPU is inputting data from 8253 in the form of counter
value. When WR pins is low, then CPU is sending data to 8253 in the form of mode
information or loading counters. The RD &WR should not both be low
simultaneously. When RD & WR pins are HIGH, the data bus buffer is disabled.
A0 & A1:
These two input lines allow the microprocessor to specify which one of the internal register
in the 8253 is going to be used for the data transfer. Fig shows how these two lines are used
to select either the control word register or one of the 16-bit counters.
110
Control word register:
It is selected when A0 and A1 . It the accepts information from the data bus buffer and
stores itin a register. The information stored in then register controls the operation mode of
each counter,selection of binary or BCD counting and the loading of each counting and the
loading of each count register. This register can be written into, no read operation of this
content is available.
Counters:
Each of the times has three pins associated with it. These are CLK (CLK) the gate (GATE)
and the output (OUT).
CLK:
This clock input pin provides 16-bit times with the signal to causes the times to decrement maxm
clock input is 2.6MHz. Note that the counters operate at the negative edge (H1 to L0) of this
clock input. If the signal on this pin is generated by a fixed oscillator then the user has
implemented a standard timer. If the input signal is a string of randomly occurring pulses,
then it is called implementation of a counter.
GATE:
The gate input pin is used to initiate or enable counting. The exact effect of the gate signal
dependson which of the six modes of operation is chosen.
OUTPUT:
The output pin provides an output from the timer. It actual use depends on the mode of
operationof the timer. The counter can be read ―in the fly‖ without inhibiting gate pulse or
clock input.
111
CONTROL WORD OF 8253
Mode 0: The output goes high after the terminal count is reached. The counter stops if the
Gate islow.. The timer count register is loaded with a count (say 6) when the WR line is made
low by the processor. The counter unit starts counting down with each clock pulse. The
output goes highwhen the register value reaches zero. In the mean time if the GATE is made
low the count is suspended at the value(3) till the GATE is enabled again .
112
CLK
WR
6 5 4 3 2 1
OUT
GATE
CLK
WR
6 5 4 3 3 3 2 1
OUT
GATE
CLK
WR
GATE (trigger)
5 4 3 2 1
OUT
Mode 1 The Gate goes high. The output goes low for the period
depending on the count
CLK
WR
GATE (trigger)
114
OUT 4 3 3 4 3 2 1
Mode 1 The Gate pulse is disabled momentarily causing the counter to stop.
In this mode it operates as a rate generator. The output goes high for a period that equals
the timeof count down of the count register (3 in this case). The output goes low exactly for
one clock period before it becomes high again. This is a periodic operation.
CLK
WR
GATE
3 2 1 3 2 1
OUT
115
CLK
WR
GATE
momentarily.
It is similar to Mode 2 but the output high and low period is symmetrical. The output
goes high after the count is loaded and it remains high for period which equals the count
down period of the counter register. The output subsequently goes low for an equal period
and hence generates a symmetrical square wave unlike Mode 2. The GATE has no role here.
WR
n=
4 OUT (n=4)
OUT (n=5)
116
CLK
In this mode after the count is loaded by the processor the count down starts. The output
goes low for one clock period after the count down is complete. The count down can be
suspended bymaking the GATE low . This is also called a software triggered strobe as the
count down is initiated by a program.
WR
OUT
4 3 2 1
CLK
WR
GATE
OUT
4 3 3 2 1
117
LK
The count is loaded by the processor but the count down is initiated by the GATE pulse. The
transition from low to high of the GATE pulse enables count down. The output goes low for
one clock period after the count down is complete.
WR
GATE
OUT
5 4 3 2 1
CLK
118
FEAUTURES OF 8259
The Intel 8259A Programmable Interrupt Controller handles up to eight vectored priority
interrupts for the CPU. It is cascadable for up to 64 vectored priority interrupts without
additional circuitry. It is packaged in a 28-pin DIP, uses NMOS technology and requires a
single a5V supply. Circuitry is static, requiring no clock input. The 8259A is designed to
minimize the software and real time overhead in handling multi-level priority interrupts. It
has several modes, permitting optimization for a variety of system requirements. The 8259A
is fully upward compatible with the Intel 8259. Software originally written for the 8259 will
operate the 8259Ain all 8259 equivalent modes (MCS-80/85, Non-Buffered, Edge Triggered).
Pin Diagram of 8259is shown in figure 3.17.
120
Fig. 3.18 Block Diagram of 8259
A more desirable method would be one that would allow the microprocessor to be
executing its main program and only stop to service peripheral devices when it is told to do
so bythe device itself. In effect, the method would provide an external asynchronous input
that would inform the processor that it should complete whatever instruction that is
currently being executedand fetch a new routine that will service the requesting device. Once
this servicing is complete, however, the processor would resume exactly where it left off. This
method is called Interrupt. It is easy to see that system throughput would drastically increase,
and thus more tasks could be assumed by the micro-computer to further enhance its cost
effectiveness. Block Diagram of 8259is shown in figure 18.
The interrupts at the IR input lines are handled by two registers in cascade, the
Interrupt Request Register (IRR) and the In-Service (ISR). The IRR is used to store all the
interrupt levels which are requesting service; and the ISR is used to store all the interrupt
levels which are being serviced.
PRIORITY RESOLVER
This logic block determines the priorites of the bits set in the IRR. The highest priority is
selected and strobed into the corresponding bit of the ISR during INTA pulse.
The IMR stores the bits which mask the interrupt lines to be masked. The IMR operates on
the IRR. Masking of a higher priority input will not affect the interrupt request lines of lower
quality.
INT (INTERRUPT)
This output goes directly to the CPU interrupt input. The VOH level on this line is designed
to befully compatible with the 8080A, 8085A and 8086 input levels.
122
INTA (INTERRUPT ACKNOWLEDGE)
INTA pulses will cause the 8259A to release vectoring information onto the data bus. The
formatof this data depends on the system mode (mPM) of the 8259A.
This 3-state, bidirectional 8-bit buffer is used to inter-face the 8259A to the system Data Bus.
Control words and status information are transferred through the Data Bus Buffer.
The function of this block is to accept Output commands from the CPU. It contains the
Initialization Command Word (ICW) registers and Operation Command Word (OCW)
registers which store the various control formats for device operation. This function block
also allows the status of the 8259A to be transferred onto the Data Bus.
CS (CHIP SELECT)
A LOW on this input enables the 8259A. No reading or writing of the chip will occur
unless the device is selected.
WR (WRITE)
A LOW on this input enables the CPU to write con-trol words (ICWs and OCWs)
to the8259A. RD (READ)
A LOW on this input enables the 8259A to send the status of the Interrupt Request
Register (IRR), In Service Register (ISR), the Interrupt Mask Register (IMR), or the
Interrupt level onto the Data Bus.
123
A0
This input signal is used in conjunction with WR and RD signals to write commands
into the various command registers, as well as reading the various status registers of the chip.
This line can be tied directly to one of the address lines.
INTERRUPT SEQUENCE
The powerful features of the 8259A in a microcomputer system are its programmability and
the interrupt routine addressing capability. The latter allows direct or indirect jumping to
the specificinterrupt routine requested without any polling of the interrupting devices. The
normal sequence of events during an interrupt depends on the type of CPU being used.
1. One or more of the INTERRUPT REQUEST lines (IR7±0) are raised high, setting the
correspond-ing IRR bit(s).
2. The 8259A evaluates these requests, and sends an INT to the CPU, if appropriate.
3. The CPU acknowledges the INT and responds with an INTA pulse.
4. Upon receiving an INTA from the CPU group, the highest priority ISR bit is set, and the
correspond-ing IRR bit is reset. The 8259A will also release a CALL instruction code
(11001101) onto the 8-bit Data Bus through its D7±0 pins.
5. This CALL instruction will initiate two more INTA pulses to be sent to the 8259A from
the CPU group.
6. These two INTA pulses allow the 8259A to re-lease its preprogrammed subroutine address
onto the Data Bus. The lower 8-bit address is released at the first INTA pulse andthe higher
8-bit address is released at the second INTA pulse.
7. This completes the 3-byte CALL instruction re-leased by the 8259A. In the AEOI mode
the ISR bit is reset at the end of the third INTA pulse. Otherwise, the ISR
124
bit remains set until an appropriate EOI command is issued at the end of the
interruptsequence.
8. The events occurring in an 8086 system are the same until step 4.
9. Upon receiving an INTA from the CPU group, the highest priority ISR bit is set and the
corresponding IRR bit is reset. The 8259A does not drive the Data Bus during thiscycle.
10. The 8086 will initiate a second INTA pulse. During this pulse, the 8259A releases an 8- bit
pointer onto the Data Bus where it is read by the CPU.
11. This completes the interrupt cycle. In the AEOI mode the ISR bit is reset at the end of the
second INTA pulse. Otherwise, the ISR bit remains set until an appropriate EOI command
is issued at the end of the interrupt subroutine.
If no interrupt request is present at step 4 of either sequence (i.e., the request was too
short in duration) the 8259A will issue an interrupt level 7. Both the vectoring bytes and the
CASlines will look like an interrupt level 7 was requested.
When the 8259A PIC receives an interrupt, INT be-comes active and an interrupt
acknowledge cycle is started. If a higher priority interrupt occurs between the two INTA
pulses, the INT line goes inactive immediately after the second INTA pulse. After an un-
specified amount of time the INT line is activated again to signify the higher priority
interrupt waiting for service. This inactive time is not specified and can vary between parts.
The designer should be aware of this consideration when designing a sys-tem which uses the
8259A. It is recommended that proper asynchronous design techniques be followed.
a. The edge sense circuit is reset, which means that following initialization, an interrupt
request (IR) input must make a low-to-high transition to generate an interrupt.
b. The Interrupt Mask Register is cleared.
f. If IC4 e 0, then all functions selected in ICW4are set to zero. (Non-Buffered mode*, no
Auto-EOI, MCS-80, 85 system).
126
Fig 3.19 . Initialization Command Word Format
127
OPERATION COMMAND WORDS
After the Initialization Command Words (ICWs) are programmed into the 8259A, the chip
is ready to accept interrupt requests at its input lines. However, during the 8259A operation,
a selection of algorithms can command the 8259A to operate in various modes through the
Operation Command Words (OCWs). Operation Command Word format is as shown in
figure
128
Fig 3.20 b. Operation Command Word Format
8085 has 16 address lines (A0 - A15), hence a maximum of 64 KB (= 216 bytes) of memory
locations can be interfaced with it. The memory address space of the 8085 takes values
from0000H to FFFFH.
The 8085 initiates set of signals such as IO/M , RD and WR when it wants to read from
and write into memory. Similarly, each memory chip has signals such as CE or CS (chip
enable or chip select), OE or RD (output enable or read) and WE or WR (write enable
or write) associated with it.
129
Table 8 Status of IO/M , RD and WR signals during memory read and write operations
IO/M Operation
RD WR
0 0 1 8085 reads data from memory
0 1 0 8085 writes data into memory
Using IO/M , RD and WR signals, two control signals MEMR (memory read) and
MEMW (memory write) are generated. Fig. 16 shows the circuit used to generate
thesesignals.
When is IO/M high, both memory control signals are deactivated irrespective of the
statusof RD and WR signals.
Ex: Interface an IC 2764 with 8085 using NAND gate address decoder such that
theaddress range allocated to the chip is 0000H – 1FFFH.
Specification of IC 2764:
Chip is enabled whenever the 8085 places an address allocated to EPROM chip in
the address bus. This is shown in Fig. 17.
Fig. 3.22 Interfacing IC 2764 with the 8085 Table 9 Address allocated to IC 2764
Ex: Interface a 6264 IC (8K x 8 RAM) with the 8085 using NAND gate decoder
suchthat the starting address assigned to the chip is 4000H.
Specification of IC 6264:
8K x 8 RAM
131
8 KB = 213 bytes
13 address lines
The ending address of the chip is 5FFFH (since 4000H + 1FFFH = 5FFFH). When the
address 4000H to 5FFFH are written in binary form, the values in the lines A15, A14,
A13 are 0, 1 and 0 respectively. The NAND gate is designed such that when the lines
A15 and A13 carry 0 and A14 carries 1, the output of the NAND gate is 0. The NAND
gate output is in turn connected to the CE1 pin of the RAM chip. A NAND output of 0
selects the RAM chip for read or write operation, since CE2 is already 1 because of its
connection to +5V. Fig. 18 shows the interfacing of IC 6264 with the 8085.
Ex: Interface two 6116 ICs with the 8085 using 74LS138 decoder such that the starting
addresses assigned to them are 8000H and 9000H, respectively.
Specification of IC 6116:
2 K x 8 RAM
2 KB = 211 bytes
11 address lines
132
6116 has 11 address lines and since 2 KB, therefore ending addresses of 6116 chip 1 is
and chip 2 are 87FFH and 97FFH, respectively. Table 10 shows the address range of the
two chips.
Interfacing:
• Three address lines of 8085 having specific value for a particular RAM are connected
to the three select inputs (C, B and A) of 74LS138 decoder.
• Table 10 shows that A13=A12=A11=0 for the address assigned to RAM 1 and
A13=0, A12=1 and A11=0 for the address assigned to RAM 2.
• Remaining lines of 8085 which are constant for the address range assigned to the two
RAM are connected to the enable inputs of decoder.
• When 8085 places any address between 8000H and 87FFH in the address bus, the
select inputs C, B and A of the decoder are all 0. The Y0 output of the decoder is also
0, selecting RAM 1.
133
• When 8085 places any address between 9000H and 97FFH in the address bus, the
select inputs C, B and A of the decoder are 0, 1 and 0. The Y2 output of the decoder
is also 0, selecting RAM 2.
Fig. 3.24 Interfacing two 6116 RAM chips using 74LS138 decoder
In this method, the I/O devices are treated differently from memory chips. The
control signals I/O read ( IOR ) and I/O write ( IOW ), which are derived from the
IO/M , RD and
WR signals of the 8085, are used to activate input and output devices,
respectively.
Generation of these control signals is shown in Fig. 20. Table 11 shows the status of
IO/M ,RD and WR signals during I/O read and I/O write operation.
134
Fig. 3.25 Generation of IOR and IOW signals
IN instruction is used to access input device and OUT instruction is used to access output
device. Each I/O device is identified by a unique 8-bit address assigned to it. Since the
control signals used to access input and output devices are different, and all I/O device
use 8-bit address, a maximum of 256 (28) input devices and 256 output devices can be
interfaced with 8085.
Table 3.2 Status of IOR and IOW signals in 8085.
IO/ Operation
M RD WR IOR IOW
1 0 1 0 1 I/O read operation
1 1 0 1 0 I/O write operation
0 X X 1 1 Memory read or write operation
Ex: Interface an 8-bit DIP switch with the 8085 such that the address assigned to the
DIPswitch if F0H.
IN instruction is used to get data from DIP switch and store it in accumulator.
Stepsinvolved in the execution of this instruction are:
• Address F0H is placed in the lines A0 – A7 and a copy of it in lines A8 – A15.
ii.
The IOR signal is activated ( IOR = 0), which makes the selected input device to
place its data in the data bus.
iii. The data in the data bus is read and store in the accumulator.
135
Fig. 3.26 shows the interfacing of DIP switch.
A7 A6 A5 A4 A3 A2 A1 A0
1 1 1 1 0 0 0 0 = F0H
A0 – A7 lines are connected to a NAND gate decoder such that the output of NAND gate is
0. The output of NAND gate is ORed with the IOR signal and the output of OR gate is
connected to 1G and 2G of the 74LS244. When 74LS244 is enabled, data from the DIP
switch is placed on the data bus of the 8085. The 8085 read data and store in the
accumulator. Thus data from DIP switch is transferred to the accumulator.
136
4. MEMORY MAPPED I/O INTERFACING
The address lines are connected to AND gates. The output of these gates along with
MEMR signal are connected to a NAND gate, so that when the address F0F0H is
placed in the address bus and MEMR = 0 its output becomes 0, thereby enabling the
buffer 74LS244. The data from the DIP switch is placed in the 8085 data bus. The 8085
reads the data from the data bus and stores it in the accumulator.
To interface the ADC with 8085, we need 8255 Programmable Peripheral Interface
chip with it. Let us see the circuit diagram of connecting 8085, 8255 and the ADC
converter.
138
The PortA of 8255 chip is used as the input port. The PC7 pin of Port Cupper is
connected to the End of Conversion (EOC) Pin of the analog to digital converter. This
port is also used as input port. The Clower port is used as output port. The PC2-0 lines
are connected to three address pins of this chip to select input channels. The PC3 pin is
connected to the Start of Conversion (SOC) pin and ALE pin of ADC 0808/0809.
Now let us see a program to generate digital signal from analog data. We are using IN0
as input pin, so the pin selection value will be 00H.
Program
IN0
139
Fig 3.29: Flow chart-ADC
140
DAC
•The processor sends an address, which is decoded by decoder in the microprocessor system to produce
chip select signal.
• Then the processor sends a digital data to latch. The buffer and inverter will produce sufficient delay
for CS signal so that, the latch is clocked only after the data is arrived at the input lines of the latch.
• When the latch is clocked the digital data is send to DAC. The DAC will produce a corresponding
current signal, which is converted to voltage signal by the op-amp 741.
• The typical settling time of DAC0800 is 150nsec. Therefore the processor need not wait for loading
next data
PROGRAMS FOR VARIOUS WAVEFORM GENERATION USING DAC
141
QUESTION BANK
PART A
1. What is interfacing
2. Distinguish memory mapped I/O and I/O mapped I/O
3. Draw the control word for 8255
4. Configure 8255 as PORT A-I/P, PORT B-O/P & PORT C LOWER-I/P , PORTC UPPER-O/P
5. Set PCO using bit set reset mode
6. Write the control word to generate square wave using 8253
7. What is the need of Priority resolver in 8259
8. How many interrupts maximum a 8259 can support
9. What is USART
10. Define resolution in DAC and ADC
11. What is EOC and SOC in ADC
12. Write an ALP to generate sawtooth using DAC
13. What are the two command words used in 8259
14. Explain mode 5 of 8253
15. Explain the transmitter section of 8251 USART
PART B
1. Explain with neat diagram 8255 PPI
2. With neat diagram explain how serial communication is done using 8251
3. With neat diagram explain the 8253 timer
4. Explain the various modes of 8253 timer
5. Discuss about 8259 PIC
6. Interface ADC to 8085 and explain
7. Interface DAC with 8085 and generate various waveforms
142
SCHOOL OF ELECTRICAL AND ELECTRONICS
DEPARTMENT OF ELECTRONICS AND COMMUNICATION ENGINEERING
143
UNIT 4 8051 MICROCONTROLLER
8051 Architecture: Microcontroller Hardware – I/O Pins, Ports – Internal and External memory
– Counters and Timers – Serial data I/O – Interrupts – 8051 Assembly Language Programming:
Addressing modes, Instruction set of 8051, Data transfer instructions, Arithmetic and Logical
Instructions, Jump and Call Instructions interrupts and return interrupts and return interrupt
handling.
144
Fig 4.1: 8051- Architecture
Internal ROM and RAM, I/O ports with programmable pins, Timers and counters, Serial
Data communication
145
PROGRAMMING MODEL OF 8051
146
The above diagram shows the programming model of 8051.
Special Function Registers (SFRs) are a sort of control table used for running and monitoring
the operation of the microcontroller. Each of these registers as well as each bit they include,
has its name, address in the scope of RAM and precisely defined purpose such as timer
control, interrupt control, serial communication control etc. Even though there are 128
memory locations intended to be occupied by them, the basic core, shared by all types of 8051
microcontrollers, has only 21 such registers. Rest of locations are intensionally left
unoccupied in order to enable the manufacturers to further develop microcontrollers
keeping them compatible with the previous versions. It also enables programs written a long
time ago for microcontrollers which are out of production now to be used today.
147
Fig 4.3 : SFR
A Register (Accumulator)
A register is a general-purpose register used for storing intermediate results obtained during
operation. Prior to executing an instruction upon any number or operand it is necessary to
store itin the accumulator first. All results obtained from arithmetical operations performed
by the ALU are stored in the accumulator. Data to be moved from one register to another
must go through theaccumulator. In other words, the A register is the most commonly used
register and it is impossible to imagine a microcontroller without it. More than half
instructions used by the 8051 microcontroller use somehow the accumulator.
B Register
Multiplication and division can be performed only upon numbers stored in the A and B
registers.All other instructions in the program can use this register as a spare accumulator
148
(A).
This is a common name for 8 general-purpose registers (R0, R1, R2 ...R7). Even though they
are not true SFRs, they deserve to be discussed here because of their purpose. They occupy
4 banks within RAM. Similar to the accumulator, they are used for temporary storing
variables and intermediate results during operation. Which one of these banks is to be active
depends on two bits of the PSW Register. Active bank is a bank the registers of which are
currently used.
The following example best illustrates the purpose of these registers. Suppose it is necessary
to perform some arithmetical operations upon numbers previously stored in the R registers:
(R1+R2) - (R3+R4). Obviously, a register for temporary storing results of addition is needed.
This is how it looks in the program:
149
Program Status Word (PSW) Register
P - Parity bit. If a number stored in the accumulator is even then this bit will be automatically
set (1), otherwise it will be cleared (0). It is mainly used during data transmit and receive via
serial communication.
OV Overflow occurs when the result of an arithmetical operation is larger than 255 and
cannot be stored in one register. Overflow condition causes the OV bit to be set (1).
Otherwise, it will becleared (0).
RS0, RS1 - Register bank select bits. These two bits are used to select one of four register
banks of RAM. By setting and clearing these bits, registers R0-R7 are stored in one of four
banksof RAM.
0 0 Bank0 00h-07h
0 1 Bank1 08h-0Fh
1 0 Bank2 10h-17h
1 1 Bank3 18h-1Fh
CY - Carry Flag is the (ninth) auxiliary bit used for all arithmetical operations and shift
instructions.
DPTR register is not a true one because it doesn't physically exist. It consists of two separate
registers: DPH (Data Pointer High) and (Data Pointer Low). For this reason it may be treated
as a16-bit register or as two independent 8-bit registers. Their 16 bits are primarly used for
external memory addressing. Besides, the DPTR Register is usually used for storing data and
intermediateresults.
150
Fig 4.8: DPTR
Stack Pointer (SP) Register
Fig 4.10: P0
If neither external memory nor serial communication system are used then 4 ports with in
total of32 input/output pins are available for connection to peripheral environment. Each bit
within theseports affects the state and performance of appropriate pin of the microcontroller.
151
Thus, bit logic state is reflected on appropriate pin as a voltage (0 or 5 V) and vice versa,
voltage on a pin reflects the state of appropriate port bit.
As mentioned, port bit state affects performance of port pins, i.e. whether they will be
configuredas inputs or outputs. If a bit is cleared (0), the appropriate pin will be configured
as an output, while if it is set (1), the appropriate pin will be configured as an input. Upon
reset and power-on, all port bits are set (1), which means that all appropriate pins will be
configured as inputs.
Pinout Description
Pins 1-8: Port 1 Each of these pins can be configured as an input or an output.
Pin 9: RS A logic one on this pin disables the microcontroller and clears the contents of most
registers. In other words, the positive voltage on this pin resets the microcontroller. By
applying logic zero to this pin, the program starts execution from the beginning.
Pins10-17: Port 3 Similar to port 1, each of these pins can serve as general input or output.
Besides, all of them have alternative functions:
Pin 10: RXD Serial asynchronous communication input or Serial synchronous communication
output.
Pin 11: TXD Serial asynchronous communication output or Serial synchronous communication
clock output.
152
Operating frequency is usually connected to these pins. Instead of it, miniature ceramics
resonators can also be used for frequency stability. Later versions of microcontrollers
operate ata frequency of 0 Hz up to over 50 Hz.
Pin 21-28: Port 2 If there is no intention to use external memory then these port pins
areconfigured as general inputs/outputs. In case external memory is used, the higher
address byte,
i.e. addresses A8-A15 will appear on this port. Even though memory with capacity of 64Kb is
not used, which means that not all eight port bits are used for its addressing, the rest of
them arenot available as inputs/outputs.
Pin 29: PSEN If external ROM is used for storing program then a logic zero (0) appears
on itevery time the microcontroller reads a byte from memory.
Pin 30: ALE Prior to reading from external memory, the microcontroller puts the lower
address byte (A0-A7) on P0 and activates the ALE output. After receiving signal from the
ALE pin, the external register (usually 74HCT373 or 74HCT375 add-on chip) memorizes the
state of P0 and uses it as a memory chip address. Immediately after that, the ALU pin is
returned its previous logic state and P0 is now used as a Data Bus. As seen, port data
multiplexing is performed by means of only one additional (and cheap) integrated circuit. In
other words, this port is used for both data and address transmission.
Pin 31: EA By applying logic zero to this pin, P2 and P3 are used for data and address
transmission with no
PIN DIAGRAM OF 8051
153
Memory Organization
The 8051 has two types of memory and these are Program Memory and Data Memory.
Program Memory (ROM) is used to permanently save the program being executed, while
Data Memory (RAM) is used for temporarily storing data and intermediate results created
and used during the operation of the microcontroller. Depending on the model in use (we are
still talking about the 8051 microcontroller family in general) at most a few Kb of ROM and
128 or 256 bytes of RAM is used. However All 8051 microcontrollers have a 16-bit addressing
bus and are capable of addressing 64 kb memory. It is neither a mistake nor a big ambition
of engineers who were working on basic core development. It is a matter of smart memory
organization which makes these microcontrollers a real “programmers’ goody“.Program
Memory. The first models of the 8051 microcontroller family did not have internal program
memory. It was added as an external separate chip. These models are recognizable by their
label beginning with 803 (for example 8031 or 8032). All later models have a few Kbyte ROM
embedded. Even though such an amount of memory is sufficient for writing most of the
programs, there are situations when it is necessaryto use additional memory as well. A typical
example is so called lookup tables. They are used in cases when equations describing some
processes are too complicated or when there is no time forsolving them. In such cases all
necessary estimates and approximates are executed in advance and the final results are put
in the tables (similar to logarithmic tables).
How does the microcontroller handle external memory depends on the EA pin logic state:
154
then theprogram stored in external memory.
In both cases, P0 and P2 are not available for use since being used for data and
addresstransmission. Besides, the ALE and PSEN pins are also used.
Data Memory
As already mentioned, Data Memory is used for temporarily storing data and intermediate
resultscreated and used during the operation of the microcontroller. Besides, RAM memory
built in the 8051 family includes many registers such as hardware counters and timers,
input/output ports, serial data buffers etc. The previous models had 256 RAM locations,
while for the later models this number was incremented by additional 128 registers.
However, the first 256 memory locations (addresses 0-FFh) are the heart of memory common
to all the models belonging to the 8051 family. Locations available to the user occupy memory
space with addresses 0-7Fh, i.e. first 128 registers. This part of RAM is divided in several
blocks.
The first block consists of 4 banks each including 8 registers denoted by R0-R7. Prior to
accessing any of these registers, it is necessary to select the bank containing it. The next
memory block (address 20h-2Fh) is bit- addressable, which means that each bit has its own
address (0- 7Fh). Since there are 16 such registers, this block contains in total of 128 bits with
separate addresses (address of bit 0 of the 20h byte is 0, while address of bit 7 of the 2Fh
byte is 7Fh). The third group of registers occupy addresses 2Fh-7Fh, i.e. 80 locations, and
does not have any special functions or features.
Additional RAM
In order to satisfy the programmers’ constant hunger for Data Memory, the manufacturers
decided to embed an additional memory block of 128 locations into the latest versions of the
8051 microcontrollers. However, it’s not as simple as it seems to be… The problem is that
electronics performing addressing has 1 byte (8 bits) on disposal and is capable of reaching
only the first 256 locations, therefore. In order to keep already existing 8-bit architecture
and compatibility with other existing models a small trick was done.
What does it mean? It means that additional memory block shares the same addresses with
locations intended for the SFRs (80h- FFh). In order to differentiate between these two
physically separated memory spaces, different ways of addressing are used. The SFRs
memory locations are accessed by direct addressing, while additional RAM memory
locations are accessed by indirect addressing.
155
Fig 4.13 : Internal RAM
156
Memory expansion
In case memory (RAM or ROM) built in the microcontroller is not sufficient, it is possible to
addtwo external memory chips with capacity of 64Kb each. P2 and P3 I/O ports are used for
their addressing and data transmission.
157
Even though additional memory is rarely used with the latest versions of the
microcontrollers, we will describe in short what happens when memory chips are connected
according to the previous schematic. The whole process described below is performed
automatically.
• When the program during execution encounters an instruction which resides in external
memory (ROM), the microcontroller will activate its control output ALE and set the first
8 bits of address (A0-A7) on P0. IC circuit 74HCT573 passes the first 8 bits to memory
address pins.
• A signal on the ALE pin latches the IC circuit 74HCT573 and immediately afterwards 8
higher bits of address (A8-A15) appear on the port. In this way, a desired location of
additional program memory is addressed. It is left over to read its content.
• Port P0 pins are configured as inputs, the PSEN pin is activated and the microcontroller
reads from memory chip.
Similar occurs when it is necessary to read location from external RAM. Addressing is
performed in the same way, while read and write are performed via signals appearing on the
control outputs RD (is short for read) or WR (is short for write).
ADDRESSING MODES
An "addressing mode" refers to how you are addressing a given memory location. In
summary, the addressing modes are as follows, with an example of each:
Immediate Addressing
MOV A,#6Ah
This instruction uses Immediate Addressing because the Accumulator will be loaded with
the value that immediately follows; in this case 6A (hexidecimal).
Immediate addressing is very fast since the value to be loaded is included in the instruction.
However, since the value to be loaded is fixed at compile-time it is not very flexible.
158
Direct Addressing
This instruction will read the data out of Internal RAM address 30 (hexidecimal) and store
it in the Accumulator.
Direct addressing is generally fast since, although the value to be loaded isnt included in the
instruction, it is quickly accessable since it is stored in the 8051s Internal RAM. It is also
much more flexible than Immediate Addressing since the value to be loaded is whatever is
found at thegiven address--which may be variable.
Also, it is important to note that when using direct addressing any instruction which refers
to an address between 00h and 7Fh is referring to Internal Memory. Any instruction which
refers to an address between 80h and FFh is referring to the SFR control registers that
control the 8051 microcontroller itself.
Indirect Addressing
Indirect addressing is a very powerful addressing mode which in many cases provides an
exceptional level of flexibility. Indirect addressing is also the only way to access the extra 128
bytes of Internal RAM found on an 8052.
MOV A,@R0
This instruction causes the 8051 to analyze the value of the R0 register. The 8051 will then
load the accumulator with the value from Internal RAM which is found at the address
indicated by R0.
For example, lets say R0 holds the value 40h and Internal RAM address 40h holds the value
67h.When the above instruction is executed the 8051 will check the value of R0. Since R0
holds 40h the 8051 will get the value out of Internal RAM address 40h (which holds 67h) and
store it in theAccumulator. Thus, the Accumulator ends up holding 67h.
Indirect addressing always refers to Internal RAM; it never refers to an SFR. Thus, in a
prior example we mentioned that SFR 99h can be used to write a value to the serial port.
Thus one may think that the following would be a valid solution to write the value 1 to the
serial port:
MOV R0,#99h ;Load the address of the serial port
MOV @R0,#01h ;Send 01 to the serial port -- WRONG!!
This is not valid. Since indirect addressing always refers to Internal RAM these two
instructions would write the value 01h to Internal RAM address 99h on an 8052. On an 8051
these two instructions would produce an undefined result since the 8051 only has 128 bytes
159
of Internal RAM.
External Direct
External Memory is accessed using a suite of instructions which use what I call "External
Direct"addressing. I call it this because it appears to be direct addressing, but it is used to
access externalmemory rather than internal memory.
There are only two commands that use External Direct addressing mode:
MOVXA,@DPT R
MOVX
@DPTR,A
Both commands utilize DPTR. In these instructions, DPTR must first be loaded with the
address of external memory that you wish to read or write. Once DPTR holds the correct
external memory address, the first command will move the contents of that external memory
address into the Accumulator. The second command will do the opposite: it will allow you to
write the value of the Accumulator to the external memory address pointed to by DPTR.
External Indirect
External memory can also be accessed using a form of indirect addressing which I call
External Indirect addressing. This form of addressing is usually only used in relatively small
projects that have a very small amount of external RAM. An example of this addressing mode
is:
MOVX @R0,A
Once again, the value of R0 is first read and the value of the Accumulator is written to that
address in External RAM. Since the value of @R0 can only be 00h through FFh the project
would effectively be limited to 256 bytes of External RAM. There are relatively simple
hardware/software tricks that can be implemented to access more than 256 bytes of memory
using External Indirect addressing.
INSTRUCTION SET:
The process of writing program for the microcontroller mainly consists of giving instructions
(commands) in the specific order in which they should be executed in order to carry out a
specific task. As electronics cannot “understand” what for example an instruction “if the
push button is pressed- turn the light on” means, then a certain number of simpler and
precisely defined orders that decoder can recognise must be used. All commands are known
as INSTRUCTION SET. All microcontrollers compatibile with the 8051 have in total of 255
instructions, i.e. 255 different words available for program writing.
At first sight, it is imposing number of odd signs that must be known by heart. However, It
is not so complicated as it looks like. Many instructions are considered to be “different”, even
though they perform the same operation, so there are only 111 truly different commands.
For example: ADD A,R0, ADD A,R1, ... ADD A,R7 are instructions that perform the same
160
operation (additon of the accumulator and register). Since there are 8 such registers, each
instruction is counted separately. Taking into account that all instructions perform only 53
operations (addition, subtraction, copy etc.) and most of them are rarely used in practice,
there are actually 20-30 abbreviations to be learned, which is acceptable.
Types of instructions
Depending on operation they perform, all instructions are divided in several groups:
• Arithmetic Instructions
• Branch Instructions
• Data Transfer Instructions
• Logic Instructions
• Bit-oriented Instructions
The first part of each instruction, called MNEMONIC refers to the operation an instruction
performs (copy, addition, logic operation etc.). Mnemonics are abbreviations of the name of
operation being executed. For example:
The other part of instruction, called OPERAND is separated from mnemonic by at least one
whitespace and defines data being processed by instructions. Some of the instructions have
no operand, while some of them have one, two or three. If there is more than one operand in
an instruction, they are separated by a comma. For example:
• RET - return from a subroutine;
• JZ TEMP - if the number in the accumulator is not 0, jump to the address marked as
TEMP;
• ADD A,R3 - add R3 and accumulator;
• CJNE A,#20,LOOP - compare accumulator with 20. If they are not equal, jump to the
address marked as LOOP;
Arithmetic instructions
ADD A,R1 - The result of addition (A+R1) will be stored in the accumulator.
Arithmetic Instructions
161
ADDC A,Rn Adds the register to the accumulator with a carry flag 1 1
ADDC Adds the direct byte to the accumulator with a carry flag 2 2
A,direct
ADDC A,@Ri Adds the indirect RAM to the accumulator with a carry flag 1 2
ADDC Adds the immediate data to the accumulator with a carry flag 2 2
A,#data
SUBB A,Rn Subtracts the register from the accumulator with a borrow 1 1
SUBB A,direct Subtracts the direct byte from the accumulator with a borrow 2 2
SUBB A,@Ri Subtracts the indirect RAM from the accumulator with a borrow 1 2
SUBB A,#data Subtracts the immediate data from the accumulator with a borrow 2 2
INC A Increments the accumulator by 1 1 1
INC Rn Increments the register by 1 1 2
INC Rx Increments the direct byte by 1 2 3
INC @Ri Increments the indirect RAM by 1 1 3
DEC A Decrements the accumulator by 1 1 1
DEC Rn Decrements the register by 1 1 1
DEC Rx Decrements the direct byte by 1 1 2
DEC @Ri Decrements the indirect RAM by 1 2 3
INC DPTR Increments the Data Pointer by 1 1 3
MUL AB Multiplies A and B 1 5
DIV AB Divides A by B 1 5
DA A Decimal adjustment of the accumulator according to BCD code 1 1
Branch Instructions
162
Fig 4.15: Jump Address Range
Branch Instructions
Data transfer instructions move the content of one register to another. The register the
content of which is moved remains unchanged. If they have the suffix “X” (MOVX), the data
is exchanged with external memory.
164
XCHD A,@Ri Exchanges the low-order nibble indirect RAM with the 1 3
accumulator
Logic Instructions
Logic instructions perform logic operations upon corresponding bits of two registers. After
execution, the result is stored in the first operand.
Logic Instructions
Mnemonic Description Byte Cycle
ANL A,Rn AND register to accumulator 1 1
ANL A,direct AND direct byte to accumulator 2 2
ANL A,@Ri AND indirect RAM to accumulator 1 2
ANL A,#data AND immediate data to accumulator 2 2
ANL direct,A AND accumulator to direct byte 2 3
ANL direct,#data AND immediae data to direct register 3 4
ORL A,Rn OR register to accumulator 1 1
ORL A,direct OR direct byte to accumulator 2 2
ORL A,@Ri OR indirect RAM to accumulator 1 2
ORL direct,A OR accumulator to direct byte 2 3
ORL direct,#data OR immediate data to direct byte 3 4
XRL A,Rn Exclusive OR register to accumulator 1 1
XRL A,direct Exclusive OR direct byte to accumulator 2 2
XRL A,@Ri Exclusive OR indirect RAM to accumulator 1 2
XRL A,#data Exclusive OR immediate data to accumulator 2 2
XRL direct,A Exclusive OR accumulator to direct byte 2 3
XORL direct,#data Exclusive OR immediate data to direct byte 3 4
CLR A Clears the accumulator 1 1
CPL A Complements the accumulator (1=0, 0=1) 1 1
SWAP A Swaps nibbles within the accumulator 1 1
RL A Rotates bits in the accumulator left 1 1
RLC A Rotates bits in the accumulator left through carry 1 1
RR A Rotates bits in the accumulator right 1 1
RRC A Rotates bits in the accumulator right through carry 1 1
165
Bit-oriented Instructions
Bit-oriented Instructions
Mnemonic Description Byte Cycle
CLR C Clears the carry flag 1 1
CLR bit Clears the direct bit 2 3
SETB C Sets the carry flag 1 1
SETB bit Sets the direct bit 2 3
CPL C Complements the carry flag 1 1
CPL bit Complements the direct bit 2 3
ANL C,bit AND direct bit to the carry flag 2 2
ANL C,/bit AND complements of direct bit to the carry flag 2 2
ORL C,bit OR direct bit to the carry flag 2 2
ORL C,/bit OR complements of direct bit to the carry flag 2 2
MOV C,bit Moves the direct bit to the carry flag 2 2
MOV bit,C Moves the carry flag to the direct bit 2 3
There are five interrupt sources for the 8051, which means that they can recognize 5
different events that can interrupt regular program execution. Each interrupt can be
enabled or disabled bysetting bits of the IE register. Likewise, the whole interrupt system
can be disabled by clearing the EA bit of the same register. Refer to figure below.
Now, it is necessary to explain a few details referring to external interrupts- INT0 and
INT1. Ifthe IT0 and IT1 bits of the TCON register are set, an interrupt will be generated
on high to lowtransition, i.e. on the falling pulse edge (only in that moment). If these bits
are cleared, an interrupt will be continuously executed as far as the pins are held low.
166
Fig 4.16:TCON
IE Register (Interrupt Enable)
Fig 4.17: IE
Interrupt Priorities
167
that the microcontroller knows whether to continue operation or meet a new interrupt
request,there is a priority list instructing it what to do.
1. Reset! The apsolute master. When a reset request arrives, everything is stopped and the
microcontroller restarts.
2. Interrupt priority 1 can be disabled by Reset only.
3. Interrupt priority 0 can be disabled by both Reset and interrupt priority 1.
The IP Register (Interrupt Priority Register) specifies which one of existing interrupt
sources have higher and which one has lower priority. Interrupt priority is usually
specified at the beginning of the program. According to that, there are several
possibilities:
The IP register bits specify the priority level of each interrupt (high or low priority).
Fig 4.18: IP
• PS - Serial Port Interrupt priority bit
o Priority 0
o Priority 1
• PT1 - Timer 1 interrupt priority
o Priority 0
o Priority 1
• PX1 - External Interrupt INT1 priority
168
o Priority 0
o Priority 1
• PT0 - Timer 0 Interrupt Priority
o Priority 0
o Priority 1
• PX0 - External Interrupt INT0 Priority
o Priority 0
o Priority 1
Handling Interrupt
Reset
Reset occurs when the RS pin is supplied with a positive pulse in duration of at least 2
machine cycles (24 clock cycles of crystal oscillator). After that, the microcontroller
generates an internal reset signal which clears all SFRs, except SBUF registers, Stack Pointer
and ports (the state of the first two ports is not defined, while FF value is written to the ports
configuring all their pins as inputs). Depending on surrounding and purpose of device, the
RS pin is usually connected to apower-on reset push button or circuit or to both of them.
Figure below illustrates one of the simplest circuit providing safe power-on reset.
169
Fig 4.19:Reset
Basically, everything is very simple: after turning the power on, electrical capacitor is being
charged for several milliseconds throgh a resistor connected to the ground. The pin is driven
highduring this process. When the capacitor is charged, power supply voltage is already
stable and the pin remains connected to the ground, thus providing normal operation of the
microcontroller.Pressing the reset button causes the capacitor to be temporarily discharged
and the microcontroller is reset. When released, the whole process is repeated…
Microcontrollers normally operate at very high speed. The use of 12 Mhz quartz crystal enables
1.00.00 instructions to be executed per second. Basically, there is no need for higher operating
rate. In case it is needed, it is easy to built in a crystal for high frequency. The problem arises
when it is necessary to slow down the operation of the microcontroller. For example during testing
in real environment when it is necessary to execute several instructions step by step in order to
check I/O pins' logic state.
170
1. External interrupt sensitive to the signal level should be enabled (for example INT0).
2. Three following instructions should be inserted into the program (at the 03hex. address):
What is going on? As soon as the P3.2 pin is cleared (for example, by pressing the button),
themicrocontroller will stop program execution and jump to the 03hex address will be
executed. This address stores a short interrupt routine consisting of 3 instructions.
The first instruction is executed until the push button is realised (logic one (1) on the P3.2
pin). The second instruction is executed until the push button is pressed again. Immediately
after that, the RETI instruction is executed and the processor resumes operation of the main
program. Uponexecution of any program instruction, the interrupt INT0 is generated and
the whole procedure is repeated (push button is still pressed). In other words, one button
press - one instruction
INPUT/OUTPUT PORTS
All 8051 microcontrollers have 4 I/O ports each comprising 8 bits which can be configured
as inputs or outputs. Accordingly, in total of 32 input/output pins enabling the
microcontroller to beconnected to peripheral devices are available for use.
Pin configuration, i.e. whether it is to be configured as an input (1) or an output (0), depends
on its logic state. In order to configure a microcontroller pin as an output, it is necessary to
apply a logic zero (0) to appropriate I/O port bit. In this case, voltage level on appropriate
pin will be 0.
171
Fig 4.20: Input / Output
172
Fig 4.22: Input / output
Output pin
A logic zero (0) is applied to a bit of the P register. The output FE transistor is turned on,
thus connecting the appropriate pin to ground.
Input pin
A logic one (1) is applied to a bit of the P register. The output FE transistor is turned off
and the appropriate pin remains connected to the power supply voltage over a pull-up
resistor of high resistance.
Logic state (voltage) of any pin can be changed or read at any moment. A logic zero (0) and
logic one (1) are not equal. A logic one (0) represents a short circuit to ground. Such a pin
acts asan output.
A logic one (1) is “loosely” connected to the power supply voltage over a resistor of high
resistance. Since this voltage can be easily “reduced” by an external signal, such a pin acts
as an input.
173
Port 0
The P0 port is characterized by two functions. If external memory is used then the lower
address byte (addresses A0-A7) is applied on it. Otherwise, all bits of this port are configured
as inputs/outputs.
The other function is expressed when it is configured as an output. Unlike other ports
consisting of pins with built-in pull-up resistor connected by its end to 5 V power supply,
pins of this port have this resistor left out. This apparently small difference has its
consequences:
When the pin is configured as an output, it acts as an “open drain”. By applying logic 0 to a
port bit, the appropriate pin will be connected to ground (0V). By applying logic 1, the
external output will keep on “floating”. In order to apply logic 1 (5V) on this output pin, it is
necessary to built in an external pull-up resistor.
Only in case P0 is used for addressing external memory, the microcontroller will provide
internalpower supply source in order to supply its pins with logic one. There is no need to
add external pull-up resistors.
174
Port 1
P1 is a true I/O port, because it doesn't have any alternative functions as is the case with P0,
but can be cofigured as general I/O only. It has a pull-up resistor built-in and is completely
compatible with TTL circuits.
Port 2
P2 acts similarly to P0 when external memory is used. Pins of this port occupy addresses
intended for external memory chip. This time it is about the higher address byte with
addresses A8-A15. When no memory is added, this port can be used as a general input/output
port showingfeatures similar to P1.
Port 3
All port pins can be used as general I/O, but they also have an alternative function. In order
to use these alternative functions, a logic one (1) must be applied to appropriate bit of the P3
register. In tems of hardware, this port is similar to P0, with the difference that its pins have
a pull-up resistor built-in.
When configured as outputs (logic zero (0)), single port pins can receive a current of 10mA.
If all8 bits of a port are active, a total current must be limited to 15mA (port P0: 26mA). If
all ports (32 bits) are active, total maximum current must be limited to 71mA. When these
pins are configured as inputs (logic 1), built-in pull-up resistors provide very weak current,
but strong enough to activate up to 4 TTL inputs of LS series.
As seen from description of some ports, even though all of them have more or less similar
architecture, it is necessary to pay attention to which of them is to be used for what and how.
For example, if they shall be used as outputs with high voltage level (5V), then P0 should be
avoided because its pins do not have pull-up resistors, thus giving low logic level only. When
using other ports, one should have in mind that pull-up resistors have a relatively high
resistance,so that their pins can give a current of several hundreds microamperes only.
As you already know, the microcontroller oscillator uses quartz crystal for its operation. As
the frequency of this oscillator is precisely defined and very stable, pulses it generates are
always of the same width, which makes them ideal for time measurement. Such crystals are
also used in quartz watches. In order to measure time between two events it is sufficient to
count up pulses coming from this oscillator. That is exactly what the timer does. If the timer
is properly programmed, the value stored in its register will be incremented (or
decremented) with each coming pulse, i.e. once per each machine cycle. A single machine-
cycle instruction lasts for 12 quartz oscillator periods, which means that by embedding
175
quartz with oscillator frequency of 12MHz, a number stored in the timer register will be
changed million times per second, i.e. each microsecond.
The 8051 microcontroller has 2 timers/counters called T0 and T1. As their names suggest,
their main purpose is to measure time and count external events. Besides, they can be used
for generating clock pulses to be used in serial communication, so called Baud Rate.
Timer T0
As seen in figure below, the timer T0 consists of two registers – TH0 and TL0 representing a
lowand a high byte of one 16-digit binary number.
Accordingly, if the content of the timer T0 is equal to 0 (T0=0) then both registers it consists
ofwill contain 0. If the timer contains for example number 1000 (decimal), then the TH0
register (high byte) will contain the number 3, while the TL0 register (low byte) will contain
decimal number 232.
176
Fig 4.28: Timer 0
Since the timer T0 is virtually 16-bit register, the largest value it can store is 65 535. In
case ofexceeding this value, the timer will be automatically cleared and counting starts
from 0. This condition is called an overflow. Two registers TMOD and TCON are closely
connected to thistimer and control its operation.
The TMOD register selects the operational mode of the timers T0 and T1. As seen in
figure below, the low 4 bits (bit0 - bit3) refer to the timer 0, while the high 4 bits (bit4 -
bit7) refer tothe timer 1. There are 4 operational modes and each of them is described
herein.
• GATE1 enables and disables Timer 1 by means of a signal brought to the INT1 pin
(P3.3):
o 1 - Timer 1 operates only if the INT1 bit is set.
o 0 - Timer 1 operates regardless of the logic state of the INT1 bit.
• C/T1 selects pulses to be counted up by the timer/counter 1:
o 1 - Timer counts pulses brought to the T1 pin (P3.5).
o 0 - Timer counts pulses from internal oscillator.
• T1M1,T1M0 These two bits select the operational mode of the Timer 1.
0 0 0 13-bit timer
0 1 1 16-bit timer
1 0 2 8-bit auto-reload
177
1 1 3 Split mode
• GATE0 enables and disables Timer 1 using a signal brought to the INT0 pin (P3.2):
o 1 - Timer 0 operates only if the INT0 bit is set.
o 0 - Timer 0 operates regardless of the logic state of the INT0 bit.
• C/T0 selects pulses to be counted up by the timer/counter 0:
o 1 - Timer counts pulses brought to the T0 pin (P3.4).
o 0 - Timer counts pulses from internal oscillator.
• T0M1,T0M0 These two bits select the oprtaional mode of the Timer 0.
0 0 0 13-bit timer
0 1 1 16-bit timer
1 0 2 8-bit auto-reload
1 1 3 Split mode
This is one of the rarities being kept only for the purpose of compatibility with the previuos
versions of microcontrollers. This mode configures timer 0 as a 13-bit timer which consists
of all8 bits of TH0 and the lower 5 bits of TL0. As a result, the Timer 0 uses only 13 of 16
bits. How does it operate? Each coming pulse causes the lower register bits to change their
states. After receiving 32 pulses, this register is loaded and automatically cleared, while the
higher byte (TH0)is incremented by 1. This process is repeated until registers count up 8192
pulses. After that, both registers are cleared and counting starts from 0.
178
Timer 0 in mode 1 (16-bit timer)
Mode 1 configures timer 0 as a 16-bit timer comprising all the bits of both registers TH0
and TL0. That's why this is one of the most commonly used modes. Timer operates in the
same wayas in mode 0, with difference that the registers count up to 65 536 as allowable by
the 16 bits.
Mode 2 configures timer 0 as an 8-bit timer. Actually, timer 0 uses only one 8-bit register
for counting and never counts from 0, but from an arbitrary value (0-255) stored in
another (TH0)register.
The following example shows the advantages of this mode. Suppose it is necessary to
constantlycount up 55 pulses generated by the clock.
If mode 1 or mode 0 is used, It is necessary to write the number 200 to the timer registers
and constantly check whether an overflow has occured, i.e. whether they reached the value
255. When it happens, it is necessary to rewrite the number 200 and repeat the whole
procedure. The same procedure is automatically performed by the microcontroller if set in
mode 2. In fact, only the TL0 register operates as a timer, while another (TH0) register stores
the value from which thecounting starts. When the TL0 register is loaded, instead of being
cleared, the contents of TH0 will be reloaded to it. Referring to the previous example, in
179
order to register each 55th pulse, the best solution is to write the number 200 to the TH0
register and configure the timer to operate in mode 2.
Mode 3 configures timer 0 so that registers TL0 and TH0 operate as separate 8-bit timers.
In other words, the 16-bit timer consisting of two registers TH0 and TL0 is split into two
independent 8-bit timers. This mode is provided for applications requiring an additional 8-
bit timer or counter. The TL0 timer turns into timer 0, while the TH0 timer turns into timer
1. In addition, all the control bits of 16-bit Timer 1 (consisting of the TH1 and TL1 register),
now control the 8-bit Timer 1. Even though the 16-bit Timer 1 can still be configured to
operate in any of modes (mode 1, 2 or 3), it is no longer possible to disable it as there is no
control bit to doit. Thus, its operation is restricted when timer 0 is in mode 3.
180
Fig 4.33: Timer Mode 3
The only application of this mode is when two timers are used and the 16-bit Timer 1 the
operation of which is out of control is used as a baud rate generator.
TCON register is also one of the registers whose bits are directly in control of timer
operation. Only 4 bits of this register are used for this purpose, while rest of them is used for
interrupt control to be discussed later.
In order to use timer 0, it is first necessary to select it and configure the mode of its
operation.Bits of the TMOD register are in control of it:
Referring to figure above, the timer 0 operates in mode 1 and counts pulses generated by
internalclock the frequency of which is equal to 1/12 the quartz frequency.
Turn on the timer:
182
Fig 4.36: TCON control bits
The TR0 bit is set and the timer starts operation. If the quartz crystal with frequency of
12MHz isembedded then its contents will be incremented every microsecond. After 65.536
microseconds, the both registers the timer consists of will be loaded. The microcontroller
automatically clears them and the timer keeps on repeating procedure from the beginning
until the TR0 bit value is logic zero (0).
- It is extremely simple to read a timer by using only one register configured in mode 2 or 3. It is
sufficient to read its state at any moment. That's all!
- It is somehow complicated to read a timer configured to operate in mode 2. Suppose the lower
byte is read first (TL0), then the higher byte (TH0). The result is:
Everything seems to be ok, but the current state of the register at the moment of reading
In case of negligence, such an error in counting (255 pulses) may occur for not so obvious
but quite logical reason. The lower byte is correctly read (255), but at the moment the
program counter was about to read the higher byte TH0, an overflow occurred and the
contents of both registers have been changed (TH0: 14→15, TL0: 255→0). This problem
has a simple solution.The higher byte should be read first, then the lower byte and once
again the higher byte. If the number stored in the higher byte is different then this sequence
183
should be repeated. It's about ashort loop consisting of only 3 instructions in the program.
There is another solution as well. It is sufficient to simply turn the timer off while reading is
going on (the TR0 bit of the TCON register should be cleared), and turn it on again after
readingis finished.
Usually, there is no need to constantly read timer registers. It is sufficient to register the
moment they are cleared, i.e. when counting starts from 0. This condition is called an
overflow. When it occurrs, the TF0 bit of the TCON register will be automatically set. The
state of this bit can be constantly checked from within the program or by enabling an
interrupt which will stop the main program execution when this bit is set. Suppose it is
necessary to provide a program delay of
0.05 seconds (50 000 machine cycles), i.e. time when the program seems to be
When enabled, the timer will resume counting from this number. The state of the TF0 bit,
i.e. whether it is set, is checked from within the program. It happens at the moment of
overflow, i.e. after exactly 50.000 machine cycles or 0.05 seconds.
184
How to measure pulse duration?
Suppose it is necessary to measure the duration of an operation, for example how long a
device has been turned on? Look again at the figure illustrating the timer and pay attention
to the function of the GATE0 bit of the TMOD register. If it is cleared then the state of the
P3.2 pin doesn't affect timer operation. If GATE0 = 1 the timer will operate until the pin
P3.2 is cleared. Accordingly, if this pin is supplied with 5V through some external switch at
the moment the device is being turned on, the timer will measure duration of its operation,
which actually was the objective.
Similarly to the previous example, the answer to this question again lies in the TCON
register. This time it's about the C/T0 bit. If the bit is cleared the timer counts pulses
generated by the internal oscillator, i.e. measures the time passed. If the bit is set, the timer
input is provided withpulses from the P3.4 pin (T0). Since these pulses are not always of the
same width, the timer cannot be used for time measurement and is turned into a counter,
therefore. The highest frequency that could be measured by such a counter is 1/24 frequency
of used quartz-crystal.
Timer 1
Timer 1 is identical to timer 0, except for mode 3 which is a hold-count mode. It means that
theyhave the same function, their operation is controlled by the same registers TMOD and
TCON and both of them can operate in one out of 4 different modes.
185
Fig 4.39: timer 1
SERIAL COMMUNICATION
186
Serial Port Control (SCON) Register
• SM0 - Serial port mode bit 0 is used for serial port mode selection.
• SM1 - Serial port mode bit 1.
• SM2 - Serial port mode 2 bit, also known as multiprocessor communication enable bit.
When set, it enables multiprocessor communication in mode 2 and 3, and eventually
mode 1. It should be cleared in mode 0.
• REN - Reception Enable bit enables serial reception when set. When cleared, serial
reception is disabled.
• TB8 - Transmitter bit 8. Since all registers are 8-bit wide, this bit solves the problem of
transmiting the 9th bit in modes 2 and 3. It is set to transmit a logic 1 in the 9th bit.
• RB8 - Receiver bit 8 or the 9th bit received in modes 2 and 3. Cleared by hardware if 9th
bit received is a logic 0. Set by hardware if 9th bit received is a logic 1.
• TI - Transmit Interrupt flag is automatically set at the moment the last bit of one byte is
sent. It's a signal to the processor that the line is available for a new byte transmite. It
must be cleared from within the software.
• RI - Receive Interrupt flag is automatically set upon one byte receive. It signals that byte
is received and should be read quickly prior to being replaced by a new data. This bit is
also cleared from within the software.
As seen, serial port mode is selected by combining the SM0 and SM2 bits:
187
Fig 4.42: TXD , RXD
In mode 0, serial data are transmitted and received through the RXD pin, while the TXD pin
output clocks. The bout rate is fixed at 1/12 the oscillator frequency. On transmit, the least
significant bit (LSB bit) is sent/received first.
TRANSMIT - Data transmit is initiated by writing data to the SBUF register. In fact, this
process starts after any instruction being performed upon this register. When all 8 bits have
beensent, the TI bit of the SCON register is automatically set.
188
RECEIVE - Data receive through the RXD pin starts upon the two following conditions are
met: bit REN=1 and RI=0 (both of them are stored in the SCON register). When all 8 bits
havebeen received, the RI bit of the SCON register is automatically set indicating that one
byte receive is complete.
Since there are no START and STOP bits or any other bit except data sent from the SBUF
register in the pulse sequence, this mode is mainly used when the distance between devices is
short, noise is minimized and operating speed is of importance. A typical example is I/O port
expansion by adding a cheap IC (shift registers 74HC595, 74HC597 and similar).
Mode 1
189
In mode 1, 10 bits are transmitted through the TXD pin or received through the RXD pin
in thefollowing manner: a START bit (always 0), 8 data bits (LSB first) and a STOP bit
(always 1).
The START bit is only used to initiate data receive, while the STOP bit is automatically
writtento the RB8 bit of the SCON register.
TRANSMIT - Data transmit is initiated by writing data to the SBUF register. End of
datatransmission is indicated by setting the TI bit of the SCON register.
RECEIVE - The START bit (logic zero (0)) on the RXD pin initiates data receive. The
following two conditions must be met: bit REN=1 and bit RI=0. Both of them are stored
in theSCON register. The RI bit is automatically set upon data reception is complete.
190
Mode 2
In mode 2, 11 bits are transmitted through the TXD pin or received through the RXD pin:
a START bit (always 0), 8 data bits (LSB first), a programmable 9th data bit and a STOP
bit (always 1). On transmit, the 9th data bit is actually the TB8 bit of the SCON register.
This bit usually has a function of parity bit. On receive, the 9th data bit goes into the RB8
bit of the sameregister (SCON).The baud rate is either 1/32 or 1/64 the oscillator frequency.
TRANSMIT - Data transmit is initiated by writing data to the SBUF register. End of
datatransmission is indicated by setting the TI bit of the SCON register.
RECEIVE - The START bit (logic zero (0)) on the RXD pin initiates data receive. The
following two conditions must be met: bit REN=1 and bit RI=0. Both of them are stored
in theSCON register. The RI bit is automatically set upon data reception is complete.
191
Fig 4.50: mode 2
Mode 3 is the same as Mode 2 in all respects except the baud rate. The baud rate in Mode 3
is variable.
Baud Rate
Baud Rate is a number of sent/received bits per second. In case the UART is used, baud
rate depends on: selected mode, oscillator frequency and in some cases on the state of the
SMOD bitof the SCON register. All the necessary formulas are specified in the table:
150 40 h 30 h 00 h 0
300 A0 h 98 h 80 h 75 h 52 h 0
600 D0 h CC h C0 h BB h A9 h 0
1200 E8 h E6 h E0 h DE h D5 h 0
2400 F4 h F3 h F0 h EF h EA h 0
192
4800 F3 h EF h EF h 1
4800 FA h F8 h F5 h 0
9600 FD h FC h 0
9600 F5 h 1
19200 FD h FC h 1
38400 FE h 1
76800 FF h 1
Multiprocessor Communication
As you may know, additional 9th data bit is a part of message in mode 2 and 3. It can be used
forchecking data via parity bit. Another useful application of this bit is in communication
between two or more microcontrollers, i.e. multiprocessor communication. This feature is
enabled by setting the SM2 bit of the SCON register. As a result, after receiving the STOP
bit, indicating end of the message, the serial port interrupt will be generated only if the bit
RB8 = 1 (the 9th bit).
Suppose there are several microcontrollers sharing the same interface. Each of them has its
own address. An address byte differs from a data byte because it has the 9th bit set (1),
while this bitis cleared (0) in a data byte. When the microcontroller A (master) wants to
transmit a block of data to one of several slaves, it first sends out an address byte which
identifies the target slave. An address byte will generate an interrupt in all slaves so that they
can examine the received byteand check whether it matches their address.
Of course, only one of them will match the address and immediately clear the SM2 bit of the
SCON register and prepare to receive the data byte to come. Other slaves not being
addressed leave their SM2 bit set ignoring the coming data bytes.
193
Fig 4.52: multiprocessor communication
Addition
mov
r0,#50 mov
a,@ro
inc r0
add
a,@ro
mov 60,a
lcall 00bb
Subtraction
clr c
mov
r0,#50 mov
a,@ro
inc r0
subb
a,@romov
60,a
lcall 00bb
194
Multiplication
mov r0,#50
mov a,@r0
inc r0
mov f0,@r0
mul ab
mov 60,a
mov 61,0f0
lcall 00bb
Input: 50-ff, 51-ff
Output: 60-01(LSB),
61-FE
(MSB)
Division
mov r0,#50
mov a,@r0
inc r0
mov f0,@r0
div ab
mov 60,a
mov 61,0f0
lcall 00bb
Input: 50-ff, 51-fd
Output: 60-01(Q) , 61-02 (R)
Smallest of an array
mov r0,#50h
mov r1,#05
mov 60,#ff
back:mov a,@r0
cjne a,60,loop
jnc loop
mov 60,a
loop:inc ro
djnz r1,back
lcall 00bb
Input:
50-99, 51-80, 52-70,
53-66, 54-77
195
Output: 60-66 Largest of an
array
mov r0,#50h
mov r1,#05
mov 60,#00
back:mov a,@r0
cjne a,60,loop
jc loop
mov 60,a
loop:inc ro
djnz r1,back
lcall 00bb
Factorial
mov
ro,#50mov
a,@r0mov
r1,a dec r1
l1:mov f0,r1
mul ab
djnz r1,l1:
mov 60,a
lcall 00bb
i/p 50-05
o/p 60-78
sum of an array
mov r1,#05
mov r0,#50
mov a,@r0
dec r1
l1:inc r0
add a,@r0
djnz r1,l1
mov 60,a
lcall 00bb
i/p 50-01,51-02,52-03,54-04,55-05
0/p-60-0f
196
Ascending order
mov r7,#05
b2:mov r6,#04
mov r0,#50
b1:mov a,@r0
inc r0
mov 0f0,@ro
cjne a,0f0,next
sjmp back
next jc back (descending order change jc to jnc)
mov @r0,a
dec r0
mov @ro,0f0
inc r0
back: djnz r6,b1
djnz r7, b2
lcall 00bb
i/p
50-05, 51-04,52-03,53-04,54-05
o/p
50-01,51-02,52-03,53-04,54-05
QUESTION BANK
PART A
PART B
198
SCHOOL OF ELECTRICAL AND ELECTRONICS
DEPARTMENT OF ELECTRONICS AND COMMUNICATION ENGINEERING
199
UNIT 5 APPLICATIONS BASED ON 8085 AND 8051
Interfacing Basic concepts, interfacing LED, 7 segment LED, Stepper motor control system,
Temperature control system, Traffic light control system, Motor speed control system, Waveform
generation, Interfacing LCD.
7-SEGMENT LED
• Fig shows two different type of 7-segment display; common cathode and common anode.
• 7-segment display consists of a few LEDs and are arranged physically as shown in figure a.
• It has seven segments from A to G that normally connected to data bus D0 to D6 respectively.
• If decimal point is used, D7 will be connected to DP; and left unconnected if it is unused.
200
Fig 5.2: 7-sement LED interfacing
• Fig. shows the example to interface seven segment display and address decoder with an address of
FDH.
• The common anode display is used therefore 0 logic is needed to activate the segment.
• Suppose to display number 4 at seven segment display, therefore the segment F, G, B and C have to be
activated.
• Follows are the instructions to execute it:
– MVI A, 66H
OUT FDH
PROGRAM (FLASH 4)
201
MVI A,66 JNZ L2:
OUT PA RET
CALL DELAY
JMP L1:
Traffic light control system using 8085
The traffic lights placed at the road crossings can be automatically switched ON/OFF
in the desired sequence using the microprocessor system. The system can also have a manual
control option, so that during heavy traffic (or during4raffic jam) the duration of ON/OFF
time can be varied by the operator.
A typical traffic light control system (demonstration type) is shown in fig 1. The
systems have been developed using 8085 as CPU. The system has EPROM memory for
system program storage and RAM memory for stack operation. For manual control a
keyboard have been provided. It will be helpful for the operator if the direction 6ftraffic flow
is displayed during manual control. Hence 7-segment LEDs are interfaced to display the
direction of traffic flow both during manual and automatic mode.
The primary function of the microprocessor in the system is to switch ON/OFF the
Red/Yellow/Green lights is the specified sequence. In the demonstration system of fig,
Red/Yellow/Green LEDs are provided instead of lights (lamps). The LEDs are interfaced to
the system through buffer (74LS245) and ports of 8255.
In the practical implementation scheme the lights can be turned ON/OFF using driver
transistors and relays. In practical implementation the output of buffer (74LS245) can be
connected to the driver transistor. A reverse biased diode is connected across relay coil to
prevent relay chattering (for free-wheeling action).
The microprocessor send High through a port line to switch ON the light and LOW
to switch OFF the light. A switching schedule (or sequence) can be developed as shown in
Table. In this switching sequence it is assumed that the traffic is allowed only in one
direction at time.
In table, "1" represents ON condition and "0" represents OFF condition. These 1's and O's
202
Can be directly output to 8255 ports to switch ON/OFF the light. A flowchart for traffic
lightcontrol program is shown in fig .
203
The processor can output the codes for switching the lights for schedulel and then
waits. After a specified time delay the processor output the codes for schedule-II and so on.
For each schedule the processor can wait for a specified time. After schedule-XII, the
processor can again return to schedule-I. On observing the schedules we can conclude that
three different delay routines are sufficient for implementing the twelve switching schedules.
204
Temperature controller using 8085
The microprocessor based temperature control system can be used for automatic
control of the temperature of a body. A simplified block diagram of 8085 microprocessor
based temperature control system is shown in fig 4 . The system consist of 8085
microprocessor as CPU, ERROM&RAM memory for program & data storage, INTEL 8279
for keyboard and display Interface, ADC, DAC, INTEL 8255 for I/O' ports, Amplifiers,
Signal conditioning circuit, Temperature sensor and Supply control circuit. In this system
the temperature is controlled by controlling the power input to the heating element.
The temperature of the body is measured using a temperature sensor. The different
types of temperature sensor that can be used for temperature measurement are Thermo-
couple, Thermistors , PN-junctions, IC sensors. This sensor will convert the input
temperature to Proportional analog voltage or current. The output signal of the sensor will
be a weak signal and so has to be amplified by using high input impedance op-amp. Then the
analog signal is scaled tosuitable level by the signal conditioning circuit.
The microprocessor can process only digital signals and so the analog signal from signal
conditioning circuit cannot be read by the processor directly. The system has an analog-to-
digital converter (ADC) to convert the analog signal to proportional digital data. In this
system the ADC is interfaced to 8085 processor through port-A of 8255. The 8085 processor
send signal to ADC to start conversion and at the end of conversion it read the digital data
from the port-A of8255.
205
Fig.5.7 : 8085 Microprocessor based Temperature control system.
The 8085 processor calculate the actual temperature using the input data and display it on
the 7- segment LED. Also, the processor compare the desired temperature with actual
temperature (The operator can enter the desired temperature through keyboard) and
calculate the error (the difference between actual temperature and desired temperature).
206
Fig.5.8: Flow chart for Temperature control system.
The error is used to compute a digital control signal, which is converted to analog control
signal by DAC. The DAC is interfaced to the system through port-B of 8255. The analog
control signal produced by DAC is used to control the power supply of the heating element
of the body.
The digital control signal can be computed by the 8085 processor using different
digitalcontrol algorithms (PIPI/PID/FUZZY logic control algorithms).
The control circuit for power supply can be either thyristor based circuit or relay. In case of
thyristor control circuits the firing angle can be varied by the control signal to control the
power input to the heater.
The stepper motors are popularly used in computer peripherals, plotters, robots and
machine tools for 'precise incremental rotation. In stepper motor, the stator windings are
excited by electrical pulses and for each pulse the motor shaft advances by one angular step.
(Single the stepper motor can be driven by digital pulses; it is also called digital motor). The
step size in the motor is determined by the number of poles in the rotor and the number 'of
pairs of stator windings (one pair of stator winding is called one 'phase). The stator windings
are also called control windings.
The motor is controlled by switching ON/OFF the control winding. The popular
stepper motor used for demonstration in laboratories has a step size of 1.8° (i.e, 200 steps
per revolution). This motor consist of four stator winding and require four switching
sequence as shown in table 1. The basic step size of the motor is called full-step. By altering
the switching sequence, the motor can be made to run with incremental motion of half the
full-step value.
A typical stepper motor control system is shown in fig 6. a two-phase or four winding stepper
motor is show in fig 6. The system consists of 8085 microprocessor as CPU, EPROM and
RAM memory for program &data storage and for stack. Using INTEL 8279, a keyboard
and six number of 7-segment LED display has been interfaced in the system. Through the
keyboard the operator can issue commands to control the system. The LED display has been
provided to display messages to the operator. The windings of stepper motor connected to
the collector of Darlington pair transistors. The transistors are switched ON/OFF by the
microprocessor through the ports of 8255 and buffer (74LS245). A free wheeling diode is
connected across each windingfor fast switching. The flowchart for the operational flow of
the stepper motor control system is shown in fig 7. The processor has to output a switching
sequence and wait for l to 5 msec before Sending next switching sequence. (The delay is
necessary to allow be motor transients to die-out).
Fig.5.9: 8085 Microprocessor based StepperMotor control system.
The Stepper Motor to microcontroller. As you can see the stepper motor is connected with
Microcontroller output port pins through a ULN2803A array. So when the microcontroller
is giving pulses with particular frequency to ls293A, the motor is rotated in clockwise or
anticlockwise. Fig. Interfacing Stepper Motor to Microcontroller
210
To control a stepper motor in 8051 trainer kit. It works by turning ON & OFF. A four I/O port lines
generating at a particular frequency. The 8051 trainer kit has three numbers of I/O port connectors,
connected with I/O Port lines (P1.0 – P1.7),(p3.0 – p3.7) to rotate the stepper motor. Ls293d is used as a
driver for port I/O lines, drivers output connected to stepper motor, connector provided for external power
supply if needed.
DC motor interfacing
211
Fig 5.12: DC motor interfacing
Varying the armature voltage varies the speed of the dc motor and e field voltage is kept
constant. A controlled rectifier using SCR develops the required armature voltage and the
uncontrolled rectifier generates the required field voltage.
• The microprocessor controls the speed of the motor by varying the firing angle of SCRs in the
controlled rectifier.
• The system has EPROM for system program storage, and RAM for temporary data storage and
stack.
• A keyboard has been provided to input the desired speed and other commands to operate the system.
• In order to display the speed of the motor, 7-segment LED display has been provided. The keyboard
and 7-segment LED display has been interfaced to 8085 based system using Keyboard display
controller INTEL 8279.
212
Fig 5.13: DC motor interfacing-flow chart
The speed of the dc motor is measured using a tachogenerator. It produces an analog voltage proportional
to the speed of the motor.
• Then the analog signal is scaled to desired level by the signal conditioning circuit and digitized
using ADC. (The processor cannot process the analog signal directly, hence the analog signal is
digitized using ADC).
• The ADC is interlaced to 8085 processor through the port-B and port-C of 8255. The
processor can send a start of conversion to ADC through port-C pin and at the end of conversion
it can read the digital data from port-B of 8255. This digital data is proportional to actual speed.
• Also, the processor compares the actual speed with desired speed entered by the operator
through the keyboard. If there is a difference then the error is estimated. The error can be modified
by a digital control algorithm, (P/PI/PID/FUZZY logic control algorithm) to produce a digital
control signal.
213
• The digital control signal is converted to analog signal by the DAC. The analog signal is used
to alter the firing angle of SCRS in the controlled rectifiers. The operational the speed control system is
shown in the flowchart.
L1:SETB 90
LCALL DELAY
CLR 90
LCALL DELAY
SJMP L1:
DELAY
MOV R0,#33
L2:DJNZ R0,L2
RET
Subsequently, for obtaining the desired frequency on the square wave. We have to manipulate with the
delay. We know that the machine cycle frequency is 1/12 of the crystal oscillator frequency. So, with the
crystal oscillator’s frequency as 11.0592 Mhz the machine cycle frequency is 921.6 Khz. To sum up, thats
equivalent to 1.085 μsecond.
To generate a square wave of 1 KHz, in other words, a wave of time period 1 millisecond, we have to use
the delay in such a way that it causes a delay of 1 millisecond. We will have to loop around doing nothing
for about 461 machine cycles to generate a square wave of 50% duty cycle. That is to say, an on time and
an off time of 0.5 millisecond.
214
Fig 5.14: Square wave-CRO output
We use LCD display for the messages for more interactive way to operate the system or
displaying error messages etc. interfacing LCD to microcontroller is very easy if you
understanding the working of LCD, in this session I will not only give the information of LCD
and also provide the code in C language which is working fine without any errors.
215
Fig 5.14: LCD interfacing using proteus
LCD: 16×2 Liquid Crystal Display which will display the 32 characters at a time in two rows
(16 characters in one row). Each character in the display of size 5×7 pixel matrix, Although this
matrix differs for different 16×2 LCD modules if you take JHD162A this matrix goes to 5×8.
This matrix will not be same for all the 16×2 LCD modules. There are 16 pins in the LCD
module, the pin configuration us given below
LCD UNIT
1 VSS Ground
2 VCC +5v
216
3 VEE Contrast adjustment (VO)
7 D0 Data Bit 0
8 D1 Data Bit 1
9 D2 Data Bit 2
10 D3 Data Bit 3
11 D4 Data Bit 4
12 D5 Data Bit 5
13 D6 Data Bit 6
Let us look at a pin diagram of a commercially available LCD like JHD162 which uses a HD44780 controller and
then describe its operation.
217
Fig 5.15: LCD
Apart from the voltage supply connections the important pins from the programming perspective are the data
lines(8-bit Data bus), Register select, Read/Write and Enable pin.
Data Bus: As shown in the above figure and table, an alpha numeric lcd has a 8-bit data bus referenced as D0-
D7. As it is a 8-bit data bus, we can send the data/cmd to LCD in bytes. It also provides the provision to send the
the data/cmd in chunks of 4-bit, which is used when there are limited number of GPIO lines on the microcontroller.
Register Select(RS): The LCD has two register namely a Data register and Command register. Any data that
needs to be displayed on the LCD has to be written to the data register of LCD. Command can be issued to LCD
by writing it to Command register of LCD. This signal is used to differentiate the data/cmd received by the LCD.
If the RS signal is LOW then the LCD interprets the 8-bit info as Command and writes it Command register and
performs the action as per the command.
If the RS signal is HIGH then the LCD interprets the 8-bit info as data and copies it to data register. After that
the LCD decodes the data for generating the 5x7 pattern and finally displays on the LCD.
Read/Write(RW): This signal is used to write the data/cmd to LCD and reads the busy flag of LCD. For write
operation the RW should be LOW and for read operation the R/W should be HIGH.
Enable(EN): This pin is used to send the enable trigger to LCD. After sending the data/cmd, Selecting the
data/cmd register, Selecting the Write operation. A HIGH-to-LOW pulse has to be send on this enable pin which
will latch the info into the LCD register and triggers the LCD to act accordingly.
218
The crystal oscillator is connected to XTAL1 and XTAL2 which will provide the system clock
to the microcontroller the data pins and remaining pins are connected to the microcontroller
as shown in the circuit. The potentiometer is used to adjust the contrast of the LCD. You can
connect data pins to any port. If you are connecting to port0 then you have to use pull up
registers. The enable, R/W and RS pins are should be connected to the 10, 11 and 16 (P3.3,
P3.4 and P3.5).
219
{
LcdDataBus=dat; // Send the data to LCD
LCD_RS=1; // Select the Data Register by pulling RS HIGH
LCD_RW=0; // Select the Write Operation by pulling RW LOW
LCD_EN=1; // Send a High-to-Low Pusle at Enable Pin
delay_us(10);
LCD_EN=0;
delay_us(1000);
}
HARDWARE CONNECTION
Code Examples
code for displaying the data on 2x16 LCD in 8-bit mode.
#include<reg51.h>
/* Configure the data bus and Control pins as per the hardware connection
Databus is connected to P2_0:P2_7 and control bus P0_0:P0_2*/
#define LcdDataBus P2
sbit LCD_RS = P0^0;
220
sbit LCD_RW = P0^1;
sbit LCD_EN = P0^2;
int main()
{
char i,a[]={"Good morning!"};
while(1);
}
QUESTION BANK
PART A
1. What are the two types of seven segment LED
2. Draw the schematic of 7 segment LED
3. Stepper motor interfaced to 8085. How?
4. Write 7 segment common cathode and anode code for displaying ‘E’
5. Write the traffic light schedule for N-G, S-R, E-R, W-R and NFL & NFR-
ON
6. Write the stepping sequence for stepper motor
7. What is the drawback of LCD
8. Write a program to generate square wave using 8051
9. Compare 7-segment LED and LCD
222
10.How the speed of the motor can be varied
11. List the applications of Stepper motor
PART B
1. Explain how the 7-segment LED is interfaced to 8085/8051
2. With neat diagram explain the stepper motor interfacing
3. Discuss in detail about temperature control system
4. Explain motor speed control system with necessary diagram
5. Discuss in detail about LCD interfacing with 8051
6. Interface traffic light controller to 8085/8051 and control the traffic.
TEXT / REFERENCE BOOKS
1. Ramesh Gaonkar, “Microprocessor Architecture, Programming and applications with 8085”, 5th Edition,
Penram International Publishing Pvt Ltd, 2010.
2. Kenneth J Ayala, “The 8051 Microcontroller”, 2nd Edition, Thomson, 2005.
3. Nagoor Kani A, “Microprocessor and Microcontroller”, 2nd Edition, Tata McGraw Hill, 2012.
4. Mathur A.P. ” Introduction to microprocessor .“
5. Muhammad Ali Mazidi.”The 8051 Microcontroller and Embedded Systems.”
223