单片机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口的结构11、、P0P0口作为口作为普通I/OI/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口引
脚 P0P0口必须接上拉电阻;口必须接上拉电阻;
在读信号之前数据之前,先要向相应的锁存器做写在读信号之前数据之前,先要向相应的锁存器做写11操作的操作的I/OI/O口口
称为准双向口;称为准双向口;
三态输入缓冲器的作用:三态输入缓冲器的作用:
((ANL P0ANL P0,,AA))D Q
CLK Q MUX
P0.n
读锁存器
内部总线
写锁存器
读引脚
地址/数据
控制
VCC
T1
T2
P0口引
脚
准双向口:
从图中可以看出,在读入端口数据时,由于输出
驱动FET并接在引脚上,如果T2导通,就会将输入的
高电平拉成低电平,产生误读。所以在端口进行输
入操作前,应先向端口锁存器写“1”,使T2截止,
引脚处于悬浮状态,变为高阻抗输入。这就是所谓
的准双向口。 22、、P0P0作为作为地址/数据总线
在系统扩展时,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口引
脚
22、、P0P0作为作为地址/数据总线. P0引脚输出地址/输入数据
输入信号是从引脚通过输入缓冲器进入内部总线。
此时,CPU自动使MUX向下,并向P0口写“1”,“读
引脚”控制信号有效,下面的缓冲器打开,外部数据读入
内部总线。
22、、P0P0作为作为地址/数据总线 ----真正的双向口
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口引
脚
第二输入功能
第二输出功能
二、P3P3第二功能(Q=1)
此时引脚部分输入(Q=1、W=1) ,部分输出(Q=1、W输出) 。
WP3P3第二功能各引脚功能定义:
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口使用了。 P1P1、、P2 P2 和和P3 P3 口为准双向口口为准双向口, , 在内部差别不大在内部差别不大, , 但使用但使用
功能有所不同。功能有所不同。
P1P1口是用户专用口是用户专用 8 8 位准双向位准双向I/OI/O口口, , 具有通用输具有通用输
入入//输出功能输出功能, , 每一位都能独立地设定为输入或输出。每一位都能独立地设定为输入或输出。
当有输出方式变为输入方式时当有输出方式变为输入方式时, , 该位的锁存器必须写该位的锁存器必须写
入入““1”, 1”, 然后才能进入输入操作。然后才能进入输入操作。
P2P2口是口是 8 8 位准双向位准双向I/OI/O口。外接口。外接I/OI/O设备时设备时, , 可可
作为扩展系统的地址总线作为扩展系统的地址总线, , 输出高输出高88位地址位地址, , 与与P0 P0 口口
一起组成一起组成 16 16 位地址总线。位地址总线。 对于对于 8031 8031 而言而言, P2 , P2 口一口一
般只作为地址总线使用般只作为地址总线使用, , 而不作为而不作为I/OI/O线直接与外部线直接与外部
设备相连。设备相连。