SlideShare a Scribd company logo
Home Automation, Networking, and Entertainment Lab
Dept. of Computer Science and Information Engineering
National Cheng Kung University, TAIWAN
Chung-Ping Young
楊中平
I/O PORT
PROGRAMMING
The 8051 Microcontroller and Embedded
Systems: Using Assembly and C
Mazidi, Mazidi and McKinlay
I/O PORT PROGRAMMING
Department of Computer Science and Information Engineering
National Cheng Kung University, TAIWAN 2
HANEL
I/O
PROGRAMMING
8051
(8031)
(89420)
P1.0
P1.1
P1.2
P1.3
P1.4
P1.5
P1.6
P1.7
RST
(RXD) P3.0
(TXD) P3.1
(-INT0) P3.2
(-INT1) P3.3
(T0) P3.4
(T1) P3.5
(-WR) P3.6
(-RD )P3.7
XTAL2
XTAL1
GND
Vcc
P0.0 (AD0)
P0.1 (AD1)
P0.2 (AD2)
P0.3 (AD3)
P0.4 (AD4)
P0.5 (AD5)
P0.6 (AD6)
P0.7 (AD7)
-EA/VPP
ALE/PROG
-PSEN
P2.7 (A15)
P2.6 (A14)
P2.5 (A13)
P2.4 (A12)
P2.3 (A11)
P2.2 (A10)
P2.1 (A9)
P2.0 (A8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
40
39
38
37
36
35
34
33
32
31
30
29
28
27
26
25
24
23
22
21
Provides
+5V supply
voltage to
the chip
Grond
P1
P3
8051 Pin Diagram
A total of 32
pins are set
aside for the
four ports P0,
P1, P2, P3,
where each
port takes 8
pins
P0
P2
Department of Computer Science and Information Engineering
National Cheng Kung University, TAIWAN 3
HANEL
I/O
PROGRAMMING
I/O Port Pins
The four 8-bit I/O ports P0, P1, P2 and
P3 each uses 8 pins
All the ports upon RESET are
configured as input, ready to be used
as input ports
When the first 0 is written to a port, it
becomes an output
To reconfigure it as an input, a 1 must be
sent to the port
To use any of these ports as an input port, it
must be programmed
P1.0
P1.1
P1.2
P1.3
P1.4
P1.5
P1.6
P1.7
RST
(RXD)P3.0
(TXD)P3.1
(INT0)P3.2
(INT1)P3.3
(T0)P3.4
(T1)P3.5
(WR)P3.6
(RD)P3.7
XTAL2
XTAL1
GND
Vcc
P0.0(AD0)
P0.1(AD1)
P0.2(AD2)
P0.3(AD3)
P0.4(AD4)
P0.5(AD5)
P0.6(AD6)
P0.7(AD7)
-EA/VPP
ALE/PROG
-PSEN
P2.7(A15)
P2.6(A14)
P2.5(A13)
P2.4(A12)
P2.3(A11)
P2.2(A10)
P2.1(A9)
P2.0(A8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
40
39
38
37
36
35
34
33
32
31
30
29
28
27
26
25
24
23
22
21
8051
(8031)
Department of Computer Science and Information Engineering
National Cheng Kung University, TAIWAN 4
HANEL
I/O
PROGRAMMING
Port 0
It can be used for input or output,
each pin must be connected externally
to a 10K ohm pull-up resistor
This is due to the fact that P0 is an open
drain, unlike P1, P2, and P3
Open drain is a term used for MOS chips in the
same way that open collector is used for TTL
chips
P0.0
P0.1
P0.2
P0.3
P0.4
P0.5
P0.6
P0.7
Vcc
10 K
8051
Port0
P1.0
P1.1
P1.2
P1.3
P1.4
P1.5
P1.6
P1.7
RST
(RXD)P3.0
(TXD)P3.1
(INT0)P3.2
(INT1)P3.3
(T0)P3.4
(T1)P3.5
(WR)P3.6
(RD)P3.7
XTAL2
XTAL1
GND
Vcc
P0.0(AD0)
P0.1(AD1)
P0.2(AD2)
P0.3(AD3)
P0.4(AD4)
P0.5(AD5)
P0.6(AD6)
P0.7(AD7)
-EA/VPP
ALE/PROG
-PSEN
P2.7(A15)
P2.6(A14)
P2.5(A13)
P2.4(A12)
P2.3(A11)
P2.2(A10)
P2.1(A9)
P2.0(A8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
40
39
38
37
36
35
34
33
32
31
30
29
28
27
26
25
24
23
22
21
8051
(8031)
P0.X
Department of Computer Science and Information Engineering
National Cheng Kung University, TAIWAN 5
HANEL
I/O
PROGRAMMING
Port 0
(cont’)
The following code will continuously send out to port 0 the
alternating value 55H and AAH
BACK: MOV A,#55H
MOV P0,A
ACALL DELAY
MOV A,#0AAH
MOV P0,A
ACALL DELAY
SJMP BACK
P1.0
P1.1
P1.2
P1.3
P1.4
P1.5
P1.6
P1.7
RST
(RXD)P3.0
(TXD)P3.1
(INT0)P3.2
(INT1)P3.3
(T0)P3.4
(T1)P3.5
(WR)P3.6
(RD)P3.7
XTAL2
XTAL1
GND
Vcc
P0.0(AD0)
P0.1(AD1)
P0.2(AD2)
P0.3(AD3)
P0.4(AD4)
P0.5(AD5)
P0.6(AD6)
P0.7(AD7)
-EA/VPP
ALE/PROG
-PSEN
P2.7(A15)
P2.6(A14)
P2.5(A13)
P2.4(A12)
P2.3(A11)
P2.2(A10)
P2.1(A9)
P2.0(A8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
40
39
38
37
36
35
34
33
32
31
30
29
28
27
26
25
24
23
22
21
8051
(8031)
Department of Computer Science and Information Engineering
National Cheng Kung University, TAIWAN 6
HANEL
I/O
PROGRAMMING
Port 0 as Input
In order to make port 0 an input, the
port must be programmed by writing 1
to all the bits
Port 0 is configured first as an input port by writing 1s to it, and then
data is received from that port and sent to P1
MOV A,#0FFH ;A=FF hex
MOV P0,A ;make P0 an i/p port
;by writing it all 1s
BACK: MOV A,P0 ;get data from P0
MOV P1,A ;send it to port 1
SJMP BACK ;keep doing it
P1.0
P1.1
P1.2
P1.3
P1.4
P1.5
P1.6
P1.7
RST
(RXD)P3.0
(TXD)P3.1
(INT0)P3.2
(INT1)P3.3
(T0)P3.4
(T1)P3.5
(WR)P3.6
(RD)P3.7
XTAL2
XTAL1
GND
Vcc
P0.0(AD0)
P0.1(AD1)
P0.2(AD2)
P0.3(AD3)
P0.4(AD4)
P0.5(AD5)
P0.6(AD6)
P0.7(AD7)
-EA/VPP
ALE/PROG
-PSEN
P2.7(A15)
P2.6(A14)
P2.5(A13)
P2.4(A12)
P2.3(A11)
P2.2(A10)
P2.1(A9)
P2.0(A8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
40
39
38
37
36
35
34
33
32
31
30
29
28
27
26
25
24
23
22
21
8051
(8031)
Department of Computer Science and Information Engineering
National Cheng Kung University, TAIWAN 7
HANEL
I/O
PROGRAMMING
Dual Role of
Port 0
Port 0 is also designated as AD0-AD7,
allowing it to be used for both address
and data
When connecting an 8051/31 to an
external memory, port 0 provides both
address and data
P1.0
P1.1
P1.2
P1.3
P1.4
P1.5
P1.6
P1.7
RST
(RXD)P3.0
(TXD)P3.1
(INT0)P3.2
(INT1)P3.3
(T0)P3.4
(T1)P3.5
(WR)P3.6
(RD)P3.7
XTAL2
XTAL1
GND
Vcc
P0.0(AD0)
P0.1(AD1)
P0.2(AD2)
P0.3(AD3)
P0.4(AD4)
P0.5(AD5)
P0.6(AD6)
P0.7(AD7)
-EA/VPP
ALE/PROG
-PSEN
P2.7(A15)
P2.6(A14)
P2.5(A13)
P2.4(A12)
P2.3(A11)
P2.2(A10)
P2.1(A9)
P2.0(A8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
40
39
38
37
36
35
34
33
32
31
30
29
28
27
26
25
24
23
22
21
8051
(8031)
Department of Computer Science and Information Engineering
National Cheng Kung University, TAIWAN 8
HANEL
I/O
PROGRAMMING
Port 1
Port 1 can be used as input or output
In contrast to port 0, this port does not
need any pull-up resistors since it already
has pull-up resistors internally
Upon reset, port 1 is configured as an
input port
P1.0
P1.1
P1.2
P1.3
P1.4
P1.5
P1.6
P1.7
RST
(RXD)P3.0
(TXD)P3.1
(INT0)P3.2
(INT1)P3.3
(T0)P3.4
(T1)P3.5
(WR)P3.6
(RD)P3.7
XTAL2
XTAL1
GND
Vcc
P0.0(AD0)
P0.1(AD1)
P0.2(AD2)
P0.3(AD3)
P0.4(AD4)
P0.5(AD5)
P0.6(AD6)
P0.7(AD7)
-EA/VPP
ALE/PROG
-PSEN
P2.7(A15)
P2.6(A14)
P2.5(A13)
P2.4(A12)
P2.3(A11)
P2.2(A10)
P2.1(A9)
P2.0(A8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
40
39
38
37
36
35
34
33
32
31
30
29
28
27
26
25
24
23
22
21
8051
(8031)
The following code will continuously send out to port 0 the
alternating value 55H and AAH
MOV A,#55H
BACK: MOV P1,A
ACALL DELAY
CPL A
SJMP BACK
Department of Computer Science and Information Engineering
National Cheng Kung University, TAIWAN 9
HANEL
I/O
PROGRAMMING
Port 1 as Input
To make port 1 an input port, it must
be programmed as such by writing 1
to all its bits
P1.0
P1.1
P1.2
P1.3
P1.4
P1.5
P1.6
P1.7
RST
(RXD)P3.0
(TXD)P3.1
(INT0)P3.2
(INT1)P3.3
(T0)P3.4
(T1)P3.5
(WR)P3.6
(RD)P3.7
XTAL2
XTAL1
GND
Vcc
P0.0(AD0)
P0.1(AD1)
P0.2(AD2)
P0.3(AD3)
P0.4(AD4)
P0.5(AD5)
P0.6(AD6)
P0.7(AD7)
-EA/VPP
ALE/PROG
-PSEN
P2.7(A15)
P2.6(A14)
P2.5(A13)
P2.4(A12)
P2.3(A11)
P2.2(A10)
P2.1(A9)
P2.0(A8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
40
39
38
37
36
35
34
33
32
31
30
29
28
27
26
25
24
23
22
21
8051
(8031)
Port 1 is configured first as an input port by writing 1s to it, then data
is received from that port and saved in R7 and R5
MOV A,#0FFH ;A=FF hex
MOV P1,A ;make P1 an input port
;by writing it all 1s
MOV A,P1 ;get data from P1
MOV R7,A ;save it to in reg R7
ACALL DELAY ;wait
MOV A,P1 ;another data from P1
MOV R5,A ;save it to in reg R5
Department of Computer Science and Information Engineering
National Cheng Kung University, TAIWAN 10
HANEL
I/O
PROGRAMMING
Port 2
Port 2 can be used as input or output
Just like P1, port 2 does not need any pull-
up resistors since it already has pull-up
resistors internally
Upon reset, port 2 is configured as an input
port
P1.0
P1.1
P1.2
P1.3
P1.4
P1.5
P1.6
P1.7
RST
(RXD)P3.0
(TXD)P3.1
(INT0)P3.2
(INT1)P3.3
(T0)P3.4
(T1)P3.5
(WR)P3.6
(RD)P3.7
XTAL2
XTAL1
GND
Vcc
P0.0(AD0)
P0.1(AD1)
P0.2(AD2)
P0.3(AD3)
P0.4(AD4)
P0.5(AD5)
P0.6(AD6)
P0.7(AD7)
-EA/VPP
ALE/PROG
-PSEN
P2.7(A15)
P2.6(A14)
P2.5(A13)
P2.4(A12)
P2.3(A11)
P2.2(A10)
P2.1(A9)
P2.0(A8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
40
39
38
37
36
35
34
33
32
31
30
29
28
27
26
25
24
23
22
21
8051
(8031)
Department of Computer Science and Information Engineering
National Cheng Kung University, TAIWAN 11
HANEL
I/O
PROGRAMMING
Port 2 as Input
or Dual Role
To make port 2 an input port, it must
be programmed as such by writing 1 to
all its bits
In many 8051-based system, P2 is used
as simple I/O
In 8031-based systems, port 2 must be
used along with P0 to provide the 16-
bit address for the external memory
Port 2 is also designated as A8 – A15,
indicating its dual function
Port 0 provides the lower 8 bits via A0 – A7
P1.0
P1.1
P1.2
P1.3
P1.4
P1.5
P1.6
P1.7
RST
(RXD)P3.0
(TXD)P3.1
(INT0)P3.2
(INT1)P3.3
(T0)P3.4
(T1)P3.5
(WR)P3.6
(RD)P3.7
XTAL2
XTAL1
GND
Vcc
P0.0(AD0)
P0.1(AD1)
P0.2(AD2)
P0.3(AD3)
P0.4(AD4)
P0.5(AD5)
P0.6(AD6)
P0.7(AD7)
-EA/VPP
ALE/PROG
-PSEN
P2.7(A15)
P2.6(A14)
P2.5(A13)
P2.4(A12)
P2.3(A11)
P2.2(A10)
P2.1(A9)
P2.0(A8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
40
39
38
37
36
35
34
33
32
31
30
29
28
27
26
25
24
23
22
21
8051
(8031)
Department of Computer Science and Information Engineering
National Cheng Kung University, TAIWAN 12
HANEL
I/O
PROGRAMMING
Port 3
Port 3 can be used as input or output
Port 3 does not need any pull-up resistors
Port 3 is configured as an input port upon
reset, this is not the way it is most
commonly used
P1.0
P1.1
P1.2
P1.3
P1.4
P1.5
P1.6
P1.7
RST
(RXD)P3.0
(TXD)P3.1
(INT0)P3.2
(INT1)P3.3
(T0)P3.4
(T1)P3.5
(WR)P3.6
(RD)P3.7
XTAL2
XTAL1
GND
Vcc
P0.0(AD0)
P0.1(AD1)
P0.2(AD2)
P0.3(AD3)
P0.4(AD4)
P0.5(AD5)
P0.6(AD6)
P0.7(AD7)
-EA/VPP
ALE/PROG
-PSEN
P2.7(A15)
P2.6(A14)
P2.5(A13)
P2.4(A12)
P2.3(A11)
P2.2(A10)
P2.1(A9)
P2.0(A8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
40
39
38
37
36
35
34
33
32
31
30
29
28
27
26
25
24
23
22
21
8051
(8031)
Department of Computer Science and Information Engineering
National Cheng Kung University, TAIWAN 13
HANEL
I/O
PROGRAMMING
Port 3
(cont’)
Port 3 has the additional function of
providing some extremely important
signals
P1.0
P1.1
P1.2
P1.3
P1.4
P1.5
P1.6
P1.7
RST
(RXD)P3.0
(TXD)P3.1
(INT0)P3.2
(INT1)P3.3
(T0)P3.4
(T1)P3.5
(WR)P3.6
(RD)P3.7
XTAL2
XTAL1
GND
Vcc
P0.0(AD0)
P0.1(AD1)
P0.2(AD2)
P0.3(AD3)
P0.4(AD4)
P0.5(AD5)
P0.6(AD6)
P0.7(AD7)
-EA/VPP
ALE/PROG
-PSEN
P2.7(A15)
P2.6(A14)
P2.5(A13)
P2.4(A12)
P2.3(A11)
P2.2(A10)
P2.1(A9)
P2.0(A8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
40
39
38
37
36
35
34
33
32
31
30
29
28
27
26
25
24
23
22
21
8051
(8031)
P3 Bit Function
P3.0 RxD
TxD
INT0
INT1
T0
T1
WR
RD
P3.1
P3.2
P3.3
P3.4
P3.5
P3.6
P3.7
Pin
10
11
12
13
14
15
16
17
Serial
communications
External
interrupts
Timers
Read/Write signals
of external memories
In systems based on 8751, 89C51 or
DS89C4x0, pins 3.6 and 3.7 are used for I/O
while the rest of the pins in port 3 are
normally used in the alternate function role
Department of Computer Science and Information Engineering
National Cheng Kung University, TAIWAN 14
HANEL
I/O
PROGRAMMING
Port 3
(cont’)
P1.0
P1.1
P1.2
P1.3
P1.4
P1.5
P1.6
P1.7
RST
(RXD)P3.0
(TXD)P3.1
(INT0)P3.2
(INT1)P3.3
(T0)P3.4
(T1)P3.5
(WR)P3.6
(RD)P3.7
XTAL2
XTAL1
GND
Vcc
P0.0(AD0)
P0.1(AD1)
P0.2(AD2)
P0.3(AD3)
P0.4(AD4)
P0.5(AD5)
P0.6(AD6)
P0.7(AD7)
-EA/VPP
ALE/PROG
-PSEN
P2.7(A15)
P2.6(A14)
P2.5(A13)
P2.4(A12)
P2.3(A11)
P2.2(A10)
P2.1(A9)
P2.0(A8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
40
39
38
37
36
35
34
33
32
31
30
29
28
27
26
25
24
23
22
21
8051
(8031)
Write a program for the DS89C420 to toggle all the bits of P0, P1,
and P2 every 1/4 of a second
ORG 0
BACK: MOV A,#55H
MOV P0,A
MOV P1,A
MOV P2,A
ACALL QSDELAY ;Quarter of a second
MOV A,#0AAH
MOV P0,A
MOV P1,A
MOV P2,A
ACALL QSDELAY
SJMP BACK
QSDELAY:
MOV R5,#11
H3: MOV R4,#248
H2: MOV R3,#255
H1: DJNZ R3,H1 ;4 MC for DS89C4x0
DJNZ R4,H2
DJNZ R5,H3
RET
END
Delay
= 11 × 248 × 255 × 4 MC × 90 ns
= 250,430 µs
Department of Computer Science and Information Engineering
National Cheng Kung University, TAIWAN 15
HANEL
I/O
PROGRAMMING
Different ways
of Accessing
Entire 8 Bits
The entire 8 bits of Port 1 are accessed
BACK: MOV A,#55H
MOV P1,A
ACALL DELAY
MOV A,#0AAH
MOV P1,A
ACALL DELAY
SJMP BACK
Rewrite the code in a more efficient manner by accessing the port
directly without going through the accumulator
BACK: MOV P1,#55H
ACALL DELAY
MOV P1,#0AAH
ACALL DELAY
SJMP BACK
Another way of doing the same thing
MOV A,#55H
BACK: MOV P1,A
ACALL DELAY
CPL A
SJMP BACK
Department of Computer Science and Information Engineering
National Cheng Kung University, TAIWAN 16
HANEL
I/O BIT
MANIPULATION
PROGRAMMING
I/O Ports
and Bit
Addressability
Sometimes we need to access only 1
or 2 bits of the port
BACK: CPL P1.2 ;complement P1.2
ACALL DELAY
SJMP BACK
;another variation of the above program
AGAIN: SETB P1.2 ;set only P1.2
ACALL DELAY
CLR P1.2 ;clear only P1.2
ACALL DELAY
SJMP AGAIN P0 P1 P2 P3
P1.0 P2.0
P2.1
P2.2
P2.3
P2.4
P2.5
P2.6
P2.7
P1.1
P3.0
P3.1
P3.2
P3.3
P3.4
P3.5
P3.6
P1.2
P1.3
P1.4
P1.5
P1.6
P1.7 P3.7
P0.0
P0.1
P0.2
P0.3
P0.4
P0.5
P0.6
P0.7
Port Bit
D0
D1
D2
D3
D4
D5
D6
D7
Department of Computer Science and Information Engineering
National Cheng Kung University, TAIWAN 17
HANEL
I/O BIT
MANIPULATION
PROGRAMMING
I/O Ports
and Bit
Addressability
(cont’)
Example 4-2
Write the following programs.
Create a square wave of 50% duty cycle on bit 0 of port 1.
Solution:
The 50% duty cycle means that the “on” and “off” state (or the high
and low portion of the pulse) have the same length. Therefore,
we toggle P1.0 with a time delay in between each state.
HERE: SETB P1.0 ;set to high bit 0 of port 1
LCALL DELAY ;call the delay subroutine
CLR P1.0 ;P1.0=0
LCALL DELAY
SJMP HERE ;keep doing it
Another way to write the above program is:
HERE: CPL P1.0 ;set to high bit 0 of port 1
LCALL DELAY ;call the delay subroutine
SJMP HERE ;keep doing it
8051
P1.0
Department of Computer Science and Information Engineering
National Cheng Kung University, TAIWAN 18
HANEL
I/O BIT
MANIPULATION
PROGRAMMING
I/O Ports
and Bit
Addressability
(cont’)
Instructions that are used for signal-bit
operations are as following
Instruction Function
SETB bit Set the bit (bit = 1)
CLR bit Clear the bit (bit = 0)
CPL bit Complement the bit (bit = NOT bit)
JB bit, target Jump to target if bit = 1 (jump if bit)
JNB bit, target Jump to target if bit = 0 (jump if no bit)
JBC bit, target Jump to target if bit = 1, clear bit
(jump if bit, then clear)
Single-Bit Instructions
Department of Computer Science and Information Engineering
National Cheng Kung University, TAIWAN 19
HANEL
I/O BIT
MANIPULATION
PROGRAMMING
Checking an
Input Bit
The JNB and JB instructions are widely
used single-bit operations
They allow you to monitor a bit and make
a decision depending on whether it’s 0 or 1
These two instructions can be used for any
bits of I/O ports 0, 1, 2, and 3
Port 3 is typically not used for any I/O, either
single-bit or byte-wise
Mnemonic Examples Description
MOV A,PX MOV A,P2 Bring into A the data at P2 pins
JNB PX.Y, .. JNB P2.1,TARGET Jump if pin P2.1 is low
JB PX.Y, .. JB P1.3,TARGET Jump if pin P1.3 is high
MOV C,PX.Y MOV C,P2.4 Copy status of pin P2.4 to CY
Instructions for Reading an Input Port
Department of Computer Science and Information Engineering
National Cheng Kung University, TAIWAN 20
HANEL
I/O BIT
MANIPULATION
PROGRAMMING
Checking an
Input Bit
(cont’)
Example 4-3
Write a program to perform the following:
(a) Keep monitoring the P1.2 bit until it becomes high
(b) When P1.2 becomes high, write value 45H to port 0
(c) Send a high-to-low (H-to-L) pulse to P2.3
Solution:
SETB P1.2 ;make P1.2 an input
MOV A,#45H ;A=45H
AGAIN: JNB P1.2,AGAIN ; get out when P1.2=1
MOV P0,A ;issue A to P0
SETB P2.3 ;make P2.3 high
CLR P2.3 ;make P2.3 low for H-to-L
Department of Computer Science and Information Engineering
National Cheng Kung University, TAIWAN 21
HANEL
I/O BIT
MANIPULATION
PROGRAMMING
Checking an
Input Bit
(cont’)
Example 4-4
Assume that bit P2.3 is an input and represents the condition of an
oven. If it goes high, it means that the oven is hot. Monitor the bit
continuously. Whenever it goes high, send a high-to-low pulse to port
P1.5 to turn on a buzzer.
Solution:
HERE: JNB P2.3,HERE ;keep monitoring for high
SETB P1.5 ;set bit P1.5=1
CLR P1.5 ;make high-to-low
SJMP HERE ;keep repeating
Department of Computer Science and Information Engineering
National Cheng Kung University, TAIWAN 22
HANEL
I/O BIT
MANIPULATION
PROGRAMMING
Checking an
Input Bit
(cont’)
Example 4-5
A switch is connected to pin P1.7. Write a program to check the status
of SW and perform the following:
(a) If SW=0, send letter ‘N’ to P2
(b) If SW=1, send letter ‘Y’ to P2
Solution:
SETB P1.7 ;make P1.7 an input
AGAIN: JB P1.2,OVER ;jump if P1.7=1
MOV P2,#’N’ ;SW=0, issue ‘N’ to P2
SJMP AGAIN ;keep monitoring
OVER: MOV P2,#’Y’ ;SW=1, issue ‘Y’ to P2
SJMP AGAIN ;keep monitoring
Department of Computer Science and Information Engineering
National Cheng Kung University, TAIWAN 23
HANEL
I/O BIT
MANIPULATION
PROGRAMMING
Reading Single
Bit into Carry
Flag
Example 4-6
A switch is connected to pin P1.7. Write a program to check the status
of SW and perform the following:
(a) If SW=0, send letter ‘N’ to P2
(b) If SW=1, send letter ‘Y’ to P2
Use the carry flag to check the switch status.
Solution:
SETB P1.7 ;make P1.7 an input
AGAIN: MOV C,P1.2 ;read SW status into CF
JC OVER ;jump if SW=1
MOV P2,#’N’ ;SW=0, issue ‘N’ to P2
SJMP AGAIN ;keep monitoring
OVER: MOV P2,#’Y’ ;SW=1, issue ‘Y’ to P2
SJMP AGAIN ;keep monitoring
Department of Computer Science and Information Engineering
National Cheng Kung University, TAIWAN 24
HANEL
I/O BIT
MANIPULATION
PROGRAMMING
Reading Single
Bit into Carry
Flag
(cont’)
Example 4-7
A switch is connected to pin P1.0 and an LED to pin P2.7. Write a
program to get the status of the switch and send it to the LED
Solution:
SETB P1.7 ;make P1.7 an input
AGAIN: MOV C,P1.0 ;read SW status into CF
MOV P2.7,C ;send SW status to LED
SJMP AGAIN ;keep repeating
The instruction
‘MOV
P2.7,P1.0’ is
wrong , since such
an instruction does
not exist
However ‘MOV
P2,P1’ is a valid
instruction
Department of Computer Science and Information Engineering
National Cheng Kung University, TAIWAN 25
HANEL
I/O BIT
MANIPULATION
PROGRAMMING
Reading Input
Pins vs. Port
Latch
In reading a port
Some instructions read the status of port
pins
Others read the status of an internal port
latch
Therefore, when reading ports there
are two possibilities:
Read the status of the input pin
Read the internal latch of the output port
Confusion between them is a major
source of errors in 8051 programming
Especially where external hardware is
concerned
Department of Computer Science and Information Engineering
National Cheng Kung University, TAIWAN 26
HANEL
READING
INPUT PINS VS.
PORT LATCH
Reading Latch
for Output Port
Some instructions read the contents of
an internal port latch instead of
reading the status of an external pin
For example, look at the ANL P1,A
instruction and the sequence of actions is
executed as follow
1. It reads the internal latch of the port and
brings that data into the CPU
2. This data is ANDed with the contents of
register A
3. The result is rewritten back to the port latch
4. The port pin data is changed and now has the
same value as port latch
Department of Computer Science and Information Engineering
National Cheng Kung University, TAIWAN 27
HANEL
READING
INPUT PINS VS.
PORT LATCH
Reading Latch
for Output Port
(cont’)
Read-Modify-Write
The instructions read the port latch
normally read a value, perform an
operation then rewrite it back to the port
latch
Mnemonics Example
ANL PX ANL P1,A
ORL PX ORL P2,A
XRL PX XRL P0,A
JBC PX.Y,TARGET JBC P1.1,TARGET
CPL PX.Y CPL P1.2
INC PX INC P1
DEC PX DEC P2
DJNZ PX.Y,TARGET DJNZ P1,TARGET
MOV PX.Y,C MOV P1.2,C
CLR PX.Y CLR P2.3
SETB PX.Y SETB P2.3
Instructions Reading a latch (Read-Modify-Write)
Note: x is 0, 1, 2,
or 3 for P0 – P3
Department of Computer Science and Information Engineering
National Cheng Kung University, TAIWAN 28
HANEL
I/O BIT
MANIPULATION
PROGRAMMING
Read-modify-
write Feature
The ports in 8051 can be accessed by
the Read-modify-write technique
This feature saves many lines of code by
combining in a single instruction all three
actions
1. Reading the port
2. Modifying it
3. Writing to the port
MOV P1,#55H ;P1=01010101
AGAIN: XRL P1,#0FFH ;EX-OR P1 with 1111 1111
ACALL DELAY
SJMP BACK

More Related Content

PPT
8051 interrupts
Shreyans Pathak
 
PDF
Hazards in pipeline
SnehalataAgasti
 
PPTX
latches
Unsa Shakir
 
PDF
Amba bus
rohitlinux
 
PPTX
Timer programming for 8051 using embedded c
Vikas Dongre
 
PPTX
State transition diagram 8085
ShivamSood22
 
PPTX
Binary parallel adder
anu surya
 
PPTX
Interrupts and types of interrupts
Muhammad Sheharyar Asif
 
8051 interrupts
Shreyans Pathak
 
Hazards in pipeline
SnehalataAgasti
 
latches
Unsa Shakir
 
Amba bus
rohitlinux
 
Timer programming for 8051 using embedded c
Vikas Dongre
 
State transition diagram 8085
ShivamSood22
 
Binary parallel adder
anu surya
 
Interrupts and types of interrupts
Muhammad Sheharyar Asif
 

What's hot (20)

PPTX
ARM Processor
Aniket Thakur
 
PPTX
Asynchronous Sequential Circuit-Unit 4 ppt
SIVALAKSHMIPANNEERSE
 
PPS
Interrupts
guest2e9811e
 
PPT
Pipeline hazard
AJAL A J
 
PDF
Difference Between CISC RISC, Harward & Von-neuman
Kailas Kharse
 
PPTX
Branching instructions in 8086 microprocessor
Rabin BK
 
PPTX
Interrupt
Joy Sarker
 
DOCX
8085 interfacing with memory chips
Srikrishna Thota
 
PPTX
Finite automata-for-lexical-analysis
Dattatray Gandhmal
 
PDF
Logic Level Techniques for Power Reduction
GargiKhanna1
 
PDF
Binary multipliers
Syed Saeed
 
PPTX
Vhdl programming
Yogesh Mashalkar
 
PPTX
Operating system 33 swapping
Vaibhav Khanna
 
PDF
Microcontroller based speedo meter cum odometer
Nexus
 
PPTX
Programmable logic devices
ISMT College
 
PPTX
Timing and control
chauhankapil
 
DOCX
Vhdl code and project report of arithmetic and logic unit
Nikhil Sahu
 
PPTX
sequential circuits
Unsa Shakir
 
PPTX
Interrupts of 8085
ShivamSood22
 
PPTX
Interrupts in pic
v Kalairajan
 
ARM Processor
Aniket Thakur
 
Asynchronous Sequential Circuit-Unit 4 ppt
SIVALAKSHMIPANNEERSE
 
Interrupts
guest2e9811e
 
Pipeline hazard
AJAL A J
 
Difference Between CISC RISC, Harward & Von-neuman
Kailas Kharse
 
Branching instructions in 8086 microprocessor
Rabin BK
 
Interrupt
Joy Sarker
 
8085 interfacing with memory chips
Srikrishna Thota
 
Finite automata-for-lexical-analysis
Dattatray Gandhmal
 
Logic Level Techniques for Power Reduction
GargiKhanna1
 
Binary multipliers
Syed Saeed
 
Vhdl programming
Yogesh Mashalkar
 
Operating system 33 swapping
Vaibhav Khanna
 
Microcontroller based speedo meter cum odometer
Nexus
 
Programmable logic devices
ISMT College
 
Timing and control
chauhankapil
 
Vhdl code and project report of arithmetic and logic unit
Nikhil Sahu
 
sequential circuits
Unsa Shakir
 
Interrupts of 8085
ShivamSood22
 
Interrupts in pic
v Kalairajan
 
Ad

Similar to 4 io port-programming (20)

PDF
8 hw con-and_intel_hex_file
Channabasappa Kudarihal
 
PDF
At 89c52
Mr Giap
 
PDF
itft-Microcontriller 8051
Shifali Sharma
 
PDF
At 89c51
Mr Giap
 
PDF
At89s51
Tarun Sharma
 
PPT
8051 MICROCONTROLLER
THANDAIAH PRABU
 
PDF
8051 microcontroller
Gaurav Verma
 
PPT
1346 A Single Chip Microcomputer
techbed
 
PPTX
8051 basics register organization and its advantages
SANTOSH KUMAR K
 
PDF
Datasheet8951
Tabuu99
 
PPT
8051microcontroller
manish080
 
PPTX
Automatic main gate controller
PROJECTRONICS
 
PDF
8051 microcontrollers ch3
mariomarion102030
 
PDF
dspAt89 s52
Mahesh Madapati
 
PPTX
MICROCONTROLLER 8051- Architecture & Pin Configuration
AKHIL MADANKAR
 
PDF
Pin Description of the 8051 along with I/O Interfacing
iatt4vn
 
PDF
Introduction Architecture Addressing Modes
iatt4vn
 
PDF
microcontroller intel 8051 pin description
iatt4vn
 
PDF
Instruction Set Architecture and Design of Hardware
iatt4vn
 
PDF
8051 Hardware Architecture, Addressing Modes, Interfacing
iatt4vn
 
8 hw con-and_intel_hex_file
Channabasappa Kudarihal
 
At 89c52
Mr Giap
 
itft-Microcontriller 8051
Shifali Sharma
 
At 89c51
Mr Giap
 
At89s51
Tarun Sharma
 
8051 MICROCONTROLLER
THANDAIAH PRABU
 
8051 microcontroller
Gaurav Verma
 
1346 A Single Chip Microcomputer
techbed
 
8051 basics register organization and its advantages
SANTOSH KUMAR K
 
Datasheet8951
Tabuu99
 
8051microcontroller
manish080
 
Automatic main gate controller
PROJECTRONICS
 
8051 microcontrollers ch3
mariomarion102030
 
dspAt89 s52
Mahesh Madapati
 
MICROCONTROLLER 8051- Architecture & Pin Configuration
AKHIL MADANKAR
 
Pin Description of the 8051 along with I/O Interfacing
iatt4vn
 
Introduction Architecture Addressing Modes
iatt4vn
 
microcontroller intel 8051 pin description
iatt4vn
 
Instruction Set Architecture and Design of Hardware
iatt4vn
 
8051 Hardware Architecture, Addressing Modes, Interfacing
iatt4vn
 
Ad

Recently uploaded (20)

PPTX
easa module 3 funtamental electronics.pptx
tryanothert7
 
PDF
The Effect of Artifact Removal from EEG Signals on the Detection of Epileptic...
Partho Prosad
 
PDF
Packaging Tips for Stainless Steel Tubes and Pipes
heavymetalsandtubes
 
PDF
Introduction to Data Science: data science process
ShivarkarSandip
 
PPTX
Inventory management chapter in automation and robotics.
atisht0104
 
PPT
SCOPE_~1- technology of green house and poyhouse
bala464780
 
PDF
2010_Book_EnvironmentalBioengineering (1).pdf
EmilianoRodriguezTll
 
PPT
Ppt for engineering students application on field effect
lakshmi.ec
 
PDF
Chad Ayach - A Versatile Aerospace Professional
Chad Ayach
 
PDF
Introduction to Ship Engine Room Systems.pdf
Mahmoud Moghtaderi
 
PPTX
Chapter_Seven_Construction_Reliability_Elective_III_Msc CM
SubashKumarBhattarai
 
PDF
top-5-use-cases-for-splunk-security-analytics.pdf
yaghutialireza
 
PDF
Cryptography and Information :Security Fundamentals
Dr. Madhuri Jawale
 
PPTX
Color Model in Textile ( RGB, CMYK).pptx
auladhossain191
 
PDF
dse_final_merit_2025_26 gtgfffffcjjjuuyy
rushabhjain127
 
PDF
July 2025: Top 10 Read Articles Advanced Information Technology
ijait
 
PPTX
IoT_Smart_Agriculture_Presentations.pptx
poojakumari696707
 
PDF
Top 10 read articles In Managing Information Technology.pdf
IJMIT JOURNAL
 
DOCX
SAR - EEEfdfdsdasdsdasdasdasdasdasdasdasda.docx
Kanimozhi676285
 
PDF
flutter Launcher Icons, Splash Screens & Fonts
Ahmed Mohamed
 
easa module 3 funtamental electronics.pptx
tryanothert7
 
The Effect of Artifact Removal from EEG Signals on the Detection of Epileptic...
Partho Prosad
 
Packaging Tips for Stainless Steel Tubes and Pipes
heavymetalsandtubes
 
Introduction to Data Science: data science process
ShivarkarSandip
 
Inventory management chapter in automation and robotics.
atisht0104
 
SCOPE_~1- technology of green house and poyhouse
bala464780
 
2010_Book_EnvironmentalBioengineering (1).pdf
EmilianoRodriguezTll
 
Ppt for engineering students application on field effect
lakshmi.ec
 
Chad Ayach - A Versatile Aerospace Professional
Chad Ayach
 
Introduction to Ship Engine Room Systems.pdf
Mahmoud Moghtaderi
 
Chapter_Seven_Construction_Reliability_Elective_III_Msc CM
SubashKumarBhattarai
 
top-5-use-cases-for-splunk-security-analytics.pdf
yaghutialireza
 
Cryptography and Information :Security Fundamentals
Dr. Madhuri Jawale
 
Color Model in Textile ( RGB, CMYK).pptx
auladhossain191
 
dse_final_merit_2025_26 gtgfffffcjjjuuyy
rushabhjain127
 
July 2025: Top 10 Read Articles Advanced Information Technology
ijait
 
IoT_Smart_Agriculture_Presentations.pptx
poojakumari696707
 
Top 10 read articles In Managing Information Technology.pdf
IJMIT JOURNAL
 
SAR - EEEfdfdsdasdsdasdasdasdasdasdasdasda.docx
Kanimozhi676285
 
flutter Launcher Icons, Splash Screens & Fonts
Ahmed Mohamed
 

4 io port-programming

  • 1. Home Automation, Networking, and Entertainment Lab Dept. of Computer Science and Information Engineering National Cheng Kung University, TAIWAN Chung-Ping Young 楊中平 I/O PORT PROGRAMMING The 8051 Microcontroller and Embedded Systems: Using Assembly and C Mazidi, Mazidi and McKinlay I/O PORT PROGRAMMING
  • 2. Department of Computer Science and Information Engineering National Cheng Kung University, TAIWAN 2 HANEL I/O PROGRAMMING 8051 (8031) (89420) P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 RST (RXD) P3.0 (TXD) P3.1 (-INT0) P3.2 (-INT1) P3.3 (T0) P3.4 (T1) P3.5 (-WR) P3.6 (-RD )P3.7 XTAL2 XTAL1 GND Vcc P0.0 (AD0) P0.1 (AD1) P0.2 (AD2) P0.3 (AD3) P0.4 (AD4) P0.5 (AD5) P0.6 (AD6) P0.7 (AD7) -EA/VPP ALE/PROG -PSEN P2.7 (A15) P2.6 (A14) P2.5 (A13) P2.4 (A12) P2.3 (A11) P2.2 (A10) P2.1 (A9) P2.0 (A8) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 Provides +5V supply voltage to the chip Grond P1 P3 8051 Pin Diagram A total of 32 pins are set aside for the four ports P0, P1, P2, P3, where each port takes 8 pins P0 P2
  • 3. Department of Computer Science and Information Engineering National Cheng Kung University, TAIWAN 3 HANEL I/O PROGRAMMING I/O Port Pins The four 8-bit I/O ports P0, P1, P2 and P3 each uses 8 pins All the ports upon RESET are configured as input, ready to be used as input ports When the first 0 is written to a port, it becomes an output To reconfigure it as an input, a 1 must be sent to the port To use any of these ports as an input port, it must be programmed P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 RST (RXD)P3.0 (TXD)P3.1 (INT0)P3.2 (INT1)P3.3 (T0)P3.4 (T1)P3.5 (WR)P3.6 (RD)P3.7 XTAL2 XTAL1 GND Vcc P0.0(AD0) P0.1(AD1) P0.2(AD2) P0.3(AD3) P0.4(AD4) P0.5(AD5) P0.6(AD6) P0.7(AD7) -EA/VPP ALE/PROG -PSEN P2.7(A15) P2.6(A14) P2.5(A13) P2.4(A12) P2.3(A11) P2.2(A10) P2.1(A9) P2.0(A8) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 8051 (8031)
  • 4. Department of Computer Science and Information Engineering National Cheng Kung University, TAIWAN 4 HANEL I/O PROGRAMMING Port 0 It can be used for input or output, each pin must be connected externally to a 10K ohm pull-up resistor This is due to the fact that P0 is an open drain, unlike P1, P2, and P3 Open drain is a term used for MOS chips in the same way that open collector is used for TTL chips P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 Vcc 10 K 8051 Port0 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 RST (RXD)P3.0 (TXD)P3.1 (INT0)P3.2 (INT1)P3.3 (T0)P3.4 (T1)P3.5 (WR)P3.6 (RD)P3.7 XTAL2 XTAL1 GND Vcc P0.0(AD0) P0.1(AD1) P0.2(AD2) P0.3(AD3) P0.4(AD4) P0.5(AD5) P0.6(AD6) P0.7(AD7) -EA/VPP ALE/PROG -PSEN P2.7(A15) P2.6(A14) P2.5(A13) P2.4(A12) P2.3(A11) P2.2(A10) P2.1(A9) P2.0(A8) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 8051 (8031) P0.X
  • 5. Department of Computer Science and Information Engineering National Cheng Kung University, TAIWAN 5 HANEL I/O PROGRAMMING Port 0 (cont’) The following code will continuously send out to port 0 the alternating value 55H and AAH BACK: MOV A,#55H MOV P0,A ACALL DELAY MOV A,#0AAH MOV P0,A ACALL DELAY SJMP BACK P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 RST (RXD)P3.0 (TXD)P3.1 (INT0)P3.2 (INT1)P3.3 (T0)P3.4 (T1)P3.5 (WR)P3.6 (RD)P3.7 XTAL2 XTAL1 GND Vcc P0.0(AD0) P0.1(AD1) P0.2(AD2) P0.3(AD3) P0.4(AD4) P0.5(AD5) P0.6(AD6) P0.7(AD7) -EA/VPP ALE/PROG -PSEN P2.7(A15) P2.6(A14) P2.5(A13) P2.4(A12) P2.3(A11) P2.2(A10) P2.1(A9) P2.0(A8) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 8051 (8031)
  • 6. Department of Computer Science and Information Engineering National Cheng Kung University, TAIWAN 6 HANEL I/O PROGRAMMING Port 0 as Input In order to make port 0 an input, the port must be programmed by writing 1 to all the bits Port 0 is configured first as an input port by writing 1s to it, and then data is received from that port and sent to P1 MOV A,#0FFH ;A=FF hex MOV P0,A ;make P0 an i/p port ;by writing it all 1s BACK: MOV A,P0 ;get data from P0 MOV P1,A ;send it to port 1 SJMP BACK ;keep doing it P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 RST (RXD)P3.0 (TXD)P3.1 (INT0)P3.2 (INT1)P3.3 (T0)P3.4 (T1)P3.5 (WR)P3.6 (RD)P3.7 XTAL2 XTAL1 GND Vcc P0.0(AD0) P0.1(AD1) P0.2(AD2) P0.3(AD3) P0.4(AD4) P0.5(AD5) P0.6(AD6) P0.7(AD7) -EA/VPP ALE/PROG -PSEN P2.7(A15) P2.6(A14) P2.5(A13) P2.4(A12) P2.3(A11) P2.2(A10) P2.1(A9) P2.0(A8) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 8051 (8031)
  • 7. Department of Computer Science and Information Engineering National Cheng Kung University, TAIWAN 7 HANEL I/O PROGRAMMING Dual Role of Port 0 Port 0 is also designated as AD0-AD7, allowing it to be used for both address and data When connecting an 8051/31 to an external memory, port 0 provides both address and data P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 RST (RXD)P3.0 (TXD)P3.1 (INT0)P3.2 (INT1)P3.3 (T0)P3.4 (T1)P3.5 (WR)P3.6 (RD)P3.7 XTAL2 XTAL1 GND Vcc P0.0(AD0) P0.1(AD1) P0.2(AD2) P0.3(AD3) P0.4(AD4) P0.5(AD5) P0.6(AD6) P0.7(AD7) -EA/VPP ALE/PROG -PSEN P2.7(A15) P2.6(A14) P2.5(A13) P2.4(A12) P2.3(A11) P2.2(A10) P2.1(A9) P2.0(A8) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 8051 (8031)
  • 8. Department of Computer Science and Information Engineering National Cheng Kung University, TAIWAN 8 HANEL I/O PROGRAMMING Port 1 Port 1 can be used as input or output In contrast to port 0, this port does not need any pull-up resistors since it already has pull-up resistors internally Upon reset, port 1 is configured as an input port P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 RST (RXD)P3.0 (TXD)P3.1 (INT0)P3.2 (INT1)P3.3 (T0)P3.4 (T1)P3.5 (WR)P3.6 (RD)P3.7 XTAL2 XTAL1 GND Vcc P0.0(AD0) P0.1(AD1) P0.2(AD2) P0.3(AD3) P0.4(AD4) P0.5(AD5) P0.6(AD6) P0.7(AD7) -EA/VPP ALE/PROG -PSEN P2.7(A15) P2.6(A14) P2.5(A13) P2.4(A12) P2.3(A11) P2.2(A10) P2.1(A9) P2.0(A8) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 8051 (8031) The following code will continuously send out to port 0 the alternating value 55H and AAH MOV A,#55H BACK: MOV P1,A ACALL DELAY CPL A SJMP BACK
  • 9. Department of Computer Science and Information Engineering National Cheng Kung University, TAIWAN 9 HANEL I/O PROGRAMMING Port 1 as Input To make port 1 an input port, it must be programmed as such by writing 1 to all its bits P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 RST (RXD)P3.0 (TXD)P3.1 (INT0)P3.2 (INT1)P3.3 (T0)P3.4 (T1)P3.5 (WR)P3.6 (RD)P3.7 XTAL2 XTAL1 GND Vcc P0.0(AD0) P0.1(AD1) P0.2(AD2) P0.3(AD3) P0.4(AD4) P0.5(AD5) P0.6(AD6) P0.7(AD7) -EA/VPP ALE/PROG -PSEN P2.7(A15) P2.6(A14) P2.5(A13) P2.4(A12) P2.3(A11) P2.2(A10) P2.1(A9) P2.0(A8) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 8051 (8031) Port 1 is configured first as an input port by writing 1s to it, then data is received from that port and saved in R7 and R5 MOV A,#0FFH ;A=FF hex MOV P1,A ;make P1 an input port ;by writing it all 1s MOV A,P1 ;get data from P1 MOV R7,A ;save it to in reg R7 ACALL DELAY ;wait MOV A,P1 ;another data from P1 MOV R5,A ;save it to in reg R5
  • 10. Department of Computer Science and Information Engineering National Cheng Kung University, TAIWAN 10 HANEL I/O PROGRAMMING Port 2 Port 2 can be used as input or output Just like P1, port 2 does not need any pull- up resistors since it already has pull-up resistors internally Upon reset, port 2 is configured as an input port P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 RST (RXD)P3.0 (TXD)P3.1 (INT0)P3.2 (INT1)P3.3 (T0)P3.4 (T1)P3.5 (WR)P3.6 (RD)P3.7 XTAL2 XTAL1 GND Vcc P0.0(AD0) P0.1(AD1) P0.2(AD2) P0.3(AD3) P0.4(AD4) P0.5(AD5) P0.6(AD6) P0.7(AD7) -EA/VPP ALE/PROG -PSEN P2.7(A15) P2.6(A14) P2.5(A13) P2.4(A12) P2.3(A11) P2.2(A10) P2.1(A9) P2.0(A8) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 8051 (8031)
  • 11. Department of Computer Science and Information Engineering National Cheng Kung University, TAIWAN 11 HANEL I/O PROGRAMMING Port 2 as Input or Dual Role To make port 2 an input port, it must be programmed as such by writing 1 to all its bits In many 8051-based system, P2 is used as simple I/O In 8031-based systems, port 2 must be used along with P0 to provide the 16- bit address for the external memory Port 2 is also designated as A8 – A15, indicating its dual function Port 0 provides the lower 8 bits via A0 – A7 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 RST (RXD)P3.0 (TXD)P3.1 (INT0)P3.2 (INT1)P3.3 (T0)P3.4 (T1)P3.5 (WR)P3.6 (RD)P3.7 XTAL2 XTAL1 GND Vcc P0.0(AD0) P0.1(AD1) P0.2(AD2) P0.3(AD3) P0.4(AD4) P0.5(AD5) P0.6(AD6) P0.7(AD7) -EA/VPP ALE/PROG -PSEN P2.7(A15) P2.6(A14) P2.5(A13) P2.4(A12) P2.3(A11) P2.2(A10) P2.1(A9) P2.0(A8) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 8051 (8031)
  • 12. Department of Computer Science and Information Engineering National Cheng Kung University, TAIWAN 12 HANEL I/O PROGRAMMING Port 3 Port 3 can be used as input or output Port 3 does not need any pull-up resistors Port 3 is configured as an input port upon reset, this is not the way it is most commonly used P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 RST (RXD)P3.0 (TXD)P3.1 (INT0)P3.2 (INT1)P3.3 (T0)P3.4 (T1)P3.5 (WR)P3.6 (RD)P3.7 XTAL2 XTAL1 GND Vcc P0.0(AD0) P0.1(AD1) P0.2(AD2) P0.3(AD3) P0.4(AD4) P0.5(AD5) P0.6(AD6) P0.7(AD7) -EA/VPP ALE/PROG -PSEN P2.7(A15) P2.6(A14) P2.5(A13) P2.4(A12) P2.3(A11) P2.2(A10) P2.1(A9) P2.0(A8) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 8051 (8031)
  • 13. Department of Computer Science and Information Engineering National Cheng Kung University, TAIWAN 13 HANEL I/O PROGRAMMING Port 3 (cont’) Port 3 has the additional function of providing some extremely important signals P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 RST (RXD)P3.0 (TXD)P3.1 (INT0)P3.2 (INT1)P3.3 (T0)P3.4 (T1)P3.5 (WR)P3.6 (RD)P3.7 XTAL2 XTAL1 GND Vcc P0.0(AD0) P0.1(AD1) P0.2(AD2) P0.3(AD3) P0.4(AD4) P0.5(AD5) P0.6(AD6) P0.7(AD7) -EA/VPP ALE/PROG -PSEN P2.7(A15) P2.6(A14) P2.5(A13) P2.4(A12) P2.3(A11) P2.2(A10) P2.1(A9) P2.0(A8) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 8051 (8031) P3 Bit Function P3.0 RxD TxD INT0 INT1 T0 T1 WR RD P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7 Pin 10 11 12 13 14 15 16 17 Serial communications External interrupts Timers Read/Write signals of external memories In systems based on 8751, 89C51 or DS89C4x0, pins 3.6 and 3.7 are used for I/O while the rest of the pins in port 3 are normally used in the alternate function role
  • 14. Department of Computer Science and Information Engineering National Cheng Kung University, TAIWAN 14 HANEL I/O PROGRAMMING Port 3 (cont’) P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 RST (RXD)P3.0 (TXD)P3.1 (INT0)P3.2 (INT1)P3.3 (T0)P3.4 (T1)P3.5 (WR)P3.6 (RD)P3.7 XTAL2 XTAL1 GND Vcc P0.0(AD0) P0.1(AD1) P0.2(AD2) P0.3(AD3) P0.4(AD4) P0.5(AD5) P0.6(AD6) P0.7(AD7) -EA/VPP ALE/PROG -PSEN P2.7(A15) P2.6(A14) P2.5(A13) P2.4(A12) P2.3(A11) P2.2(A10) P2.1(A9) P2.0(A8) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 8051 (8031) Write a program for the DS89C420 to toggle all the bits of P0, P1, and P2 every 1/4 of a second ORG 0 BACK: MOV A,#55H MOV P0,A MOV P1,A MOV P2,A ACALL QSDELAY ;Quarter of a second MOV A,#0AAH MOV P0,A MOV P1,A MOV P2,A ACALL QSDELAY SJMP BACK QSDELAY: MOV R5,#11 H3: MOV R4,#248 H2: MOV R3,#255 H1: DJNZ R3,H1 ;4 MC for DS89C4x0 DJNZ R4,H2 DJNZ R5,H3 RET END Delay = 11 × 248 × 255 × 4 MC × 90 ns = 250,430 µs
  • 15. Department of Computer Science and Information Engineering National Cheng Kung University, TAIWAN 15 HANEL I/O PROGRAMMING Different ways of Accessing Entire 8 Bits The entire 8 bits of Port 1 are accessed BACK: MOV A,#55H MOV P1,A ACALL DELAY MOV A,#0AAH MOV P1,A ACALL DELAY SJMP BACK Rewrite the code in a more efficient manner by accessing the port directly without going through the accumulator BACK: MOV P1,#55H ACALL DELAY MOV P1,#0AAH ACALL DELAY SJMP BACK Another way of doing the same thing MOV A,#55H BACK: MOV P1,A ACALL DELAY CPL A SJMP BACK
  • 16. Department of Computer Science and Information Engineering National Cheng Kung University, TAIWAN 16 HANEL I/O BIT MANIPULATION PROGRAMMING I/O Ports and Bit Addressability Sometimes we need to access only 1 or 2 bits of the port BACK: CPL P1.2 ;complement P1.2 ACALL DELAY SJMP BACK ;another variation of the above program AGAIN: SETB P1.2 ;set only P1.2 ACALL DELAY CLR P1.2 ;clear only P1.2 ACALL DELAY SJMP AGAIN P0 P1 P2 P3 P1.0 P2.0 P2.1 P2.2 P2.3 P2.4 P2.5 P2.6 P2.7 P1.1 P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 P3.7 P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 Port Bit D0 D1 D2 D3 D4 D5 D6 D7
  • 17. Department of Computer Science and Information Engineering National Cheng Kung University, TAIWAN 17 HANEL I/O BIT MANIPULATION PROGRAMMING I/O Ports and Bit Addressability (cont’) Example 4-2 Write the following programs. Create a square wave of 50% duty cycle on bit 0 of port 1. Solution: The 50% duty cycle means that the “on” and “off” state (or the high and low portion of the pulse) have the same length. Therefore, we toggle P1.0 with a time delay in between each state. HERE: SETB P1.0 ;set to high bit 0 of port 1 LCALL DELAY ;call the delay subroutine CLR P1.0 ;P1.0=0 LCALL DELAY SJMP HERE ;keep doing it Another way to write the above program is: HERE: CPL P1.0 ;set to high bit 0 of port 1 LCALL DELAY ;call the delay subroutine SJMP HERE ;keep doing it 8051 P1.0
  • 18. Department of Computer Science and Information Engineering National Cheng Kung University, TAIWAN 18 HANEL I/O BIT MANIPULATION PROGRAMMING I/O Ports and Bit Addressability (cont’) Instructions that are used for signal-bit operations are as following Instruction Function SETB bit Set the bit (bit = 1) CLR bit Clear the bit (bit = 0) CPL bit Complement the bit (bit = NOT bit) JB bit, target Jump to target if bit = 1 (jump if bit) JNB bit, target Jump to target if bit = 0 (jump if no bit) JBC bit, target Jump to target if bit = 1, clear bit (jump if bit, then clear) Single-Bit Instructions
  • 19. Department of Computer Science and Information Engineering National Cheng Kung University, TAIWAN 19 HANEL I/O BIT MANIPULATION PROGRAMMING Checking an Input Bit The JNB and JB instructions are widely used single-bit operations They allow you to monitor a bit and make a decision depending on whether it’s 0 or 1 These two instructions can be used for any bits of I/O ports 0, 1, 2, and 3 Port 3 is typically not used for any I/O, either single-bit or byte-wise Mnemonic Examples Description MOV A,PX MOV A,P2 Bring into A the data at P2 pins JNB PX.Y, .. JNB P2.1,TARGET Jump if pin P2.1 is low JB PX.Y, .. JB P1.3,TARGET Jump if pin P1.3 is high MOV C,PX.Y MOV C,P2.4 Copy status of pin P2.4 to CY Instructions for Reading an Input Port
  • 20. Department of Computer Science and Information Engineering National Cheng Kung University, TAIWAN 20 HANEL I/O BIT MANIPULATION PROGRAMMING Checking an Input Bit (cont’) Example 4-3 Write a program to perform the following: (a) Keep monitoring the P1.2 bit until it becomes high (b) When P1.2 becomes high, write value 45H to port 0 (c) Send a high-to-low (H-to-L) pulse to P2.3 Solution: SETB P1.2 ;make P1.2 an input MOV A,#45H ;A=45H AGAIN: JNB P1.2,AGAIN ; get out when P1.2=1 MOV P0,A ;issue A to P0 SETB P2.3 ;make P2.3 high CLR P2.3 ;make P2.3 low for H-to-L
  • 21. Department of Computer Science and Information Engineering National Cheng Kung University, TAIWAN 21 HANEL I/O BIT MANIPULATION PROGRAMMING Checking an Input Bit (cont’) Example 4-4 Assume that bit P2.3 is an input and represents the condition of an oven. If it goes high, it means that the oven is hot. Monitor the bit continuously. Whenever it goes high, send a high-to-low pulse to port P1.5 to turn on a buzzer. Solution: HERE: JNB P2.3,HERE ;keep monitoring for high SETB P1.5 ;set bit P1.5=1 CLR P1.5 ;make high-to-low SJMP HERE ;keep repeating
  • 22. Department of Computer Science and Information Engineering National Cheng Kung University, TAIWAN 22 HANEL I/O BIT MANIPULATION PROGRAMMING Checking an Input Bit (cont’) Example 4-5 A switch is connected to pin P1.7. Write a program to check the status of SW and perform the following: (a) If SW=0, send letter ‘N’ to P2 (b) If SW=1, send letter ‘Y’ to P2 Solution: SETB P1.7 ;make P1.7 an input AGAIN: JB P1.2,OVER ;jump if P1.7=1 MOV P2,#’N’ ;SW=0, issue ‘N’ to P2 SJMP AGAIN ;keep monitoring OVER: MOV P2,#’Y’ ;SW=1, issue ‘Y’ to P2 SJMP AGAIN ;keep monitoring
  • 23. Department of Computer Science and Information Engineering National Cheng Kung University, TAIWAN 23 HANEL I/O BIT MANIPULATION PROGRAMMING Reading Single Bit into Carry Flag Example 4-6 A switch is connected to pin P1.7. Write a program to check the status of SW and perform the following: (a) If SW=0, send letter ‘N’ to P2 (b) If SW=1, send letter ‘Y’ to P2 Use the carry flag to check the switch status. Solution: SETB P1.7 ;make P1.7 an input AGAIN: MOV C,P1.2 ;read SW status into CF JC OVER ;jump if SW=1 MOV P2,#’N’ ;SW=0, issue ‘N’ to P2 SJMP AGAIN ;keep monitoring OVER: MOV P2,#’Y’ ;SW=1, issue ‘Y’ to P2 SJMP AGAIN ;keep monitoring
  • 24. Department of Computer Science and Information Engineering National Cheng Kung University, TAIWAN 24 HANEL I/O BIT MANIPULATION PROGRAMMING Reading Single Bit into Carry Flag (cont’) Example 4-7 A switch is connected to pin P1.0 and an LED to pin P2.7. Write a program to get the status of the switch and send it to the LED Solution: SETB P1.7 ;make P1.7 an input AGAIN: MOV C,P1.0 ;read SW status into CF MOV P2.7,C ;send SW status to LED SJMP AGAIN ;keep repeating The instruction ‘MOV P2.7,P1.0’ is wrong , since such an instruction does not exist However ‘MOV P2,P1’ is a valid instruction
  • 25. Department of Computer Science and Information Engineering National Cheng Kung University, TAIWAN 25 HANEL I/O BIT MANIPULATION PROGRAMMING Reading Input Pins vs. Port Latch In reading a port Some instructions read the status of port pins Others read the status of an internal port latch Therefore, when reading ports there are two possibilities: Read the status of the input pin Read the internal latch of the output port Confusion between them is a major source of errors in 8051 programming Especially where external hardware is concerned
  • 26. Department of Computer Science and Information Engineering National Cheng Kung University, TAIWAN 26 HANEL READING INPUT PINS VS. PORT LATCH Reading Latch for Output Port Some instructions read the contents of an internal port latch instead of reading the status of an external pin For example, look at the ANL P1,A instruction and the sequence of actions is executed as follow 1. It reads the internal latch of the port and brings that data into the CPU 2. This data is ANDed with the contents of register A 3. The result is rewritten back to the port latch 4. The port pin data is changed and now has the same value as port latch
  • 27. Department of Computer Science and Information Engineering National Cheng Kung University, TAIWAN 27 HANEL READING INPUT PINS VS. PORT LATCH Reading Latch for Output Port (cont’) Read-Modify-Write The instructions read the port latch normally read a value, perform an operation then rewrite it back to the port latch Mnemonics Example ANL PX ANL P1,A ORL PX ORL P2,A XRL PX XRL P0,A JBC PX.Y,TARGET JBC P1.1,TARGET CPL PX.Y CPL P1.2 INC PX INC P1 DEC PX DEC P2 DJNZ PX.Y,TARGET DJNZ P1,TARGET MOV PX.Y,C MOV P1.2,C CLR PX.Y CLR P2.3 SETB PX.Y SETB P2.3 Instructions Reading a latch (Read-Modify-Write) Note: x is 0, 1, 2, or 3 for P0 – P3
  • 28. Department of Computer Science and Information Engineering National Cheng Kung University, TAIWAN 28 HANEL I/O BIT MANIPULATION PROGRAMMING Read-modify- write Feature The ports in 8051 can be accessed by the Read-modify-write technique This feature saves many lines of code by combining in a single instruction all three actions 1. Reading the port 2. Modifying it 3. Writing to the port MOV P1,#55H ;P1=01010101 AGAIN: XRL P1,#0FFH ;EX-OR P1 with 1111 1111 ACALL DELAY SJMP BACK