8/5/2015
The salient features of 8085 p
UNIT I
THE 8085 MICROPROCESSOR
It is a 8 bit microprocessor.
It is manufactured with N-MOS technology.
It has 16 bit address bus
Can address upto 216 = 65536 bytes (64KB) memory locations through A0A15
The first 8 lines of address bus and 8 lines of data bus are multiplexed AD0
AD7
Data bus is a group of 8 lines D0 D7
It supports external interrupt request.
D.Shiloah Elizabeth, DCSE/AU
The salient features of 8085 p
The salient features of 8085 p
It has the following registers
Memory:
Program, data and stack memories occupy the same memory space. The total
addressable memory size is 64 KB.
A 16 bit program counter (PC)
A 16 bit stack pointer (SP)
Six 8-bit general purpose register arranged in pairs: BC, DE, HL.
Program memory - program can be located anywhere in memory.
Jump, branch and call instructions use 16-bit addresses, i.e. they can be used to
jump/branch anywhere within 64 KB.
All jump/branch instructions use absolute addressing.
It requires a signal +5V power supply and operates at 6.144 MHZ
single phase clock.
It is enclosed with 40 pins Dual in line package (DIP).
Data memory - the processor always uses 16-bit addresses so that data can
be placed anywhere.
Stack memory is limited only by the size of memory.
Stack grows downward.
First 64 bytes in a zero memory page should be reserved for vectors used
by RST instructions.
D.Shiloah Elizabeth, DCSE/AU
D.Shiloah Elizabeth, DCSE/AU
8/5/2015
Signal Groups:
8085 Pin diagram
Address bus
A15-A8, AD7-AD0
Multiplexed address/data bus:
AD7-AD0
Control and status signals
ALE, RD, WR, IO/M, S1, S0
Power supply and clock frequency
VCC, VSS, X1, X2, CLK (OUT)
Externally initiated signals:
Input: TRAP, RST 7.5, RST 6.5, RST 5.5,
INTR, READY, HOLD
Output: INTA, HLDA
Reset: RESET IN, RESET OUT
Serial I/O ports:
SID, SOD
D.Shiloah Elizabeth, DCSE/AU
Data flow from
memory to the
MPU
MOV C,A
Opcode: 4FH
D.Shiloah Elizabeth, DCSE/AU
D.Shiloah Elizabeth, DCSE/AU
Steps For Fetching an Instruction
Instruction at memory location 2005. i.e., program counter: 2005H.
The following is the sequence of operations:
The program counter places the address value on the address
bus.
The control unit issues a RD signal.
The byte in the memory location is placed on the data bus.
The value on the data bus is read into the instruction decoder
inside the microprocessor.
After decoding the instruction, the control unit issues the
proper control signals to perform the operation.
D.Shiloah Elizabeth, DCSE/AU
8/5/2015
Timing Signals For Fetching an Instruction
Timing:
Transfer of byte
from memory to
MPU
MOV C,A
Opcode: 4FH
D.Shiloah Elizabeth, DCSE/AU
At T1 ,
The high order 8 address bits (20H) are placed on the address lines
A8 A15 and the low order bits are placed on AD7AD0
The ALE signal goes high to indicate that AD0 AD8 are carrying
an address
The IO/M signal goes low to indicate a memory operation
At the beginning of the T2 cycle,
The low order 8 address bits are removed from AD7 AD0
The control unit sends the Read (RD) signal to the memory. The
signal remains low (active) for two clock periods to allow for slow
devices
D.Shiloah Elizabeth, DCSE/AU
10
Timing Signals For Fetching an Instruction (Contd.)
Demultiplexing
the bus AD7AD0
During T2 ,
Memory places the data from the memory location on the lines
AD7 AD0
During T3,
The RD signal is Disabled (goes high). This turns off the output Tristate buffers in the memory. That makes the AD7 AD0 lines go to
high impedence mode
During T4
The machine code or the byte is decoded by the instruction
decoder and the task is carried out based on the bit pattern
D.Shiloah Elizabeth, DCSE/AU
Schematic of
latching loworder address
bus
11
D.Shiloah Elizabeth, DCSE/AU
12
8/5/2015
Cycles and States
From the above discussion, we can define terms that will become handy
later on:
T- State: One subdivision of an operation. A T-state lasts for one clock
period.
An instructions execution length is usually measured in a number of
T-states. (clock periods).
Machine Cycle: The time required to complete one operation of
accessing memory, I/O, or acknowledging an external request.
This cycle may consist of 3 to 6 T-states.
Instruction Cycle: The time required to complete the execution of an
instruction.
In the 8085, an instruction cycle may consist of 1 to 6 machine
cycles.
D.Shiloah Elizabeth, DCSE/AU
Schematic to generate Read/ write
control signals for M and I/O
13
Demultiplexed address and data bus
with control signals
D.Shiloah Elizabeth, DCSE/AU
14
8085A Microprocessor: Functional Block diagram
D7
D6
D5
D4
D3
D2
Ac
D1
D0
CY
Flag Register
D.Shiloah Elizabeth, DCSE/AU
15
D.Shiloah Elizabeth, DCSE/AU
16
8/5/2015
Hardware Model
Instruction decoding and Execution
D.Shiloah Elizabeth, DCSE/AU
17
Programming Model
D.Shiloah Elizabeth, DCSE/AU
Instruction classification
Instruction word size
Data transfer operations
Arithmetic operations
Logical operations
Branching operations
Machine control operations
One-byte instructions
Two-byte instructions
Three-byte instructions
D.Shiloah Elizabeth, DCSE/AU
19
D.Shiloah Elizabeth, DCSE/AU
18
20
8/5/2015
Data transfer instructions
Data transfer instructions
Copy from source to destination
Load accumulator
Move immediate 8-bit
MOV Rd, Rs
MOV M, Rs
MOV Rd, M
MVI Rd, data
MVI M, data
MOV B,C
MOV B,M
MVI B, 57
MVI M, 57
Load accumulator indirect
LDA 16-bit address
LDAX B/D register pair
LDA 4200H
LDAX B
Load register pair immediate
D.Shiloah Elizabeth, DCSE/AU
21
Load H and L registers direct
LXI Reg. pair, 16-bit data
LHLD 16-bit address
LXI H, 2034
LHLD 2040
D.Shiloah Elizabeth, DCSE/AU
Data transfer instructions
Data transfer instructions
Store accumulator direct
STA 16-bit address
STA 4350
STA XYZ
Store accumulator indirect
STAX Reg. pair
STAX B
Copy H and L registers to the
stack pointer
SPHL none
SPHL
Exchange H and L with top of
stack
XTHL none
XTHL
Store H and L registers direct
SHLD 16-bit address
SHLD 2470
Exchange H and L with D and E
XCHG none
XCHG
Push register pair onto stack
PUSH Reg. pair
PUSH B
PUSH A
Exchange H and L with D and E
POP Reg. pair
POP H
POP A
D.Shiloah Elizabeth, DCSE/AU
23
D.Shiloah Elizabeth, DCSE/AU
22
24
8/5/2015
Data transfer instructions
Arithmetic instructions
Output data from accumulator
to a port with 8-bit address
Add register or memory to
accumulator
ADD R
ADD M
ADD B
ADD M
Add register to accumulator with
carry
ADC R
ADC M
ADC B
ADC M
Add immediate to accumulator
ADI 8-bit data
Add immediate to accumulator
with carry
ACI 8-bit data
Input data to accumulator from
a port with 8-bit address
OUT 8-bit port address
IN 8-bit port address
OUT 87
IN 82
ADI 45
D.Shiloah Elizabeth, DCSE/AU
25
Arithmetic instructions
Add register pair to H and L
registers
DAD Reg. pair
DAD H
ACI 45
D.Shiloah Elizabeth, DCSE/AU
26
Arithmetic instructions
Decimal adjust accumulator
DAA none
DAA
If the result is larger than 16 bits,
the CY flag is set.
No other flags are affected.
Subtract register or memory
from accumulator
SUB R
SUB M
SUB B
SUB M
Subtract source and borrow
from accumulator
SBB R
SBB M
SBB B
SBB M
Subtract immediate from
accumulator
SUI 8-bit data
Subtract immediate from
accumulator with borrow
SBI 8-bit data
SBI 45
SUI 45
D.Shiloah Elizabeth, DCSE/AU
27
D.Shiloah Elizabeth, DCSE/AU
28
8/5/2015
Arithmetic instructions
Branching instructions
Increment register or memory
by 1
INR R
INR M
INR B
INR M
Increment register pair by 1
INX R
INX H
Decrement register or memory
by 1
DCR R
DCR M
DCR B
DCR M
Decrement register pair by 1
DCX R
DCX H
D.Shiloah Elizabeth, DCSE/AU
JMP 16-bit address
JMP 2034
JMP label
29
Branching instructions
Unconditional subroutine call
CALL 16-bit address
CALL 2034
CALL label
Jump conditionally
Operand: 16-bit address
Opcode Description
Flag Status
JC
Jump on Carry
CY = 1
JNC
Jump on no Carry CY = 0
JP
Jump on positive
S=0
JM
Jump on minus
S=1
JZ
Jump on zero
Z=1
JNZ
Jump on no zero
Z=0
JPE
Jump on parity even P = 1
JPO
Jump on parity odd P = 0
Jump unconditionally
D.Shiloah Elizabeth, DCSE/AU
30
Branching instructions
Call conditionally
Operand: 16-bit address
Opcode Description
Flag Status
CC
Call on Carry
CY = 1
CNC
Call on no Carry
CY = 0
CP
Call on positive
S=0
CM
Call on minus
S=1
CZ
Call on zero
Z=1
CNZ
Call on no zero
Z=0
CPE
Call on parity even P = 1
CPO
Call on parity odd P = 0
D.Shiloah Elizabeth, DCSE/AU
31
Return from subroutine
unconditionally
RET none
RET
Return from subroutine conditionally
Operand: none
Opcode Description
Flag Status
RC
Return on Carry
CY = 1
RNC Return on no Carry CY = 0
RP
Return on positive S = 0
RM
Return on minus
S=1
RZ
Return on zero
Z=1
RNZ Return on no zero Z = 0
RPE Return on parity even P = 1
RPO Return on parity odd P = 0
D.Shiloah Elizabeth, DCSE/AU
32
8/5/2015
Branching instructions
Load program counter with HL
contents
PCHL none
PCHL
Restart
Interrupt Rst Addr
TRAP
0024H
these interrupts generate RST
RST 5.5 002CH instructions internally and
RST 6.5 0034H thus do not require any
RST 7.5 003CH external hardware.
Logical instructions
Restart
generally used in
conjunction
with
interrupts
and
inserted
using
external hardware.
can be used as
software instructions
in a program to
transfer
program
execution to one of
the eight locations.
Instr Restart Addr
RST 0 0000H
RST 1 0008H
RST 2 0010H
RST 3 0018H
RST 4 0020H
RST 5 0028H
RST 6 0030H
RST 7 0038H
D.Shiloah Elizabeth, DCSE/AU
Compare register or memory
with accumulator
CMP R
CMP M
CMP B
CMP M
Compare immediate with
accumulator
CPI 8-bit data
CPI 45
Logical AND register or memory
are modified.
with accumulator S,CYZ,isPreset.
AC is set.
ANA R
ANA M
ANA B
ANA M
Logical AND immediate with
are modified.
accumulator S,CYZ,isPreset.
AC is set.
ANI 8-bit data
ANI 07
33
Logical instructions
D.Shiloah Elizabeth, DCSE/AU
34
Logical instructions
Exclusive OR register or memory
with accumulator S, Z, P are modified.
CY and AC are reset.
XRA R
XRA M
XRA B
XRA M
Exclusive OR immediate with
S, Z, P are modified.
accumulator
CY and AC are reset.
XRI 8-bit data
XRI 86
Rotate accumulator left
RLC none
RLC
Rotate accumulator right
RRC none
RRC
Logical OR register or memory
P are modified.
with accumulator S,CYZ,and
AC are reset.
ORA R
ORA M
ORA B
ORA M
Logical OR immediate with
S, Z, P are modified.
accumulator
CY and AC are reset.
ORI 8-bit data
ORI 07
Rotate accumulator left through
carry
RAL none
RAL
Rotate accumulator right
through carry
RAR none
RAR
D.Shiloah Elizabeth, DCSE/AU
35
D.Shiloah Elizabeth, DCSE/AU
36
8/5/2015
Logical instructions
CONTROL INSTRUCTIONS
Complement accumulator
CMA none
CMA
Complement carry
CMC none
CMC
No operation
NOP none
Halt and enter wait state
HLT none
Disable interrupts
DI none
Enable interrupts
EI none
Set Carry
STC none
STC
D.Shiloah Elizabeth, DCSE/AU
Rotate accumulator left
37
RLC
D.Shiloah Elizabeth, DCSE/AU
Rotate accumulator right
Before execution of RLC
CY
D7
D6
D5
D4
D3
D2
D1
D0
CY
B7
B6
B5
B4
B3
B2
B1
B0
CY
D7
D6
D5
D4
D3
D2
D1
D0
B7
B6
B5
B4
B3
B2
B1
B0
B7
38
RRC
Before execution of RRC
After execution of RLC
D7
D6
D5
D4
D3
D2
D1
D0
CY
B7
B6
B5
B4
B3
B2
B1
B0
CY
After execution of RRC
Each binary bit of the accumulator is rotated left by one position.
D7 is placed in the position of D0 as well as in CY.
CY is modified according to D7.
D.Shiloah Elizabeth, DCSE/AU
Read interrupt mask
RIM none
Set interrupt mask
SIM none
D7
D6
D5
D4
D3
D2
D1
D0
CY
B0
B7
B6
B5
B4
B3
B2
B1
B0
Each binary bit of the accumulator is rotated right by one position.
D0 is placed in the position of D7 as well as in CY.
CY is modified according to bit D0.
39
D.Shiloah Elizabeth, DCSE/AU
40
8/5/2015
Rotate accumulator left through carry
Rotate accumulator right through carry
RAL
Before execution of RAL
RAR
Before execution of RAR
CY
D7
D6
D5
D4
D3
D2
D1
D0
D7
D6
D5
D4
D3
D2
D1
D0
CY
CY
B7
B6
B5
B4
B3
B2
B1
B0
B7
B6
B5
B4
B3
B2
B1
B0
CY
After execution of RAL
After execution of RAR
CY
D7
D6
D5
D4
D3
D2
D1
D0
D7
D6
D5
D4
D3
D2
D1
D0
CY
B7
B6
B5
B4
B3
B2
B1
B0
CY
CY
B7
B6
B5
B4
B3
B2
B1
B0
Each binary bit of the accumulator is rotated left by one position through
the Carry flag.
D7 is placed in CY, and CY is placed in D0.
CY is modified according to D7.
D.Shiloah Elizabeth, DCSE/AU
41
Each binary bit of the accumulator is rotated right by one position
through the Carry flag.
D0 is placed in CY, and CY is placed in D7.
CY is modified according to D0.
D.Shiloah Elizabeth, DCSE/AU
42
Addressing Modes of 8085
To perform any operation, we have to give the corresponding
instructions to the microprocessor.
In each instruction, programmer has to specify 3 things:
Operation to be performed
Address of source of data
Address of destination of result
ADDRESSING MODES
D.Shiloah Elizabeth, DCSE/AU
43
D.Shiloah Elizabeth, DCSE/AU
44
8/5/2015
Addressing Modes of 8085
Addressing Modes of 8085
The method by which the address of source of data or the address of
destination of result is given in the instruction is called Addressing
Modes of 8085.
Intel 8085 uses the following addressing modes:
1. Direct Addressing Mode
2. Register Addressing Mode
3. Register Indirect Addressing Mode
4. Immediate Addressing Mode
5. Implicit Addressing Mode
The term addressing mode refers to the way in which the operand of
the instruction is specified.
D.Shiloah Elizabeth, DCSE/AU
45
D.Shiloah Elizabeth, DCSE/AU
Addressing Modes of 8085
Addressing Modes of 8085
Direct Addressing Mode
In this mode, the address of the operand is given in the instruction
itself.
LDA 4500H
LDA is the operation.
4500 H is the address of source.
Accumulator is the destination.
Register Addressing Mode
In this mode, the operand is in general purpose register.
MOV A,B
MOV is the operation.
B is the source of data.
A is the destination.
D.Shiloah Elizabeth, DCSE/AU
47
D.Shiloah Elizabeth, DCSE/AU
46
48
8/5/2015
Addressing Modes of 8085
Addressing Modes of 8085
Register Indirect Addressing Mode
In this mode, the address of operand is specified by a register pair.
MOV A,M
MOV is the operation.
M is the memory location specified by H-L register pair.
A is the destination.
Immediate Addressing Mode
In this mode, the operand is specified within the instruction itself.
MVI A,05H
MVI is the operation.
05 H is the immediate data (source).
A is the destination.
D.Shiloah Elizabeth, DCSE/AU
49
D.Shiloah Elizabeth, DCSE/AU
50
Addressing Modes of 8085
Implicit/Implied Addressing Mode
If address of source of data as well as address of destination of result
is fixed, then there is no need to give any operand along with the
instruction.
CMA
CMA is the operation.
A is the source.
A is the destination.
D.Shiloah Elizabeth, DCSE/AU
Timing Diagram
Timing diagram is the display of initiation of read/write and transfer of data
operations under the control of 3-status signals IO / M , S1, and S0.
51
D.Shiloah Elizabeth, DCSE/AU
52
8/5/2015
Cycles and States
T- State: One subdivision of an operation. A T-state lasts for one clock
period.
An instructions execution length is usually measured in a number of T-states.
(clock periods).
Machine Cycle: The time required to complete one operation of
accessing memory, I/O, or acknowledging an external request.
This cycle may consist of 3 to 6 T-states.
Instruction Cycle: The time required to complete the execution of an
instruction.
Operations
Opcode Fetch
Memory Read
Memory Write
I/O Read
I/O Write
In the 8085, an instruction cycle may consist of 1 to 6 machine cycles.
D.Shiloah Elizabeth, DCSE/AU
53
D.Shiloah Elizabeth, DCSE/AU
54
Opcode Fetch Machine Cycle
D.Shiloah Elizabeth, DCSE/AU
55
D.Shiloah Elizabeth, DCSE/AU
56
8/5/2015
Memory Read Machine Cycle
D.Shiloah Elizabeth, DCSE/AU
Memory Write Machine Cycle
57
I/O Read Machine Cycle
D.Shiloah Elizabeth, DCSE/AU
D.Shiloah Elizabeth, DCSE/AU
58
I/O Write Machine Cycle
59
D.Shiloah Elizabeth, DCSE/AU
60
8/5/2015
MVI A, 45H
M1: opcode fetch
M2: memory read
2 MCs
4+3 = 7 T-states
STA 5000H
LHLD
SHLD
STA
STAX
LDA
LDAX
LXI
M1: opcode fetch
M2: memory read
M3: memory read
M4: memory write
4 MCs
4+3+3+3 = 13 T-states
D.Shiloah Elizabeth, DCSE/AU
61
D.Shiloah Elizabeth, DCSE/AU
62
Counters - Using a Register as a Loop Counter
A loop counter is set up by loading a register with a certain value
Then using the DCR (to decrement) or INR (to increment) the
contents of the register are updated.
A loop is set up with a conditional jump instruction that loops
back or not depending on whether the count has reached the
termination count.
Counters & Time Delays
D.Shiloah Elizabeth, DCSE/AU
63
D.Shiloah Elizabeth, DCSE/AU
64
8/5/2015
Counters
Counters
Operation of a loop counter
Sample ALP for implementing a loop
using DCR instruction
MVI C, 15H
LOOP
DCR C
JNZ LOOP
Using a single register, one can repeat a loop for a maximum
count of 255 times.
D.Shiloah Elizabeth, DCSE/AU
65
D.Shiloah Elizabeth, DCSE/AU
Counters - Using a Register Pair as a Loop Counter
Counters
It is possible to increase the count by using a register pair for the
loop counter instead of the single register.
Problem: how to test for the final count since DCX and INX do not
modify the flags?
However, if the loop is looking for when the count becomes
zero, we can apply OR between the two registers in the pair
and then check the zero flag.
The following is an example of a loop set up with a register pair
as the loop counter.
D.Shiloah Elizabeth, DCSE/AU
67
LOOP
66
LXI B, 1000H
DCX B
MOV A, C
ORA B
JNZ LOOP
D.Shiloah Elizabeth, DCSE/AU
68
8/5/2015
Delays
Delays
Each instruction passes through different combinations of Fetch,
Memory Read, and Memory Write cycles.
Knowing the combinations of cycles, one can calculate how long such
an instruction would require to complete.
Let
Knowing how many T-States an instruction requires, and keeping in
mind that a T-State is one clock cycle long, we can calculate the time
using the following formula:
Delay = No. of T-States / Frequency
For example
B be Number of Bytes
M be Number of Machine Cycles
T be Number of T-State.
D.Shiloah Elizabeth, DCSE/AU
MVI instruction uses 7 T-States.
Therefore, if the Microprocessor is running at 2 MHz, the instruction would
require 3.5 Seconds to complete.
69
Delays Using a register
D.Shiloah Elizabeth, DCSE/AU
70
Delays Using a register
Delay loops
We can use a loop to produce a certain amount of time delay
in a program.
The following is an example of a delay loop:
MVI C, FFH
LOOP DCR C
JNZ LOOP
D.Shiloah Elizabeth, DCSE/AU
71
MVI C, FFH 7 T-States
LOOP DCR C
4 T-States
JNZ LOOP 10 T-States
The first instruction initializes the loop counter and is
executed only once requiring only 7 T-States.
The following two instructions form a loop that requires 14 TStates to execute and is repeated 255 times until C becomes 0.
D.Shiloah Elizabeth, DCSE/AU
72
8/5/2015
Delays Using a register
Delays Using a register
In the last iteration of the loop, the JNZ instruction will fail and require only 7
T-States rather than the 10.
Therefore, we must deduct 3 T-States from the total delay to get an accurate
delay calculation.
To calculate the delay, we use the following formula:
Using these formulas, we can calculate the time delay for the previous
example:
TO= 7 T-States
Delay of the MVI instruction
Tdelay= TO+ TL
Tdelay= total delay
TO= delay outside the loop
TL= delay of the loop
TOis the sum of all delays outside the loop
D.Shiloah Elizabeth, DCSE/AU
TL= (14 X 255) -3 = 3567 T-States
14 T-States for the 2 instructions repeated 255 times (FF16= 25510) reduced by the 3 TStates for the final JNZ.
73
D.Shiloah Elizabeth, DCSE/AU
Delays Using a register pair
Delays Using a register pair
Using a Register Pair as a Loop Counter
Using the same formula from before, we can calculate:
The following is an example of a delay loop set up with a register pair as the
loop counter.
LXI B, 1000H ;10 T-States
LOOP DCX B6
;T-States
MOV A, C
;4 T-States
ORA B ;4 T-States
JNZ LOOP
;10 T-States
D.Shiloah Elizabeth, DCSE/AU
74
TO= 10 T-States
The delay for the LXI instruction
TL= (24 X 4096) -3 = 98301 T-States
24 T-States for the 4 instructions in the loop repeated 4096 times (100016= 409610)
reduced by the 3 T-States for the JNZ in the last iteration.
75
D.Shiloah Elizabeth, DCSE/AU
76
8/5/2015
Delays Using nested loops
Delays Using nested loops
Nested Loops for Delay
The calculation remains the same except that it the formula must be
applied recursively to each loop.
Instead (or in conjunction with) Register Pairs, a nested loop structure can be
used to increase the total delay produced.
MVI B, 10H ;7 T-States
LOOP2 MVI C, FFH ;7 T-States
LOOP1 DCR C
;4 T-States
JNZ LOOP1
;10 T-States
DCR B
;4 T-States
JNZ LOOP2
;10 T-States
D.Shiloah Elizabeth, DCSE/AU
Start with the inner loop, then plug that delay in the calculation of the outer
loop.
Delay of inner loop
TO1= 7 T-States
MVI C, FFH instruction
TL1= (255 X 14) -3 = 3567 T-States
14 T-States for the DCR C and JNZ instructions repeated 255 times (FF16= 25510) minus 3
for the final JNZ
77
D.Shiloah Elizabeth, DCSE/AU
Delays Using nested loops
Delays Larger delays
Delay of outer loop
Increasing the delay
78
The delay can be further increased by using register pairs for each of the loop
counters in the nested loops setup.
It can also be increased by adding dummy instructions (like NOP) in the body
of the loop.
TO2= 7 T-States
MVI B, 10H instruction
TL1= (16 X (14 + 3574)) -3 = 57405 T-States
14 T-States for the DCR B and JNZ instructions and 3574 T-States for loop1 repeated 16 times
(1016= 1610) minus 3 for the final JNZ.
TDelay= 7 + 57405 = 57412 T-States
Total Delay TDelay= 57412 X 0.5 Sec = 28.706 mSec
D.Shiloah Elizabeth, DCSE/AU
79
D.Shiloah Elizabeth, DCSE/AU
80
8/5/2015
Delay Subroutine
Delay Subroutine
The delay time is given by the total time taken to execute the delay
routine.
Eg. If the 8085 microprocessor has 5 MHz quartz crystal then, the
internal clock frequency = 5 /2 = 2.5 MHz
Disadvantage in delay routines:
processor time is wasted
Time for one T-state= 1 / 2.5 x 106= 0.4sec
For small time delays (< 0.5 ms) an 8- bit register can be used.
For large time delays (< 0.5 s) l6-bit register should be used.
For very large time delays (> 0.5 s), a delay routine can be repeatedly called in
the main program.
D.Shiloah Elizabeth, DCSE/AU
Solution:
use dedicated timer like 8253/8254 to produce time delays or
to maintain timings of various operations.
81
Delay Subroutine - Example
D.Shiloah Elizabeth, DCSE/AU
82
Delay Subroutine - Example
A delay routine to produce a time delay of 0.5 ms in 8085
processor-based system whose clock source is 6 MHz quartz
crystal.
The delay required is 0.5 ms, hence an 8-bit register of 8085 can
be used to store a Count value and then decrement to zero.
Delay routine
MVI D, N
; N: count
Loop: DCR D
JNZ Loop
RET
Instruction
T-State required
for execution of
an instruction
Number of
times the
instruction is
executed
Total T-States
CALL addr16
18
18 x 1 = 18
MVI D, N
7x1=7
DCR D
4 x N = 4N
JNZ LOOP
10
N-1
10 x (N-1) = 10N
10
7x1=7
10
10 x 1 = 10
RET
TOTAL T-STATES FOR DELAY SUBROUTINE
D.Shiloah Elizabeth, DCSE/AU
83
D.Shiloah Elizabeth, DCSE/AU
14N + 32
84
8/5/2015
Delay Subroutine - Calculation to find the count value, N
Counters
External clock frequency = 6 MHz
Internal clock frequency
ALP for 8085 to count from AAH to 00H, with a time delay of 2ms for
each count. Assume the external frequency given to the processor is
2MHz.
= External Frequency / 2= 6 / 2= 3 MHz
Time period for 1 T-State
= 1 / Internal clock frequency= 1 / 3x106= 0.333s
Internal Frequency in 8085 = External frequency/2
= 2MHz / 2= 1MHz
T-State= 1 / f (internal frequency)= 1s
No. of T-states required for delay of 0.5ms
= Required time delay / Time for one T-state
= 0.5ms / 0.333s= 1500.10 1500 = 150010
From above table,
14N + 32 = 1500
N = (1500 32) / 14 = 104.85710 10510= 69H
Therefore by replacing the count value, N by 69H in the above program , a delay of
0.5ms can be produced
D.Shiloah Elizabeth, DCSE/AU
85
D.Shiloah Elizabeth, DCSE/AU
Counters
Counters
Main program for counting from
AA to 00
MVI C, AAH
Loop: CALL Delay
DCR C
JNZ Loop
HLT
Hexadecimal counter to count from FFH to 00H
MVI B, 00H
NEXT: DCR B
MVI C, 05
DELAY:
DCR C
JNZ DELAY
MOV A, B
OUT PORT1
JMP NEXT
Delay subroutine for delay of 2ms
Delay: MVI D, 4AH
Next: NOP
NOP
NOP
NOP
DCR D
JNZ Next
RET
D.Shiloah Elizabeth, DCSE/AU
87
D.Shiloah Elizabeth, DCSE/AU
86
88
8/5/2015
Counters
Delay Calculation
T D time delay in ms
Modulo-10 counter
START:
DISPLAY:
LOOP:
MOV A, B
T O time delay outside the loop
T l time delay inside the loop
LXI H, 16 BIT
Count
MVI B, 00H
OUT PORT1
DCX H
MOV A, L
ORA H
count
stored
in register
or register
pair
T D T O T L Count
JNZ LOOP
INR B
MOV A, B
T D T O T L Count
CPI 0AH
JNZ DISPLAY
JZ START
Count
D.Shiloah Elizabeth, DCSE/AU
89
TD TO
TL
D.Shiloah Elizabeth, DCSE/AU
90
Stack
The stack is an area of memory identified by the programmer for
temporary storage of information.
The stack is a Last In First Out (LIFO) structure.
The stack normally grows backwards into memory.
the programmer defines the bottom of the stack and the stack grows up into
reducing address range.
STACK & SUBROUTINEs
D.Shiloah Elizabeth, DCSE/AU
91
D.Shiloah Elizabeth, DCSE/AU
92
8/5/2015
Stack
Stack
It is customary to place the bottom of the stack at the end of memory
to keep it as far away from user programs as possible.
In the 8085, the stack is defined by setting the SP (Stack Pointer)
register.
LXI SP, 6000H
This sets the Stack Pointer to location 6000H (end of memory for the 8085).
The Size of the stack is limited only by the available memory
Memory
Bottom of stack
D.Shiloah Elizabeth, DCSE/AU
93
D.Shiloah Elizabeth, DCSE/AU
Stack - Operations
Stack Operations - PUSH
Information is saved on the stack by PUSHing it on.
It is retrieved from the stack by POPing it off.
The 8085 provides two instructions:
PUSH B
(1 Byte Instruction)
12
34
Decrement SP
Copy the contents of register B to
the memory location pointed to by
SP
Decrement SP
Copy the contents of register C to
the memory location pointed to by
SP
PUSH and POP for storing information on the stack and retrieving it back.
Both PUSH and POP work with register pairs only.
D.Shiloah Elizabeth, DCSE/AU
95
D.Shiloah Elizabeth, DCSE/AU
94
5FFC
5FFD
5FFE
34
5FFF
12
6000
SP (after Push)
SP (initially)
96
8/5/2015
Stack Operations - POP
POP D
(1 Byte Instruction)
Stack - Operations
12
34
Copy the contents of the memory
location pointed to by the SP to
register E
Increment SP
Copy the contents of the memory
location pointed to by the SP to
register D
Increment SP
D.Shiloah Elizabeth, DCSE/AU
During pushing, the stack operates in a decrement then store style.
The stack pointer is decremented first, then the information is placed on the
stack.
During poping, the stack operates in a use then increment style.
5FFC
5FFD
5FFE
34
5FFF
12
6000
SP (initially)
The information is retrieved from the top of the stack and then the pointer is
incremented.
The SP pointer always points to the top of the stack.
SP (after Pop)
97
D.Shiloah Elizabeth, DCSE/AU
98
Stack - Operations
Stack - Operations
The order of PUSHs and POPs must be opposite of each other in order
to retrieve information back into its original location.
The 8085 recognizes one additional register pair called the PSW
(Program Status Word).
PUSH B
PUSH D
...
POP D
POP B
This register pair is made up of the Accumulator and the Flags registers.
It is possible to push the PSW onto the stack, do whatever operations
are needed, then POP it off of the stack.
Reversing the order of the POP instructions will result in the exchange
of the contents of BC and DE.
D.Shiloah Elizabeth, DCSE/AU
99
The result is that the contents of the Accumulator and the status of the Flags
are returned to what they were before the operations were executed.
D.Shiloah Elizabeth, DCSE/AU
100
8/5/2015
Stack - Operations
Stack - Operations
PUSH PSW (1 Byte Instruction)
POP PSW (1 Byte Instruction)
Decrement SP
Copy the contents of register A to the memory location pointed to by SP
Decrement SP
Copy the contents of Flag register to the memory location pointed to by SP
Copy the contents of the memory location pointed to by the SP to Flag
register
Increment SP
Copy the contents of the memory location pointed to by the SP to register A
Increment SP
D.Shiloah Elizabeth, DCSE/AU
101
Modify Flag Content using PUSH/POP
If we want to Reset the Zero Flag
7
6
5
8085 Flag :
S
Z
X
Program:
102
Subroutines
AC
CY
LXI SP 5FFF
PUSH PSW
POP H
MOV A,L
ANI BFH (BFH= 1011 1111) ;Masking
MOV L,A
PUSH H
POP PSW
D.Shiloah Elizabeth, DCSE/AU
D.Shiloah Elizabeth, DCSE/AU
A subroutine is a group of instructions that will be used repeatedly in
different locations of the program.
Rather than repeat the same instructions several times, they can be grouped
into a subroutine that is called from the different locations.
In Assembly language, a subroutine can exist anywhere in the code.
However, it is customary to place subroutines separately from the main
program.
103
D.Shiloah Elizabeth, DCSE/AU
104
8/5/2015
Subroutines - Instructions
Subroutines Instructions - CALL
The 8085 has two instructions for dealing with subroutines.
CALL 4000H (3 byte instruction)
The CALL instruction is used to redirect program execution to the subroutine.
The RET instruction is used to return the execution to the calling routine.
D.Shiloah Elizabeth, DCSE/AU
105
D.Shiloah Elizabeth, DCSE/AU
Subroutines Instructions - CALL
Subroutines Instructions - RET
Microprocessor
RET (1 byte instruction)
106
Reads the subroutine address from the next two memory location and stores
the higher order 8bit of the address in the W register and stores the lower
order 8bit of the address in the Z register
Pushes the address of the instruction immediately following the CALL onto
the stack [Return address]
Loads the program counter with the 16-bit address supplied with the CALL
instruction from WZ register.
D.Shiloah Elizabeth, DCSE/AU
107
D.Shiloah Elizabeth, DCSE/AU
108
8/5/2015
Subroutines Instructions - RET
Passing Data to a Subroutine
The CALL instruction places the return address at the two memory
locations immediately before where the Stack Pointer is pointing.
In Assembly Language data is passed to a subroutine through
registers.
You must set the SP correctly BEFORE using the CALL instruction.
The RET instruction takes the contents of the two memory locations
at the top of the stack and uses these as the return address.
The data is stored in one of the registers by the calling program and the
subroutine uses the value from the register.
Do not modify the stack pointer in a subroutine. You will lose the return
address.
The other possibility is to use agreed upon memory locations.
The calling program stores the data in the memory location and the
subroutine retrieves the data from the location and uses it.
D.Shiloah Elizabeth, DCSE/AU
109
D.Shiloah Elizabeth, DCSE/AU
Call by Reference and Call by Value
Cautions with PUSH and POP
If the subroutine performs operations on the contents of the
registers, then these modifications will be transferred back to the
calling program upon returning from a subroutine.
PUSH and POP should be used in opposite order.
There has to be as many POPs as there are PUSHs.
Call by reference
110
If not, the RET statement will pick up the wrong information from the top of
the stack and the program will fail.
It is not advisable to place PUSH or POP inside a loop.
If this is not desired, the subroutine should PUSH all the registers it
needs on the stack on entry and POP them on return.
The original values are restored before execution returns to the calling
program.
D.Shiloah Elizabeth, DCSE/AU
111
D.Shiloah Elizabeth, DCSE/AU
112