单片机开发与典型工程项目实例详解
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.3 MCS-51单片机的引脚功能与时序

MCS-51单片机有40个引脚,各个引脚均有其特定的用途。单片机运行是按照一个节拍、一个节拍进行的,有自己的规律,这个规律就是时序。引脚和时序是从空间和时间上认识和理解单片机的起点,在学习时应予以重视。

1.3.1 MCS-51系列单片机引脚说明

MCS-51系列单片机中的8031、8051及8751,均采用40Pin封装的双列直接DIP结构,如图1-5所示。现在我们对这些引脚的功能加以说明。我们可以把40个引脚按功能划分为4类,下面分别对这些类进行讲解。

1.主电源引脚VSS和VCC

(1)VSS(第20脚):接电源负极,即接地。

(2)VCC(第40脚):正常操作时为+5V电源。

2.外接晶振引脚XTAL1和XTAL2

(1)XTAL1(第19脚):内部振荡电路反相放大器的输入端,是外接晶体的一个引脚。当采用外部振荡器时,此引脚接地。

(2)XTAL2(第18脚):内部振荡电路反相放大器的输出端,是外接晶体的另一端。当采用外部振荡器时,此引脚接外部振荡源。

图1-5 MCS-51芯片引脚图

8051的时钟有2种方式:一种是片内时钟振荡方式,但需外接石英晶体(1~12MHz)和振荡电容,振荡电容的值一般取10pf~30pf;另外一种是外部时钟方式,即将XTAL1接地,外部时钟信号从XTAL2脚输入,如图1-6所示。

图1-6 MCS-51时钟方式电路图

3.I/O引脚

I/O端口又称为I/O接口,也叫做I/O通道或I/O通路。I/O端口是MCS-51单片机对外部实现控制和信息交换的必经之路。I/O端口有串行和并行之分,串行I/O端口一次只能传送一位二进制信息,并行I/O端口一次能传送一组二进制信息。

1)并行I/O端口

MCS-51单片机设有4个8位双向I/O端口(P0、P1、P2、P3),每一条I/O线都能独立地用作输入或输出。P0口为三态双向口,能带8个LSTTL电路。P1、P2、P3口为准双向口(在用作输入线时,口锁存器必须先写入“1”,故称为准双向口),负载能力为4个LSTTL电路。

2)P0端口功能(P0.0~P0.7、32~39脚)

图1-7是P0口位结构,包括1个输出锁存器、2个三态缓冲器、1个输出驱动电路和1个输出控制端。输出驱动电路由一对场效应管组成,其工作状态受输出端的控制,输出控制端由1个与门、1个反相器和1个转换开关MUX组成。对8051/8751来讲,P0口既可作为输入/输出口,又可作为地址/数据总线使用。

图1-7 P0口位结构

● P0口作地址/数据复用总线使用

若从P0口输出地址或数据信息,此时控制端口应为高电平,转换开关MUX将反相器输出端与输出级场效应管V2接通,同时与门开锁。内部总线上的地址或数据信号通过与门去驱动V1管,又通过反相器去驱动V2管。这时内部总线上的地址或数据信号就传送到P0口的引脚上。工作时低8位地址与数据线分时使用P0口。低8位地址由ALE信号的负调变使它锁存到外部地址锁存器中,而高8位地址由P2口输出。

● P0口作通用I/O端口使用

对于有内部ROM的单片机,PO口也可以作通用I/O,此时控制端为低电平,转换开关把输出级与锁存器的Q端接通,同时因与门输出为低电平,输出级V1管处于截止状态,输出级为漏极开路电路,在驱动NMOS电路时应外接于上拉电阻;作输入口用时,应先将锁存器写“1”,这时输出级两个场效应管均截止,可作高阻抗输入,通过三态输入缓冲器读取引脚信号,从而完成输入操作。

● P0口线上的“读-修改-写”功能

图1-7中的三态缓冲器,是为了读取锁存器Q端的数据。Q端与引脚的数据一致。结构上这样安排是为了满足“读-修改-写”指令的需要。这类指令的特点是:先读端口锁存器,随之可能对读入的数据进行修改再写入到端口上。例如:ANL P0, A、ORL P0, A、XRL P0, A。

这类指令同样适合与P1~P3口,其操作是:先将端口字节的全部8位数读入,再通过指令修改某些位,然后将新的数据写回到端口锁存器中。

3)P1口(P1.0~P1.7、1~8脚)准双向口

● P1口作通用I/O端口使用

P1口是一个有内部上拉电阻的准双向口,位置结构如图1-8所示,P1口的每一位端口线能独立用作输入线或输出线。作输出时,如将“0”写入锁存器,场效应管导通,输出线为低电平,即输出为“0”。因此在作输入时,必须先将“1”写入端口锁存器,使场效应管截止。该端口线由内部上拉电阻提拉成高电平,同时也能被外部输入源拉成低电平,即当外部输入“1”时该口线为高电平,而输入“0”时,该端口线为低电平。

图1-8 P1口位结构

P1口作输入时,可被任何TTL电路和MOS电路驱动,由于具有内部上拉电阻,也可以直接被集电极开路和漏极开路电路驱动,不必外加上拉电阻。P1口可驱动4个LSTTL门电路。

● P1口其他功能

P1口在EPROM编程和验证程序时,输入低8位地址。在8032/8052系列中P1.0和P1.1是多功能的,P1.0可作定时器/计数器2的外部计数触发输入端T2, P1.1可作定时器/计数器2的外部控制输入端T2EX。

4)P2口(P2.0~P2.7,21~28脚)准双向口

P2口的位置结构如图1-9所示,引脚上拉电阻同P1口。在结构上,P2口比P1口多一个输出控制部分。

图1-9 P2口位结构

● P2口作通用I/O端口使用

当P2口作通用I/O端口使用时,是一个准双向口,此时转换开关MUX倒向左边,输出级与锁存器接通,引脚可接I/O设备,其输入输出操作与P1口完全相同。

● P2口作地址总线口使用

当系统中接有外部存储器时,P2口用于输出高8位地址A15~A8。这时在CPU的控制下,转换开关MUX倒向右边,接通内部地址总线。P2口的口线路状态取决于片内输出的地址信息,这些地址信息来源于PCH和DPH等。在外接程序存储器的系统中,由于访问外部存储器的操作连续不断,P2口不断送出地址高8位。例如,在8031构成的系统中,P2口一般只作地址总线口使用,不再作I/O端口直接连外部设备。

在不接外部程序存储器而接有外部数据存储器的系统中,情况有所不同。若外接数据存储器容量为256字节,则可使用MOVX A, @Ri类指令,由P0口送出8位地址。P2口上引脚的信号在整个访问外部数据存储器期间也不会改变,故P2口仍可作通用I/O端口使用。若外接存储器容量较大,则需用MOVX A, @DPTR类指令,由P0口和P2口送出16位地址。在读写周期内,P2口引脚上将保持地址信息,但从结构可知,输出地址时,并不要求P2口锁存器锁存“1”,锁存器内容也不会在送地址信息时改变。所以访问外部数据存储器周期结束后,P2口锁存器的内容又会重新出现在引脚上。这样,根据访问外部数据存储器的频繁程度,P2口仍可在一定限度内作一般I/O端口使用。P2口可驱动4个LSTTL门电路。

5)P3口(P3.0~P3.7、10~17脚)双功能口

P3口是一个多用途的端口,也是一个准双向口,作为第一功能使用时,其功能同P1口。P3口的位置结构如图1-10所示。当做第二功能使用时,每一位功能定义如表1-3所示。P3口的第二功能实际上就是系统具有控制功能的控制线。此时相应的端口线锁存器必须为“1”状态,与非门的输出由第二功能输出线的状态确定,从而P3端口线的状态取决于第二功能输出线的电平。在P3口的引脚信号输入通道中有两个三态缓冲器,第二功能的输入信号取自第一个缓冲器的输出端,第二个缓冲器仍是第一功能的读引脚信号缓冲器。P3口可驱动4个LSTTL门电路。

图1-10 P3口位结构

表1-3 P3口的第二功能

每个I/O端口内部都有一个8位数据输出锁存器和一个8位数据输入缓冲器,4个数据输出锁存器与端口号P0、P1、P2和P3同名,皆为特殊功能寄存器。因此,CPU数据从并行I/O端口输出时可以得到锁存,数据输入时可以得到缓冲。

4个并行I/O端口作为通用I/O口使用时,共有写端口、读端口和读引脚三种操作方式。写端口实际上就是输出数据,是将累加器A或其他寄存器中数据传送到端口锁存器中,然后由端口自动从端口引脚线上输出。读端口不是真正的从外部输入数据,而是将端口锁存器中的输出数据读到CPU的累加器。读引脚才是真正的输入外部数据的操作,是从端口引脚线上读入外部的输入数据。端口的上述三种操作实际上是通过指令或程序来实现的,这些将在以后章节中详细介绍。

6)串行I/O端口

8051有一个全双工的可编程串行I/O端口。这个串行I/O端口,既可以在程序控制下将CPU的8位并行数据变成串行数据,一位一位地从发送数据线TXD发送出去,也可以把串行接收到的数据变成8位并行数据并送给CPU。这种串行发送和串行接收可以单独进行,也可以同时进行。

8051串行发送和串行接收利用了P3口的第二功能,即利用P3.1引脚作为串行数据的发送线TXD和P3.0引脚作为串行数据的接收线RXD,如表1-3所示。串行I/O口的电路结构还包括串行口控制器(SCON)、电源及波特率选择寄存器(PCON)和串行数据缓冲器(SBUF)等,它们都属于特殊功能寄存器(SFR)。其中PCON和SCON用于设置串行口工作方式和确定数据的发送和接收波特率。SBUF实际上由两个8位寄存器组成,一个用于存放欲发送的数据,另一个用于存放接收到的数据,起着数据的缓冲作用。

7)总线

8051单片机属总线型结构,通过地址/数据总线可以与存储器(RAM、EPROM)、并行I/O接口芯片相连接。

在访问外部存储器时,P2口输出高8位地址,P0口输出低8位地址。由ALE(地址锁存允许)信号将P0口(地址/数据总线)上的低8位锁存到外部地址锁存器中,从而为P0口接受数据做准备。

在访问外部程序存储器(即执行MOVX)指令时,PSEN(外部程序存储器选通)信号有效,在访问外部数据存储器(即执行MOVX)指令时,由P3口自动产生读/写(R-D/WR)信号,通过P0口对外部数据存储器单元进行读/写操作。

4.控制引脚

(1)RST/VPD(第9脚)复位信号输入端。

当8051通电,时钟电路开始工作,在RESET引脚上出现24个时钟周期以上的高电平,系统即初始复位。初始化后,程序计数器PC指向0000H, P0~P3输出口全部为高电平,堆栈指时钟写入07H,其他专用寄存器被清“0”。RESET由高电平下降为低电平后,系统即从0000H地址开始执行程序。然而,初始复位不改变RAM(包括工作寄存器R0~R7)的状态,8051的初始状态如表1-4所示。

表1-4 单片机的复位状态

8051的复位方式可以是自动复位,也可手动复位,如图1-11所示。此外,RESET/Vida还是复用脚,VCC掉电期间,此脚可接上备用电源,以保证单片机内部RAM的数据不丢失。

图1-118051单片机的复位电路

当振荡器运行时,在此引脚上出现两个机器周期的高电平(由低到高跳变),将使单片机复位在VCC掉电期间,此引脚可接上备用电源,由VPD向内部提供备用电源,以保持内部RAM中的数据。

(2)ALE/(第30脚):地址锁存有效信号输出端。

正常操作时为ALE功能(允许地址锁存)提供把地址的低字节锁存到外部锁存器,ALE引脚以不变的频率(振荡器频率的1/6)周期性地发出正脉冲信号。因此,它可用作对外输出的时钟,或用于定时。但要注意,每当访问外部数据存储器时,将跳过一个ALE脉冲,ALE端可以驱动(吸收或输出电流)8个LSTTL电路。对于EPROM型单片机,在EPROM编程期间,此引脚接收编程脉冲(功能)。

(3)(第29脚):外部程序存储器读选通信号输出端。

在从外部程序存储取指令(或数据)期间,在每个机器周期内两次有效。同样可以驱动八次LSTTL输入。

(4)/VPP(第31脚):外部程序存储器选择端。

/VPP为高电平时,访问内部程序存储器,当/VPP为低电平时,则访问外部程序存储器。对于EPROM型单片机,在EPROM编程期间,此引脚上加21伏EPROM编程电源(VPP)。

1.3.2 MCS-51单片机的时序

振荡器输出的脉冲经2分频(即频率变为原来的1/2)成为内部时钟信号,用于单片机内部各功能部件按序协调工作的控制信号,其周期称为时钟周期(clock cycle),也称为状态(state)。6个时钟周期构成一个机器周期,或者说一个机器周期包含6个状态(s1~s6)。

MCS-51典型的指令周期(执行一条指令的时间称为指令周期)为一个机器周期,一个机器周期由6个状态(12振荡周期)组成。每个状态又被分成2个时相P1和P2。所以,一个机器周期可以依次表示为S1P1、S1P2、……、S6P1、S6P2。通常算术逻辑操作在P1时相进行,而内部寄存器传送在P2时相进行。

图1-12给出了8051单片机取指令和执行指令的定时关系。这些内部时钟信号不能从外部观察到,用XTAL2振荡信号作参考。在图中可看到,低8位地址的锁存信号ALE在每个机器周期中两次有效:一次在S1P2与S2P1期间,另一次在S4P2与S5P1期间。当操作码被送入指令寄存器时,单周期指令便从S1P2开始执行指令。如果是双字节单机器周期指令,则在同一机器周期的S4期间读入第二个字节。若是单字节单机器周期指令,则在S4期间仍进行读,但所读的这个字节操作码被忽略,程序计数器也不加1,在S6P2结束时完成指令操作。图1-12中的(a)和(b)给出了单字节单机器周期和双字节单机器周期指令的时序。8051指令大部分在一个机器周期完成。乘(MUL)和除(DIV)指令是仅有的需要2个以上机器周期的指令,占用4个机器周期。双字节单机器周期指令,通常是在一个机器周期内从程序存储器中读入2个字节,唯有MOVX指令例外。MOVX是访问外部数据存储器的单字节双机器周期指令。在执行MOVX指令期间,外部数据存储器被访问且被选通时,跳过2次取指操作。图1-12(c)中给出了一般单字节双机器周期指令的时序。

图1-128051时序