新浪博客

51单片机的准双向口

2019-06-10 09:58阅读:
51 单片机有四个八位的“准双向口”P0~P3,其中 P1、P2、P3 每个引脚的内部结构如下图所示。
51单片机的准双向口

在每个 IO 引脚的内部,都有三个 P 沟道场效应管(PMOS EFT),即图中的 P1、P2、P3。(注意:这里的 P1P2P3,并不是并行 IO 接口 P1P2P3。)
它们都是反相的接法,即在栅极输入低电平,源-漏极之间就会导通,IO 引脚就会输出高电平。
它们所起的作用,就是作为“内部的上拉电阻”,即在 IO 引脚输出高电平时,向引脚外部输出电流。只是这些“内部上拉电阻”所等效的阻值很大,所以向外输出的电流很微弱。


在 IO 引脚内部,还有一个 N 沟道场效应管(NMOS EFT),即 N2。
它也是反相的接法,当在栅极输入高电平时,源-漏极之间将导通,
IO引脚就会输出低电平。
它导通时,源-漏极之间导通的电阻较小,可以允许 IO 引脚灌入较强的电流。
---------------------
在数据输出锁存器为 0 时,P1P2P3 皆截止,只有 N2 导通,IO 引脚状态即为低电平。
此时,如果从 IO 引脚外部,接入一个高电平,就会向 IO 口灌入电流。如果电流过大,就有可能烧坏 N2。
---------------------
在数据输出锁存器由 0 变到 1 的瞬间,Q非 立即为 0,送到或门的下边输入端;而或门上输入端所输入的,仍然保持着原来的 0,所以,此刻或门输出为 0,令 P1 导通。
与此同时,Q非的 0,还令 P2 导通、N2 截止。
因此,在输出 0 至 1 的跳变期间,P1、P2 都会导通 2 个震荡周期(1/6us @ 12MHz)。
由于 P1 导通时所等效的电阻很小,故可使 IO 引脚在瞬间输出较强的电流。
此举的目的是令 IO 引脚的状态,能够迅速上升到高电平。
---------------------
经过 2 个震荡周期之后,输出锁存器的 1 才送到或门上端,或门输出 1,令 P1 截止。
所以,在 2 个震荡周期之后,仅有 P2 导通,令 IO 引脚输出高电平。


此时,如果在 IO 引脚的外部悬空,那么,该引脚的高电平,经过一个反相器,使 P3 也导通,则使引脚状态能稳定的保持在高电平。


但是,如果在 IO 引脚之外,连接了其它装置(如开关、AD 转换器、传感器等等),那么,该引脚的状态,就取决于外部装置的状态。这就是 IO 接口的输入方式。


如果外部装置送来高电平,则 P2P3 仍然导通,IO 引脚仍然稳定在高电平。
如果外部装置送来低电平,则经过反相器,会使 P3 截止,只有 P2 仍然通过 IO 向外部装置输出微弱电流。外部装置如能承受住这电流,该 IO 引脚的状态,就是低电平。
---------------------
在输出锁存器由 1 变到 0 时,N2 将立即导通,P2P3 立即截止,延时部分无作用。
=====================


总结:


当数据锁存器为 0 时,N2 导通,P1P2P3 都截止,所以,IO 引脚的状态为低电平。
当数据锁存器为 1 时,N2 截止,P1P2P3 分别导通,所以,IO 引脚的状态为高电平。


P1P2P3 导通时,都是令 IO 引脚输出高电平。所以,这三个 PMOS 管所起的作用,也就是业余人士所常说的“内部上拉电阻”。


P1 可以称为“快速上拉”、P2 可称为“弱上拉”、P3 可称为“开路上拉”。


当外部装置输入高电平或开路时,“弱上拉”和“开路上拉”同时起作用,使 IO 引脚状态稳定的保持为高电平。


当外部装置输入低电平时,只有“弱上拉”起作用,IO 引脚的状态就可以很容易地被外部装置拉为低电平。这就是 IO 引脚的输入方式。


=====================


由于各个场效应管的参数不同,所以,输出不同电平的驱动能力,也是不同的。
当 N2 导通,IO 引脚输出低电平的驱动能力较强,故不允许在该引脚外部再输入高电平。
而当 P1P2P3 导通时,三个管输出高电平的能力都很弱,所以就可以在该引脚输入低电平。


这就是说:只能在 IO 引脚输出 1 的时候,才允许输入信息。正是因为这个特点,51 单片机的 IO 口,才被称为“准双向口”。


=====================


51 单片机的 P0 口,内部结构,虽然与上图有些不同,但是,P0 也是“准双向口”。
故此,在输入信息之前,也必须先输出 1。


网上有篇滥文,胡说可以不用先输出 1,这是错误的。
可见链接:
https://zhidao.baidu.com/question/2052001422785793947
https://wenku.baidu.com/view/5f9099c5aa00b52acfc7ca64.html


呵呵
=====================


由于在 IO 接口中,使用了数据锁存器,保存了曾经输出的数据;又因为在输出 1 时,外部装置可以送来 0,所以,CPU 在读 IO 接口时,有两种操作:读锁存器读引脚


在 CPU 执行不同的指令时,它会自动使用恰当的读出操作方式,不用编程人多虑。




我的更多文章

下载客户端阅读体验更佳

APP专享