8051单片机I/O口工作原理

 2024-03-20 05:08:21  阅读 0

1、P0口结构及工作原理

P0口8位之一的结构图如下图所示:

从上图可以看出,P0口由锁存器、输入缓冲器、开关、与非门、与门和场效应晶体管驱动电路组成。

接下来我们先来分析一下组成P0口的各个部分:

我们先看输入缓冲器:在P0口,有两个三态缓冲器,其输出端可以是高电平,也可以是低电平,同时还有一个高阻状态(或禁用状态)。 上面一层是读锁存器的缓冲区,下面一层是读引脚的缓冲区。 P0 上的数据。 在内部数据总线上。

D锁存器:AD触发器用于在51单片机的32条I/O线中形成锁存器。 D端为数据输入端,CP为控制端(即时序控制信号输入端),Q为输出端,Q为反向输出端。

多路开关:在51单片机中,当不需要外部扩展存储器时,P0口可作为通用输入输出口(即I/O)。 对于8031(内部无ROM)单片机或者编写的程序超出了单片机内部的容量。 存储器容量为,当需要外部存储器扩展时,P0端口用作“地址/数据”总线。 该多路选择开关用于选择是否将其用作普通 I/O 端口或用作“数据/地址”总线。 当多路开关接在底部时,P0口作为普通I/O口使用。 当多路开关连接到顶部时,P0端口用作“地址/数据”总线。

输出驱动部分:P0口输出为两颗MOS管组成的推挽结构。 也就是说这两个MOS管一次只能导通一个。 当V1导通时,V2截止。 当V2导通时,V1导通时,V1截止。

当P0口作为I/O口时,多路开关的控制信号为0(低电平),V1管截止,多路开关接Q非端锁存器(即P0口作为I/O口)。 使用O口线)。 用作地址/数据线时,多路开关的控制信号为1,V1管由地址/数据线决定,多路开关与地址/数据线相连。

输出过程:

1、I/O输出工作过程:写锁存信号CP有效时,数据总线信号→锁存器输入端D→锁存器反向输出Q非端→多路开关→ V2管极的栅极→V2的漏极至输出端P0.X。 此时多路开关的控制信号为低电平0,V1管截止,因此作为输出口时,P0为开漏输出,与OC门类似。 当驱动器连接到电流负载时,需要外部上拉。 反抗。

下图是内部数据总线向P0口输出数据的流程图(红色箭头)。

2、地址输出过程

当控制信号为1、地址信号为“0”时,与门输出低电平,V1管截止; 反相器输出高电平,V2管导通,输出脚地址信号为低电平。

反之,控制信号为“1”,地址信号为“1”,“与门”输出高电平,V1管导通; 反相器输出低电平,V2管截止,输出脚地址信号为高电平。 请看下图(蓝色字体表示级别):

可见,输出“地址/数据”信息时,V1、V2管交替导通,带负载能力很强。 它们可以直接连接到外设存储器,无需添加总线驱动程序。

3.作为数据总线的输出过程

如果指令是输出数据,如MOVX@DPTR,A(将累加器的内容通过P0口数据总线传送到外部RAM),则多路开关“控制”信号为‘1’,且“与门”解锁,与输出地址信号的流程类似,数据从“地址/数据”线→反相器​​→V2场效应管栅极→V2漏极输出。

输入流程:

1、I/O读引脚工作过程:

当读取芯片引脚上的数据时,读引脚缓冲区被打开并通过内部数据总线输入,请参见下图(红色标题)。

2、I/O读锁存器的工作过程:

通过打开读锁存三态缓冲器来读取锁存输出Q的状态,见下图(红色箭头):

3、寻址/数据时读取指令代码及数据处理

用作数据总线。 访问外部程序存储器时,P0口输出低8位地址信息后,将成为读取指令代码(输入)的数据总线。 取指令期间,“控制”信号为“0”,V1管截止,多路开关也转向锁存器反相输出端Q; CPU自动置0FFH(即向D锁存器写入高电平‘1’)写入P0口锁存器,关闭V2管。 在读引脚信号的控制下,通过读引脚三态门电路将指令代码读取到内部总线。 这个过程与I/O读脚过程是一样的。

在输入状态下,从锁存器读取的信号和从引脚读取的信号一般是一致的,但也有例外。 例如,当内部总线输出低电平时,锁存器Q=0,QN=1,场效应晶体管T2导通,端口线处于低电平状态。 此时,无论端口线上的外部信号是低电平还是高电平,从该引脚读入单片机的信号始终为低电平,因此无法正确读取该端口引脚上的信号。 又例如,当内部总线输出高电平时,锁存器Q=1,Q=0,场效应管T2截止。 如果外部引脚信号为低电平,则从该引脚读取的信号与从锁存器读取的信号不同。 为此,8031单片机对P0~P3端口的输入操作有如下约定: 为此,8051单片机对P0~P3端口的输入操作有如下约定: 属于到读-修改-写模式,从锁存器读取信号,其他指令从端口引脚线读取信号。 读-修改-写指令的特点是信号从端口输入(读),在单片机中操作(修改),然后输出(写入)到端口。 这样做的原因是读-修改-写指令需要获取端口原来的输出状态,修改后输出。 读取锁存器而不是读取引脚可以避免由于外部电路而错误地读取原始端口状态。 。 当P0用作地址/数据总线时,CPU在读取指令代码或输入数据之前,会自动向P0端口锁存器写入0FFH,破坏了P0端口的原始状态。 因此,它不能再用作通用I/O端口。 设计系统时必须注意程序中不能再含有使用P0口作为操作数的指令(包括源操作数和目的操作数)。

2、P1口结构及工作原理

从图中可以看出,P1口与P0口的主要区别在于P1口使用内部上拉电阻R来代替P0口的场效应管T1,输出信息仅来自来自内部总线。 内部总线输出的数据经锁存器和场效应晶体管反相后锁存在端口线上。 因此,P1端口是一个带有输出锁存器的静态端口。 为了正确地从引脚读取外部信息,必须首先关闭场效应晶体管,以便通过外部输入信息来确定引脚的状态。 因此,在读取引脚之前必须将 l 写入端口。 具有这种工作特性的输入/输出端口称为准双向I/O端口。 8051单片机的P1、P2、P3都是准双向口。 由于P0端口具有三态输出功能,端口线在输入前就已经处于高阻状态,因此不需要先写l再进行读操作。 单片机复位后,各端口已自动写入1,此时可直接进行输入操作。 如果在端口申请过程中已经向P1-P3端口线输出0,当想要再次输入时,必须先写1,然后读取该引脚才能得到正确的信息。 另外,根据输入命令的不同,P1端口还具有读锁存器和读引脚。

3、P2口结构及工作原理:

从图中可以看出,P2口片内既有上拉电阻,也有开关MUX,因此P2口同时具有P0口和P1口的功能特点。 这主要体现在输出功能上。 当开关向下拨时,内部总线输出的一位数据经过反相器和场效应晶体管反相后输出到端口引脚线上; 当多路开关向上拨时,输出的一位地址信号也经过反相器和场效应晶体管反相,然后输出到端口引脚线上。

对于8031单片机来说,必须连接外部程序存储器构成应用电路(或者我们的应用电路扩展外部存储器),用P2口周期性输出取指的地址(高8位地址)来自外部存储器的指令。 因此,P2口的多路开关始终处于切换状态,分时输出内部总线的数据和地址信号线的地址。 因此P2端口是一个动态I/O端口。 虽然输出数据被锁存,但它并没有稳定地出现在端口线上。 事实上,这里输出的数据往往也是一个地址,只是外部RAM的高8位地址。

从输入功能来看,P2口与P0、H口相同,有读引脚和读锁存器,P2口也是准双向口。

可见,P2口的主要特点包括:

① 无法输出静态数据;

②输出外部程序存储器的高8位地址;

②执行MOVX指令时,还输出外部RAM的高位地址,因此P2端口称为动态地址端口。

既然P2口既可以作为I/O口,也可以作为地址总线,所以我们来分析一下它的两种工作状态。

1、作为I/O口使用时的工作流程

当没有外部程序存储器或者虽然有外部数据存储器但不大于256B时,即不需要高8位地址时(此时无法通过外部数据存储器读写)数据地址寄存器DPTR),P2口可以作为I/O口使用。 此时“控制”信号为“0”,多路开关转向锁存同相输出端Q,输出信号经过内部总线→锁存同相输出端Q→反相器→ V2管栅极→V2管9漏极输出。

由于V2的漏极带有上拉电阻,可以提供一定的上拉电流,负载能力约为8个TTL与非门; 在用作输出口之前,还需要向锁存器写入“1”,使反相器输出低电平,V2管截止,即该脚悬空时为高电平,防止引脚被钳位在低电平。 读引脚有效后,输入信息通过读引脚三态门电路发送到内部数据总线。

2、用作地址总线时的工作过程

当P2口作为地址总线时,“控制”信号为‘1’,多路开关转向地址线(即向上连接),通过反相器→V2输出地址信息管闸→排水。 由于P2口输出高8位地址,与P0口不同,不需要分时使用。 因此,P2口(程序存储器上的A15~A8)上的地址信息长期保存在数据地址寄存器的高8位DPH中,不需要锁存。

4、P3口结构及工作原理

P3口是一个多功能口。 除了作为I/O端口之外,它还有第二个功能。 P3口的一位结构如下图所示。

从上图可以看出,P3端口和Pl端口的结构类似。 唯一的区别是P3端口的每条端口线都有两个功能选项。 当处于第一功能时,第二输出功能线为1。此时,内部总线信号通过锁存器和FET输入/输出。 其功能与P1口相同,也是静态准双向I/O口。 当处于第二功能时,锁存器输出1,并通过第二输出功能线输出特定的包含信号。 输入端可以通过缓冲器读入引脚信号,也可以通过替代输入功能读入芯片。 内特定的第二功能信号。 由于输出信号被锁存并具有双重功能,因此P3端口是静态双功能端口。

P3端子各线处于第二功能的条件为:

1、串行I/O处于运行状态(RXD、TXD);

2、打开本地中断(INT0、INT1);

3、定时器/计数器处于外部计数状态(T0、T1)

4.执行读写外部RAM的指令(RD、WR)

在应用中,如果每个P3口的第二功能没有设置(WR和RD信号的产生不需要设置),则P3口线将自动处于第一功能状态,即P3口线的工作状态。静态 I/O 端口。 更多情况下,根据应用的需要,将多条端口线设置为第二功能,而另外几条端口线则处于第一功能操作状态。 这种情况下,对P3口进行字节操作是不合适的,必须采用位操作。

4、驾驶能力

P0口可驱动8个LSTTL负载。 如果需要增加负载能力,可以在P0总线上添加总线驱动器。 端口 P1、P2 和 P3 各可驱动 4 个 LSTTL 负载。 由于P0-P3端口已映射到特殊功能寄存器中的P0-P3端口寄存器,因此对这些端口寄存器的读/写实现了相应端口信息的输入/输出。 例如:

MOV A、P1; 将Pl端口线上的信息输入到A

MoV P1,A; 通过P1口输出A的内容

MOV P3,#0FFH; 使P3口线各位置l

标签: 端口 输出 总线

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码