51单片机IO口工作原理
-
51
单片机
I/O
口工
作原理
一、
P0
端口的结构及工作原理
P0<
/p>
端口
8
位中的一位结构图见下图:
由上图
可见,
P0
端口由锁存器、输入缓冲器、切换开关、一个与非门
、一个与门及场效应管驱动电
路构成。再看图的右边,标号为
P
0.X
引脚的图标,也就是说
P0.X
引脚可以是
P0.0
到
P0.7
的任何一位,
即在
P0
口有
8
个与上图相同的电路组成。
下面,我们先就组成
P0
口的每个单元
部份跟大家介绍一下:
先看输入缓冲器:
在
P0
口中,有两个三态的缓冲器,在学数字电路时,我们
已知道,三态门有三个状态,
即在其的输出端可以是高电平、低电平,同时还有一种就是
高阻状态(或称为禁止状态)
,大家看上图,上
面一个是读锁存
器的缓冲器,
也就是说,
要读取
D
p>
锁存器输出端
Q
的数据,
< br>那就得使读锁存器的这个缓冲
器的三态控制端(上图中标号为
„
读锁存器
‟
端)有效。下面一个
是读引脚的缓冲器,要读取
P0.X
引脚上的
< br>数据,也要使标号为
„
读引脚
‟
的这个三态缓冲器的控制端有效,引脚上的数据才会传输到我们单片机的内
部数据总线上。
D
锁存器
:
构成一个锁存器,通常要用一个时序电路,时序的单元电路在学数字电路时我们已知道
,一个
触发器可以保存一位的二进制数(即具有保持功能)
,在
51
单片机的
32
根
I/O
口线中都是用一个
D
p>
触发器
来构成锁存器的。大家看上图中的
D
锁存器,
D
端是数据输入端,
CP
是控制端(也就是时序控制信号输
入端)<
/p>
,
Q
是输出端,
Q
非是反向输出端。
对于
D
触发器来讲,
当
D
p>
输入端有一个输入信号,
如果这时控制端
C
P
没有信号
(也就是时序脉冲没有到
来
)
,这时输入端
D
的数据是无法传输到
输出端
Q
及反向输出端
Q
非的。如果时序控制端
CP
的时序脉冲
一旦到了,这时
D
端输入的数据就会传输到
Q
及
Q
非端。数据传送
过来后,当
CP
时序控制端的时序信
号
消失了,这时,输出端还会保持着上次输入端
D
的数据(即把上
次的数据锁存起来了)
。如果下一个时
序控制脉冲信号来了,这
时
D
端的数据才再次传送到
Q
端,从而改变
Q
端的状态。
多路开关:
在
51
单片机中,当内部的存储器够用(也就是不需要外扩展存储器时,这里讲的存储器包括数
据存储器及程序存储器)
时,
P0
< br>口可以作为通用的输入输出端口
(即
I/O
)
使用,
对于
8031
p>
(内部没有
ROM
)
的单片机或者编写的程序超过了单片机内部的存储器容量,需要外扩存储器时,
P0<
/p>
口就作为
„
地址
/
数据
‟
总
线
使用。那么这个多路选择开关就是用于选择是做为普通
I/O
口
使用还是作为
„
数据
/
地址
‟
总线使用的选择
开关了
。大家看上图,当多路开关与下面接通时,
P0
口是作为普通的
I/O
口使用的,当多路开关是与上面
接通时,
P0
口是作为
„
地址
/
数据
‟
总线使用的。
输出驱动部份:
从上图中我们已看出,
P0
口的输出是由两个
MOS
管组成的推拉式结构,也就是说,这两
个
p>
MOS
管一次只能导通一个,当
V1
导通时,
V2
就截止,当
V2
导通时,
V1
截止。
与门、与非门:
这两个单元电路的逻辑原理我
们在第四课数字及常用逻辑电路时已做过介绍,不明白的同
学请回到第四节去看看。
p>
前面我们已将
P0
口的各单元部件进行了一个详细的讲解,下面我们就来研究一下
P0
< br>口做为
I/O
口及地址
/
数据总线使用时的具体工作过程。
1
、作为
I/O
端口使用时的工作原理
P0
口作
为
I/O
端口使用时,多路开关的控制信号为
< br>0
(低电平)
,看上图中的线线部份,多路开关的
控制信号同时与与门的一个输入端是相接的,我们知道与门的逻辑特点是
“
全
1
出
1
,有
0
出
0<
/p>
”
那么控制信号
是
0
的话,这时与门输出的也是一个
0
(低电平)
,与让的输出是
0
,
V1
管就截止,在多路控制开关的控制信
号是
0
(低电平)时,多路开关是与锁存器的
Q
非端相接的(即
P0
口作为
I/O
口线使用)
。
P0
口用作
I/O
口线,其由数据总线向引脚输出(即输出状态
Output
)的工作过程:
当写锁存器信号
CP
有效,
数据总线的信号
→
锁存器的输入端
D<
/p>
→
锁存器的反向输出
Q
< br>非端
→
多路开关
→
V2
管的栅极
→
V2
的
漏极到输出端
P0.X
。前面我们已讲了,当多路开关的控制信号为低电平
0
时,
与门输出为低电平,
V1
管是
截止的,
所以作为输出口时,
P0
是漏极开路输出,类似于
OC
门,当驱动上接电流负载时,需要外接上拉
电阻
。
下图就是由内部数据总线向
P0<
/p>
口输出数据的流程图(红色箭头)
。
P0
口用作
I/O
口线,其由引脚向内部数据总线输入(即输入状态
Inp
ut
)的工作过程:
p>
数据输入时(读
P0
口)有两种情况
1
、读引脚
读芯片引脚上的数据,读引脚数时,读引脚缓冲器打开(即三
态缓冲器的控制端要有效)
,通过内部
数据总线输入,请看下图
(红色简头)
。
2
、读锁存器
通过打开读锁存器三态缓冲器读取锁存器输出端
Q
的状态,请
看下图(红色箭头)
:
在输入状态下,
从锁存器和从引脚上
读来的信号一般是一致的,
但也有例外。
例如,
当从内部总线输
出低电平后,锁存器
Q
=
0
,
Q
非=
1
,场效应管
T2
开通,端口线呈低电平状态。此时无论端口线上外接
的信号是低电乎还是高
电平,从引脚读入单片机的信号都是低电平,因而不能正确地读入端口引脚上的信
号。又
如,当从内部总线输出高电平后,锁存器
Q
=
< br>1
,
Q
非=
0
,场效应管
T2
截止。如外接引
脚信号为
低电平,从引脚上读入的信号就与从锁存器读入的信号不同。为此,
8031
单片机在对端口
P0
一
P3
的输入
操作上,有如下约定
:为此,
8051
单片机在对端口
P0
一
P3
的输入操作上,有如下约定:凡
属于读
-
修改
-
写方式的指令,从锁存器读入信号,其它指令则从端口引脚线上读入信号。
读
-
修改
-
写指令的特点是,从端口输入
(
读
)
信号,在单片机内加以运算
(
修改
)
后,再输出
(
写
)
到该端口上。
下面是几条
读
--
修改
-
写指令的例子。
这样安
排的原因在于读
-
修改
-
写指令需要得到端口原输出的状态,修改后再输出,读锁存器而不是读
引脚,
可以避免因外部电路的原因而使原端口的状态被读错。
p>
P0
端口是
8031
单片机的总线口,分时出现数据
D7
一
D0
、低
8
位地址
< br>A7
一
AO
,以及三态,用来接
口存储器、外部电路与外部设备。
P0
端口是使用最广泛的
I
/
O
端口。
2
、作为地址<
/p>
/
数据复用口使用时的工作原理
在访问外部存储器时
P0
口作为地址
/
数据复用口使用。
< br>
这时多路开关
„
控制
‟
信号为
< br>„
1
‟
,
„
与门
‟
解锁,
„
与门
‟
输出信号电平由
“
地址
/
数据
”
线信号决定;多路开
关与反相器的输出端相连
,地址信号经
“
地址
/
数据
”
线
→
< br>反相器
→
V2
场效应管栅极
p>
→
V2
漏极输出。
例如:控制信号为
1
,地址信号为
p>
“
0
”
时,与门输
出低电平,
V1
管截止;反相器输出高电平,
< br>V2
管导通,输
出引脚的地址信号为低电平。请看下图(
兰色字体为电平)
:
反之,控制信号为
“
1
”
、地址信号为
“
1
”
,
“
与门
”
输出为高电平,
V1
管导通;反相器输出低电平,
V2
管截
止,输出引脚的地址信号为高电平。请看下图(兰色字体为电平)
:
可见,在输出
“
地址
/
数据
”
信息时,
V1
、
V2
管是交替导通的,负载能力很强,可以直接与外设存储器相连,
无须增
加总线驱动器。
p>
P0
口又作为数据总线使用。在访问外部程序存储器时,
P0
口输出低
8
位地址信
息后,将变为数据总
线,以便读指令码(输入)
。