2.2 51单片机总体结构

本节以51单片机基本内核的典型产品8051为例,对单片机的结构作详细介绍。

2.2.1 51单片机总体结构框图及功能

8051单片机内部由CPU、4KB的ROM、256B的RAM、4个8位的I/O并行端口、一个串行口、两个16位定时/计数器及中断系统等组成,其内部基本结构框图如图2-1所示。

图2-1 8051单片机内部基本结构框图

由图2-1可以看出,单片机内部各功能部件通常都挂靠在内部总线上,它们通过内部总线传送地址信息、数据信息和控制信息,各功能部件分时使用总线,即所谓的内部单总线结构。

图2-2为8051单片机系统结构原理框图。

1.CPU

CPU是单片机内部的核心部件,是单片机的指挥和控制中心。从功能上看,CPU可分为运算器和控制器两大部分。

(1)控制器

控制器主要功能是依次取出由程序计数器所指向的程序存储器ROM存储单元的指令代码,并对其进行分析译码。然后通过定时和控制电路,按时序规定发出指令功能所需要的各种(内部和外部)控制信息,使各功能模块协调工作,执行该指令功能所需的操作。

控制器主要包括程序计数器、指令寄存器、指令译码器及定时控制电路等。

程序计数器(Program Counter,PC)是一个16位的专用寄存器,用来存放CPU要执行的、存放在程序存储器中的、下一条指令存储单元的地址。当CPU要取指令时,CPU首先将PC的内容(即指令在程序存储器的地址)送往地址总线(AB)上,从程序存储器取出当前要执行的指令,经指令译码器对指令进行译码,由定时、控制电路发出各种控制信息,完成指令所需的操作。同时,PC的内容自动递增或按上一条指令的要求,指向CPU要执行的下一条指令的地址。当前指令执行完后,CPU重复以上操作。CPU就是这样不断地取指令,分析执行指令,从而保证程序的正常运行。

图2-2 8051单片机系统结构原理框图

由此可见,程序计数器PC实际上是当前指令所在地址的指示器。CPU所要执行的每一条指令,必须由PC提供指令的地址。对于一般顺序执行的指令,PC的内容自动指向下一条指令;而对于控制类指令,则是通过改变PC的内容,来改变执行指令的顺序。

当系统上电复位后,PC的内容为0000H,CPU便从该入口地址开始执行程序。所以,单片机主控程序的首地址自然应定位为0000H。

(2)运算器ALU

运算器的功能是对数据进行算术运算和逻辑运算。计算机对任何数据的加工、处理必须由运算器完成。

运算器可以对单字节(8位)、半字节(4位)二进制数据进行加、减、乘、除算术运算和与、或、异或、取反、移位等逻辑运算。

运算器由算术逻辑运算部件ALU、累加器ACC、程序状态字寄存器PSW等组成。各部分主要功能如下。

1)算术逻辑运算部件ALU。

ALU由加法器和其他逻辑电路组成。ALU主要用于对数据进行算术和各种逻辑运算,运算的结果一般送回累加器ACC,而运算结果的状态信息送程序状态字PSW。

2)累加器ACC。

ACC是一个8位寄存器,指令助记符可简写为“A”,它是CPU工作时最繁忙、最活跃的一个寄存器。CPU的大多数指令,都要通过累加器“A”与其他部件交换信息。ACC常用于存放使用次数高的操作数或中间结果。

3)程序状态寄存器PSW。

PSW是一个8位寄存器,用于寄存当前指令执行后的某些状态,即反映指令执行结果的一些特征信息。这些信息为后续要执行的指令(如控制类指令)提供状态条件,供查询和判断,不同的特征用不同的状态标志来表示。

PSW各位定义见表2-1。

表2-1 PSW各位定义

● Cy(PSW.7):即PSW的D7位,进位/借位标志。

在进行加、减运算时,如果运算结果的最高位D7有进位或借位时,Cy置“1”,否则Cy置“0”。在执行某些运算指令时,可被置位或清零。在进行位操作时,Cy是位运算中的累加器,又称位累加器。MCS-51有较强的位处理能力,一些常用的位操作指令,都是以位累加器为核心而设计的。Cy的指令助记符用“C”表示。

● AC(PSW.6):即PSW的D6位,辅助进位标志。

在进行加、减法运算时,如果运算结果的低4位向高4位产生进位或借位时,AC置“1”,否则AC置“0”。

AC位可用于BCD码运算调整时的判断位,即作为BCD码调整指令“DA A”的判断依据之一。

● F0(PSW.5)及F1(PSW.1):即PSW的D5位、D1位,用户标志位。

可由用户根据需要置位、复位,作为用户自行定义的状态标志。

● RS1及RS0(PSW.4及PSW.3):即PSW的D4位、D3位,寄存器组选择控制位。

用于选择当前工作的寄存器组,可由用户通过指令设置RS0、RS1,以确定当前程序中选用的寄存器组。当前寄存器组的指令助记符为R0~R7,它们占用RAM地址空间。

RS0、RS1与寄存器组的对应关系见表2-2。

表2-2 RS0、RS1与寄存器组的对应关系表

由此可见,单片机内的寄存器组,实际上是片内RAM中的一些固定的存储单元。

单片机上电或复位后,RS0和RS1均为0,CPU自动选中0组,片内RAM地址为00H~07H的8个单元为当前工作寄存器,即R0~R7。

● OV(PSW.2):即PSW的D2位,溢出标志位。

在进行算术运算时,如果运算结果超出一个字长所能表示的数据范围即产生溢出,该位由硬件置“1”,若无溢出,则置“0”。例如,MCS-51单片机的CPU在运算时的字长为8位,对于有符号数来说,其表示范围为-128~+127,运算结果超出此范围即产生溢出。

● P(PSW.0):即PSW的D0位,奇偶标志位。

P用于表示累加器A中“1”的个数是奇数还是偶数,若为奇数,则P=1,否则P=0。

P常用来作为传输通信中对数据进行奇、偶校验的标志位。

2.RAM

RAM为单片机内部数据存储器。其存储空间包括随机存储器区、寄存器区、特殊功能寄存器及位寻址区。

3.ROM

ROM为单片机内部程序存储器,主要用于存放处理程序(下节详述)。

4.并行I/O口

P0~P3是4个8位并行I/O口,每个口既可作为输入,也可作为输出。单片机在与外部存储器及I/O端口设备交换信息时,必须由P0~P3口完成。

P0~P3口提供CPU访问外部存储器时所需的地址总线、数据总线及控制总线。

P0~P3口作为输出时,数据可以锁存,输入时具有缓冲功能。每个口既可同步传送8位数据,又可按位寻址传送其中1位数据,使用十分方便。

5.定时器/计数器

定时器/计数器用于定时和对外部事件进行计数。当它对具有固定时间间隔的内部机器周期进行计数时,它是定时器;当它对外部事件所产生的脉冲进行计数时,它是计数器。

6.中断系统

51单片机有5个中断源,中断处理系统灵活、方便,使单片机处理问题的灵活性和工作的效率大大提高。

7.串行接口

串行接口提供对数据各位按序一位一位地传送。

51单片机中的串行接口是一个全双工通信接口,即能同时进行发送和接收数据。

8.时钟电路OSC

CPU执行指令的一系列动作都是在时序电路的控制下一拍一拍进行的,时钟电路用于产生单片机中最基本的时间单位。

以上所述为51单片机内部的基本功能部件。对于存储器、定时器、中断系统、串行接口等,后续章节中将分别详细介绍。

2.2.2 51单片机芯片引脚功能

8051单片机芯片采用40脚双列直插式封装,其引脚排列及逻辑符号如图2-3所示。

图2-3 51单片机芯片引脚图

a)DIP引脚 b)逻辑符号

STC12C5A系列单片机芯片引脚图如图2-4所示。

图2-4 STC12C5A系列单片机芯片引脚图

a)40脚双列直播式 b)贴片式

由于51单片机的高性能而受引脚数目的限制,所以有不少引脚具有双重功能。

下面分别说明8051单片机各引脚的含义和功能。

1.主电源引脚VCC和VSS

VCC:接主电源+5V。

VSS:电源接地端。

2.时钟电路引脚XTAL1和XTAL2

为了产生时钟信号,在8051内部设置了一个反相放大器,XTAL1是片内振荡器反相放大器的输入端,XTAL2是片内振荡器反相放大器的输出端,也是内部时钟发生器的输入端。当使用自激振荡方式时,XTAL1和XTAL2外接石英晶振,使内部振荡器按照石英晶振的频率振荡,即产生时钟信号。

当使用外部信号源为8051提供时钟信号时,XTAL1应接地,XTAL2接外部时钟信号。

3.控制信号引脚

(1)RST/VPD

RST/VPD为复位/备用电源输入端。

复位功能:单片机上电后,在该引脚上出现两个机器周期(24个振荡周期)宽度以上的高电平,就会使单片机复位。可在RST与VCC之间接一个10µF的电容,RST再经一8kΩ下拉电阻接VSS,即可实现单片机上电自动复位。

备用功能:在主电源VCC掉电期间,该引脚VPD可接+5V电源,当VCC下降到低于规定的电平,而VPD在其规定的电压范围内时,VPD就向片内RAM提供备用电源,以保持片内RAM中信息不丢失,以便电压恢复正常后单片机能正常运行。

(2)ALE/ALE/为低8位地址锁存使能输出/编程脉冲输入端。

地址锁存使能输出ALE:当单片机访问外部存储器时,外部存储器的16位地址信号由P0口输出低8位,P2口输出高8位,ALE可用作低8位地址锁存控制信号;当不用作外部存储器地址锁存控制信号时,该引脚仍以时钟振荡频率的1/6固定地输出正脉冲,可以驱动8个LS型TTL负载。

编程脉冲输入端:在对8751片内EPROM编程(固化程序)时,该引脚用于输入编程脉冲。

(3)为外部程序存储器控制信号,即读选通信号,可以驱动8个LS型TTL负载。CPU在访问外部程序存储器时,在每个机器周期中,信号两次有效。

(4)/VPP/VPP为外部程序存储器允许访问/编程电源输入。:当时,CPU从片内程序存储器开始读取指令。当程序计数器PC的值超过0FFFH时(8051片内程序存储器为4KB),将自动转向执行片外程序存储器的指令。当EA=0时,CPU只能访问片外程序存储器。

VPP:在对8751内部EPROM编程时,此引脚应接21V编程电源。

特别注意,不同芯片有不同的编程电压VPP,应仔细阅读芯片说明。

4.并行I/O口P0~P3端口引脚

单片机实现任何控制功能,必须通过I/O端口引脚实现对接口电路(外部设备)相关信息的读、写,以实现对外部设备的控制。51单片机与外部设备的信息交换,全部由并行8位I/O共32位数据线来实现。8051并行I/O端口P0~P3端口结构引脚图,如图2-5所示。

图2-5 8051 并行I/O端口结构引脚图

a)P0端口结构引脚图 b)P1端口结构引脚图 c)P2端口结构引脚图 d)P3端口结构引脚图

(1)P0口(P0.0~P0.7)

P0口内部是一个8位漏极开路型双向I/O端口。

P0口在作通用I/O口使用时应外接10kΩ左右的上拉电阻。在端口进行输入操作(即CPU读取端口数据)前,应先向端口的输出锁存器写“1”。

在CPU访问片外存储器时,P0口自动作为地址/数据复用总线使用,分时向外部存储器提供低8位地址和传送8位双向数据信号。P0口作为地址/数据复用总线使用时是一个真正的双向口。

在对EPROM编程时,由P0口输入指令字节,而在验证程序时,P0输出指令字节(验证时应外接上拉电阻)。

对于标准(早期)的Intel8051单片机,P0口能以吸收电流的方式驱动8个LS型TTL负载。LS型TTL负载是指单片机端口所接负载是74LS系列的数字芯片。以TI公司的74LS00芯片为例,其输入端接高电平时,输入电流为20μA,输入端接低电平时,输入电流是-0.4mA。因此,单片机端口(位)输出高电平时,每个LS型TTL输入端将是20μA的拉电流型负载;单片机端口(位)输出低电平时,则吸收0.4mA的负载电流。P0口每个端口(位)可以驱动8个LS型TTL负载,允许吸收电流为0.4×8=3.2mA。

(2)P1口(P1.0~P1.7)

P1口是一个内部带上拉电阻的8位准双向I/O端口。

当P1输出高电平时,能向外部提供拉电流负载,因此,不需再外接上拉电阻。当端口用作输入时,也应先向端口的输出锁存器写入“1”,然后再读取端口数据。

在对EPROM编程和验证程序时,它用来输入低8位地址。

早期8051单片机P1口能驱动4个LS型TTL负载。

(3)P2口(P2.0~P2.7)

P2口也是一个内部带上拉电阻的8位准双向I/O端口。

当CPU访问外部存储器时,P2口自动用于输出高8位地址,与P0口的低8位地址一起形成外部存储器的16位地址总线。此时,P2口不再作为通用I/O口使用。

早期8051单片机P2口可驱动4个LS型TTL负载。

在对EPROM编程和验证程序时,P2口用作接收高8位地址。

(4)P3口(P3.0~P3.7)

P3口是一个内部带上拉电阻的8位多功能双向I/O端口。

P3口除了作通用I/O端口外,其主要功能是它的各位还具有第二功能。无论P3口作通用输入口还是作第二输入功能口使用,相应位的输出锁存器和第二输出功能端都应置“1”。

早期8051单片机P3口能驱动4个LS型TTL负载。

P3口作为第二功能使用时各引脚定义见表2-3。

表2-3 P3口各位的第二功能表

可以看出,P3口的第二功能包含:串行输入/输出、外部中断控制、定时器外部输入控制及外部存储器读写控制端口。由于这些控制端口单片机没有专设的控制信号引脚,单片机在进行上述操作时所需要的控制信号必须由P3口提供,P3口第二功能相当于PC中CPU的控制线引脚。

综上所述,由于P0口与P1、P2、P3口的内部结构不同,其功能也不相同。随着51兼容机性能的不断提升,负载驱动电流也比早期的51单片机大大提高,在使用时应注意以下方面。

1)P0~P3都是准双向I/O口,即CPU在读取数据时,必须先向相应端口的锁存器写入“1”。各端口名称与锁存器名称在编程时相同,均可用P0~P3表示。当系统复位时,P0~P3端口锁存器全为“1”,CPU可直接对其进行读取数据。

2)由于早期51单片机驱动能力较低,如果驱动更多的器件,可以用“8位总线缓冲驱动”芯片来实现,例如,经常使用的74LS244、74LS245芯片。

3)P0口可作通用输入、输出端口使用。若输出高电平驱动拉电流负载时,需外接阻值合适的上拉电阻(一般为几千欧)才能使该位输出高电平(或负载所需分压电平)。P1、P2、P3口输出均接有内部上拉电阻,输出端无须外接上拉电阻。拉电流能力一般不高于1mA。

4)常用的89C51单片机P0口输出低电平时,一个引脚吸收的最大电流为10mA,允许吸收的最大总电流(即P0口8个引脚允许电流总和)为26mA;P1、P2及P3口分别吸收的总电流最大为15mA;最新STC12系列单片机I/O口的吸收电流是20mA,传统STC89Cxx系列单片机I/O口的吸收电流是8~12mA。为了提高输出负载能力,单片机输出口一般采用驱动器输出,并且以输出低电平作为控制信号。

5)P0、P2、P3口在无系统扩展时可以作通用I/O端口使用。但在系统扩展时应当特别注意,当CPU访问由扩展的外部存储器时,CPU将自动地把外部存储器的地址线信号(16位)送P0、P2口(P0口输出低8位地址,P2口输出高8位地址),向外部存储器输出16位存储单元地址。在控制信号ALE的作用下,该地址低8位被锁存后,P0口自动切换为数据总线。这时经P0口可向外部存储器进行读、写数据操作。此时,P0口为地址/数据复用口(不必外接上拉电阻)、P2口不再作通用I/O端口、P3.7或P3.6作为读或写控制信号输出。

6)P3口若不需要作第2功能口,则自动作为通用I/O口使用。当仅需要P3口的某些位作第2功能使用时,则另一些位不宜作为位处理的I/O口使用。