3.2 MCS-51单片机的总体结构

自从Intel公司20世纪80年代初推出MCS-51系列单片机以后,世界上许多著名的半导体厂商也相继生产与该系列兼容的单片机,使产品型号不断增加、品种不断丰富、功能不断加强。从系统结构上看,所有的51系列单片机都是以Intel公司最早的典型产品8051为核心,增加了一定的功能部件后构成的。MCS-51系列单片机已有多种产品,可分为两大系列:51子系列(又称为基本型)和52子系列(又称为增强型)。

51子系列主要有8031、8051、8751三种机型。它们的指令系统与引脚完全兼容,其差别仅在于片内有无ROM或EPROM:8051有4KB的ROM,8751有4KB的EPROM,8031片内无程序存储器。

52子系列主要有8032、8052、8752三种机型。52子系列与51子系列的不同之处在于:片内数据存储器增至256B,片内程序存储器增至8KB(8032无),有3个定时器/计数器,6个中断源,其余性能均与51子系列的相同。

MCS-51系列单片机已有十多个产品,其性能如表3-1所示。

表3-1 MCS-51系列单片机性能表

表中列出了4组性能上略有差异的单片机。前两组属于同一规格,都可称为51子系列。后两组为52子系列,性能要高于51系列,除存储器配置差别外,8052片内ROM中掩模了BASIC解释程序,因而可以直接使用BASIC程序。此外87C51和87C52还具有两级程序保密系统。

另外,为了适应不同的需要,近几年单片机生产厂商又在基本单片机的基础上生产了称为特殊型的MCS-51单片机。特殊型MCS-51单片机体现在以下几个方面。

① 内部程序存储器容量的扩展,由1KB、2KB、4KB、8KB、16KB、20KB、32KB,发展到64KB,甚至更多。

② 片内数据存储器的扩展,目前已有512B、1KB、2KB、4KB、8KB等。

③ 增加了外设的功能,如片内A/D、D/A、DMA、并行接口、PCA(可编程计数阵列)、PWM(脉宽调制)、PLC(锁相环控制)、WDT(看门狗)等。

④ 增加存储器的编程方式,如ISP和IAP,可以通过并口、串口或专门引脚烧录程序。

⑤ 通信功能的增强,有2个串口、I2C总线、SPI、USB总线、CAN总线、自带TCP/IP协议等。

⑥ 带有JTAG(Joint Test Action Group)的调试型单片机。

无论是增强型还是特殊型,都是从基本型发展而来的,因此本书以基本型为主,在必要的地方将提及增强型。

3.2.1 内部结构

MCS-51单片机是在一块芯片上集成了CPU、RAM、ROM、定时器/计数器和多种I/O功能部件,具有了一台微型计算机的基本结构,主要包括下列部件:

一个8位的CPU、一个布尔处理机、一个片内振荡器、128B的片内数据存储器、4KB的片内程序存储器(8031 无)、外部数据存储器和程序存储器的寻址范围为64KB、21 个字节的专用寄存器、4个8位并行I/O接口、一个全双工的串行口、2个16位的定时器/计数器、5个中断源、2个中断优先级、 111 条指令、片内采用单总线结构。图3-3为MCS-51系列单片机的内部结构框图。

图3-3 MCS-51单片机的结构框图

从图3-3 中可以看出,按功能可划分为8 个组成部分:微处理器(CPU)、数据存储器(RAM)、程序存储器(ROM/EPROM)、特殊功能寄存器(SFR)、I/O接口、串行口、定时器/计数器及中断系统,各部分是通过片内单一总线连接起来的。

(1)微处理器(CPU)

MCS-51单片机的微处理器包括运算器和控制器两大部分,它是单片机的核心,完成运算和控制功能。运算器是单片机的运算部件,用于实现算术运算和逻辑运算;控制器是单片机的指挥和控制部件,它保证单片机各部分能自动而协调地工作。

(2)数据存储器(RAM)

MCS-51单片机芯片内共有256个RAM空间,但其中后128个单元被专用寄存器(SFR)占用,通常所说的内部数据存储器指的是前128 个字节,片外最多可以扩展为64KB。数据存储器用于存储程序运行期间的变量、中间结果、数据暂存和缓冲等。

(3)程序存储器(ROM/EPROM)

在MCS-51单片机系列中,8031片内没有程序存储器,8051内部有4KB的掩模ROM,8751内部有4KB的EPROM,片外最多可以扩展64KB。程序存储器用于存放程序和原始数据或表格。

(4)定时器/计数器

MCS-51单片机内部有两个16位定时器/计数器,以实现定时或计数功能,并以正定时器或计数结果对单片机进行控制。

(5)并行I/O接口

MCS-51单片机内部有4个并行I/O接口(P0、P1、P2、P3),以实现数据的并行输入/输出及总线扩展。

(6)串行通信口

MCS-51单片机内部有一个全双工的串行通信口,以实现单片机和其他设备之间的串行数据传送。该串行通信口功能较强,既可作为全双工异步通信收发器使用,也可作为同步移位寄存器使用。

(7)中断系统

MCS-51单片机有5个中断源(2个外部中断、2个定时器/计数器溢出中断、1个串行口中断)。中断优先级分为高、低两级。

(8)位处理器

位处理器也称为布尔处理器。位处理器能对可寻址位进行复位、置位、取反等位操作。位处理器是单片机的重要组成部分,因为它是单片机实现控制功能的保证。

上述这些部件通过片内总线连接在一起构成一个完整的单片机。单片机的地址信号、数据信号和控制信号都是通过总线传送的。总线结构减少了单片机的连线和引脚,提高了集成度和可靠性。

3.2.2 外部引脚说明

HMOS工艺制造的MCS-51单片机大都采用40条引脚的双列直插式封装(DIP),其引脚示意如图3-4所示。

图3-4 MCS-51单片机外部引脚图

各引脚说明如下。

(1)电源引脚

电源引脚接入单片机的工作电源。

VCC(40脚):接+5V电源(直流电源正端)。

VSS(20脚):接地(直流电源负端)。

(2)时钟引脚

时钟引脚(18、19脚):外接晶体时与片内的反相放大器构成一个振荡器,它提供单片机的时钟控制信号。时钟引脚也可以外接晶体振荡器。

XTAL1(18脚):接外部晶体的一个引脚。在单片机内部,它是一个反相放大器的输入端,这个放大器构成了片内振荡器。当采用外部时钟时,对于HMOS单片机,此引脚接地;对于CHOMS单片机,此引脚作为外部振荡器信号的输入端。

XTAL2(19脚):接外部晶体的另一端,在单片机内部接至反相放大器的输出端。若采用外部时钟,对于HMOS单片机,该引脚作为外部振荡信号的输入端;对于CHMOS单片机,该引脚悬空不接。

(3)输入/输出引脚

输入/输出(I/O)接口引脚包括P0口、P1口、P2口和P3口。

① P0口(P0.0~P0.7):为双向8位三态I/O接口。在不接片外存储器或不扩展I/O接口时,可作为准双向输入/输出口;在接有片外存储器或扩展I/O接口时,P0口是地址总线低8位及数据总线分时复用口,一般作为扩展时地址/数据总线口使用。

② P1口(P1.0~P1.7):为8位准双向I/O接口,它的每一位都可以分别定义为输入线或输出线(作为输入时,口锁存器必须置1)。对于52系列单片机,P1.0与P1.1还有第二功能:P1.0可用做定时器/计数器2的计数脉冲输入端T2,P1.1可用做定时器/计数器2的外部控制端T2EX。

③ P2口(P2.0~P2.7):为8位准双向I/O接口,当作为I/O接口使用时,可直接连接外部I/O设备;在接有片外存储器或扩展I/O接口且寻址范围超过256B时,P2口用做高8位地址总线,一般作为扩展时地址总线的高8位使用。

④ P3口(P3.0~P3.7):为8位准双向I/O接口,还可以将每一位用于第二功能,而且P3口的每一条引脚均可以独立定义为第一功能的输入/输出或第二功能。P3口的第二功能定义如表3-2所示。

表3-2 P3口第二功能

(4)控制引脚

控制引脚包括RESET(即RST)、ALE、等,此类引脚提供控制信号,有些引脚具有复用功能。

① RST/VPD(9脚):RST即为RESET,VPD为备用电源。该引脚为单片机的上电复位或掉电保护端。当单片机振荡器工作时,该引脚上出现持续两个机器周期的高电平,可实现复位操作,使单片机回复到初始状态。复位后应使此引脚电平为小于等于0.5V的低电平,以保证单片机正常工作。上电时,考虑到振荡器有一定的起振时间,该引脚上高电平必须持续10ms以上才能保证有效复位。

当VCC发生故障、降低到低电平规定值或掉电时,该引脚可接上备用电源VPD,为内部RAM供电,以保证RAM中的数据不丢失。

② ALE/PROG(30脚):地址锁存有效输出端。ALE在每个机器周期内输出两个脉冲。在访问外部存储器时,ALE输出脉冲的下降沿用于锁存16位地址的低8位。即使不访问外部存储器,ALE端仍有周期性正脉冲输出,其频率为振荡频率的1/6。但是,每当访问外部数据存储器时,在两个机器周期中ALE只出现一次,即丢失一个ALE脉冲。ALE端可以驱动8个TTL负载。

对于片内具有EPROM的单片机8751,在EPROM编程期间,此引脚用于输入编程脉冲PROG。

③ PSEN(29脚):片外程序存储器读选通信号输出端,低电平有效。在从外部程序存储器取指令(或常数)期间,每个机器周期两次有效。但在此期间,每当访问外部数据存储器时,这两次有效的信号将不出现。同样可以驱动8个TTL负载。

④ EA/VPP(31脚):EA为片外程序存储器选用端。当端保持高电平时,单片机访问的是内部程序存储器(对8051、8751来说),但当PC(程序计数器)值超过某值(如8751内部含有4KB EPROM,值为0FFFH)时,将自动转向执行外部程序存储器内的内容。当端保持低电平时,则不管是否有内部程序存储器,都只访问外部程序存储器。对8031来说,因其无内部程序存储器,所以该引脚必须接地,即此时只能访问外部程序存储器。

对于片内有EPROM的单片机8751,在EPROM编程期间,此引脚用于施加编程电源VPP。

综上所述,MCS-51系列单片机的引脚可归纳为以下两点:

① 单片机功能多,引脚数少,因而许多引脚都具有第二功能。

② 单片机对外呈现总线形式,由P2、P0口组成16位地址总线;由P0口分时复用为数据总线;由与P3口中的构成对外部存储器及I/O的读/写控制,由P3口的其他引脚构成串行口、外部中断输入、计数器的计数脉冲输入。MCS-51单片机的总线结构如图3-5所示。

图3-5 MCS-51单片机的总线结构图

3.2.3 微处理器

MCS-51单片机内部有一个功能极强的8位微处理器,它是单片机的核心部分,决定了单片机的重要功能特性。它由运算器和控制器两大部分组成。

1.运算器

运算器以算术逻辑单元ALU为核心,包括累加器ACC、寄存器B、程序状态字PSW、布尔处理器等许多部件。它能实现数据的算术逻辑运算、位变量处理和数据传送操作。

(1)算术逻辑单元ALU

算术逻辑单元不仅能完成8位二进制数的加、减、乘、除、加1、减1及BCD加法的十进制调整等算术运算,还能对8位变量进行逻辑“与”、“或”、“异或”、循环移位、求补、清零等逻辑操作,并具有数据传输、程序转移等功能,即在控制器所发的内部控制信号的控制下,进行各种算术和逻辑操作。

(2)累加器A和寄存器B

累加器A又称为ACC,是一个具有特殊用途的8位寄存器,它是CPU中使用最频繁的寄存器。进入ALU做算术和逻辑运算的操作数多来自A,运算结果也常送至A保存。累加器A相当于数据的中转站。由于数据传送大都要通过累加器完成,因此累加器容易产生“堵塞”现象,即累加器具有“瓶颈”现象。

寄存器B是为ALU进行乘除法运算而设置的,若不做乘除法运算,则可作为通用寄存器使用。

(3)程序状态字PSW

程序状态字PSW是一个8位寄存器,它保存指令执行结果的特征信息,为下一条指令或以后的指令的执行提供状态条件。PSW中的各位一般是在指令执行过程中形成的,但也可以根据需要采用传送指令加以改变。其各位定义如图3-6所示。

图3-6 程序状态字PSW各位定义

① 进位标志C(PSW.7)

在执行某些算术运算类、逻辑运算类指令时,可被硬件或软件置位或清零。它表示运算结果是否有进位或借位。如果在最高位有进位(加法时)或借位(减法时),则C=1,否则C=0。

② 辅助进位(或称半进位)标志位AC(PSW.6)

它表示两个8位数运算,低4位有无进(借)位的状况。当低4位相加(或相减)时,若D3位向D4位有进位(或借位),则AC=1,否则AC=0。在BCD码运算的十进制调整中要用到该标志。

③ 用户自定义标志位F0(PSW.5)

用户可根据自己的需要为F0赋予一定的含义,通过软件置位或清零,并根据F0=1或0来决定程序的执行方式,或系统某一种工作状态。

④ 工作寄存器组选择位RS1、RS0(PSW.4、PSW.3)

可用软件置位或清零,用于选定当前使用的4个工作寄存器组中的某一组。关于寄存器组的选择在下一节中进行说明。

⑤ 溢出标志位OV(PSW.2)

做加法或减法时由硬件置位或清零,以指示运算结果是否溢出。在带符号数加减运算中,OV=1表示加减运算超出了累加器所能表示的数值范围(-128~+127),即产生了溢出,因此运算结果是错误的。OV=0表示运算正确,即无溢出产生。

执行乘法指令MUL AB也会影响OV标志,当积大于255时,OV=1,否则OV=0;执行除法指令DIV AB也会影响OV标志,如B中所存放的除数为0,则OV=1,否则0V=0。

⑥ 奇偶标志位P(PSW.0)

在执行指令后,单片机根据累加器A中1的个数的奇偶自动将该标志置位或清零。若A中1的个数为奇数,则P=1,否则P=0。该标志对串行通信的数据传输非常有用,通过奇偶校验可检验传输的可靠性。

需要说明的是,尽管PSW中未设定“0”标志位和“符号”标志位,但MCS-51指令系统中有两条指令(JZ、JNZ)可直接对累加器A的内容是否为“0”进行判断。此外,由于MCS-51可以进行位寻址,直接对8位二进制数的符号位进行位操作(如JB、JNB、JBC指令),所以使用相应的条件转移指令对上述特征状态进行判断也是很方便的。

(4)布尔处理机

布尔处理机(即位处理器)是MCS-51单片机ALU所具有的一种功能。单片机指令系统中的位处理指令集(17条位操作类指令)、存储器中的位地址空间及借用程序状态寄存器PSW中的进位标志C作为位操作“累加器”,构成了MCS-51单片机内的布尔处理机,它可对直接寻址的位(bit)变量进行位操作,如置位、清零、取反、测试转移及逻辑“与”、“或”等位操作,使用户在编程时可以利用指令完成原来单凭复杂的硬件逻辑所完成的功能,并可方便地设置标志等。

2.控制器

控制器是单片机的神经中枢,它包括定时和控制电路、指令寄存器、译码器及信号传送控制等部件。它先以主振频率为基准发出CPU的时序,对指令进行译码,然后发出各种控制信号,完成一系列定时控制的微操作,用来协调单片机内部各功能部件之间的数据传送、数据运算等操作,并对外发出地址锁存ALE、外部程序存储器选通,以及通过P3.6和P3.7发出数据存储器读、写等控制信号,并且接收处理外接的复位和外部程序存储器访问控制信号。控制器的各功能部件如下:

(1)程序计数器PC

程序计数器PC是一个16位专用寄存器,其内容表示下一条要执行的指令的地址。

PC具有自动加1功能。当CPU要取指令时,将PC中的地址送到地址总线上。从存储器中取出指令后,PC中的地址则自动加1,指向下一条指令,以保证程序按顺序执行。由此可见,PC是一个地址指示器,改变PC的内容就可以改变指令执行的次序,即改变程序执行的路线。当系统复位后,PC=0000H,CPU便从这一固定的入口地址开始执行程序。

(2)堆栈指针SP

MCS-51单片机的堆栈是在片内RAM中开辟的一个专用区。堆栈指针SP是一个8位专用寄存器,用来存放栈顶的地址。进栈时,SP自动加1,将数据压入SP所指定的地址单元;出栈时,将SP所指示的地址单元中的数据弹出,然后SP自动减1。因此SP总是指向栈顶。

系统复位后,SP初始化为07H,因此堆栈实际上由08H单元开始。08H~1FH单元分别属于工作寄存器区1~3,若在程序设计中要用到这些区,则最好把SP值用软件改设为1FH或更大值。通常设堆栈区在30H~7FH区间。由于堆栈区在程序中没有标识,因此程序设计人员在进行程序设计时应主动给可能的堆栈区空出若干单元,这些单元是禁止用传送指令来存放数据的,只能由PUSH和POP指令访问它们。

(3)数据指针DPTR

数据指针DPTR是一个16位的专用地址指针寄存器,主要用来存放16位地址,作为间址寄存器使用。DPTR也可以分为两个8位的寄存器,即DPH(高8位字节)和DPL(低8位字节)。

(4)指令寄存器、指令译码器和CPU定时控制

CPU从程序存储器内取出的指令,首先要送到指令寄存器,然后送入指令译码器,由指令译码器对指令进行译码,即把指令转变成执行该指令所需要的电信号,再通过CPU的定时和控制电路,发出特定的时序信号,使计算机正确地执行程序所要求的各种操作。