扩展:单片机GPIO介绍
扩展:单片机GPIO介绍
1. GPIO概念
GPIO( general purpose intput output) 是通用输入输出端口的简称, 可以通过软件来控制其输入和输出。 51 单片机芯片的 GPIO 引脚与外部设备连接起来, 从而实现与外部通讯、 控制以及数据采集的功能。 不过 GPIO 最简单的应用还属点亮 LED 灯了, 只需通过软件控制 GPIO 输出高低电平即可。 当然 GPIO还可以作为输入控制, 比如在引脚上接入一个按键, 通过电平的高低判断按键是否按下。
那么是不是所有引脚都是 GPIO 呢? 当然不是, 51 单片机引脚可以分为这么几大类:
-
电源引脚: 引脚图中的 VCC、 GND 都属于电源引脚。
-
晶振引脚: 引脚图中的 XTAL1、 XTAL2 都属于晶振引脚。
-
复位引脚: 引脚图中的 RST/VPD 属于复位引脚, 不做其他功能使用。
-
下载引脚: 51 单片机的串口功能引脚( TXD、 RXD) 可以作为下载引脚使用。
-
GPIO 引脚: 引脚图中带有 Px.x 等字样的均属于 GPIO 引脚。 从引脚图可以看出, GPIO 占用了芯片大部分的引脚, 共达 32 个, 分为了 4 组, P0、 P1、P2、 P3, 每组为 8 个 IO, 而且在 P3 组中每个 IO 都具备额外功能, 只要通过相应的寄存器设置即可配置对应的附加功能, 同一时刻, 每个引脚只能使用该引脚的一个功能
2. GPIO结构框图与工作原理
我们使用的 51 单片机 GPIO 分为 P0、 P1、 P2 和 P3 口, 下面分别来介绍其内部结构框图与工作原理。
2.1 P0端口
P0 端口含有 8 位引脚, 下图为其中一个, 其它几个与之完全一致, 因此只需了解当中一个即可。 如下图所示:
由图可见,P0 端口由锁存器、 输入缓冲器、 切换开关、 一个非门、 一个与非门及场效应管驱动电路构成。 再看图的最右边, 标号为 P0.x 引脚的图标, 也就是说 P0.x 引脚可以是 P0.0 到 P0.7 的任何一位, 即在 P0 口有 8 个与上图相同的电路组成。
- 输入缓冲器
在 P0 口中, 有两个三态的缓冲器, 在学数字电路时, 我们已知道, 三态门有三个状态, 即在输出端可以是高电平、 低电平, 同时还有一种就是高阻状态( 或称为禁止状态) , 大家看上图, 上面一个是读锁存器的缓冲器, 也就是说, 要读取 D 锁存器输出端 Q 的数据, 那就得使读锁存器的这个缓冲器的三态控制端( 上图中标号为‘ 读锁存器’ 端) 有效。 下面一个是读引脚的缓冲器, 要读取 P0.x引脚上的数据, 也要使标号为‘ 读引脚’ 的这个三态缓冲器的控制端有效, 引脚上的数据才会传输到我们单片机的内部数据总线上。
- D锁存器
构成一个锁存器, 通常要用一个时序电路, 时序的单元电路在学数字电路时我们已知道, 一个触发器可以保存一位的二进制数( 即具有保持功能) , 在 51单片机的 32 根 I/O 口线中都是用一个 D 触发器来构成锁存器的。 大家看上图中的 D 锁存器, D 端是数据输入端, CP( CLK) 是控制端( 也就是时序控制信号输入端) , Q 是输出端, Q 非是反向输出端。
对于 D 触发器来讲, 当 D 输入端有一个输入信号, 如果这时控制端 CP 没有信号( 也就是时序脉冲没有到来) , 这时输入端 D 的数据是无法传输到输出端 Q及反向输出端 Q 非的。 如果时序控制端 CP 的时序脉冲一旦到了, 这时 D 端输入的数据就会传输到 Q 及 Q 非端。 数据传送过来后, 当 CP 时序控制端的时序信号消失了, 这时, 输出端还会保持着上次输入端 D 的数据( 即把上次的数据锁存起来了) 。 如果下一个时序控制脉冲信号来了, 这时 D 端的数据才再次传送到 Q端, 从而改变 Q 端的状态。
- 多路开关
在 51 单片机中, 当内部的存储器够用( 也就是不需要外扩展存储器时, 这里讲的存储器包括数据存储器及程序存储器) 时, P0 口可以作为通用的输入输出端口( 即 I/O) 使用, 对于 8031( 内部没有 ROM) 的单片机或者编写的程序超过了单片机内部的存储器容量, 需要外扩存储器时, P0 口就作为‘ 地址/数据’总线使用。 那么这个多路选择开关就是用于选择是做为普通 I/O 口使用还是作为‘ 数据/地址’ 总线使用的选择开关了。 大家看上图, 当多路开关与下面接通时, P0 口是作为普通的 I/O 口使用的, 当多路开关是与上面接通时, P0 口是作为‘ 地址/数据’ 总线使用的。
- 场效应管输出驱动
从上图中可以看出, P0 口的输出是由两个 MOS 管组成的推拉式结构, 也就是说, 这两个 MOS 管一次只能导通一个, 当 V1 导通时, V2 就截止, 当 V2 导通时, V1 截止。
- 与非门、非门
学过数电的都应该知道,与非门就是 !(A&&B):当输入端中有1个或1个以上是低电平时,输出为高电平;只有所有输入是高电平时,输出才是低电平。,非门!A:输出结果与输出相反。
更多内容参考:51单片机I/O端口的结构和工作原理_51单片机引脚读写原理-CSDN博客
51单片机的P0口工作原理详细讲解 - 电子常识 - 电子发烧友网 (elecfans.com)
2.1.1 作为I/O端口输出使用时的工作原理
P0 口作为 I/O 端口使用时, 多路开关的控制信号为 0( 低电平) , 看上图中的红线部份, 多路开关的控制信号同时与与非门的一个输入端是相接的, 我们知道与门的逻辑特点是“ 全 1 出 1, 有 0 出 0” 那么控制信号是 0 的话, 这时与门输出的也是一个 0( 低电平) , 与门的输出是 0, V1 管就截止, 在多路控制开关的控制信号是 0( 低电平) 时, 多路开关是与锁存器的 Q 非端相接的( 即 P0 口作为I/O口线使用)
P0 口用作 I/O 口线, 其由数据总线向引脚输出( 即输出状态 Output) 的工作过程: 当写锁存器信号 CP 有效, 数据总线的信号→锁存器的输入端→D 锁存器的反向输出 Q 非端→多路开关→V2 管的栅极→V2 的漏极到输出端 P0.X。 前面我们已讲了, 当多路开关的控制信号为低电平 0 时, 与门输出为低电平, V1 管是截止的, 所以作为输出口时, P0 是漏极开路输出, 类似于 OC 门, 当驱动上接电流负载时, 需要外接上拉电阻。
下图就是由内部数据总线向 P0 口输出数据的流程图( 红色箭头) :
2.1.2 作为I/O端口输入使用时的工作情况
数据输入时( 读 P0 口) 有两种情况:
- 读引脚
读芯片引脚上的数据, 读引脚数时, 读引脚缓冲器打开( 即三态缓冲器的控制端要有效) , 通过内部数据总线输入, 请看下图( 红色箭头) 。
- 读锁存器
通过打开读锁存器三态缓冲器读取锁存器输出端 Q 的状态, 请看下图( 红色箭头)
2.2 P1端口
P1 口的结构最简单, 用途也单一, 仅作为数据输入/输出端口使用。 输出的信息有锁存, 输入有读引脚和读锁存器之分。 P1 端口的一位结构见下图:
由图可见, P1 端口与 P0 端口的主要差别在于, P1 端口用内部上拉电阻 R 代替了 P0 端口的场效应管 V1, 并且输出的信息仅来自内部总线。 由内部总线输出的数据经锁存器反相和场效应管反相后, 锁存在端口线上, 所以, P1 端口是具有输出锁存的静态口。
由上图可见, 要正确地从引脚上读入外部信息, 必须先使场效应管关断, 以便由外部输入的信息确定引脚的状态。 为此, 在作引脚读入前, 必须先对该端口写入 l。 具有这种操作特点的输入/输出端口, 称为准双向 I/O 口。 8051 单片机的 P1、 P2、 P3 都是准双向口。 P0 端口由于输出有三态功能, 输入前, 端口线已处于高阻态, 无需先写入 1 后再作读操作。
单片机复位后, 各个端口已自动地被写入了 1, 此时, 可直接作输入操作。如果在应用端口的过程中, 已向 P1 一 P3 端口线输出过 0, 则再要输入时, 必须先写 1 后再读引脚, 才能得到正确的信息。 此外, 随输入指令的不同, P1 端口也有读锁存器与读引脚之分。
2.3 P2端口
P2 端口的一位结构见下图:
由图可见, P2 端口在片内既有上拉电阻, 又有切换开关 MUX, 所以 P2 端口在功能上兼有 P0 端口和 P1 端口的特点。 这主要表现在输出功能上, 当切换开关向下接通时, 从内部总线输出的一位数据经反相器和场效应管反相后, 输出在端口引脚线上; 当多路开关向上时, 输出的一位地址信号也经反相器和场效应管反相后, 输出在端口引脚线上。
对于 8031 单片机必须外接程序存储器才能构成应用电路( 或者我们的应用电路扩展了外部存储器) , 而 P2 端口就是用来周期性地输出从外存中取指令的地址(高 8 位地址), 因此, P2 端口的多路开关总是在进行切换, 分时地输出从内部总线来的数据和从地址信号线上来的地址。 因此 P2 端口是动态的 I/O 端口。输出数据虽被锁存, 但不是稳定地出现在端口线上。 其实, 这里输出的数据往往也是一种地址, 只不过是外部 RAM 的高 8 位地址。
P2 口既可作为 I/O 口使用, 也可作为地址总线使用, 通常主要用作 I/O 口使用, 地址总线使用不作分析。
2.4 P3端口
P3 口是一个多功能口, 它除了可以作为 I/O 口外, 还具有第二功能, P3 端口的一位结构见下图:
由上图可见, P3 端口和 Pl 端口的结构相似, 区别仅在于 P3 端口的各端口线有两种功能选择。 当处于第一功能时, 第二输出功能线为 1, 此时, 内部总线信号经锁存器和场效应管输入/输出, 其作用与 P1 端口作用相同, 也是静态准双向 I/O 端口。 当处于第二功能时, 锁存器输出 1, 通过第二输出功能线输出特定的内含信号, 在输入方面, 即可以通过缓冲器读入引脚信号, 还可以通过替代输入功能读入片内的特定第二功能信号。 由于输出信号锁存并且有双重功能, 故P3 端口为静态双功能端口。 有关 P3 口第二功能, 在前面章节芯片管脚功能定义已经讲解过, 此处不再重复。
3. 小结
至此, 我们就把 51 单片机的 P0、 P1、 P2 和 P3 口内部结构及原理讲解完,可能有的朋友会很懵、 看不懂, 没关系, 这些都不会影响你编写单片机应用程序, 大家记住以下几点即可:
-
P0 口是漏极开路, 要使其输出高电平, 必须外接上拉电阻, 通常选择4.7K~10K 阻值。
-
P0、 P1、 P2 几乎都用作普通 I/O 口使用, 既可作为输入, 又可作为输出。
-
P3 口既可用作普通 I/O 口, 又可作为第二功能使用, 比如串口、 外部中断、 计数器等。
2024.8.28 第一次修订,后期不再维护