单片机 I/O口的使用
? 对单片机的控制,其实就是对 I/O口的控制,
无论单片机对外界进行何种控制,亦或接
受外部的控制,都是通过 I/O口进行的。单
片机总共有 P0,P1,P2,P3四个 8位双向输
入输出端口,每个端口都有锁存器、输出
驱动器和输入缓冲器。 4个 I/O端口都能作
输入输出口用,其中 P0和 P2通常用于对外
部存储器的访问。
§ 4.1 MCS-51单片机的并行端口结构与操作
51系列单片机有 4个 I/O端口,每个端口都是 8
位准双向口,共占 32根引脚。每个端口都包括一个
锁存器 (即专用寄存器 P0~ P3)、一个输出驱动器和
输入缓冲器。通常把 4个端口笼统地表示为 P0~ P3。
在无片外扩展存储器的系统中,这 4个端口的每一
位都可以作为准双向通用 I/O端口使用。在具有片外扩
展存储器的系统中,P2口 作为 高 8位地址线, P0口分时
作为 低 8位地址线 和 双向数据总线 。
51单片机 4个 I/O端口线路设计的非常巧妙,学习
I/O端口逻辑电路,不但有利于正确合理地使用端口,
而且会给设计单片机外围逻辑电路有所启发。
下面简单介绍一下输入 /输出端口结构。
4.1.1 P0口和 P2的结构
下图为 P0口的某位 P0.n(n=0~7)结构图,它由一个
输出锁存器、两个三态输入缓冲器和输出驱动电路
及控制电路组成。从图中可以看出,P0口既可以作
为 I/O用,也可以作为地址 /数据线用。
D Q
CLK Q MUX
P0.n
读 锁存器
内部总线
写 锁存器
读 引脚
地址 /数据
控制
VCC
T1
T2
P0口
引脚
一,P0口的结构
1,P0口作为 普通 I/O口
① 输出时
CPU发出控制电平, 0”封锁, 与, 门,将输出上拉场效
应管 T1截止,同时使多路开关 MUX把锁存器 与输出
D Q
CLK Q MUX
P0.n
读 锁存器
内部总线
写 锁存器
读 引脚
地址 /数据
控制
VCC
T1
T2
P0口
引脚
驱动场效应管 T2栅极接通。故内部总线与 P0口同相。由
于输出驱动级是漏极开路电路,若驱动 NMOS或其
它拉流负载时,需要 外接上拉电阻 。 P0的输出级可驱动
8个 LSTTL负载。
D Q
CLK Q MUX
P0.n
读 锁存器
内部总线
写 锁存器
读 引脚
地址 /数据
控制
VCC
T1
T2
P0口
引脚
② 输入时 ----分 读引脚 或 读锁存器
读引脚,由传送指令 (MOV)实现;
下 面一个缓冲器用于读端口 引脚 数据,当执行一条
由端口输入的指令时,读脉冲把该三态缓冲器打开,
这样端口引脚上的数据经过缓冲器读入到内部总线。
D Q
CLK Q MUX
P0.n
读 锁存器
内部总线
写 锁存器
读 引脚
地址 /数据
控制
VCC
T1
T2
P0口
引脚
D Q
CLK Q MUX
P0.n
读 锁存器
内部总线
写 锁存器
读 引脚
地址 /数据
控制
VCC
T1
T2
P0口
引脚
② 输入时 ----分 读引脚 或 读锁存器
读锁存器,有些指令 如,ANL P0,A称为, 读 -改 -写,
指令,需要读锁存器。
上 面 一个缓冲器用于读端口 锁存器 数据。
**原因,如果此时该端口的负载恰是一个晶体管 基极,且原端
口输出值为 1,那么导通了的 PN结会把端口引脚高电平拉低;若
此时直接读端口引脚信号,将会把原输出的, 1”电平误读为, 0”
电平。现采用读输出锁存器代替读引脚,图中,上面的三态缓
冲器就为读锁存器 Q端信号而设,读输出锁存器可避免上述可能
发生的错误。 **
D Q
CLK Q MUX
P0.n
读 锁存器
内部总线
写 锁存器
读 引脚
地址 /数据
控制
VCC
T1
T2
P0口
引脚
? P0口必须接上拉电阻;
? 在读信号之前数据之前,先要向相应的锁存器做写 1操作的 I/O口
称为准双向口;
? 三态输入缓冲器的作用:
? ( ANL P0,A)
P 0i
Q1
9 01 3
V C C
GND
O U T P U T
D Q
CLK Q MUX
P0.n
读 锁存器
内部总线
写 锁存器
读 引脚
地址 /数据
控制
VCC
T1
T2
P0口
引脚
准 双向口:
从图中可以看出,在读入端口数据时,由于输出
驱动 FET并接在引脚上,如果 T2导通,就会将输入的
高电平拉成低电平,产生误读。所以在端口进行输
入操作前,应先向端口锁存器 写, 1”,使 T2截止,引
脚处于悬浮状态,变为高阻抗输入。这就是所谓的
准 双向口。
2,P0作为 地址 /数据总线
在系统扩展时,P0端口作为 地址 /数据总线 使用时,
分为:
? P0引脚 输出地址 /数据 信息。
D Q
CLK Q MUX
P0.n
读 锁存器
内部总线
写 锁存器
读 引脚
地址 /数据
控制
VCC
T1
T2
P0口
引脚
CPU发出控制电平, 1”,打开, 与, 门,又使多路开
关 MUX把 CPU的 地址 /数据总线 与 T2栅极反相接通,输出地
址或数据。由图上可以看出,上下两个 FET处于反相,构
成了推拉式的输出电路,其负载能力大大增强。
D Q
CLK Q MUX
P0.n
读 锁存器
内部总线
写 锁存器
读 引脚
地址 /数据
控制
VCC
T1
T2
P0口
引脚
2,P0作为 地址 /数据总线
? P0引脚 输出地址 /输入数据
输入信号是从引脚通过输入缓冲器进入 内部总线 。
此时,CPU自动使 MUX向下,并向 P0口写, 1”,,读引
脚, 控制信号有效,下面的缓冲器打开,外部数据读入内
部总线。
2,P0作为 地址 /数据总线 ----真正的双向口
D Q
CLK Q MUX
P0.n
读 锁存器
内部总线
写 锁存器
读 引脚
地址 /数据
控制
VCC
T1
T2
P0口
引脚
二,P2的内部结构
1.P2口作为 普通 I/O口
D Q
CLK Q MUX
P2.n
读锁存器
内部总线
写锁存器
读引脚
地址 控制 VCC
R
T
P2口
引脚
CPU发出控制电平, 0”,使多路开关 MUX倒向锁存

输出 Q端,构成一个准双向口。其功能与 P1相同。
2.P2口作为 地址总线
在系统扩展片外 程序存储器 扩展数据存储器且容量超过
256B (用 MOVX @DPTR指令 )时,CPU发出控制电平, 1”,使多路
开关 MUX倒 内部地址线 。此时,P2输出高 8位地址。
D Q
CLK Q MUX
P2.n
读锁存器
内部总线
写锁存器
读引脚
地址 控制 VCC
R
T
P2口
引脚
4.1.2 P1口,P3口的内部结构
① P1口的一位的结构
它由一个 输出锁存器, 两个三态输入缓冲器 和 输出驱
动电路 组成 ----准双向口。
D Q
CLK Q
P1.n
读 锁存器
内部总线
写 锁存器
读 引脚
VCC
R
T
P1口
引脚
② P3的内部结构
D Q
CLK Q
P3.n
读 锁存器
内部总线
写锁存器
读 引脚
VCC
R
T
P3口
引脚
第二 输入功能
第二 输出功能
一、作为通用 I/O口与 P1口类似 ----准双向口 (W=1)
W
② P3的内部结构
D Q
CLK Q
P3.n
读 锁存器
内部总线
写锁存器
读 引脚
VCC
R
T
P3口
引脚
第二 输入功能
第二 输出功能
二,P3第二功能 (Q=1)
此时引脚部分输入 (Q=1,W=1),部分输出 (Q=1,W输出 ) 。
W
P3第二功能各引脚功能定义:
P3.0,RXD串行 口输入
P3.1,TXD串行 口输出
P3.2,INT0外部中断 0输入
P3.3,INT1外部中断 1输入
P3.4,T0定时器 0外部输入
P3.5,T1定时器 1外部输入
P3.6,WR外部写 控制
P3.7,RD外部读 控制
? 综上所述:当 P0作为 I/O口使用时,特别是作
为输出时,输出级属于开漏电路,必须外接
上拉电阻才会有高电平输出;如果作为输入,
必须先向相应的锁存器写, 1”,才不会影响
输入电平。
? 当 CPU内部控制信号为, 1”时,P0口作为地
址 /数据总线使用,这时,P0口就无法再作为
I/O口使用了。
? P1,P2 和 P3 口为准双向口,在内部差别不大,但使用
功能有所不同。
? P1口是用户专用 8 位准双向 I/O口,具有通用输
入 /输出功能,每一位都能独立地设定为输入或输出。
当有输出方式变为输入方式时,该位的锁存器必须写
入, 1”,然后才能进入输入操作。
? P2口是 8 位准双向 I/O口。外接 I/O设备时,可
作为扩展系统的地址总线,输出高 8位地址,与 P0 口
一起组成 16 位地址总线。 对于 8031 而言,P2 口一
般只作为地址总线使用,而不作为 I/O线直接与外部
设备相连。