单片机IO口结构及工作原理Word格式.docx

上传人:b****1 文档编号:4372048 上传时间:2023-05-03 格式:DOCX 页数:12 大小:245.80KB
下载 相关 举报
单片机IO口结构及工作原理Word格式.docx_第1页
第1页 / 共12页
单片机IO口结构及工作原理Word格式.docx_第2页
第2页 / 共12页
单片机IO口结构及工作原理Word格式.docx_第3页
第3页 / 共12页
单片机IO口结构及工作原理Word格式.docx_第4页
第4页 / 共12页
单片机IO口结构及工作原理Word格式.docx_第5页
第5页 / 共12页
单片机IO口结构及工作原理Word格式.docx_第6页
第6页 / 共12页
单片机IO口结构及工作原理Word格式.docx_第7页
第7页 / 共12页
单片机IO口结构及工作原理Word格式.docx_第8页
第8页 / 共12页
单片机IO口结构及工作原理Word格式.docx_第9页
第9页 / 共12页
单片机IO口结构及工作原理Word格式.docx_第10页
第10页 / 共12页
单片机IO口结构及工作原理Word格式.docx_第11页
第11页 / 共12页
单片机IO口结构及工作原理Word格式.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

单片机IO口结构及工作原理Word格式.docx

《单片机IO口结构及工作原理Word格式.docx》由会员分享,可在线阅读,更多相关《单片机IO口结构及工作原理Word格式.docx(12页珍藏版)》请在冰点文库上搜索。

单片机IO口结构及工作原理Word格式.docx

 

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、作为数据总线的输出过程

如果该指令就是输出数据,如MOVX 

@DPTR,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开通,端口线呈低电平状态。

此时无论端口线上外接的信号就是低电乎还就是高电平,从引脚读入单片机的信号都就是低电平,因而不能正确地读入端口引脚上的信号。

又如,当从内部总线输出高电平后,锁存器Q=1,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口上的地址信息(程序存储器上的A15~A8)功数据地址寄存器高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端口线自动处于第一功能状态,也就就是静态I/O端口的工作状态。

在更多的场合就是根据应用的需要,把几条端口线设置为第二功能,而另外几条端口线处于第一功能运行状态。

在这种情况下,不宜对P3端口作字节操作,需采用位操作的形式。

四、驱动能力

P0端口能驱动8个LSTTL负载。

如需增加负载能力,可在P0总线上增加总线驱动器。

P1,P2,P3端口各能驱动4个LSTTL负载。

由于P0-P3端口已映射成特殊功能寄存器中的P0一P3端口寄存器,所以对这些端口寄存器的读/写就实现了信息从相应端口的输入/输出。

例如:

MOVA,P1;

把Pl端口线上的信息输入到A

MoVP1,A;

把A的内容由P1端口输出

MOVP3,#0FFH;

使P3端口线各位置l

I/O口线的低电平的驱动能力明显高于高电平的驱动能力;

关于51单片机P0口的结构及上拉问题

1、P0作为地址数据总线时,T1与T2就是一起工作的,构成推挽结构。

高电平时,T1打开,T2截止;

低电平时,T1截止,T2打开。

这种情况下不用外接上拉电阻、而且,当T1打开,T2截止,输出高电平的时候,因为内部电源直接通过T1输出到P0口线上,因此驱动能力(电流)可以很大,这就就是为什么教科书上说可以"

驱动8个TTL负载"

的原因、

2、P0作为一般端口时,T1就永远的截止,T2根据输出数据0导通与1截止,导通时拉地,当然就是输出低电平;

截止时,PO口就没有输出了,(注意,这种情况就就是所谓的高阻浮空状态),如果加上外部上拉电阻,输出就变成了高电平1、

3、其她端口P1、P2、P3,在内部直接将P1口中的T1换成了上拉电阻,所以不用外接,但内部上拉电阻太大,电流太小,有时因为电流不够,也会再并一个上拉电阻。

4、在某个时刻,P0口上输出的就是作为总线的地址数据信号还就是作为普通I/O口的电平信号,就是依靠多路开关MUX来切换的、而MUX的切换,又就是根据单片机指令来区分的、当指令为外部存储器/IO口读/写时,比如MOVXA,@DPTR,MUX就是切换到地址/数据总线上;

而当普通MOV传送指令操作P0口时,MUX就是切换到内部总线上的、

PS:

BecausePorts1,2,and3havefixedinternalpullups,theyaresometimescalled“quasi-bidirectional”ports、

因为端口1、2、3有固定的内部上拉,所以有时候她们被称为"

准双向"

口、

Port0,ontheotherhand,isconsidered“true”bidirectional,becausewhenconfiguredasaninputitfloats、

端口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@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2