第3章 CHAPTER 3 80C51单片机电路结构 及功能 本章主要以51系列单片机中最基础的80C51单片机为例,详细介绍了单片机的片内硬件结构、引脚及端口,并在此基础上介绍了单片机的最小应用系统,最后介绍了单片机的低功耗模式。本章是学习单片机的一个重要基础,只有了解单片机片内硬件结构和硬件资源,熟悉单片机各引脚的功能特点,以及时钟电路、复位电路等,才能很好地将单片机应用到实际项目中。 初学者在学习本章内容时会有很多的困惑,对于一些暂时不能明白的地方先不要在此纠结,在后面涉及本章内容时再到此查阅,从而逐步掌握全部内容。 3.180C51单片机的片内硬件结构 单片机是一块将CPU、存储器和输入/输出单元集成在一块半导体硅片上的集成电路,片内包含中央处理器CPU、程序存储器ROM、数据存储器RAM、并行I/O接口、串行I/O接口、定时/计数器、中断系统等几大单元电路,通过内部总线将各单元连接成一个完整的系统。51系列单片机的基础芯片是80C51,其结构框图如图31所示。 图3180C51单片机内部结构框图 (1) 中央处理器(CPU): CPU是单片机内的核心部件,由控制器和运算器组成,是一个8位数据宽度的处理器。 (2) 数据存储器(RAM): 片内有128B(地址范围为00H~7FH)数据存储空间,片外还可以扩展最多64KB的数据存储器(地址范围为0000H~FFFFH)。 (3) 程序存储器(ROM): 片内4KB(地址范围为0000H~0FFFH)程序存储空间,片外还可以扩展最多64KB的程序存储器(地址范围为0000H~FFFFH)。 (4) 中断系统: 有5个中断源,2级中断优先级。 (5) 定时/计数器: 有2个16位的定时/计数器,具有4种工作方式。 (6) 串行口: 有1个全双工的异步串行口,具有4种工作方式。 (7) 并行口: 有4个8位的并行口,P0口、P1口、P2口和P3口。 (8) 特殊功能寄存器(SFR): 共有21个特殊功能寄存器,通过特殊功能寄存器可实现对单片机内部资源的管理、控制和监视。 3.280C51单片机的引脚介绍 3.2.1引脚的封装方式 单片机的内部电路和它的外部引脚由导线连接,内部电路被封装成一个芯片,我们只能看到芯片外部的引脚,通过它的引脚连接外部的其他电路,实现对芯片内部电路的操作。封装的作用是为了保护芯片内部电路及便于焊接安装。常见的80C51封装方式有3种。 1. PDIP封装 塑料双列直插封装(PDIP)的80C51芯片如图32所示。在有字(印刷着芯片型号等信息)的一面某个角有一个标记,表示这个位置的引脚编号为1,即引脚1或Pin 1,然后按逆时针顺序依次为引脚2,引脚3,……,引脚40。图32中引脚1对应的名称为P1.0,表示这个引脚的功能是P1.0(在后面的内容中具体介绍),引脚40对应的名称为VCC,表示这个引脚要连接正电源。 图32PDIP封装的引脚分布 2. QFP封装 PQFP或TQFP封装的80C51芯片均为扁平的44引脚的贴片式封装,如图33所示,有标记位置的引脚编号为引脚1,从这个位置开始逆时针排序依次是引脚2,引脚3,……,引脚44,引脚名称为NC表示这个引脚是空引脚,没有和内部电路连接。这种封装方式体积小、成本低,在产品中普遍应用。 图33QFP封装的引脚分布 3. PLCC封装 PLCC封装也是一种贴片式封装,如图34所示。其引脚标记位置在某一侧的中间,同样引脚的编号也是从这个位置开始,按照逆时针方向依次排序。 图34PLCC封装的引脚分布 3.2.2引脚的功能介绍 80C51单片机有40个引脚,根据引脚的用途可将其分为四大类,分别是电源引脚、时钟引脚、控制引脚和I/O引脚。 1. 电源引脚 (1) VCC: 接+5V电源。 (2) VSS: 接地。 2. 时钟引脚 (1) XTAL1: 芯片内部振荡器的反相放大器和外部时钟发生器的输入端。当使用芯片内部振荡器时,该引脚外接石英晶体振荡器和微调电容。当使用外部的独立时钟源时,该引脚接外部时钟振荡器的信号。 (2) XTAL2: 芯片内部振荡器反相放大器的输出端。当使用芯片内部振荡器时,该引脚外接石英晶体振荡器和微调电容。当使用外部时钟振荡器时,该引脚悬空。 3. 控制引脚 控制引脚包括RST、PSEN、ALE/PROG以及EA/VPP。 (1) RST(RESET): 复位信号输入端,高电平有效。在此引脚加上持续时间大于2个机器周期的高电平,就可使单片机复位。在单片机正常工作时,此引脚应保持≤0.5V的低电平。 (2) PSEN(Program Strobe Enable): 外部程序存储器的读选通信号,低电平有效。当单片机读取外部程序存储器时,该引脚输出一个负脉冲用于选通外部程序存储器,否则该引脚一直输出高电平。 (3) ALE/PROG(Address Latch Enable/Programming): 该引脚具有复用功能。 ALE为该引脚的第一功能: 当访问外部存储器时,ALE输出脉冲信号用于控制外部电路将P0口输出的8位地址锁存起来。在访问外部存储器时,如果地址为16位,低8位地址由P0口输出,高8位地址由P2口输出,由于资源有限,P0口要作为低8位地址和8位数据分时复用,因此必须将低8位地址锁存起来。 此外,单片机正常工作时,ALE一直以时钟振荡频率的1/6输出固定的正脉冲信号,该信号可作为外部时钟源或定时计数脉冲。需要注意的是,每当单片机访问外部数据存储器时,要丢失一个ALE脉冲,因此在片外扩展有外部数据存储器时,ALE引脚输出信号的频率并不是准确的时钟振荡频率的1/6。 PROG为该引脚的第二功能: 在对片内程序存储器进行编程时,此引脚作为编程脉冲输入端。 (4) EA/VPP(Enable Address/Voltage Pulse of Programming): 该引脚具有复用功能。 EA为该引脚的第一功能: 内部程序存储器和外部程序存储器的选择控制端。 当EA=1时,在程序计数器PC值不超出0FFFH(即不超出片内4KB程序存储器的最大地址范围)时,单片机读片内程序存储器(4KB)中的程序代码,当PC值超出0FFFH(即超出片内4KB程序存储器地址范围时),将自动转向读取片外60KB(1000H~FFFFH)程序存储器空间中的程序代码。 当EA=0时,只读取片外程序存储器中的内容,读取的地址范围为0000H~FFFFH,片内的4KB程序存储器不起作用。 VPP为该引脚的第二功能: 在对片内程序存储器进行编程时,此引脚接入编程电压。 4. I/O引脚 80C51单片机一共有32个I/O引脚,由4个8位的并行口P0、P1、P2、P3组成。单片机内部设有对应的特殊功能寄存器P0~P3用于控制或读取这4个并行口的状态。本章只对这4个并行口进行简单的介绍,详细介绍见第7章。 1) P0口 P0口既可作为通用I/O口使用,也可作为地址/数据复用总线使用。当P0口作为通用I/O口使用时,是一个8位准双向口,上电复位后处于开漏模式。P0口内部无上拉电阻,所以作通用I/O口使用时必须外接上拉电阻。当P0口作为地址/数据复用总线使用时,是低8位地址线(A0~A7)和数据线(D0~D7)共用,此时无须外接上拉电阻。 2) P1口 P1口是8位准双向I/O口,内置上拉电阻,可作为通用I/O口使用,能够驱动4个TTL负载。 3) P2口 P2口是8位准双向I/O口,内置上拉电阻,既可作为通用I/O口使用,也可作为高8位地址总线使用(A8~A15)。P2口作为通用I/O口使用时,可驱动4个TTL负载。当单片机访问外部存储器及I/O接口时,P2口输出16位地址中的高8位。 4) P3口 P3口是8位准双向I/O口,内置上拉电阻,可作为通用I/O口使用,能够驱动4个TTL负载。除此之外,P3口每个引脚还有第二功能。 上述为80C51单片机的40个引脚,大家应熟记每一个引脚的功能,这对于掌握80C51单片机应用系统硬件电路的设计方法十分重要。 3.380C51单片机的最小应用系统 80C51单片机的最小系统电路由单片机芯片、电源、时钟电路和复位电路构成,如图35所示。单片机的最小系统电路是构成单片机应用系统的基本硬件单元。根据实际需要,在最小系统电路上的I/O接口可外接扩展电路,以便实现不同的功能。 图35单片机最小系统电路 3.3.1时钟电路 时钟电路用于产生80C51单片机工作时所必需的控制信号,80C51的内部电路正是在时钟信号的控制下,严格按时序执行指令进行工作的。各外围部件的运行都是以时钟控制信号为基准,有条不紊、一拍一拍地工作。时钟频率直接影响单片机的速度,时钟电路的质量也直接影响单片机系统的稳定性。常用的时钟电路有内部时钟和外部时钟两种方式。 1. 内部时钟方式 80C51单片机内部有一个用于构成振荡器的高增益反相放大器,它的输入端为芯片引脚XTAL1,输出端为芯片引脚XTAL2。这两个引脚外部跨接石英晶体振荡器和微调电容,构成一个稳定的自激振荡器。80C51单片机的内部时钟方式的电路如图36所示。 电路中电容的典型值通常选择为15~30pF,石英晶体振荡器的频率通常选择6MHz、12MHz(可得到准确的定时)或11.0592MHz(可得到准确的串行通信波特率)。在实际电路设计中,应保证外接的石英晶体振荡器和电容尽可能靠近单片机的XTAL1引脚和XTAL2引脚,以减少寄生电容的影响,使振荡器能够稳定可靠地提供时钟信号。 2. 外部时钟方式 外部时钟方式是使用现成的外部振荡器产生时钟脉冲信号,将外部振荡器直接接到XTAL1引脚,XTAL2引脚悬空,如图37所示。外部时钟方式常用于多片单片机同时工作,以便于多片单片机之间的同步。 图3680C51单片机内部时钟方式的电路 图3780C51单片机外部时钟方式的电路 3.3.2时序 单片机时序是指单片机执行指令时发出的控制信号的时间序列,是一系列具有时间顺序的脉冲信号。CPU发出的时序有两类: 一类用于片内各功能部件的控制,它们是芯片设计师关注的问题,对用户没有什么意义; 另一类用于片外存储器或I/O端口的控制,需要通过器件的控制引脚送到片外,这部分时序对分析硬件电路的原理至关重要,也是软件编程遵循的原则,需要认真掌握。 单片机在时钟信号的控制下,严格按时序执行指令。由于指令的字节数不同,取这些指令所需要的时间也就不同,即使是字节数相同的指令,由于执行操作有较大的差别,不同的指令执行时间也不相同,即所需的节拍数不同。为了便于对CPU时序进行分析,一般按指令的执行过程规定了3种周期,即时钟周期、机器周期和指令周期。 1. 时钟周期 时钟周期也称为晶体的振荡周期,定义为时钟频率(fosc)的倒数,是计算机中最基本的时间单位。在一个时钟周期内,CPU仅完成一个最基本的动作。可以这么理解,时钟周期就是单片机外接晶振的倒数,例如,12MHz的晶振的时钟周期就是1/12μs。在单片机中把一个时钟周期定义为1个节拍(用P表示),2个节拍定义为一个状态周期(用S表示)。 2. 机器周期 在单片机中,为了便于管理,常把一条指令的执行过程划分为若干个阶段,每一阶段完成一项工作。例如,取指令、存储器读、存储器写等,每一项工作称为一个基本操作。完成一个基本操作所需要的时间称为机器周期。 80C51单片机的一个机器周期由6个状态周期(S1~S6)组成,而一个状态周期由2个时钟周期(P1、P2)组成,也就是说,1个机器周期=6个状态周期=12个时钟周期,可以表示为S1P1、S1P2、S2P1、S2P2,…,S6P1、S6P2,如图38所示。例如,12MHz的晶振,它的机器周期就是1μs。 图3880C51单片机的机器周期 3. 指令周期 指令周期是执行一条指令所需的时间,一般由若干个机器周期组成。80C51单片机中指令按字节来分,可分为单字节指令、双字节指令与三字节指令。指令不同,所需的机器周期也不同。对于一些简单的单字节指令,取出指令立即执行,只需一个机器周期的时间。对于一些比较复杂的指令,例如转移指令、乘法指令,则需要两个或者两个以上的机器周期。 从指令的执行时间看,单字节指令和双字节指令一般为单机器周期和双机器周期,三字节指令为双机器周期,只有乘、除指令占用4个机器周期。 3.3.3复位电路 复位是单片机的初始化操作。单片机启动运行时,都需要先复位,其作用是使CPU和系统中其他部件处于一个确定的初始状态,并从这个状态开始工作。因而,复位是一个很重要的操作方式。80C51单片机无法自动进行复位,必须配合相应的外部电路才能实现。复位时只需给单片机的复位引脚RST加上大于2个机器周期(24个时钟周期)的高电平即可。典型的复位电路如图39所示,该电路支持上电复位和手动复位。 图39典型的复位电路 上电时自动复位,是通过VCC(+5V)电源给电容C充电,此时,电容C上没有电荷,相当于短路,RST引脚上会有一个高电平信号,此信号随着VCC对电容C的充电过程而逐渐回落,当电容C充满时,电容相当于开路,RST引脚上为低电平信号,即RST引脚上的高电平持续时间取决于电容C的充电时间。为保证系统能可靠复位,RST引脚上的高电平持续时间必须大于复位所要求的高电平时间。 除了上电复位外,有时还需要人工按键复位。按键复位是通过RST端经两个电阻对电源VCC接通分压产生的高电平来实现。当单片机进行复位时,PC初始化为0000H,使程序从0000H地址单元开始执行程序。 系统发生失控时,如果操作人员在场,可按人工复位按键,强制系统复位。但操作人员不可能一直监视着系统,即使监视着系统,也往往是在引起不良后果之后才进行人工复位。能不能不需要人来监视,就能使系统摆脱失控的状态,重新执行正常的程序呢?看门狗技术可以很好地解决这个问题。目前市面上的大多数单片机内部都自带看门狗功能。需要注意的是,80C51单片机内部是不带看门狗功能的,但可以外接看门狗芯片来实现该功能。 看门狗技术就是利用一个定时器来不断计数,监视程序的运行。当看门狗定时器启动运行后,为防止看门狗定时器的不必要溢出而引起非正常的复位,在程序正常运行过程中,应定期把看门狗定时器清零,清零的过程称为“喂狗”。当程序“跑飞”或陷入“死循环”时,会导致程序无法定期喂狗,从而使定时器溢出,此时就会产生一个复位信号使单片机复位。 3.480C51单片机的低功耗节电模式 80C51单片机有两种低功耗节电模式: 空闲模式和掉电模式,其目的是尽可能降低系统的功耗。空闲模式和掉电模式的进入由电源控制寄存器PCON的相应位控制。PCON的字节地址是87H,格式如图310所示。 图310PCON的格式 PCON中各位功能如下。 (1) SMOD: 串行通信的波特率倍增位。 (2) —: 保留位,没有使用。 (3) GF1、GF0: 通用工作标志位,用户可以随意使用。 (4) PD: 掉电模式控制位,该位置1时,进入掉电模式。 (5) IDL: 空闲模式控制位,该位置1时,进入空闲模式。 3.4.1空闲模式 空闲模式是指只有单片机不工作的状态。单片机进入空闲模式后,振荡器仍然工作,但是不给CPU提供时钟信号,因而CPU无法执行指令,而外部中断、定时器、串行口等仍正常运行。在空闲模式下,RAM、堆栈指针(SP)、程序计数器(PC)、程序状态字(PSW)、累加器(A)等寄存器都保持原有数据,I/O口保持着空闲模式被激活前那一刻的逻辑状态。 系统进入空闲模式后有两种方法退出: 一种是响应中断方式,另一种是硬件复位方式。 (1) 在空闲模式下,当任何一个中断产生时,它们都可以将单片机唤醒,单片机被唤醒后,CPU将继续执行进入空闲模式语句的下一条指令。 (2) 使用硬件复位方式退出空闲模式时,单片机复位,程序从0000H地址单元开始执行程序。需要注意的是,在复位逻辑电路发挥控制作用前,有长达两个机器周期的时间,在这两个机器周期时间内,单片机要从断点处(IDL位置1指令的下一条指令)继续执行程序。在此期间,片内硬件阻止CPU对片内RAM的访问,但不阻止对外部端口(或外部RAM)的访问。为避免在硬件复位退出空闲模式时出现对端口(或外部RAM)不希望的写入,系统在进入空闲模式时,紧随IDL位置1指令后面的不应是写端口(或外部RAM)的指令。 3.4.2掉电模式 单片机进入掉电模式后,振荡器停止工作,由于没有时钟信号,CPU、定时器、串行口全部停止工作,只有外部中断继续工作。在掉电模式下,RAM、堆栈指针(SP)、程序计数器(PC)、程序状态字(PSW)、累加器(A)等寄存器都保持原有数据。I/O口保持着空闲模式被激活前那一刻的逻辑状态。 系统进入掉电模式后有两种方法退出: 一种是响应外部中断方式,另一种是硬件复位方式。使用外部中断唤醒单片机时,程序从原来停止处继续运行。使用硬件复位唤醒单片机时,程序将从头开始执行。