单片机内部集成了并行I/O接口电路,用于与外界设备交换信息。单片机的控制,其实就是对I/O口的控制,无论单片机对外界进行何种控制,或接受外部的何种控制,都是通过I/O口进行的。
4.3.1.1 并行I/O端口基本概念
51系列单片机的每个端口都是8位准双向口,共占32根引脚。每个端口都包括一个锁存器(即专用寄存器P0~P3)、一个输出驱动器和输入缓冲器。通常把4个端口笼统地表示为P0~P3。在无片外扩展存储器的系统中,这4个端口的每一位都可以作为准双向通用I/O端口使用。在具有片外扩展存储器的系统中,P2口作为高8位地址线,P0口分别作为低8位地址线和双向数据总线。
(1)I/O端口的作用。
1)实现与不同外设的速度匹配。
2)改变数据传输方式。
3)改变信号的性质和电平。
(2)外部设备的编址。
1)外设端口的单独编址。
外设端口单独编址是指外设端口地址和存储器存储单元地址分别编址,互相独立,互不影响。单独编址的优点是不占用存储器地址,但需要CPU指令集中有专用的I/O指令等控制手段配合,增加软/硬件开销。
2)外设端口和存储器统一编址。
把外设端口当作存储单元对待,也就是让外设端口地址占用部分存储器单元。优点如下:
①CPU访问外部存储器的一切指令均适用于对I/O端口的访问,增强了CPU对外设端口的处理能力。
②CPU本身不需要专门为I/O端口设置I/O操作指令。
③外设端口地址安排灵活,数量不受限制。
缺点是外设端口占用了部分存储器地址,也增加了硬件电路的复杂程度。
C51系列单片机采用的是单独编址方式。
(3)I/O端口数据的4种传送方式。
1)同步传送。
同步传送即无条件传送,使用情形如下:
①外设工作速度非常快。当外设的工作速度与CPU的速度不相上下时,宜采用同步传送。
②外设工作速度非常慢。当外设工作的速度非常慢,以致CPU在任何时候都可以认为它处于准备好的状态时,宜采用同步方式。
2)异步传送。
异步传送即条件传送。在这种传送方式下,CPU需要I/O接口为外设提供状态和数据两个端口。CPU首先对状态进行查询,满足一定的状态才能进行数据传送工作。
异步传送的优点是通用性好,硬件连接和查询处理较简练;缺点是CPU在查询的时候损失了效率。
3)中断传送。
中断传送是利用CPU本身的中断功能和I/O接口的中断功能来实现对外设I/O数据的传送。
中断传送的优点是CPU和外设可以并行工作,互不影响。CPU只在外设请求干预时才响应外设的请求,执行数据传送操作,因而采用中断方式传送I/O数据可以提高CPU的工作效率。
4)DMA传送。
外设与片内存储的数据传送必须经过CPU;在批量传送时,可采用DMA技术绕过CPU,进一步提高工作效率。
4.3.1.2 P0端口
P0端口是由8个相同结构的引脚组成的。对于P0端口的某一个P0.n(n=0~7)引脚结构如图4-8所示。P0端口内部包含一个输出锁存器、一个输出驱动电路、一个输出控制电路、多路开关和两个三态缓冲器。其中,输出驱动电路由一对场效应管(FET)组成,整个端口的工作状态受控于输出控制电路。
(1)输入缓冲器。
在P0端口中,有两个三态的缓冲器。三态门有3个状态,即在其输出端可以是高电平、低电平,同时还有一种就是高阻状态。图中有一个是读锁存器的缓冲器,也就是说,要读取D锁存器输出端Q的数据,就得使读锁存器的三态控制端(图4-8中标号为“读锁存器”端)有效。另一个是读引脚的缓冲器,要读取P0.n引脚上的数据,也要使标号为“读引脚”的这个三态缓冲器的控制端有效,则引脚上的数据才会传输到单片机的内部数据总线上。
(2)D锁存器。
一个D触发器可以保存一位的二进制数(即具有保持功能),在51单片机的32根I/O口线中都是用一个D触发器来构成锁存器的。对于图4-8中的锁存器,D是数据输入端,CLK是控制端(也就是时序控制信号输入端),Q是输出端,是反向输出端。
对于D触发器来讲,当D输入端有一个输入信号,并且这时控制端CLK没有信号(也就是时序脉冲没有到来),那么输入端D的数据是无法传输到输出端Q及反向输出端的。时序控制端CLK的时序脉冲一旦到了,那么D端输入的数据就会传输到Q及端。数据传送过来后,当CLK时序控制端的时序信号消失了,这时输出端还会保持着上次输入端D的数据(即把上次的数据锁存起来了)。下一个时序控制脉冲信号到来时,D端的数据才再次传送到Q端,从而改变Q端的状态。
图4-8 P0口某一位的电路结构
(3)多路开关。
在51单片机中,当内部的存储器够用(也就是不需要外扩展存储器时,这里讲的存储器包括数据存储器及程序存储器)时,P0端口可以作为通用的输入/输出端口(即I/O)使用。对于8031(内部没有ROM)的单片机或者编写的程序超过了单片机内部的存储器容量,需要外扩存储器时,P0端口就作为“地址/数据”总线使用。那么这个多路选择开关就是用于选择是作为普通I/O接口使用还是作为“数据/地址”总线使用的选择开关了。当多路开关与下面触点接通时,P0端口作为普通的I/O接口;当多路开关是与上面触点接通时,P0端口作为“地址/数据”总线。
(4)输出驱动部分。
从图4-8看出,P0端口的输出是由两个MOS管组成的推拉式结构。也就是说,这两个MOS管一次只能导通一个,当T1导通时,T2就截止;当T2导通时,T1截止。
P0端口既可以作为I/O,也可以作为8位地址/数据线。
1)P0端口作为普通I/O接口:当P0口作为普通I/O接口使用时,对应的控制信号为“0”。电子模拟开关MUX将锁存器的QTX-端和输出连接在一起。同时“与门”输出为“0”,上拉FET管截止,这时输出的是漏极开路电路,所以需要外接上拉电阻(一般为5kΩ~10kΩ)才能正常工作。
2)作为输出时:当程序设置该输出为“0”时,锁存器的输出端为高电平,致使下拉FET管导通,因此输出端输出为“0”;当程序设置该输出为“1”时,锁存器的输出端为低电平,(www.daowen.com)
致使下拉FET管截止,由外接的上拉电阻将输出端变为高电平,因此输出为“1”。
3)作为输入时:(应先设置各个锁存器为“1”,才能使输入结果正确)数据输入时(读P0口)有两种情况:
①读引脚:读芯片引脚上的数据。读引脚数据时,读引脚缓冲器打开(即三态缓冲器的控制端要有效),通过内部数据总线输入。
②读锁存器:通过打开读锁存器三态缓冲器来读取锁存器输出端Q的状态。
4)P0作为地址/数据总线:在系统扩展时,P0端口作为地址/数据总线使用时,分为:
P0引脚输出地址/数据信息:CPU发出控制电平“1”,打开“与门”,又使多路开关把分为:CPU的地址/数据总线与T2栅极反相接通,输出地址或数据。由图4-8可以看出,上下两个FET处于反相,则构成了推拉式的输出电路,其负载能力大大增强,能够驱动8个LSTTL负载。
P0引脚输入地址/数据信息:输入信号是从引脚通过输入缓冲器进入内部总线。此时,CPU自动使多路开关向下,并向P0口写“1”“读引脚”控制信号有效,下面的缓冲器打开,外部数据读入内部总线。
4.3.1.3 P1端口
P1端口通常用作通用I/O端口,可用作按位寻址处理。各个位都可以单独输出或输入信息,其结构图如图4-9所示,其中P1.n(n=0~7)为其中的某一位。
由图4-9可见,P1端口与P0端口的主要差别在于P1端口用内部上拉电阻R代替了P0端口的场效应管T1,并且输出的信息仅来自内部总线。由内部总线输出的数据经锁存器反相端和场效应管反相后锁存在端口线上,所以,P1端口是具有输出锁存的静态口。要正确地从引脚上读入外部信息,必须先使场效应管关断,以便内外部输入的信息确定引脚的状态。为此,在引脚读入前,必须先对该端口写入“1”。具有这种操作特点的输入/输出端口称为准双向I/O接口。8051单片机的P1、P2、P3都是准双向口。由于P0端口输出有三态功能,输入前端口线已处于高阻态,不需先写入“1”后再进行读操作。
P1端口的结构相对简单,前面已详细分析了P0端口,只要认真分析了P0端口的工作原理,P1端口的分析就简单了,这里就不多论述了。单片机复位后,各个端口已自动写入“1”,此时,可直接进行输入操作。如果在应用端口的过程中已向P1~P3端口线输出过“0”,则再输入时必须先写“1”再读引脚,才能得到正确的信息。此外,随输入指令的不同,端口也有读锁存器与读引脚之分。
图4-9 P1口某一位的电路结构
4.3.1.4 P2端口
P2端口的某一位结构如图4-10所示。可见,P2端口在片内既有上拉电阻,又有切换开关MUX,所以P2端口在功能上兼有P0端口和P1端口的特点,既可以当作普通的I/O口,也可以在系统外部扩展存储器时,输出高8位地址。
当P2作为高8位地址时,控制信号用电子模拟开关MUX接通地址端,高8位地址信号便加到输出端口,从而实现8位地址的输出。由于P2端口输出高8位地址,与P0端口不同,无须分时使用,因此P2端口上的地址信息(程序存储器上的A8~A15)保存的时间足够长,所以并不给P2设置地址锁存功能。
图4-10 P2口某一位的电路结构
当P2作为普通I/O口时,控制信号用电子模拟开关接通锁存器的Q端,则进行通用I/O操作。此时,P2口属于准双向I/O口。所以,在复位情况下,可以直接从引脚读入外部的数据信息;而在运行中,由输出转为输入方式时,应加一条输出0xff指令,再从端口读入数据才正确。P2口的其余操作和P0口类似,P2口可以同时驱动4个LSTTL负载。
4.3.1.5 P3端口
P3端口是一个多功能口,它除了可以作为I/O口外,还具有第二功能。P3端口的一位结构如图4-11所示。
可见,P3端口和P1端口的结构相似,区别仅在于P3端口的各端口线有两种功能选择,第二功能如表4-8所列。当处于第一功能时,第二输出功能线为“1”,此时,内部总线信号经锁存器和场效应管输入/输出,其作用与P1端口作用相同,也是静态准双向I/O端口。当处于第二功能时,锁存器输出“1”,通过第二输出功能线输出特定的内含信号;在输入方面,既可以通过缓冲器读入引脚信号,还可以通过替代输入功能读入片内特定的第二功能信号。由于输出信号锁存并且有双重功能,故P3端口为静态的双功能端口。
图4-11 P3口一位的电路结构
使P3端口各线处于第二功能的条件是:
①串行I/O处于运行状态(RXD、TXD)。
②打开了外部中断(INT0、INT1)。
③定时/计数器处于外部计数状态(T0、T1)。
④执行读写外部RAM的指令(RD、WR)。
在应用中如不设定P3端口各位的第二功能(WR、RD信号的产生不用设置),则P3端口线自动处于第一功能状态,也就是静态I/O端口的工作状态。在更多的场合是根据应用的需要把几条端口线设置为第二功能,而另外几条端口线处于第一功能运行状态。在这种情况下,不宜对P3端口进行字节操作,须采用位操作的形式。
表4-8 P3口的特殊功能
4.3.1.6 并行I/O接口的应用
51单片机的P0、P1、P2、P3口均可以进行字节操作和位操作,既可以8位一组进行输入、输出操作,也可以逐位分别定义各口线为输入线或输出线。每个并行I/O接口均有两种“读”方式:读锁存器和读引脚。P0端口除了作为8位I/O口外,在扩展外部程序存储器和数据存储器时,P0端口要作为低8位地址总线和8位数据总线用。这种情况下,P0端口不能用作I/O,要先作为地址总线对外传送低8位地址,然后作为数据总线对外交换数据。P1端口只能作为I/O接口(除了P1.0、P1.1以外),没有其他的功能。P2端口除了作为普通I/O口之外,在扩展外围设备时,要用作高8位地址线。P3端口除了作为普通I/O接口之外,由于其每个引脚都有第二功能,所以还可以用作第二功能,而此时它就不能用作为8位I/O口。综上所述,I/O端口有以下特性:
①端口自动识别:无论是P0、P2口的总线复用还是P3口的功能复用,内部资源会自动选择,不需要通过指令的状态选择。
②准双向口功能:准双向口作为输入口时,应先使锁存器置“1”,然后再读引脚。
③P0口作为普通I/O口使用:不使用并行扩展总线时,必须外加上拉电阻。
④I/O口驱动特性:PO口作为I/O口时可输出驱动8个LSTTL输入端,P1~P3口则可以输出驱动4个LSTTL输入端。
例4-1 根据原理图,设计系统功能:(1)按下S1,D1灯点亮,再次按下S1,D1灯熄灭;(2)按下S2,D1-D8灯全点亮,再次按下S2,D1-D8灯全熄灭。
注意:本章例题中的原理图只表现出与设计相关的单片机接口部分,单片机最小系统原理图如下图所示。
代码如下:
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。