尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
学习笔记6:51单片机GPIO介绍
一、GPIO概念GPIOgeneral purpose intput output是通用输入输出端口的简称可以通过软件来控制其输入和输出。51单片机芯片的GPIO引脚与外部设备连接起来从而实现与外部通讯、控制以及数据采集的功能。不过GPIO最简单的应用还属点亮LED灯了只需通过软件控制GPIO输出高低电平即可。当然GPIO还可以作为输入控制比如在引脚上接入一个按键通过电平的高低判断按键是否按下。开发板上使用的51单片机型号是STC89C52此芯片共有40个引脚。不是所有引脚都是GPIO51单片机引脚可以分为这么几大类①电源引脚引脚图中的VCC、GND都属于电源引脚②晶振引脚引脚图中的XTAL1、XTAL2都属于晶振引脚③复位引脚引脚图中的RST/VPD属于复位引脚不做其他功能使用④下载引脚51单片机的串口功能引脚TXD、RXD可以作为下载引脚使用⑤GPIO引脚引脚图中带有Px.x等字样的均属于GPIO引脚。从引脚图可以看出GPIO占用了芯片大部分的引脚共达32个分为4组P0、P1、P2、P3每组为8个IO而且在P3 组中每个IO都具备额外功能只要通过相应的寄存器设置即可配置对应的附加功能同一时刻每个引脚只能使用该引脚的一个功能。可以查阅STC89CXX芯片数据手册获取信息数据手册在我们资料“\6--芯片资料\开发板芯片数据手册 ”内里面有一个STC89CXX数据手册.pdf第23页中就有介绍。从上图中可以获取引脚的名字和引脚功能等信息。开发板芯片原理图内已经将引脚所有功能都标进去了所以后面不需要查找具体引脚有什么功能直接看原理图即可。二、GPIO结构框图与工作原理51单片机GPIO分为P0、P1、P2和P3口下面分别来介绍其内部结构框图与工作原理。P0端口P0 端口含有8位引脚下图为其中一个其它几个与之完全一致因此只需了解当中一个。由上图可见P0端口由锁存器、输入缓冲器、切换开关、一个非门、一个与非门及场效应管驱动电路构成。再看图的最右边标号为P0.x引脚的图标也就是说P0.x引脚可以是P0.0到P0.7的任何一位即在P0口有8个与上图相同的电路组成。输入缓冲器在P0口中有两个三态的缓冲器在学数字电路时已知道下面附相关资料三态门有三个状态即在输出端可以是高电平、低电平同时还有一种就是高阻状态或称为禁止状态上面一个是读锁存器的缓冲器也就是说要读取D锁存器输出端Q的数据那就得使读锁存器的这个缓冲器的三态控制端上图中标号为“读锁存器”端有效。下面一个是读引脚的缓冲器要读取P0.x引脚上的数据也要使标号为‘读引脚 ’的这个三态缓冲器的控制端有效引脚上的数据才会传输到我们单片机的内部数据总线上。传输门可由NMOS管和PMOS管并联而成两个栅极的信号互补其真值表如下。CB0Z高阻态1A三态缓冲器可由传输门构成EN为使能信号端输入端X经过两个非门作用是让后级负载由缓冲器驱动、恢复X的逻辑电平并改善边沿其真值表如下。ENXF00Z01Z100111D 锁存器以下是D锁存器的原理图D为输入端Output为锁存器输出端红色部分为时钟信号用于控制锁存器的锁存状态高电平进入写入状态低电平进入锁存状态。以下是D触发器MS主从触发器由两个D锁存器串联而成仅在时钟信号的上升边沿才会触发工作。上升边沿的持续时间非常短可以认为是瞬间完成的这样的意义在于保证在一个时间周期内D端只能写入一次数据。构成一个锁存器通常要用一个时序电路时序的单元电路在学数字电路时已知道一个触发器可以保存一位的二进制数即具有保持功能在51单片机的32根I/O口线中都是用一个D触发器来构成寄存器的。大家看P0端口图中的D锁存器D端是数据输入端CPCLK是控制端也就是时序控制信号输入端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截止。工作过程前面已将P0口的各单元部件进行了一个详细的讲解下面研究一下P0口作为I/O口及地址/数据总线使用时的具体工作过程。作为 I/O 端口输出使用时的工作原理P0口作为I/O端口使用时多路开关的控制信号为0低电平看上图中的红线部份多路开关的控制信号同时与与非门的一个输入端是相接的我们知道与门的逻辑特点是“全1出1有0出0”那么控制信号是0的话这时与门输出的也是一个0低电平与门的输出是0V1管就截止在多路控制开关的控制信号是0低电平时多路开关是与锁存器的Q非端相接的即P0口作为I/O口线使用。P0口用作I/O口线其由数据总线向引脚输出即输出状态Output的工作过程当写锁存器信号CP有效数据总线的信号→锁存器的输入端→D锁存器的反向输出Q非端→多路开关→V2管的栅极→V2的漏极到输出端P0.X。前面我们已讲了当多路开关的控制信号为低电平0时与门输出为低电平V1管是截止的所以作为输出口时P0是漏极开路输出关于P0端漏极开路输出的问题前面的学习笔记1提到过类似于OC门当驱动上接电流负载时需要外接上拉电阻。下图就是由内部数据总线向P0口输出数据的流程图红色箭头。作为 I/O 端口输入使用时的工作原理数据输入时读P0口有两种情况读引脚读芯片引脚上的数据读引脚数时读引脚缓冲器打开即三态缓冲器的控制端要有效通过内部数据总线输入红色箭头。读锁存器通过打开读锁存器三态缓冲器读取锁存器输出端Q的状态红色箭头。因为STC 51单片机内存已经足够使用所以也用不到通过P0口外扩存储器对于P0口作为外扩存储器时的工作原理这里就不叙述。P1端口P1口的结构最简单用途也单一仅作为数据输入/输出端口使用。输出的信息有锁存输入有读引脚和读锁存器之分。由图可见P1端口与P0端口的主要差别在于P1端口用内部上拉电阻R代替了P0端口的场效应管V1并且输出的信息仅来自内部总线。由内部总线输出的数据经锁存器反相和场效应管反相后锁存在端口线上所以P1端口是具有输出锁存的静态口。由上图可见要正确地从引脚上读入外部信息必须先使场效应管关断以便由外部输入的信息确定引脚的状态。为此在作引脚读入前必须先对该端口写入l。具有这种操作特点的输入/输出端口称为准双向I/O口。8051单片机的P1、P2、P3都是准双向口。P0端口由于输出有三态功能输入前端口线已处于高阻态无需先写入l后再作读操作。单片机复位后各个端口已自动地被写入了1此时可直接作输入操作。如果在应用端口的过程中已向P1-P3端口线输出过0则再要输入时必须先写1后再读引脚才能得到正确的信息。此外随输入指令的不同P1端口也有读锁存器与读引脚之分。P2端口由图可见P2端口在片内既有上拉电阻又有切换开关MUX所以P2端口在功能上兼有P0端口和P1端口的特点。这主要表现在输出功能上当切换开关向下接通时从内部总线输出的一位数据经反相器和场效应管反相后输出在端口引脚线上当多路开关向上时输出的一位地址信号也经反相器和场效应管反相后输出在端口引脚线上。对于8031单片机必须外接程序存储器才能构成应用电路或者我们的应用电路扩展了外部存储器而P2端口就是用来周期性地输出从外存中取指令的地址(高8位地址)因此P2端口的多路开关总是在进行切换分时地输出从内部总线来的数据和从地址信号线上来的地址。因此P2端口是动态的I/O端口。输出数据虽被锁存但不是稳定地出现在端口线上。其实这里输出的数据往往也是一种地址只不过是外部RAM的高8位地址。P2口既可作为I/O口使用也可作为地址总线使用通常主要用作I/O口使用地址总线使用不作分析。P3端口P3口是一个多功能口它除了可以作为I/O口外还具有第二功能。由上图可见P3端口和Pl端口的结构相似区别仅在于P3端口的各端口线有两种功能选择。当处于第一功能时第二输出功能线为1此时内部总线信号经锁存器和场效应管输入/输出其作用与P1端口作用相同也是静态准双向I/O端口。当处于第二功能时锁存器输出1通过第二输出功能线输出特定的内含信号在输入方面即可以通过缓冲器读入引脚信号还可以通过替代输入功能读入片内的特定第二功能信号。由于输出信号锁存并且有双重功能故P3端口为静态双功能端口。有关P3口第二功能在前面章节芯片管脚功能定义已经讲解过此处不再重复。至此51单片机的P0、P1、P2和P3口内部结构及原理讲解完这些都不会影响你编写单片机应用程序记住以下几点即可①P0口是漏极开路要使其输出高电平必须外接上拉电阻通常选择4.7K~10K阻值。②P0、P1、P2几乎都用作普通I/O口使用既可作为输入又可作为输出。③P3口既可用作普通I/O口又可作为第二功能使用比如串口、外部中断、计数器等。
RELATED

相关推荐

麒麟V11如何使用SSH国密互信

麒麟V11如何使用SSH国密互信

背景 SSH互信太有用了,大多数的服务器双活机制都需要依赖操作系统的SSH互信。那么基于国密SSH该如何搭建互信呢?今天就以麒麟操作系统V11为例,用桌面版V11搭建一个到服务器版的国密SM2的无密码信任机制。 麒麟服务器V11配置过程 麒麟服务器…

📅 2026/10/31 11:03:04
notepad-- 文本编辑器 macOS 安装教程:3 条路线,最快 5 分钟跑通

notepad-- 文本编辑器 macOS 安装教程:3 条路线,最快 5 分钟跑通

notepad-- 文本编辑器 macOS 安装教程:3 条路线,最快 5 分钟跑通 【免费下载链接】notepad-- 一个支持windows/linux/mac的文本编辑器,目标是做中国人自己的编辑器,来自中国。 项目地址: https://gitcode.com/GitHub_Trending/n…

📅 2026/10/31 10:58:04
大麦自动抢票脚本实战:双端驱动 + Appium 移动端出单完整指南

大麦自动抢票脚本实战:双端驱动 + Appium 移动端出单完整指南

大麦自动抢票脚本实战:双端驱动 Appium 移动端出单完整指南 【免费下载链接】ticket-purchase 大麦自动抢票,支持人员、城市、日期场次、价格选择 项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase 开源项目 ticket-purchase …

📅 2026/10/31 10:58:04
MORE NEWS

更多资讯

📰

汇编调试陷阱:CX寄存器高位残留导致LOOP异常

简介:本资源是北京交通大学《汇编与接口》课程配套的Debug调试实验教学材料,面向计算机专业本科生及汇编语言初学者,聚焦底层程序调试能力培养。实验以经典闰年判断程序leapYear.exe为载体,系统覆盖编译链接流程、Debug单步执行&a…

📰

快捷指令从入门到肌肉记忆:高频指令分层学习与训练路径

1. 从“记不住”到“肌肉记忆”:快捷指令这件事到底卡在哪 几乎每个用电脑超过三年的人,都经历过同一个尴尬瞬间:明明昨天才用过那个命令,今天坐在屏幕前,手指悬在键盘上,脑子里只剩一个模糊的影子——“好…

📰

API版本管理:核心挑战与工程实践指南

1. API版本管理的核心挑战与设计原则 在分布式系统架构中,API作为服务间通信的契约,其稳定性直接影响整个系统的可靠性。我经历过一次惨痛的线上事故:因为某个微服务API的响应字段调整未做好版本隔离,导致下游十几个服务同时报错。…

📰

黄仁勋CES 2026演讲:算力即服务与AI未来趋势

1. 黄仁勋CES 2026演讲核心观点解析 作为NVIDIA创始人兼CEO的黄仁勋,在CES 2026上的演讲再次成为科技界的焦点事件。这次演讲延续了他一贯的黑色皮衣风格,但内容却带来了更多突破性的技术展望。我全程跟踪了这场演讲,并整理了其中最值得关注的…

📰

Go语言interface{}原理与空值处理实战

1. Go语言interface{}的本质与空值陷阱 1.1 空接口的底层实现原理 Go语言的interface{}本质上由两个指针组成:一个指向类型信息的指针(_type),另一个指向实际数据的指针(data)。当我们将任何值赋值给inter…

📰

ET2026打版软件增强版功能解析与应用指南

1. ET2026打版软件增强插件版概述 ET2026打版软件是服装设计行业广泛使用的专业工具,其增强插件版在原版基础上进行了功能扩展和性能优化。这款软件主要面向高级版师群体,提供了更高效的打版、排料和样衣设计功能。 作为一款专业级服装设计软件&#xf…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬