51单片机6(P0P1P2P3结构框架图)

news2024/9/21 16:32:40

一、GPIO结构框架图与工作原理

1、接下来我们介绍一下这个GPIO结构框图和工作原理,我们使用51单片机的GPIO分为了P0,P1,P2,P3这四组端口,下面我们就分别来介绍这四组端口它的一个内部结构,只有了解了内部的结构,对于我们单片机的IO口的一些使用会非常清楚。

2、P0端口

(1)那我们列举的是这个P0端口的一个内部结构框图,从这张图我们可以看到,它是有锁存器,还有输入缓冲器,以及切换开关。一个非门,一个与非门,以及场效应管,它这些组成的驱动电路构成。这个图当中的最左边,最右边是标记的是这个引脚,这个引脚是我们肉眼可以看到的芯片的引脚,那么这个引脚,是左边这一部分是芯片封装内部的一些东西,那么这里写了P零点X引脚,这个X代表的是0~7,因为我们P0端口有8个,它这里是P000~P007,所以你了解了一个引脚,那对于其他引脚也是一样的。

(2)下面我们看一下这些模块资源的介绍,首先我们看一下,我们的输入缓冲器,输入缓冲器在P0口当中呢,有两个三态的,一个输缓冲器。在学数字电路的时候,我们已经知道,三态门呢,他有三个状态,也就是输出端口可以是高电平,也可以是低电平,同时还有一种是高阻态,这是三态门的一个输出的一个特点。

(3)那么大家在这张图当中,我们上面有一个输入缓冲器,也就是读锁存器,读取D锁存器输出端的Q,读取Q的时候,就得使用这个读锁存器,这个输入缓冲器的三态控制端上图的这个读锁存器有效,只有这个有效,我们的Q才能到达我们的一个读的这一块;下面是我们的读引脚的一个输入缓冲器,要读取P0、X的这个引脚上的数据,也要使能这个读引脚这个三态缓冲器的一个控制端有效,才能直接读引脚,那么这是我们的一个输入缓冲器。

(4)再看一下我们的这个D储存器,构成一个储存器,通常要用一个时序电路,那么时序的单元电路在学数字电路是呢,我们已经知道一个触发器可以保存一位的二进制数,也就是具有保持功能,那么在51单片机的32根IO口线当中呢,都是用了一个D触发器来构成的一个锁存器,那么大家在这张图当中呢,可以看到D储存器D端是它的一个数据输入端,那么CP也就是CLK是它的一个控制端,也就是时序控制信号的一个输入端,那么Q,Q是我们第一锁存器的一个输出端,QC呢,是这个反向输出端,也就是跟Q呢是输出相反的一个状态。那么对于D触发器来讲,当D这个输入端有一个输入信号的时候。那么如果这个时候这个控制端CLK没有信号,也就是说,这个CLK没有来一个时序,那么这时候输入端的D数据是无法传输到这个Q输出端,或者是反向输出端。如果时序控制端COK来了一个脉冲时序,那么这时候这个D的一个输入的一个数据,就会传输到这个Q的一个输出,或者是QC得一个输出,那么数据传输过来之后,当这个CLK时序控制段得时序信号消失了,那么这时呢,输出端还会保持上一次输入端低得一个数据,也就具有保持,相当于把之前的数据给锁存了,有这么一个锁存的功能。如果下一个时序控制脉冲CLK过来了,一个时序之后,那么这时候D的数据才会再次传输到Q,和QC也就更新掉了上一次的一个数据。这样Q和QC得状态就会发生变化了。这是我们的一个低储存器的一个介绍。

(5)下面我们来看一下,它内部结构当中的这个多路开关,那么,在51单片机当中呢,当内部的一个存储器够用的时候也就是不需要外扩,存储器,这里讲的存储器包括数据存储器和程序存储器,也就是RAM和ROM,那么P0口,它可以作为通用的输入输出端口,也就是IO口的一个使用,也就是说,我们P0口之前我们介绍单片机管脚功能的时候,我们说过P0口,他可以作为普通的IO,还可以作为一个外扩存储器的一个总线口,当我们不需要外扩的时候,通常我们也不会去外扩这个存储器,所以P0口可以当作普通的输入输出口来使用,那么对于8031,那么它的内部是没有ROM这个单片机,它需要编写程序,超过单片机内部的一个存储量,他就需要外扩这个存储器来存储你的程序,那此时P0口就可以作为地址,数据的一个总线来使用,那么这么多这个多路选择开关,在这里起到了一个选择的作用,你是用作普通的alco使用,还是用做数据地址总线来使用,这就需要通过这个多路开关来进行选择,那么大家可以看一下,当这个多路开关与下面的这一个接通的时候,那么Q,这个P0口接到下面的时候,上面不接,接到下面的P0口,他是作为普通的IO口来使用的,那么当这个输入开关,当这个多路开关切到上面的时候,这个P0口,它是作为地址数据控制线来进行使用的。

(6)接下来我们看一下这个场效应管,这是两个场效应管输出的一个驱动。从这个图当中,我们可以看到P0口的一个输出是由两个MOS管组成的一个推拉式的一个结构,也就是说这两个MOS管,一次只能导通一个,当V1导通的时候,V2是截止的,当V2导通的时候,V1是截止的,所以它构成了一推一拉,这么一个推拉的结构,这是它MOS管的一个输出驱动。

(7)那么我们再来看一下与非门还有一个非门,那么在学习数字电路的时候,这个与非门和非门其实也很好理解,如果没有数字电路基础的朋友,也可以百度查找一下这个与非门和非门以及前面讲的一些低触发器的一些相关知识。

(8)接下来,我们来看一下P0口作为IO口输出使用的一个工作原理,那么我们在这张图后面就有P0口作为输出的一个使用的一个图。

我们可以从这个流线图当中去清晰的看到,作为普通IO口的使用的时候,这个多路开关它是切到下面的,也就是与我们的低触发器进行连接,通过我们的内部总线,从写存储器,经过存储器,然后呢,经过这个开关来通过这个MOS管来驱动,从而呢输出。那么当我们对这个协同人信号就是CLK有效的时候,那么我们的数据总线呢,传入到这个数据D,然后先这个CLK来一个脉冲,那么这个数据呢会经过这个D锁存程序从而传到这个Q非,也就是反向输出端,从而在经过多路开关,传到我们这个V2这个三级,那么V2的路径到达这个输出端P零点x,前面我们已经讲了,在当多路开关控制信号为这个低电平的时候,就是在前面这里控制信号。与门,它是输出一个低电平,那么V1管它是截止的,所以作为输出口时纰漏,P0是一个漏极,这里截止那相当于它的输出就直接经过这里了。那么这样一个结果就是漏极,漏极开路输出,类似于一个OC门,那当驱动上接电流负载的时候,它需要外接上拉电阻,这样他才可以输出一个高电平,所以一定要记住P0口之所以是内部的一个没有上拉,是因为它的一个这样的结构所决定的,它是一个漏极开路,当它输出的时候,上面这个V1的MOS管它是截止的,一截止的话,下面就相当于输出直接这样一个输出了,那它高电平是没法输出的,它只能输出低电平。低电平通过VR这个MOS管导通,这个GND就直接到这个管脚输出,如果是要输出高电平,他是没办法,上面没有高电平流过来,它只能依靠什么外部上拉电阻才能保证我们的一个P0管脚来输出一个高电平,这是P0的一个输出的一个流程。那么P0IO口作为输入的一个图,我们也给大家画出来的。这是流程图,我么也可以看得到。

首先,作为输入使用的时候P0有两种情况,第一种是独引脚,那么读芯片引脚上的数据呢,读引脚的时候,这个读引脚的一个输出缓冲器,它是打开的,那么通过内部的一个数据总线来输入,那么,从这张图当中的一个流线,我们可以看到这个读引脚这一块,它的一个总线在这里,这里是要连接着的。还有是读锁存器,都锁存器,它是通过打开我们读锁存器的这个三态缓存器来读取我们锁存器的Q的一个状态。

3、P1端口

(1)这是我们P1端口的一个内部结构,同样的跟我们的P0口类似,最右边呢是我们肉眼可见的一个P点里多少的一个引脚,左边这一边就是我们芯片内部的一个封装的一个结构,我们是看不到的,那么P1口结构也是最简单的,用途也是非常单一的,仅可以作为这个数据输入和输出的一个使用,也就是我们普通的I口的一个使用,它不像前面我们介绍到的P0P0,它还可以作为一个地址数据总线的一个使用,那么P1口,他仅仅只是作为这个普通的IO口的一个使用方法,所以自然它的一个内部结构也是非常简单的,其实我们前面分析了这个P0端口,它的一个结构相信在P1端口这一块大家应该非常清楚了。P1端口和P0端口的主要差别在于P1端口内部,有一个上拉电阻,代替了P0端口的一个场效应管V1,并且呢,数字信息仅来自内部总线,由内部总线的数据,经过锁存器反向之后来输出到我们的这个管脚,所以P1端口,是具有输出锁存的一个静态口。

(2)那么从这张图中呢,我们可以看到,要正确的读取这个外部信息,必须先使这个场效应管,以便由外部的输入信息,确定引脚的状态,为此呢,在做引脚读录,读录前呢,必须先对这个端口,其实在我们外部接一个散热电阻的时候,已经给你完成了,默认它就是高电平,所以写不写都无所谓。

(3)具有这种操作特点,输入和输出的端口,我们称为准双向口,那么51单片机当中的P1,P2   ,P3都是准双向口,那么P0端口呢,它输出是有三态功能的,输入前,端口线已处于高阻状态,无需先写入一,再读进行一个读操作。

(4)相比P0端口,P1端口它内部还有一个上拉电阻,这个上拉呢,是一个比较弱的一个上拉,如果说你要增强你的P1端口的一个输出能力,那你在外部还可以加上一个上拉电阻,增强我们管教的一个驱动能力,对于P1口,它是内部自带上拉,所以它既可以输出高电平,又可以输出低电平,而P0口它要输出高电平,必须外部一定要接上拉电阻。

4、P2端口

(1)P2端口内部其实也有上拉电阻,多路切换开关,所以P2端口在功能上呢,兼容了这个P0和P1的特点,那主要表现在输出功能上,当这个切换开关切向下接通的时候,它就有输出,就是我们的普通I口的一个功能,它是经过我们的内部总线,经过锁存器,它的一个Q,接到我们的这个多路开关,与我们的一个与门,从而控制我的V2的一个场效应管来驱动我们的P,这个P2端口,这是P2端口的一个引脚,那么PR端口,它也同样也是可以直接输出高电平和低电平。

(2)我们在这张图上还看到了有个地址数据,地址/数据控制信号,它是用来控制这个多路开关,因为前面说到这个P0口,它也有地址和数据的一个总线,它是低八位,而这个P2端口,它是高八位,它可以通过这两组P0和P2这两组地址和数据,总线呢,来外扩一个16位的一个RAM或者是ROM,所以我们没用到这个外扩存储器的话,这一块都不用管它,就把它当成普通的I口来使用,默认呢,我们也是使用它的一个普通I口,不需要对它进行配置,默认这个开关就是打到这个下面的,所以我们对这个P2口的一个使用,可以直接对它进行输出高和输出低,因为它内部也是有上拉电阻。

5、P3端口

(1)那我们再来看一下P3端口,它的一个存储器,它内部结构,它有一个第二功能,所以从这张图当中,我们可以看到它跟这个P1端口前面这块是类似的,这一块,然后呢,又兼容了P0端口,但是它还有一个第二功能,这个第二功能就通过这个与非门的这个控制脚来进行切换,你是使用第二功能还是使用普通的alco来控制这个与非门,那前面这一块就是普通的IO口,通过内部总线,来到达这一路,如果说是与非门,你使用都是普通的IO口,不使用它的第二功能,那直接到达这一路来进行输出。

(2)我们从这前面介绍的管脚功能描述也知道,像串口,外部中断,定时器输入就是技术计数器,t0和t1,这些都是在这个P3端口上进行一个使用,那么P3端口,它同样也有内部的一个上拉电阻,所以它既可以输出高电平,又可以输出低电平。

6、由此,我们知道除了P0端口需要一定外接上拉电阻才可以输出高电平之外,其他的P1,P2,P3都可以直接输出高或者低

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1926541.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python爬虫入门篇学习记录

免责声明 本文的爬虫知识仅用于合法和合理的数据收集,使用者需遵守相关法律法规及目标网站的爬取规则,尊重数据隐私,合理设置访问频率,不得用于非法目的或侵犯他人权益。因使用网络爬虫产生的任何法律纠纷或损失,由使用…

MySQl高级篇-事务、锁机制、MVCC

存储引擎的选择 在选择存储引擎时,应该根据应用系统的特点选择合适的存储引擎。对于复杂的应用系统,还可以根据实际情况选择多种存储引擎进行组合。 InnoDB:是Mysql的默认存储引擎,支持事务、外键。如果应用对事务的完整性有比较…

C++知识要点总结笔记

文章目录 前言一、c基础1.指针和引用指针和引用的区别 2.数据类型整型 short int long 和 long long无符号类型 3.关键字conststaticconst和static的区别define 和 typedef 的区别define 和 inline 的区别const和define的区别new 和 malloc的区别constexprvolatileextern前置与…

用Speedtest-Tracker跟踪上网速度(续)

什么是 Speedtest Tracker ? Speedtest Tracker 是一款自托管互联网性能跟踪应用程序,可针对 Ookla 的 Speedtest 服务运行速度测试检查。 之前老苏介绍的另一个 https://github.com/henrywhitaker3/Speedtest-Tracker 已被放弃。现在这个是积极维护的替代品&#…

repo sync同步出错解决

当出现下面提示时 e list of known hosts. Fetching: 100% (1167/1167), done in 44.619s info: A new version of repo is available warning: repo is not tracking a remote branch, so it will not receive updates Repo command failed: RepoUnhandledExceptionError …

element UI时间组件两种使用方式

加油&#xff0c;新时代打工&#xff01; 组件官网&#xff1a;https://element.eleme.cn/#/zh-CN/component/date-picker 先上效果图&#xff0c;如下&#xff1a; 第一种实现方式 <div class"app-container"><el-formref"submitForm":model&q…

Zabbix6.0监控Freeswitch状态

一、前提环境说明 1、最终实现Freeswitch监控指标信息&#xff1a; 2、环境需求&#xff1a; &#xff08;1&#xff09;需要使用Zabbix6.0及以上 &#xff08;2&#xff09;需要使用zabbix_agent2 二、实现步骤 1、zabbix_agent2添加监控键值 cat /etc/zabbix/conf.d/fr…

Git代码管理工具 — 3 Git基本操作指令详解

目录 1 获取本地仓库 2 基础操作指令 2.1 基础操作指令框架 2.2 git status查看修改的状态 2.3 git add添加工作区到暂存区 2.4 提交暂存区到本地仓库 2.5 git log查看提交日志 2.6 git reflog查看已经删除的记录 2.7 git reset版本回退 2.8 添加文件至忽略列表 1 获…

2.有限状态机

1. 标准三段式写法&#xff1a; 1.一段代表当前状态赋值&#xff1b; 2.一段代表下一个状态如何跳变 3.一段代表输出控制 一定要带上复位 前两段模板集合一样&#xff0c;第三段取决于具体需求 parameter IDLE_ST 4b0000&#xff1b; parameter TEST_ST 4b0001; ... re…

C++中链表的底层迭代器实现

大家都知道在C的学习中迭代器是必不可少的&#xff0c;今天我们学习的是C中的链表的底层迭代器的实现&#xff0c;首先我们应该先知道链表的底层迭代器和顺序表的底层迭代器在实现上有什么区别&#xff0c;为什么顺序表的底层迭代器更加容易实现&#xff0c;而链表的底层迭代器…

Ubuntu20.04 编译安装FFmpeg,出错分析以及解决方案

最近工程上需要对FFmpeg底层源码进行修改&#xff0c;需要重新编译&#xff0c;遇见不少坑&#xff0c;出篇教程记录一下。 文章目录 1.FFmpeg源码下载地址2.编译环境配置3.编译FFmpeg4.配置FFmpeg运行环境 1.FFmpeg源码下载地址 官方下载地址:Index of /releases (ffmpeg.or…

使用MovaXterm连接VMware的centos

一、确认局域网ip 检查虚拟机分配的网段是否一致 二、确认centos的ip 输入 ip addr 获得设备ip为192.168.153.130 三、用MovaXterm建立ssh连接 有同行可能会问&#xff0c;直接使用VMware操作centos系统不行吗&#xff1f;为什么要再多一步。 理由&#xff1a;1、测试环境c…

Zabbix6.0使用自带模板(MySQL by Zabbix agent 2)监控MySQL数据库

注意&#xff1a;Zabbix6.0使用MySQL by Zabbix agent 2 模板可直接监控MySQL数据库&#xff0c;只需要创建监控用户&#xff0c;模板宏中填写数据库账号信息即可&#xff0c;只需要3步&#xff0c;特简单&#xff01; 1、MySQL创建用户&#xff0c;用于收集数据库信息 creat…

HarmonyOS 界面开发基础篇

一、布局思路 ArkUI(方舟开发框架)是一套 构建 鸿蒙应用 界面 的框架。 构建页面的最小单位就是“组件”。 组件分类 基础组件&#xff1a;界面呈现的基础元素。 如&#xff1a;文字、图片、按钮等。容器组件&#xff1a;控制布局排布。 如&#xff1a;Row行、Column列等。…

MySQL篇:日志

前言 MySQL中常见的日志&#xff1a; 重做日志&#xff08;Redo Log&#xff09;&#xff1a; 用途&#xff1a; 保证事务的持久性&#xff0c;记录事务对数据库所做的所有修改。 内容&#xff1a; 记录事务对数据页的物理修改&#xff0c;而不是逻辑修改。 配置&#xff1a; …

一款IM即时通讯聊天系统源码,包含app和后台源码

一款IM即时通讯聊天系统源码 聊天APP 附APP&#xff0c;后端是基于spring boot开发的。 这是一款独立服务器部署的即时通讯解决方案&#xff0c;可以帮助你快速拥有一套自己的移动社交、 企业办公、多功能业务产品。可以 独立部署&#xff01;加密通道&#xff01;牢牢掌握通…

《C专家编程》杂谈

库函数调用和系统调用的区别 系统调用比函数调用要慢很多&#xff0c;因为还要切换到内核模式。

防火墙综合实验之NAT和智能选路

目录 前言&#xff1a; 一、实验题目 二、实验操作 需求一 需求二 需求三 需求四、需求五 需求六 需求七 ​编辑 需求八 需求九 需求十 需求十一 三、需求测试 前言&#xff1a; 本篇文章是延续上一篇文章&#xff0c;简单来说就是防火墙实验的完善和延续&#…

【CUDA】CUDA中缓存机制对计时的影响

笔者在阅读知乎上一个关于CUDA编程的专栏时&#xff0c;发现作者写的很多文章中都会附带计时的模块用于评估程序的运行效率&#xff0c;然而笔者发现&#xff0c;在运行这篇文章中的代码时时&#xff0c;得到的结果和作者的结果有较大差异&#xff0c;主要体现在&#xff1a;使…

《战甲神兵》开发者报告:游戏崩溃问题80%发生在Intel可超频酷睿i9处理器上——酷睿i7 K系列CPU也表现出高崩溃率

在Intel持续面临第13代和第14代CPU崩溃问题的背景下&#xff0c;近日&#xff0c;《战甲神兵》(Warframe)的开发者们于7月9日披露了游戏崩溃的统计数据&#xff0c;并描述了诊断该问题的过程。根据开发团队的说法&#xff0c;一名未进行超频且使用全新PC的员工&#xff0c;即便…