汇编MCS-51IO口内部结构

上了课感觉也有必要加深理论知识。所以我想从数电的角度去分析几种IO口模式。
通过对51的学习再映射到对其他芯片的认识,加深自己对IO口配置的理解。

MCS-51IO口

1.P0口
①上电后所有端口默认输出高电平。
②P0口做普通I/O口时,必须外接上拉电阻。
③51的所有IO口都是准双向IO口。
④读操作时,先向锁存器写1,截断V2。

在这里插入图片描述

P0端口由锁存器、输入缓冲器、切换开关、一个与非门、一个与门及场效应管驱动电路构成。
有一定的数电基础可以分析得到:当Vgs大于一定值,场效应管导通。
先分析内部结构:
1.输入缓冲器:
在P0口中,有两个三态的缓冲器。
三态门有三个状态,即在其的输出端可以是高电平、低电平,同时还有一种就是高阻状态(或称为禁止状态)。
读取D锁存器输出端Q的数据,那就得使读锁存器的这个缓冲器的三态控制端(上图中标号为‘读锁存器’端)有效。下面一个是读引脚的缓冲器,要读取P0.X引脚上的数据,也要使标号为‘读引脚’的这个三态缓冲器的控制端有效,引脚上的数据才会传输到我们单片机的内部数据总线上。
2.D锁存器:
来一个CP信号,跟随D信号。数电学过,就不细讲了。
3.多路开关:
当内部的存储器够用(也就是不需要外扩展存储器时,这里讲的存储器包括数据存储器及程序存储器)时,P0口可以作为通用的输入输出端口(即I/O)使用,对于8031(内部没有ROM)的单片机或者编写的程序超过了单片机内部的存储器容量,需要外扩存储器时,P0口就作为‘地址/数据’总线使用。那么这个多路选择开关就是用于选择是做为普通I/O口使用还是作为‘数据/地址’总线使用的选择开关了。当多路开关与下面接通时,P0口是作为普通的I/O口使用的,当多路开关是与上面接通时,P0口是作为‘地址/数据’总线使用的。
4.输出驱动部份:
P0口的输出是由两个MOS管组成的推拉式结构,也就是说,这两个MOS管一次只能导通一个,当V1导通时,V2就截止,当V2导通时,V1截止。

P0口功能:
1.通用IO口总线

在这里插入图片描述
P0口用作I/O口线,其由数据总线向引脚输出(即输出状态Output)的工作过程:
当写锁存器信号CP 有效,数据总线的信号→锁存器的输入端D→锁存器的反向输出Q非端→多路开关→V2管的栅极→V2的漏极到输出端P0.X。在这里插入图片描述
在这里插入图片描述
当多路开关的控制信号为低电平0时,与门输出为低电平,V1管是截止的,所以作为输出口时,P0是漏极开路输出。(漏极D)
当D给1的时候,Q非为0,所以V2不会被导通,若外加一个上拉电阻,则可以让上拉电阻(较小)与下端的V2电阻(截断电阻值无穷)进行分压,相当于VCC全部加上到了P0.X上,实现输出1。(类似于OC门,当驱动上接电流负载时,需要外接上拉电阻。)
当D给0的时候,Q非为1,所以V2被导通,输出管脚接地。(VCC与GND逻辑线与,最后还是输出0)

P0口用作I/O口线,其由数据引脚向总线输入(即输出状态Input)的工作过程:
1、读引脚
读芯片引脚上的数据,读引脚数时,读引脚缓冲器打开(即三态缓冲器的控制端要有效),通过内部数据总线输入,请看下图(红色简头)。
在这里插入图片描述
2.读锁存器
通过打开读锁存器三态缓冲器读取锁存器输出端Q的状态,请看下图(红色箭头):
在这里插入图片描述
在输入状态下,从锁存器和从引脚上读来的信号一般是一致的,但也有例外。
例如,当从内部总线输出低电平后,锁存器Q=0,Q非=1,场效应管T2开通,端口线呈低电平状态。此时无论端口线上外接的信号是低电乎还是高电平,从引脚读入单片机的信号都是低电平,因而不能正确地读入端口引脚上的信号。
又如,当从内部总线输出高电平后,锁存器Q=1,Q非=0,场效应管T2截止。如外接引脚信号为低电平,从引脚上读入的信号就与从锁存器读入的信号不同。
所以,8051单片机在对端口P0一P3的输入操作上,有如下约定:为了能够正确的由引脚输入高电平,先向端口锁存器写1,让两个场效应管均截止,引脚处于悬浮状态,从而获得高阻抗输入。否则会因为之前写入的0使V2处于导通阶段,始终钳在低电平。

2.地址/数据分时复用总线

在访问外部存储器时P0口作为地址/数据复用口使用。

这时多路开关‘控制’信号为‘1’,‘与门’解锁,‘与门’输出信号电平由“地址/数据”线信号决定;多路开关与反相器的输出端相连,地址信号经“地址/数据”线→反相器→V2场效应管栅极→V2漏极输出。
例如:控制信号为1,地址信号为“0”时,与门输出低电平,V1管截止;反相器输出高电平,V2管导通,输出引脚的地址信号为低电平。请看下图(兰色字体为电平):
在这里插入图片描述
反之,控制信号为“1”、地址信号为“1”,“与门”输出为高电平,V1管导通;反相器输出低电平,V2管截止,输出引脚的地址信号为高电平。请看下图(兰色字体为电平):
在这里插入图片描述
当P0作为地址/数据总线使用时,在读指令码或输入数据前,CPU自动向P0口锁存器写入0FFH,破坏了P0口原来的状态。因此,不能再作为通用的I/O端口。

3.负载能力

输出高电平(拉电流,引脚提供负载电流)
输出低电平(灌入电流,引脚吸收负载电流)
灌入电流>拉电流,以89C52为例,差不多灌入电流就是10mA左右。

其他的P2,P3,P1口都是集成了上拉电阻的,所以说不需要外接。


、在STM32中选用怎样选择I/O模式?

浮空输入_IN_FLOATING ——浮空输入,可以做KEY识别,RX1
带上拉输入_IPU——IO内部上拉电阻输入
带下拉输入_IPD—— IO内部下拉电阻输入
模拟输入_AIN ——应用ADC模拟输入,或者低功耗下省电
开漏输出_OUT_OD ——IO输出0接GND,IO输出1,悬空,需要外接上拉电阻,才能实现输出高电平。当输出为1时,IO口的状态由上拉电阻拉高电平,但由于是开漏输出模式,这样IO口也就可以由外部电路改变为低电平或不变。可以读IO输入电平变化,实现C51的IO双向功能
推挽输出_OUT_PP ——IO输出0-接GND, IO输出1 -接VCC,读输入值是未知的
复用功能的推挽输出_AF_PP ——片内外设功能(I2C的SCL、SDA)
复用功能的开漏输出_AF_OD——片内外设功能(TX1、MOSI、MISO.SCK.SS)
附上大佬32的IO口总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值