汽车单片机应用技术(第2版)
上QQ阅读APP看书,第一时间看更新

1.2 MCS-51单片机结构和原理

1.2.1 MCS-51单片机的内部组成及信号引脚

MCS-51单片机的典型芯片是8031、8051、8751。8051内部有4KB ROM,8751内部有4KB EPROM,8031片内无ROM;除此之外,三者的内部结构及引脚完全相同。因此以8051为例,说明本系列单片机的内部组成及信号引脚。

1.8051单片机的基本组成

8051单片机的基本组成如图1-3所示。各部分情况介绍如下:

图1-3 8051单片机结构框图

(1)中央处理器(CPU)中央处理器是单片机的核心,完成运算和控制功能。MCS-51的CPU能处理8位二进制数或代码。

(2)内部数据存储器(内部RAM)8051芯片中共有256个RAM单元,但其中后128单元被专用寄存器占用,能作为寄存器供用户使用的只是前128单元,用于存放可读/写的数据。因此通常所说的内部数据存储器就是指前128单元,简称内部RAM。

(3)内部程序存储器(内部ROM)8051共有4KB掩膜ROM,用于存放程序和原始表格常数,因此称之为程序存储器,简称内部ROM。

(4)定时器/计数器8051共有2个16位的可编程定时/计数器,以实现定时或计数功能,当定时/计数器产生溢出时,可用中断方式控制程序转向。

(5)并行输入输出(I/O)口MCS-51共有4个8位的并行I/O口(P0、P1、P2、P3),以实现数据的并行输入输出。在项目实践中我们使用了P1口,通过P1口P1.0连接1个汽车信号灯。

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

(7)中断控制系统MCS-51单片机的中断功能较强,以满足控制应用的需要。8051共有5个中断源,即外中断2个,定时/计数中断2个,串行中断1个。全部中断分为高级和低级共两个优先级别。

(8)时钟电路MCS-51芯片的内部有时钟电路,但石英晶体和微调电容需外接。时钟电路为单片机产生时钟脉冲序列。系统允许的晶振频率一般为6MHz和12MHz。

从上述内容可以看出,MCS-51虽然是一个单片机芯片,但作为计算机应该具有的基本部件它都包括。因此,实际上它已是一个简单的微型计算机系统了。

2.MCS-51的信号引脚

MCS-51是标准的40引脚双列直插式集成电路芯片,引脚排列如图1-4所示。

图1-4 MCS-51引脚图

(1)电源及时钟引脚(4个)

● VSS(20):地线。

● VCC(40):+5V电源。

● XTAL1(19)和XTAL2(18):外接晶体引线端。当使用芯片内部时钟时,这两个引线端用于外接石英晶体和微调电容;当使用外部时钟时,用于接外部时钟脉冲信号。

(2)控制线引脚(4个)

● ALE(30):地址锁存控制信号。

在系统扩展时,ALE用于控制把P 0口输出的低8位地址锁存器锁存起来,以实现低位地址和数据的隔离。此外由于ALE是以晶振1/6的固定频率输出的正脉冲,因此可作为外部时钟或外部定时脉冲使用。

(29):外部程序存储器读选通信号。在读外部ROM时有效(低电平),以实现外部ROM单元的读操作。

(31):访问程序存储器控制信号。当信号为低电平时,对ROM的读操作限定在外部程序存储器;而当信号为高电平时,对ROM的读操作则是从内部程序存储器开始,并可延至外部程序存储器。

● RST(9):复位信号。当输入的复位信号延续2个机器周期以上高电平即为有效,用以完成单片机的复位初始化操作。

(3)并行I/O引脚(32个,分成4个8位口)

● P0.0~P0.7:通用I/O引脚或数据/低位地址总线复用引脚。

● P1.0~P1.7:通用I/O引脚。

● P2.0~P2.7:通用I/O引脚或高位地址总线引脚。

● P3.0~P3.7:通用I/O引脚或第二功能引脚。

1.2.2 MCS-51单片机的数据存储器

MCS-51单片机的数据存储器分为内部RAM和外部RAM,RAM的配置图如图1-5所示。8051片内RAM共有128B,分成工作寄存器区、位寻址区、通用RAM区三部分。

图1-5 MCS-51单片机RAM的配置图

a)内部RAM及SFR b)外部RAM

基本型单片机片内RAM地址范围是00H~7FH。增强型单片机(如80C52)片内除地址范围在00H~7FH的128B RAM外,又增加了80H~FFH的高128B的RAM。增加的这一部分RAM仅能采用间接寻址方式访问(以与特殊功能寄存器SFR的访问相区别)。

片外RAM地址空间为64KB,地址范围是0000H~FFFFH。与程序存储器地址空间不同的是,片外RAM地址空间与片内RAM地址空间在地址的低端0000H~007FH是重叠的。这就需要采用不同的寻址方式加以区分。访问片外RAM时采用专门的指令MOVX实现,这时读()或写()信号有效;而访问片内RAM使用MOV指令,无读写信号产生。另外,与片内RAM不同,片外RAM不能进行堆栈操作。

1.内部数据存储器低128单元

8051的内部RAM共有256个单元,通常把这256个单元按其功能划分为两部分:低128单元(单元地址00H~7FH)和高128单元(单元地址80H~FFH),低128单元的配置情况见表1-2。

表1-2 低128单元的配置

低128单元是单片机的真正RAM存储器,按其用途划分为三个区域:

(1)寄存器区8051单片机片内RAM低端的00H~1FH共32B,分成4个工作寄存器组,每组占8个单元。

● 寄存器0组:地址00H~07H

● 寄存器1组:地址08H~0FH

● 寄存器2组:地址10H~17H

● 寄存器3组:地址18H~1FH

在任一时刻,CPU只能使用其中的一组寄存器,并且把正在使用的那组寄存器称为当前寄存器组。到底是哪一组,由程序状态字寄存器PSW中RS1、RS0位的状态组合来决定。

通用寄存器为CPU提供了就近数据存储的便利,有利于提高单片机的运算速度。此外,使用通用寄存器还能提高程序编制的灵活性。因此,在单片机的应用编程中应充分利用这些寄存器,以简化程序设计,提高程序运行速度。

(2)位寻址区 位的含义:1盏灯亮或者说1根线的电平的高低,可以代表2种状态:0和1。实际上这就是1个二进制位,用bit表示。字节的含义:1根线可以表示0和1,2根线可以表示00、01、10、11共4种状态,而3根线可以表达0~7共8种状态,计算机中通常将8根线放在一起,同时计数,就可以表示0~255一共256种状态。这8根线或者8位就称为一个字节(BYTE)。

内部RAM的20H~2FH单元,既可作为一般RAM单元使用,进行字节操作,也可以对单元中每一位进行位操作,因此,把该区称为位寻址区。位寻址区共有16个RAM单元,计128位,位地址为00H~7FH。MCS-51具有布尔处理机功能,这个位寻址区可以构成布尔处理机的存储空间。这种位寻址能力是MCS-51的一个重要特点。表1-3为片内RAM位寻址区的位地址表。

表1-3 片内RAM位寻址区的位地址

(3)用户RAM区 在内部RAM低128单元中,通用寄存器占去32个单元,位寻址区占去16个单元,剩下80个单元,这就是供用户使用的一般RAM区,其单元地址为30H~7FH。对用户RAM区的使用没有任何规定或限制。但在一般应用中常把堆栈开辟在此区中。

2.内部数据存储器高128单元

内部RAM的高128单元是供给专用寄存器使用的,其单元地址为80H~FFH。因这些寄存器的功能已作专门规定,故而称之为专用寄存器(Special Function Register, SFR),也可称为特殊功能寄存器。

8051共有21个专用寄存器,现对其中部分寄存器进行简单介绍。

1)程序计数器(PC——Program Counter)。PC是一个16位的计数器,它总是存放着下一个要取的指令的16位存储单元地址,它的作用是控制程序的执行顺序。其内容为将要执行指令的地址,寻址范围达64KB。PC有自动加1功能,从而实现程序的顺序执行。PC没有地址,是不可寻址的。因此,用户无法对它进行读写。但可以通过转移、调用、返回等指令改变其内容,以实现程序的转移。因地址不在SFR之内,一般不计作专用寄存器。

2)与运算器相关的寄存器(3个)。

① 累加器(ACC——Accumulator)。累加器为8位寄存器,是最常用的专用寄存器,功能较多,地位重要。它既可用于存放操作数,也可用来存放运算的中间结果。MCS-51单片机中大部分单操作数指令的操作数就取自累加器,许多双操作数指令中的一个操作数也取自累加器。

② B寄存器。B寄存器是一个8位寄存器,主要用于乘除运算。乘法运算时,B是乘数。乘法操作后,乘积的高8位存于B中,除法运算时,B是除数。除法操作后,余数存于B中。此外,B寄存器也可作为一般数据寄存器使用。

③ 程序状态字(PSW——Program Status Word)。程序状态字内部含有程序在运行时的相关信息,其详细情况见表1-4。现说明如下:

表1-4 程序状态字PSW

进位标志CY(Carry),可简写为C,它的用途如下:

● 当CPU在做加法运算时,若有进位,则CY=1;否则CY=0。

● 当CPU在做减法运算时,若有借位,则CY=1;否则CY=0。

● 作为位处理的运算中心即位累加器。

辅助进位标志AC(Auxiliary Carry)

● 在相加的过程中,若两数的bit3相加后有进位产生,则AC=1;否则AC=0。

● 在相减的过程中,若bit3不够减,必须向bit4借位,则AC=1;否则AC=0。

用户标志位F0(Flag Zero)

● 由用户根据程序执行的需要通过软件来使它置位或清除。

RS1、RS0:工作寄存器组选择位

● 80C51的RAM区域地址00H~1FH单元(32B)为工作寄存器区,共分四组,每组有8个8位寄存器,用R0~R7表示。

● RS1、RS0可以用软件来置位或清零以确定当前使用的工作寄存器组。

溢出标志OV(Overflow)

● 当两个数相加时,若bit6及bit7同时有进位或没有进位,则OV=0;否则OV=1。

● 当两个数相减时,若bit6及bit7同时有借位或没有借位,则OV=0;否则OV=1。

● 根据执行运算指令后OV的状态,可判断累加器中的结果是否正确。

奇偶位标志P(Parity)

● 对于累加器的内容,若等于1的位有奇数个,则P=1;否则P=0。

3)与指针相关的寄存器(3个)。

① 数据指针(DPTR)。数据指针为16位寄存器,它是MCS-51中一个16位寄存器。编程时,DPTR既可以按16位寄存器使用,也可以按两个8位寄存器分开使用,即:

DP H DPTR高位字节

DP L DPTR低位字节

DPTR通常在访问外部数据存储器时作地址指针使用,由于外部数据存储器的寻址范围为64KB,故把DPTR设计为16位。

② 堆栈指针(SP——Stack Pointer)。堆栈是一个特殊的存储区,用来暂存数据和地址,它是按“先进后出”的原则存取数据的。堆栈共有两种操作:进栈和出栈。

MCS-51单片机由于堆栈设在内部RAM中,因此SP是一个8位寄存器。系统复位后,SP的内容为07H,使得堆栈实际上从08H单元开始。但08H~1FH单元分别属于工作寄存器1~3区,若程序中要用到这些区,最好把SP值改为1FH或更大的值。一般地,堆栈最好在内部RAM的30H~7FH单元中开辟。SP的内容一经确定,堆栈的位置也就跟着确定下来,由于SP可初始化为不同值,因此堆栈位置是浮动的。

4)与接口相关的寄存器(7个)。

① 并行I/O接口P0、P1、P2、P3,均为8位;通过对这4个寄存器的读和写,可以实现数据从相应接口的输入和输出。

② 串行接口数据缓冲器SBUF。

③ 串行接口控制寄存器SCON。

④ 串行通信波特率倍增寄存器PCON(由于一些位还与电源控制相关,所以又称为电源控制寄存器)。

5)与中断相关的寄存器(2个)。

① 中断允许控制寄存器IE。

② 中断优先级控制寄存器IP。

6)与定时/计数器相关的寄存器(6个)。

① 定时/计数器T0的2个8位计数初值寄存器TH0、TL0,它们可以构成16位的计数器,TH0存放高8位,TL0存放低8位。

② 定时/计数器T1的2个8位计数初值寄存器TH1、TL1,它们可以构成16位的计数器,TH1存放高8位,TL1存放低8位。

③ 定时/计数器的工作方式寄存器TMOD。

④ 定时/计数器的控制寄存器TCON。

3.专用寄存器中的字节寻址和位地址

MCS-51系列单片机有21个可寻址的专用寄存器,其中有11个专用寄存器(字节地址能被8整除的)是可以位寻址的。MCS-51专用寄存器地址见表1-5。对专用寄存器只能使用直接寻址方式,书写时既可使用寄存器符号,也可使用寄存器单元地址。

表1-5 MCS-51专用寄存器地址

(续)

1.2.3 MCS-51单片机的程序存储器

MCS-51的程序存储器用于存放编好的程序和表格常数,以8051为例,其配置图如图1-6所示。8051片内有4KB的ROM,8751片内有4KB的EPROM,8031片内无程序存储器。MCS-51的片外最多能扩展64KB程序存储器,片内外的ROM是统一编址的。如端保持高电平,8051的程序计数器PC在0000H~0FFFH地址范围内(即前4KB地址)是执行片内ROM中的程序,当PC在1000H~FFFFH地址范围时,自动执行片外程序存储器中的程序;当保持低电平时,只能寻址外部程序存储器,片外存储器可以从0000H开始编址。

图1-6 8051程序存储器配置图

a)ROM配置 b)ROM低端的特殊单元

MCS-51的程序存储器中有些单元具有特殊功能,使用时应予以注意。

其中一组特殊单元是0000H~0002H。系统复位后,PC=0000H,单片机从0000H单元开始取指令执行程序。如果程序不从0000H单元开始,应在这三个单元中存放一条无条件转移指令,以便直接转去执行指定的程序。

还有一组特殊单元是0003H~002AH。共40个单元,这40个单元被均匀地分为5段,作为5个中断源的中断地址区。其中:

● 0003H~000AH外部中断0中断地址区

● 000BH~0012H定时器/计数器0中断地址区

● 0013H~001AH外部中断1中断地址区

● 001BH~0022H定时器/计数器1中断地址区

● 0023H~002AH串行中断地址区

中断响应后,按中断种类,自动转到各中断区的首地址去执行程序。因此,在中断地址区中理应存放中断服务程序。但通常情况下,8个单元难以存下一个完整的中断服务程序。因此,通常也是从中断地址区首地址开始存放一条无条件转移指令,以便中断响应后,通过中断地址区,再转到中断服务程序的实际入口地址去。