单片机IO口结构及工作原理

上传人:彩*** 文档编号:65879500 上传时间:2022-03-25 格式:DOC 页数:11 大小:467KB
返回 下载 相关 举报
单片机IO口结构及工作原理_第1页
第1页 / 共11页
单片机IO口结构及工作原理_第2页
第2页 / 共11页
单片机IO口结构及工作原理_第3页
第3页 / 共11页
点击查看更多>>
资源描述
共享知识分享快乐一、 P0 端口的结构及工作原理P0 端口 8 位中的一位结构图见下图:由上图可见, P0 端口由锁存器、输入缓冲器、切换开关、一个与非门、一个与门及场效应管驱动电路构成。下面,先分析组成P0 口的各个部分:先看输入缓冲器: 在 P0 口中,有两个三态的缓冲器,在其的输出端可以是高电平、低电平,同时还有一种就是高阻状态(或称为禁止状态),上面一个是读锁存器的缓冲器,下面一个是读引脚的缓冲器,读取 P0.X 引脚上的数据,要使这个三态缓冲器有效,引脚上的数据才会传输到内部数据总线上。D 锁存器: 在 51 单片机的 32 根 I/O 口线中都是用一个 D 触发器来构成锁存器的。 D 端是数据输入端, CP 是控制端(也就是时序控制信号输入端), Q 是输出端, Q 非是反向输出端。多路开关:在 51 单片机中,不需要外扩展存储器时, P0 口可以作为通用的输入输出端口(即 I/O )使用,对于 8031 (内部没有 ROM )的单片机或者编写的程序超过了单片机内部的存储器容量,需要外扩存储器时, P0 口就作为 地址 /数据 总线使用。这个多路选择开关就是用于选择是做为普通I/O 口使用还是作为 数据/地址 总线使用的选择开关了。 当多路开关与下面接通时, P0 口是作为普通的 I/O口使用的,当多路开关是与上面接通时,P0 口是作为 地址 /数据 总线使用的。输出驱动部份: P0 口的输出是由两个MOS 管组成的推拉式结构,也就是说,这两个 MOS 管一次只能导通一个,当V1 导通时, V2 就截止,当 V2 导通时,V1 截止。卑微如蝼蚁、坚强似大象共享知识分享快乐P0 口作为 I/O 端口使用时, 多路开关的控制信号为 0(低电平),V1 管截止,多路开关是与锁存器的 Q 非端相接的(即 P0 口作为 I/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、作为数据总线的输出过程卑微如蝼蚁、坚强似大象共享知识分享快乐如果该指令是输出数据,如MOVXDPTR ,A(将累加器的内容通过P0 口数据总线传送到外部RAM 中),则多路开关 “控制 ”信号为 1,“与门 ”解锁,与输出地址信号的工作流程类似,数据据由 “地址 /数据 ”线 反相器 V2 场效应管栅极 V2 漏极输出。输入过程:1、I/O 读引脚工作过程:读芯片引脚上的数据时,读引脚缓冲器打开,通过内部数据总线输入,请看下图(红色简头)。2、I/O 读锁存器工作过程:通过打开读锁存器三态缓冲器读取锁存器输出端 Q 的状态,请看下图(红色箭头):卑微如蝼蚁、坚强似大象共享知识分享快乐3、地址 /数据时读指令码和数据过程作为数据总线使用。在访问外部程序存储器时,P0 口输出低 8 位地址信息后,将变为数据总线,以便读指令码(输入)。在取指令期间, “控制 ”信号为 “0,”V1管截止,多路开关也跟着转向锁存器反相输出端Q 非; CPU 自动将 0FFH( 11111111 ,即向 D 锁存器写入一个高电平 1)写入 P0 口锁存器,使 V2 管截止,在读引脚信号控制下, 通过读引脚三态门电路将指令码读到内部总线, 这个过程和 I/O 读引脚过程是一样的。在输入状态下, 从锁存器和从引脚上读来的信号一般是一致的, 但也有例外。 例如,当从内部总线输出低电平后,锁存器 Q 0, Q 非 1,场效应管 T2 开通,端口线呈低电平状态。 此时无论端口线上外接的信号是低电乎还是高电平, 从引脚读入单片机的信号都是低电平, 因而不能正确地读入端口引脚上的信号。 又如,当从内部总线输出高电平后,锁存器 Q1,Q 非 0,场效应管 T2 截止。如外接引脚信号为低电平,从引脚上读入的信号就与从锁存器读入的信号不同。 为此, 8031 单片机在对端口 P0 一 P3 的输入操作上,有如下约定:为此, 8051 单片机在对端口 P0 一 P3 的输入操作上,有如下约定:凡属于读 -修改 -写方式的指令,从锁存器读入信号,其它指令则从端口引脚线上读入信号。读 -修改 -写指令的特点是,从端口输入 (读)信号,在单片机内加以运算 (修改 )后,再输出 (写 )到该端口上。这样安排的原因在于读 -修改 -写指令需要得到端口原输出的状态,修改后再输出,读锁存器而不是读引脚, 可以避免因外部电路的原因而使原端口的状态被读错。当 P0 作为地址 /数据总线使用时,在读指令码或输入数据前, CPU 自动向 P0 口锁存器写入 0FFH ,破坏了 P0 口原来的状态。因此,不能再作为通用的 I/O 端口。在系统设计时务必注意,即程序中不能再含有以P0 口作为操作数(包含源操作数和目的操作数)的指令。二、 P1 端口的结构及工作原理卑微如蝼蚁、坚强似大象共享知识分享快乐由图可见, P1 端口与 P0 端口的主要差别在于, P1 端口用内部上拉电阻R 代替了 P0 端口的场效应管 T1 ,并且输出的信息仅来自内部总线。由内部总线输出的数据经锁存器反相和场效应管反相后,锁存在端口线上,所以, P1 端口是具有输出锁存的静态口。要正确地从引脚上读入外部信息, 必须先使场效应管关断,以便由外部输入的信息确定引脚的状态。 为此,在作引脚读入前, 必须先对该端口写入 l。具有这种操作特点的输入 /输出端口,称为准双向 I/O 口。8051 单片机的 P1 、P2、 P3 都是准双向口。 P0 端口由于输出有三态功能,输入前,端口线已处于高阻态,无需先写入 l 后再作读操作。单片机复位后,各个端口已自动地被写入了 1,此时,可直接作输入操作。如果在应用端口的过程中,已向 P1 一 P3 端口线输出过 0,则再要输入时,必须先写 1 后再读引脚,才能得到正确的信息。此外,随输入指令的不同, P1 端口也有读锁存器与读引脚之分。三、 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 口上的地址信息(程序存储器上的 A15A8 )功数据地址寄存器高 8 位 DPH 保存时间长,无须锁存。四、 P3 端口的结构及工作原理P3 口是一个多功能口,它除了可以作为 I/O 口外,还具有第二功能, P3 端口的一位结构见下图上图可见, P3 端口和 P1 端口的结构相似, 区别仅在于 P3 端口的各端口线有两种功能选择。当处于第一功能时,第二输出功能线为 1,此时,内部总线信号经锁存器和场效应管输入 /输出,其作用与 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 端口线自动处于第一功能状态,也就是静态 IO 端口的工作状态。在更多的场合是根据应用的需要, 把几条端口线设置为第二功能, 而另外几条端口线处于第一功能运行状态。在这种情况下,不宜对 P3 端口作字节操作,需采用位操作的形式。四、驱动能力P0 端口能驱动 8 个 LSTTL 负载。如需增加负载能力,可在 P0 总线上增加总线驱动器。 P1 ,P2 ,P3 端口各能驱动 4 个 LSTTL 负载。由于 P0-P3 端口已映射成特殊功能寄存器中的 P0 一 P3 端口寄存器,所以对这些端口寄存器的读写就实现了信息从相应端口的输入输出。例如:MOV A , P1 ;把 Pl 端口线上的信息输入到AMoV P1 , A ;把 A 的内容由 P1 端口输出MOV P3 , #0FFH;使 P3 端口线各位置 l口线的低电平的驱动能力明显高于高电平的驱动能力;关于 51 单片机 P0 口的结构及上拉问题 .P0 作为地址数据总线时,和是一起工作的 ,构成推挽结构。高电平时,打开,截止;低电平时,截止,打开。这种情况下不用外接上拉电阻 .而且 ,当 T1 打开 ,T2 截止 ,输出高电平的时候 ,因为内部电源直接通过 T1输出到 P0 口线上 ,因此驱动能力 (电流 )可以很大 ,这就是为什么教科书上说可以 驱动 8 个 TTL 负载的原因 .卑微如蝼蚁、坚强似大象共享知识分享快乐 .P0 作为一般端口时,就永远的截止,根据输出数据导通和 1 截止,导通时拉地,当然是输出低电平;截止时,口就没有输出了, (注意 ,这种情况就是所谓的高阻浮空状态 ),如果加上外部上拉电阻,输出就变成了高电平 1. .其他端口、 ,在内部直接将 P1 口中的 T1 换成了上拉电阻 ,所以不用外接,但内部上拉电阻太大,电流太小,有时因为电流不够,也会再并一个上拉电阻。4.在某个时刻 ,P0 口上输出的是作为总线的地址数据信号还是作为普通 I/O 口的电平信号 ,是依靠多路开关 MUX 来切换的 .而 MUX 的切换 ,又是根据单片机指令来区分的 .当指令为外部存储器 /IO 口读 /写时 ,比如 MOVX A,DPTR ,MUX 是切换到地址 /数据总线上 ;而当普通 MOV 传送指令操作 P0 口时 ,MUX 是切换到内部总线上的 .PS:Because Ports 1, 2, and 3 have fixed internal pullups, they are sometimes called “ quasi-bdirectional ” ports.因为端口 1、2、3 有固定的内部上拉 ,所以有时候他们被称为 准双向 口.Port 0, on the other hand, is considered “ true bidirectional,” because when configured as an input it floats.端口 0,从另外一方面来说 ,就被认为是 真正的 双向 ,因为当它被设置为输入的时候是浮空 (高阻态 )的 .51 单片机 P0 口的作为 I/O 的问题,其实看了 51 的 P1 口的电路就很容易理解了,主要是一个锁存器和推拉结构,在此作些说明。当用作输出,所有口线的状态都与SFR 锁存位的设置有密切的联系。P0 口为低除外。当P0 口的一个位写入0 时,这个位被拉低。但是对P0口的其中一个位写入1 时,这个位呈现高阻,也就是未能连机,不能使用。要想获得 1 输出,你必须在 P0 口外加上拉电阻。一般驱动 LED 的上拉电阻为 470,外接逻辑电路的上拉电阻为 4.7K 。 补充:一些口线被作为简单的高电平输入也与 SFR 锁存位有关。因为 P1 、P2、P3 有内部上拉电阻, 可以随意被拉高,拉低。而 P0 口作为高电平输入时,也会呈现高阻态。P0 口和 P2 口的输入缓冲被用来作存取外部存贮用, P0 口用作外部存贮器的低位字节的位址, 并与数据读写多工。 输出第一位元址, 当位置线是 16 位时, P2 口用作高 8 位的位址线,因此当对外面存贮时, P0 口、 P2 口没法当作 I/O 口线。卑微如蝼蚁、坚强似大象共享知识分享快乐P1 口具有内部上拉电阻,当端口用作输入时,必须通过指令将端口的位锁存器置 1,以关闭输出驱动场效应管,这时 P1 口的引脚由内部上拉电阻拉为高电平,所以向 P1 写入 1,工作正常。P0 则不同,它没有内部上拉电阻,在驱动场效应管的上方有一个提升场效应管,它只是在对外存储器进行读写操作,用作地址 /数据时才起作用,当向位锁存器写入 1,使驱动场效应管截止,则引脚浮空,所以写入 1 而未获得。P0 口上拉电阻的阻值:1、如果是驱动 led ,那么用 1K 左右的就行了。如果希望亮度大一些,电阻可减小,最小不要小于 200 欧姆,否则电流太大;如果希望亮度小一些,电阻可增大,增加到多少呢,主要看亮度情况,以亮度合适为准,一般来说超过3K 以上时,亮度就很弱了,但是对于超高亮度的 LED ,有时候电阻为 10K 时觉得亮度还能够用。我通常就用 1k 的。2、对于驱动光耦合器,如果是高电位有效,即耦合器输入端接端口和地之间,那么和 LED 的情况是一样的;如果是低电位有效,即耦合器输入端接端口和 VCC 之间,那么除了要串接一个 1 4.7k 之间的电阻以外, 同时上拉电阻的阻值就可以用的特别大,用 100k 500K 之间的都行,当然用 10K 的也可以,但是考虑到省电问题,没有必要用那么小的。3、对于驱动晶体管,又分为 PNP 和 NPN 管两种情况:对于 NPN ,毫无疑问 NPN 管是高电平有效的, 因此上拉电阻的阻值用 2K 20K 之间的,具体的大小还要看晶体管的集电极接的是什么负载,对于 LED 类负载,由于发管电流很小,因此上拉电阻的阻值可以用 20k 的,但是对于管子的集电极为继电器负载时,由于集电极电流大,因此上拉电阻的阻值最好不要大于 4.7K ,有时候甚至用 2K 的。对于 PNP 管,毫无疑问 PNP 管是低电平有效的,因此上拉电阻的阻值用 100K 以上的就行了,且管子的基极必须串接一个 1 10K 的电阻,阻值的大小要看管子集电极的负载是什么,对于 LED 类负载,由于发光电流很小,因此基极串接的电阻的阻值可以用 20k 的,但是对于管子的集电极为继电器负载时,由于集电极电流大,因此基极电阻的阻值最好不要大于4.7K 。3、对于驱动 TTL 集成电路,上拉电阻的阻值要用1 10K 之间的,有时候电阻太大的话是拉不起来的,因此用的阻值较小。但是对于 CMOS 集成电路,上拉电阻的阻值就可以用的很大,一般不小于 20K ,我通常用 100K 的,实际上对于 CMOS 电路,上拉电阻的阻值用 1M 的也是可以的,但是要注意上拉电阻的阻值太大的时候, 容易产生干扰, 尤其是线路板的线条很长的时候, 这种干扰更严重,这种情况下上拉电阻不宜过大, 一般要小于 100K ,有时候甚至小于 10K 。根据以上分析, 上拉电阻的阻值的选取是有很多讲究的, 不能乱用,具体情况比较复杂,如果你是个莱鸟,那么你尽量用小一些的,这样牺牲一些电源功耗。不过最好请教一下有关人员。卑微如蝼蚁、坚强似大象
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 演讲稿件


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!