单片机IO口结构及工作原理Word文档下载推荐.docx
- 文档编号:22138156
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:10
- 大小:245.50KB
单片机IO口结构及工作原理Word文档下载推荐.docx
《单片机IO口结构及工作原理Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《单片机IO口结构及工作原理Word文档下载推荐.docx(10页珍藏版)》请在冰豆网上搜索。
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。
根据以上分析,上拉电阻的阻值的选取是有很多讲究的,不能乱用,具体情况比较复杂,如果你是个莱鸟,那么你尽量用小一些的,这样牺牲一些电源功耗。
不过最好请教一下有关人员。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 IO 结构 工作 原理