1.1 8051单片机引脚 |
|
图1-1给出了8051单片机的几种不同封装形式及引脚分布,本节将对单片机4个双向输入/输出(I/O)端口引脚、控制引脚、晶振及电源引脚进行介绍。
图1-1 8051单片机不同封装形式及引脚图
图1-2给出了8051的4个8位并行端口P0、P1、P2、P3的位结构,这些端口都是双向的,每个端口位均包含:两个三态输入缓冲器、一个输出锁存器及一个场效应管(FET)驱动器,其中P0端口还有一个上拉场效应管。位结构中的两个输入缓冲器分别受内部“读锁存器”和“读引脚”信号控制,“位锁存器”用典型的“D型触发器”表示。
当CPU发出“写锁存器”脉冲信号到D触发器CL端时,内部总线的值将送入D触发器。
当CPU发出“读锁存器”脉冲信号到缓冲器1时,触发器Q端输出至内部总线上。
当CPU发送“读引脚”脉冲信号到缓冲器2时,外部引脚输入值将置于内部总线上。
某些指令读端口时将激活“读锁存器”信号,另一些指令则激活“读引脚”信号。对于“读-改-写”这样的指令操作,CPU发出的将是“读锁存器”信号。具体执行“读锁存器”还是“读引脚”将由CPU根据不同指令自动处理。有关细节将在1.3节“特殊功能寄存器”中讨论。
图1-2 8051单片机4个并行端口位结构
(1)P0端口
P0端口位结构如图1-2(a)所示,包含输入缓冲器、锁存器、切换开关MUX、非门、与门、上拉场效应管T1、驱动场效应管T2。由该图可知P0端口具有双重工作方式,既可作为“普通I/O端口(General I/O Port)”,也可作为“地址/数据总线(Address/Data Bus)”使用。下面分别予以讨论。
● 作为“普通I/O端口”使用
在“普通I/O端口”方式下,CPU发控制电平“0”使与门输出“0”,T1截止,同时使MUX接通下面的触点,使 端连通T2栅极,内部总线与P0端口同相。由于上拉场效应管T1截止,输出驱动场效应管T2漏极开路,故而P0端口要外接上拉电阻。
下面分别说明P0端口在“普通I/O端口”方式下的输出与输入操作。
输出操作:以3.3节“花样流水灯”为例,8只LED阴极接P0端口,阳极通过限流电阻接V CC ,这一组限流电阻同时扮演了上拉电阻的角色。如果将这一组LED阳极接P0端口,阴极串接限流电阻后接GND,尽管P0端口仍然在输出0、1序列,但8只LED却无法实现演示效果,因为场效应管T2没有上拉电阻。此时可仍将LED阳极接P0端口,阴极接GND,电阻则改为一端接P0端口,另一端接V CC 上拉。
输入操作:如果此前内部总线刚刚输出了低电平,此时锁存器Q=0, ,驱动场效应管T2导通,接口呈现低电平,此时无论P0端口外部信号是“1”还是“0”,从P0端口引脚读取的信号都将为“0”,这显然将无法正确读取接口引脚信号。
故而,在执行接口输入操作前,应先向P0端口锁存器写“1”,D触发器的 端输出“0”使T2截止,外部引脚处于悬浮(Float/FLT)状态,变为高阻抗输入(此时T1也是截止的)。
3.10节“继电器及双向可控硅控制照明设备”案例中,使用P0.0作为K1按键输入引脚,P0.0外接了上拉电阻(因为T1截止,T2漏极开路),但读取按键输入前,整个源代码中并未出现向P0.0写“1”的操作,这是因为单片机上电时默认已经向所有接口(P0、P1、P2、P3)全部写入“1”,仿真调试时观察到初始时P0为灰色,这显然就是因为初始上电时,内部默认写入P0锁存器的“1”已经截止了T2。
● 作为“地址/数据总线”使用
P0端口作为“地址/数据总线”使用时通过CPU内部写控制信号“1”实现,它使MUX连接上面的触点,“地址/数据”信号通过“非门”连接到T2的栅极,由于控制信号为“1”,“地址/数据”信号通过“与门”连接T1的栅极,实际上相当于“直接”或称“同相”连接到T1的栅极。“地址/数据总线”方式下的输出与输入操作分别说明如下:
输出操作:输出的“地址”或“数据”信号将通过“与门”驱动T1,并同时通过“非门”驱动T2,例如,输出0时:T1截止,T2导通;反之,输出1时:T1导通,T2截止,从而以推挽方式实现信号输出。
输入操作:从外部设备读取输入“数据”时,数据信号将通过缓冲器2进入内部总线,数据输入时,CPU将通过写控制信号“0”使T1截止,此时相当于瞬间又自动回到了“普通I/O端口”方式,随即CPU自动向P0锁存器写“1”截止T2,并通过“读引脚”控制缓冲器读取外部数据,此时的“普通I/O方式”下的差别与此前讨论过的I/O方式有两个差别:一是无须外部上拉,二是向P0锁存器写“1”截止T2的操作是自动完成。
在“地址/数据总线”应用方式下,P0端口复用数据总线(D0~D7)及地址总线的低8位(A0~A7),数据及低8位地址分时复用P0端口,低8位地址由ALE(Address Latch Enable,地址锁存允许)信号的下降沿锁存到外部地址锁存器中(如74LS373),地址的高8位则通过P2端口输出,不经过锁存器,输出地址后,紧接着的数据输出或输入操作将在 /P3.6及 /P3.7的自动控制下完成。第4章62256RAM、8255等相关案例均涉及了P0端口的“地址/数据总线”应用。
小结:P0在“普通I/O端口”方式下为准双向接口,因为输出“0”后改为输入时,需要先输出“1”,然后才能成为输入端口。而在“地址/数据总线”方式下P0为真正的双向I/O端口。
(2)P1端口
P1端口是通用的准双向I/O端口,由一个输出锁存器、两个三态输入缓冲器和一个输出驱动场效应管及内部上拉电阻组成。P1端口与P0端口作为“普通I/O端口”使用时的原理相似,它相当于P0端口省去了“与门”、“非门”、“MUX”,且上拉场效应管T1由内部上拉电阻代替,P1端口不再需要外接上拉电阻。与P0用作普通I/O的操作一样,作为输入端口使用时,除了初始时不需要向接口写“1”截止驱动场效应管以外,如果以后曾向接口输出过“0”,则每当由“写”操作改为“读”操作时,都需要先向接口写“1”截止场效应管,然后才能正常读取输入的数据。
以4.25节“ADC0832模数转换与LCD显示”为例,ADC0832的DI与DO引脚合并连接到单片机的P1.2引脚,源程序中A/D转换函数内有如下代码:
由于第110行之前对DIO(P1.2)的操作均为输出,用于启动及配置ADC0832,这些工作的最后一步是第106行,它置DIO(P1.2)为0,故而在第110行一定要向DIO(P1.2)写1,使端口内部驱动场效应管T被截止,从而释放数据线,以便开始串行读取ADC0832输出给单片机的A/D转换值。所谓释放数据线,指该数据线当前处于被接口内部或外部上拉电阻拉为高电平的状态,不再受接口内部电路控制。类似的,第4章有关1-Wire总线器件DS18B20、DS2405等案例也需要在串行输出后切换为输入时,在相应接口上写“1”来释放总线,准备读取数据。
(3)P2端口
P2端口与P1端口相比多出了一个转换控制部分,当P2与P0配合作为“地址/数据总线”方式下的高8位地址线(A8~A15)使用时,CPU将写控制信号“1”使MUX切换到右边,在“地址/数据总线”方式下,无论P2端口剩余多少地址线,均不能被用于普通I/O操作。
反之,CPU通过写控制信号“0”将MUX切换到左边,使之工作于“普通I/O端口”方式。作为“普通I/O端口”使用时,P2锁存器Q端输出通过“非门”驱动场效应管,相当于P1端口中的通过 直接驱动场效应管,在“普通I/O端口”方式下,P2与P1同为准双向I/O端口。
(4)P3端口
P3端口为具有双重功能的I/O端口,与P1相比,它增加了第二I/O功能。
作为“普通I/O端口”使用时,CPU将第二输出功能控制线保持为“1”,锁存器Q端通过“与非门”(此时等价于“非门”)驱动场效应管,相当于P1端口中的通过 直接驱动场效应管,或相当于P2端口中通过Q端经“非门”驱动场效应管。在这种方式下,其读/写操作与P1、P2相同。
下面接着讨论P3端口处于第二重功能时的相关操作:
当处于第二功能输出时,CPU自动向P3锁存器写“1”,由于Q=1,“与非门”相当一个“非门”,此时的输出将仅仅由第二功能输出线决定,例如,由UART模块通过TXD输出的SBUF寄存器串行数据及 、 引脚输出的读/写控制信号。
当处于第二功能输入时,CPU除自动向P3锁存器写“1”,置Q=1以外,还将向第二功能输出线写“1”,以保证Q和第二功能输出线经过“与非门”后输出0,使得场效应管T被截止,此时所读取的P3端口引脚信号将通过缓冲器3直接进入第二功能输入端,例如,从RXD、INT0、INT1、T0、T1引脚读取的信号将通过第二功能输入端分别进入单片机内部的串行模块、外部中断处理模块、定时器/计数器模块进行处理。
在下述情况下,P3端口相应引脚将处于第二功能状态:
● 启动串行通信模块(RXD/TXD);
● 使能处部中断输入(INT0/INT1);
● 定时器/计数器配置为外部计数状态(T0/T1);
● 访问外部扩展存储器或接口扩展器件( / )。
在第二功能下,P3.0~P3.7引脚分别对应于RXD、TXD、 、 、T0、T1、 及 ,第3章有关串口、外部中断及定时器/计数器的案例分别涉及前6位,第4章有关62256存储器扩展和8255接口扩展等案例连接了最后2位 及 ,它们用于总线控制。
(5)8051单片机的其他相关引脚
8051的控制引脚有RST,ALE/ , , /VPP,本书多数案例中的RST(Reset)引脚连接了系统复位外围电路,只有部分案例未在RST引脚连接复位电路,但这并不影响Proteus仿真。ALE引脚在存储器扩展和I/O端口扩展案例中用到。另外,由于全书所有案例程序都绑定在8051单片机内部程序ROM中,故而仿真电路中 全部接高电平。
XTAL1、XTAL2引脚在本书多数案例连接有12MHz或11.0592MHz振荡器,在串行通信案例中多数选择11.0592MHz振荡器。Proteus默认晶振连接时不影响仿真运行,因为振荡器频率可在芯片属性中设置。主电源引脚V SS ,V CC 分别接GND和+5V,Proteus仿真时电源已默认连接,仿真电路原理图中电源连接全部默认,注意在实物电路中不要忽略了电源与晶振连接。