8051单片机I/O端口结构与原理

本文详细介绍了8051单片机的P1、P2、P3、P0四个端口的内部结构、工作原理及其在作为输出口、输入口、地址总线和第二功能时的不同特性。每个端口的每一位都有独特的电路设计,以支持不同的功能需求,如P0端口的漏级开路输出和P2、P3端口的第二功能。此外,还探讨了在使用这些端口时如何避免误读和确保正确数据传输的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

8051单片机I/O端口结构与原理

1. P1端口

在这里插入图片描述

图1.1 P1.X的内部结构示意图

  P1口是一个8位双向并行I/O口,每位的内部结构如图1.1所示,P1口由8组这样的结构组成。

1.1 P1口作为输出口

  当CPU执行写端口指令时,在指令执行期间,“写锁存器”脉冲信号出现,数据经内部总线送入锁存器。
  向P1.X写“0”时(例如P1.0 = 0)时,数据“0”经内部总线送入锁存器,锁存器的反相输出端 Q ‾ \overline{\text{Q}} Q为“1”,场效应管VT导通,引脚与GND连接,引脚向外部电路输出低电平,即“0”,如图1.2所示。
在这里插入图片描述

图1.2 向P1.X写“0”

  向P1.X写“1”时(例如P1.0 = 1)时, 数据“1”经内部总线送入锁存器,锁存器的反相输出端 Q ‾ \overline{\text{Q}} Q为“0”,场效应管VT截止,引脚与GND断开连接,引脚利用内部上拉电阻向外部电路输出高电平,即“1”,如图1.3所示。

在这里插入图片描述

图1.3向P1.X 写“1”

1.2 P1口作为输入口

  当CPU执行读端口指令时(例如a = P1.0),内部硬件自动使“读引脚”信号有效,输入缓冲器2导通,引脚上的数据经输入缓冲器2送入内部总线,此为读引脚,如图1.4所示。在读引脚之前,需先向P1.X写“1”,使锁存器反相输出端 Q ‾ \overline{\text{Q}} Q为0,场效应管VT截止,断开引脚与GND的连接,否则读到的引脚状态都为低电平,即“0”,从而引起误读。如果引脚没有连接外部电路(即悬空),由于引脚连接内部上拉电阻,此时读到的引脚状态为高电平,即“1”。
在这里插入图片描述

图1.4 读P1.X引脚

  当CPU执行“读-修改-写”端口指令时(即将读到的值进行修改后再写回,例如 P1.0 = ~ P1.0),在执行其中的读操作期间,内部硬件自动使“读锁存器”信号有效,输入缓冲器1导通,锁存器输出端Q上的数据经输入缓冲器1送入内部总线,此为读锁存器,如图1.5所示。

在这里插入图片描述

图1.5 读P1.X锁存器

  读引脚还是读锁存器,CPU会根据具体执行的指令自行进行判断。
  

2. P2端口

在这里插入图片描述

图2.1 P2.X的内部结构示意图

  P2口是一个8位双向并行I/O口,每位的内部结构如图2.1所示,P2口由8组这样的结构组成。P2口有两种用途:通用I/O口、地址总线。P2口作为通用I/0口使用时,硬件自动使“控制”线为“0”,使多路开关MUX拨向锁存器的输出端Q。

2.1 P2口作为输出口

  当CPU执行写端口指令时,在指令执行期间,“写锁存器”脉冲信号出现,数据经内部总线送入锁存器。
  向P2.X写“0”时(例如P2.0 = 0),数据“0”经内部总线送入锁存器,锁存器的输出端Q为“0”,经非门后输出为“1”,场效应管VT导通,引脚与GND连接,引脚向外部电路输出低电平,即“0”,如图2.2所示。
在这里插入图片描述

图2.2 向P2.X写“0”

  向P2.X写“1”时(例如P2.0 = 1),数据“1”经内部总线送入锁存器,锁存器的输出端Q为“1”,经非门后输出为“0”,场效应管VT截止,断开引脚与GND的连接,引脚利用内部上拉电阻向外部电路输出高电平,即“1”,如图2.3所示。
在这里插入图片描述

图2.3 向P2.X写“1”

2.2 P2口作为输入口

  P2口作为输入口使用时工作方式与P1口类似。

2.3 P2口作为地址总线

  单片机芯片外接存储器时,P2口引脚与存储器相连。P2口作为地址总线,在CPU访问外部存储器时用于输出高8位地址信息。
  CPU执行访问外部存储器的指令时,内部硬件自动使“控制”线为“1”,使多路开关MUX拨向地址线,如图2.4所示。当“地址”线输出“0”时,引脚输出“0”;当“地址”线输出“1”时,引脚输出“1”。
在这里插入图片描述

图2.4 P2口作为地址总线

3. P3端口

在这里插入图片描述

图3.1 P3.X的内部结构示意图

  P3口是一个8位双向并行I/O口,每位的内部结构如图3.1所示,输入缓冲器3一直处于导通状态,P3口由8组这样的结构组成。P3口有两种用途:通用I/O口、第二功能。

3.1 P3口作为通用I/0口

  P3口作为通用I/0口使用时,硬件自动使“第二功能输出”为“1”,与非门的输出状态完全由锁存器输出端Q的状态决定,Q为“0”时,与非门输出为“1”,Q为“1”时,与非门输出为“0”。P3口作为通用I/0口使用时工作方式与P1口类似。

3.2 P3口作为第二功能

  P3口的每位都有对应的第二功能,如表3.1所示,有些位作为第二功能输出,比如P3.1作为串行输出TXD,有些位作为第二功能输入,比如P3.0作为串行输入RXD。

表3.1 P3口的第二功能

在这里插入图片描述
(1)作为第二功能输出
  P3.X作为第二功能输出使用时,需先向其写“1”,使锁存器的输出端Q为“1”,这样与非门的输出状态完全由“第二功能输出”的状态决定,“第二功能输出”为“0”时,与非门输出为“1”,“第二功能输出”为“1”时,与非门输出为“0”。
  例如:P3.1作为第二功能TXD,当TXD输出“0”时,与非门输出“1”,使场效应管VT导通,引脚与GND连接,引脚向外部电路输出低电平,即“0”;当TXD输出“1”时,与非门输出“0”,场效应管VT截止,引脚与GND断开连接,引脚利用内部上拉电阻向外部电路输出高电平,即“1”,如图3.2所示。
在这里插入图片描述

图3.2 P3.1的第二功能TXD

(2)作为第二功能输入
  P3.X作为第二功能输入使用时,需先向其写“1”,使锁存器的输出端Q为“1”,与非门输出为“0”,场
效应管VT截止,断开引脚与GND的连接,否则“第二功能输入”都为“0”。
  例如:P3.0作为第二功能RXD,外部电路通过引脚输入“0”时,RXD为“0”;外部电路通过引脚输入“1时,RXD为“1”,如图3.3所示。
在这里插入图片描述

图3.3 P3.0的第二功能RXD

  

4. P0端口

在这里插入图片描述

图4.1 P0.X的内部结构示意图

  P0口是一个8位双向并行I/O口,每位的结构如图4.1所示,即P0口由8组这样的结构组成。P0口有两种用途:通用I/O口;地址/数据总线。P0口作为通用I/0口使用时,硬件自动使“控制”线为“0”,使多路开关MUX拨向锁存器的反相输出端 Q ‾ \overline{\text{Q}} Q,同时与门被锁定输出“0”,场效应管VT0截止。

4.1 P0口作为输出口

  P0口作为输出口时,属于漏级开路输出,引脚只能输出低电平或高阻状态。当VT1导通时,引脚与GND连接,引脚输出低电平;当VT1截止时,引脚与GND断开连接,处于高阻状态,因此P0口要输出高电平,需要在外部电路加上拉电阻。
  当CPU执行写指令时,在指令执行期间,“写锁存器”脉冲信号出现,数据经内部总线送入锁存器。向P0.X写 “0”时(例如P0.0 = 0),数据“0”经内部总线送入锁存器,锁存器的反相输出端 Q ‾ \overline{\text{Q}} Q为“1”,场效应管VT1导通,引脚与GND连接,引脚向外部电路输出低电平,即“0”,如图4.2所示。
在这里插入图片描述

图4.2 向P0.X写“0”

  向P0.X写 “1”时(例如P0.0 = 1),数据“1”经内部总线送入锁存器,锁存器的反相输出端 Q ‾ \overline{\text{Q}} Q为“0”,场效应管VT1截止,引脚与GND断开连接,由于外部电路加了上拉电阻,引脚利用外部上拉电阻输出高电平,即“1”,如图4.3所示。
在这里插入图片描述
图4.3 向P0.X写“1”

4.2 P0口作为输入口

  当CPU执行读端口指令时(例如a = P0.0),内部硬件自动使“读引脚”信号有效,输入缓冲器2导通,引脚上的数据经输入缓冲器2送入内部总线,此为读引脚,如图4.4所示。在读引脚之前,需先写“1”,使锁存器反相输出端 Q ‾ \overline{\text{Q}} Q为0,场效应管VT截止,断开引脚与GND的连接,否则读到的引脚状态都为低电平,即“0”,从而引起误读。

在这里插入图片描述

图4.4 读P0.X引脚

  当CPU执行“读-修改-写”端口指令时(即将读到的值进行修改后再写回,例如 P0.0 = ~ P0.0),在执行其中的读操作期间,内部硬件自动使“读锁存器”信号有效,输入缓冲器1导通,锁存器输出端Q上的数据经输入缓冲器1送入内部总线,此为读锁存器,如图4.5所示。
在这里插入图片描述

图4.5读P0.X锁存器

4.2 P0口作为地址/数据总线

  单片机芯片外接存储器时,将P0口引脚与存储器连接。P0口作为地址/数据总线,在CPU访问外部存储器时用于输出数据信息以及低8位地址信息。
  CPU执行访问外部存储器的指令时,内部硬件自动使“控制”线为“1”,多路开关MUX拨向非门输出端。上下两个场效应管VT0、VT1处于反向,构成了推拉式的输出电路,其负载能力大大增强。
  当“地址/数据”输出“0”时,与门输出“0”,场效应管VT0截止,非门输出“1”,场效应管VT1导通,引脚与GND连接,引脚输出低电平,即“0”,如图4.6所示。
在这里插入图片描述

图4.6 “地址/数据”输出“0”

  当“地址/数据”输出“1”时,与门输出“1”,场效应管VT0导通,非门输出“0”,场效应管VT1截止,引脚与GND断开连接,引脚输出高电平,即“1”,如图4.7所示。
在这里插入图片描述

图1.6 “地址/数据”输出“1”

  CPU写外部存储器时,P0口先输出低8位地址信息(高8位地址信息由P2口输出),再输出数据信息。CPU读外部存储器时,P0口输出低8位地址信息后(高8位地址信息由P2口输出),P0口作为输入口使用,从引脚处读取外部储存器输出的数据信息。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值