Intel Memory Interfacing & DIO Interfacing
Intel Memory Interfacing & DIO Interfacing
Intel
Memory Interfacing
&
DIO Interfacing
Pin Configuration of 8086
20 bits
16 bits
8088 vs 8086
Address Bus
A19 – A0
8088
Data Bus
D7 – D0
RD
WR
IO/M
Write Cycle – Simplified
ONE BUS CYCLE
4 clock cycles. T1 T2 T3 T4
CLK
stable states.
Data Data Written to Memory
WR
T1 T2 T3 T4
CLK
RD
Address Bus
An – A0
Memory
Data Bus
D7 – D0
RD
WR
CS
Basic Connections
Address Bus
A19 – A0
8088 Memory
Data Bus
D7 – D0
RD RD
RD
WR WR
WR
IO/M CS
IO/M
Why decode
• Different memory types in a system
– Eg. ROM (BIOS) and RAM
• Different number of chips required to add
up to the amount needed.
– Example
– 16K memories are available but 64K is
required.
– So need to use 64/16 = 4 chips.
Decoding
Decoding Circuit
IO/M
Address Bus
A19 – A14
Address Bus
A13 – A0
CS CS CS CS
BANK1
Data Bus
D7 – D0
RD
WR
Decoder design
• The CPU is able to address 220 or 1Mega
byte – (A0 to A19).
• Each RAM is 16K or 214 – (A0 to A13).
• To select one of the 4 RAMs, need to use
2 lines which is (A14 & A15).
• So the 4 unused line (A16, A17, A18 &
A19) will provide 16 possible combinations
of memory locations.
Decoder design
164 = 65536 = 216 = 10000H = (00H to FFFFH).
A19 A18 A17 A16 Address Range
0 0 0 0 000000 to 00FFFF
BANK0
64KB
0 0 0 1 010000 to 01FFFF
BANK1 64KB
0 0 1 0 020000 to 02FFFF
BANK2 64KB
0 0 1 1
- - - - ------------------------
1 1 1 1 0F0000 to 0FFFFF
0 0 0 1 Selected.
< assuming 0001.
BANK1
Decoder design
A19 A18 A17 A16 A15 A14
A16 1
A15
A14
00 01 10 11
Address: 10000
423C +
------------
1423C => Physical address
Read Cycle – Simpified
ONE BUS CYCLE
T1 T2 T3 T4
CLK
RD
Decoder design
A19 A18 A17 A16 A15 A14
A16 1
A15 0
A14 1
01
RAM0 RAM1 RAM2 RAM3
RAM1
selected
Decoding
Decoding Circuit
IO/M
Address Bus
A19 – A14
Address Bus
1423C A13 – A0
CS CS CS CS
78
RAM0 RAM1 RAM2 RAM3
8088 (16K) (16K) (16K) (16K)
Data Bus
D7 – D0
RD
WR
Decoder Design – 74LS138
S2S1S0
E3 74LS138
Enable 111
E2 Y7
Inputs 110
E1 Y6
101
Y5
100
Y4
011 Outputs
S2 Y3 010
Y2 Active
Selection 001
S1 Y1 LOW
Inputs 000
Y0
S0
Inputs Outputs
E3 E2 E1 S2 S1 S0 Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0
0 X X X X X 1 1 1 1 1 1 1 1
X 1 X X X X 1 1 1 1 1 1 1 1
X X 1 X X X 1 1 1 1 1 1 1 1
1 0 0 0 0 0 1 1 1 1 1 1 1 0
1 0 0 0 0 1 1 1 1 1 1 1 0 1
1 0 0 0 1 0 1 1 1 1 1 0 1 1
1 0 0 0 1 1 1 1 1 1 0 1 1 1
1 0 0 1 0 0 1 1 1 0 1 1 1 1
1 0 0 1 0 1 1 1 0 1 1 1 1 1
1 0 0 1 1 0 1 0 1 1 1 1 1 1
1 0 0 1 1 1 0 1 1 1 1 1 1 1
1 0 0 0 080000 to 08FFFF
1 0 0 1 090000 to 09FFFF
1 0 0 0 080000 to 08FFFF
1 0 0 1 090000 to 09FFFF
ENB
1Y1 1A1
ENB
1Y2 1A2
ENB
1Y3 1A3
ENB
1Y4 1A4
ENB
2Y1 2A1
ENB
2Y2 2A2
ENB
2Y3 2A3
ENB
2Y4 2A4
2G
Basic connections
Address Bus
Decoder
CPU
74LS244
Data Tristate
Bus buffer
Inputs
eg. Switches,
or Sensors.
D0 Q0
D1 Q1
D2 Q2
D3 Q3
D4 Q4
D5 Q5
D6 Q6
D7 Q7
OC
74LS373
EN
Basic connections
Decoder
CPU
74LS373
Data Latch
Bus Outputs
eg. LEDs
or Motor.
Why not use 74LS244 also?
• When 74LS244 is not selected, the
outputs are in a tri-state.
• When 74LS373 is not selected, the
previous data is latched to the output
• Conclusion.
• Use 74LS244 for inputs and 74LS373 for
outputs.
Memory vs IO
IO/M = 0
FFFFF
IO/M = 1
Memory FFFF
1M
IO
2 20
64K
216
00000 0000
FFFFF
IO/M = 1
200H =
address Memory FFFF
for 1M
memory. IO
64K 200H =
00200 0200 address
0000 for I/O.
00000
(64K = 216)
Vcc
R
SW
ENB
D0
ENB
D1
ENB
D2
D3
ENB
Switches
ENB (active-
D4
ENB
low)
D5
ENB
D6
ENB
D7
1G
2G
A0
A1
A2
IO address A3
A4
7Ah
A5
A6
A7
IO/M
RD
Simplified drawing: Vcc
R
Buffer SW
ENB
D0
ENB
D1
ENB
D2
D3
ENB
Switches
ENB (active-
D4 74LS244
ENB
low)
D5
ENB
D6
ENB
D7
1G
2G
A0
A1
A2
IO address A3
A4
7Ah
A5
A6
A7
IO/M
RD
R
Data from switches.
ENB
D0
0 (lsb)
ENB
Data = AL
D1
1
0
ENB
D2
0
ENB
data D3
1
ENB
D4
0
ENB
D5
D6
ENB
1
D7
ENB
0 (msb)
1G SW
IN AL,7AH 2G
A0
address A1
A2
A3
A4
A5
A6
A7
IO/M
RD 7AH is address, not data.
Vcc
R
What is the result Active
LOW.
in AL if the following ENB
ENB
0
D1
ENB
1
IN AL,7AH
D2
0
ENB
D3
0
1
ENB
D4
AL = 0x52 D5
ENB
0
D6
ENB
1
> 01010010B D7
ENB
0
1G SW
2G
A0
A1
A2
A3
A4
A5
A6
A7
IO/M
RD
How can the program
checks whether the R
switch S2 is closed? SW
ENB
D0
IN AL,7AH
ENB
D1
ENB S2
AND AL,0X04 D2
ENB
JZ CLOSE D3
ENB
76543210 D4
ENB
0X52 = 01100010 D5
ENB
0X04 = 00000100 D6
ENB
--------------- D7
00000000
1G
2G
S2 is closed.
A0
A1
A2
Active LOW.
A3
A4
A5
A6
A7
IO/M
RD
How can the program
R
checks whether the
switch S7 is closed? SW
ENB
D0
ENB
D1
IN AL,7AH D2
ENB
CMP AL,0X80 D3
ENB
JZ CLOSE D4
ENB
ENB
D5
0X62 = 01100010 D6
ENB
0X80 = 10000000 D7
ENB
S7
--------------- 1G
00000000 2G
A0
A1
S7 is closed.
A2
A3
A4
Active LOW.
A5
A6
A7
IO/M
RD
Outputs
• Connect 8 LEDs to the CPU using the
address 12H.
R
LED
Latch
D0 Q0
D1 Q1
D2 Q2
D3 Q3
D4 Q4
D5 Q5
D6 Q6
A0 D7 Q7
A1
A2 ‘0’ OC
A3 74LS373
A4 EN
A5
A6
A7
IO/M
WR
R
LED
Latch
Data = AL D0 Q0
D1 Q1
D2 Q2
D3 Q3
D4 Q4
OUT 12H,AL D5 Q5
D6 Q6
A0 D7 Q7
A1
A2 ‘0’ OC
A3 74LS373
A4 EN
A5
IO A6
A7
address
IO/M
WR
= 12H
+5V
MOV AL,7EH
OUT 12H,AL
D0
0
7EH = 0111 1110 B D1
Q0
1
Q1
D2
1
Q2
LEDs are active low. D3
1
Q3
D4
1
Q4
D5
1
Q5
D6
1
Q6
D7
0
A0 Q7
A1
A2 ‘0’ OC
A3 74LS373
A4 EN
A5
A6
A7
IO/M
WR
Exercise 1
• Connect a 7-segment LED to the IO
address 78H and write the program to
display
Active HIGH.
a 1 a
MOV AL,6DH b 0
OUT 78H,AL c 1 f b
gfedcba d 1
g
e 0
01101101 f 1 e c
g 1
- 0 d
SW 4 = 00010000B = 10H.
06E0h – 06FFh
06C0h – 06DFh
1
06A0h
0680h
1 0660h
1
0640h – 065fh
0620h – 063fh
0 0600h – 061fh
S2S1S0
1
111
1 110 06C0h – 06DFh
101
100
1 011
010
001
1
000
0
S2S1S0
1 111
110
1
101 440A – 44FB
100
1 011
010
0 001
000
1