2.1 8051单片机的引脚及内部结构
2.1.1 8051单片机的引脚
8051有DIP(40pin)和PLCC(44pin)两种封装形式。DIP封装格式的8051单片机的引脚图和逻辑符号图如图2-1所示。
图2-1 8051单片机的引脚图和逻辑符号图
a)8051单片机的引脚图 b)8051单片机的逻辑符号图
在实际应用中,设计单片机应用系统的原理图时,一般应使用逻辑符号图,以便进行电路分析,而设计应用系统的印制电路板图时,必须使用单片机的引脚图。
各个引脚描述如下。
1.电源引脚
1)Vcc:一般接电源的+5 V。
2)Vss:接电源地。目前,大多数CMOS集成电路用GND表示,在后续的介绍中,统一使用GND代替Vss。
2.外接晶体引脚
XTAL1和XTAL2分别是芯片内部一个反相放大器的输入端和输出端。通常用于连接晶体振荡器。常见的连接方法如图2-2所示。其中,晶体振荡器M的频率可以在 4~35 MHz之间选择,典型值是11.0592 MHz。电容C1、 C2对时钟频率有微调作用,可在5~100 pF之间选择,典型值是47 pF。
图2-2 常见的晶体振荡器连接方法
3.控制和复位引脚
1)ALE:当访问外部存储器时,ALE(允许地址锁存)的输出用于锁存地址的低位字节。即使不访问外部存储器,ALE端仍以不变的频率周期性地出现正脉冲信号,此频率为振荡频率的1/6。它可用作对外输出的时钟,或用于定时。利用示波器测量此引脚有无脉冲输出可以判断单片机是否正常工作。ALE端可以驱动(吸收或输出电流)8个TTL门电路。
2):此引脚的输出是外部程序存储器的读选通信号。在从外部程序存储器取指令(或常数)期间,每个机器周期两次有效。同样可以驱动8个TTL门电路。
3):当保持高电平时,首先访问内部存储器,在程序计数器PC值超过片内的程序存储器容量(8051单片机为4 KB,8052单片机为8 KB)时,将自动转向执行外部程序存储器中的程序。当保持低电平时,只访问外部程序存储器,而不管是否有内部程序存储器。
4)RST:当振荡器运行时,在此引脚上出现两个机器周期的高电平将使单片机复位。如果需要单片机接上电源就可以复位并进入正常工作状态,则需要使用上电复位电路。典型的上电复位电路如图2-3a所示。
由于电磁干扰的存在或者程序设计的问题,一般计算机系统都可能出现因程序跑飞而“死机”的现象,导致系统无法正常工作。在个人计算机中,一般具有复位按钮。当计算机死机时,可以按一下复位按钮,重新启动计算机,或者重新给计算机上电。在自动控制系统中,要求系统非常可靠稳定地工作,一般不能通过手工方式复位。因此,需要在系统中使用看门狗定时器(Watch Dog Timer)电路。看门狗定时器电路的基本作用就是监视CPU的工作。正常工作时,单片机可以通过一个I/O引脚定时向看门狗电路脉冲输入端输入脉冲(定时时间不一定固定,只要不超出看门狗电路的溢出时间即可)。当系统出现死机时,单片机就会停止向看门狗电路脉冲输入端输入脉冲,超过一定时间后,看门狗电路就会发出复位信号,将系统复位,使系统恢复正常工作。典型的看门狗定时器电路与8051单片机的连接方法如图2-3b所示。其中,看门狗集成电路MAX813L的溢出时间为1.6 s,也就是说,在用户程序中,只要在1.6 s内使用T0(P 3.4)引脚向WDI端输出脉冲,看门狗电路就不会输出RESET信号。
图2-3 8051单片机复位电路图
a)上电复位电路 b)使用看门狗定时器电路的典型电路
4.输入/输出(I/O)引脚
1)P0口:双向8位三态I/O口。
2)P1口:8位准双向I/O口。
3)P2口:8位准双向I/O口。
4)P3口:8位准双向I/O口。
2.1.2 8051单片机的内部结构
8051单片机的内部结构如图2-4所示。
图2-4 8051单片机的内部结构图
8051单片机中包含中央处理器、程序存储器(4 KB ROM)、数据存储器(128B RAM)、2个16位定时/计数器、4个8位I/O口、1个全双工串行通信接口和中断系统等,以及与I/O口复用的数据总线、地址总线和控制总线三大总线。
2.1.3 CPU结构
单片机的中央处理器(CPU)由运算器和控制器组成。下面分别加以介绍。
1.运算器
以8位算术/逻辑运算部件ALU为核心,加上通过内部总线而挂在其周围的暂存器TMP1、TMP2、累加器ACC、寄存器B、程序状态标志寄存器PSW以及布尔处理机组成了整个运算器的逻辑电路。
算术逻辑单元ALU用来完成二进制数的四则运算和布尔代数的逻辑运算。累加器ACC又记作A,是一个具有特殊用途的8位寄存器,在CPU中工作最频繁,专门用来存放操作数和运算结果。寄存器B是专门为乘法和除法设置的寄存器,也是一个8位寄存器,用来存放乘法和除法运算中的操作数及运算结果,对于其他指令,它只作暂存器用。程序状态字(PSW)又称为标志寄存器,也是一个8位寄存器,用来存放执行指令后的有关状态信息,供程序查询和判别之用。PSW中有些位的状态是在指令执行过程中自动形成的,有些位可以由用户采用指令加以改变。PSW的各位定义如下所示:
1)CY(PSW. 7):进位标志位。当执行加/减法指令时,如果操作结果的最高位b7出现进/借位,则CY置“1”,否则清“0”。执行乘除运算后,CY清零。此外,CPU在进行移位操作时也会影响这个标志位。
2)AC(PSW. 6):辅助进位标志位。当执行加/减法指令时,如果低4位数向高4位数产生进/借位,则AC置“1”,否则清“0”。
3)F0(PSW. 5):用户标志位。该位是由用户定义的一个状态标志。可以用软件来使它置“1”或清“0”,也可以由软件测试F0控制程序的流向。
4)RS1,RS0(PSW. 4~PSW. 3):工作寄存器组选择控制位,其详细介绍见后面章节。
5)OV(PSW. 2):溢出标志位。指示运算过程中是否发生了溢出,在机器执行指令过程中自动形成。
6)—(PSW. 1):保留。该位在8051单片机中保留不用。
7)P(PSW. 0):奇偶标志位。如果累加器ACC中1的个数为偶数,则P=0,否则P=1。每个指令周期都由硬件来置“1”或清“0”。在具有奇偶校验的串行数据通信中,可以根据P设置奇偶校验位。
布尔处理机是单片机CPU中运算器的一个重要组成部分。它为用户提供了丰富的位操作功能,有相应的指令系统,硬件有自己的“累加器”(即进位位C,也就是CY)和自己的位寻址RAM和I/O空间,是一个独立的位处理机。大部分位操作均围绕着其累加器——进位位C完成。对任何直接寻址的位,布尔处理机可执行置位、取反、等于1转移、等于0转移、等于1转移并清“0”和位的读写操作。在任何可寻址的位(或该位内容取反)和进位标志C之间,可执行逻辑“与”、逻辑“或”操作,其结果送回到进位位C。
2.控制器
控制器是CPU的大脑中枢,包括定时控制逻辑、指令寄存器、译码器、地址指针DPTR及程序计数器P C、堆栈指针SP、RAM地址寄存器、16位地址缓冲器等。
程序计数器P C是一个16位的程序地址寄存器,专门用来存放下一条需要执行的指令的存储地址,能自动加1。当CPU执行指令时,根据程序计数器PC中的地址从存储器中取出当前需要执行的指令码,并把它送给控制器分析执行,随后程序计数器中的地址自动加1,以便为CPU取下一个需要执行的指令码做准备。当下一个指令码取出执行后,PC又自动加1。这样,程序计数器PC一次次加1,指令就被一条条执行。
堆栈主要用于保存临时数据、局部变量、中断或子程序的返回地址。8051单片机的堆栈设在内部RAM中,是一个按照“先进后出”规律存放数据的区域。堆栈指针SP是一个8位寄存器,能自动加1或减1。当数据压入堆栈时,SP自动加1;数据从堆栈中弹出后,SP自动减1。复位后,寄存器默认值为07H,堆栈区在08H开始的区域。通常将堆栈区域设置在内部RAM的30H~FFH之间。
2.1.4 存储器空间及存储器
8051单片机存储器结构的主要特点是程序存储器和数据存储器的空间是分开的,有4个物理上相互独立的存储器空间:片内程序存储器、片外程序存储器、内部数据存储器和外部数据存储器,如图2-5所示。
图2-5 8051单片机存储器配置示意图
从逻辑空间上看,实际上存在3个独立的空间。片内程序存储器和片外程序存储器在同一逻辑空间中,它们的地址在0000H~FFFFH是连续的。内部数据存储器和外部数据存储器各占一个逻辑空间,内部数据存储器为00H~FFH,而外部数据存储器为0000H~FFFFH。
1.程序存储器
单片机能够自动执行某种任务,除了其强大的硬件外,还需要用于单片机运行的程序。设计人员编写的程序就存放在单片机的程序存储器中。
8051单片机具有64 KB程序存储器空间的寻址能力。程序存储器用于存放用户程序、数据和表格等信息。对于片内无ROM的8031单片机,程序存储器必须外接,此时单片机的引脚必须接地,强制CPU从片外程序存储器读取程序。对于片内有ROM的8051单片机,可接高电平,正常运行时,使CPU先从片内的程序存储器读取程序,当PC值超过片内ROM的容量时,才会自动转向片外的程序存储器读取程序;如果接低电平,则忽略片内的程序存储器,直接从片外程序存储器执行程序。
8051单片机片内有4 KB的程序存储器,其地址为0000H~0FFFH。单片机复位后,程序计数器的内容为0000H,从0000H单元开始执行程序。在程序存储器中有些特殊的单元,在使用中应加以注意。
1)0000H单元。系统复位后,PC为0000H。单片机从0000H单元开始执行程序,一般应在0000H开始的3个单元中存放一条无条件转移指令,让CPU去执行用户指定的程序。
2)0003H~0023H,这些单元存放中断服务程序的入口地址(称为中断向量),定义如下。
①0003H:外部中断0中断入口地址。
②000BH:定时/计数器0中断入口地址。
③0013H:外部中断1中断入口地址。
④001BH:定时/计数器1中断入口地址。
⑤0023H:串行数据通信中断入口地址。
中断发生并得到响应后,自动转到相应的中断入口地址去执行程序。由于相邻中断入口地址之间只有8个地址单元,多数情况下存不下完整的中断服务程序,因此一般在中断响应的地址区存放一条无条件转移指令,指向真正存放中断服务程序的空间去执行。这样中断响应后,CPU读到这条转移指令,便转向存放中断服务程序的地方去执行程序。
8051单片机访问外部程序存储器时,至少需要提供两类信号,一类是地址信号,用来确定选中某一单元;一类是控制信号,控制外部程序存储器的数据输出。8051单片机没有专门的地址总线和数据总线,使用P2口输出地址的高8位,用P0口分时输出地址的低8位和数据,并由ALE信号把低8位地址锁存在地址锁存器中。单片机提供的程序存储器允许输出信号,往往与存储器芯片的数据允许输出端相连。
读取程序存储器中保存的表格常数等内容时,使用MOVC指令。
2.数据存储器
数据存储器也称为随机存取数据存储器。8051单片机的数据存储器在物理上和逻辑上都分为两个地址空间:外部数据存储区和内部数据存储区。
(1)外部数据存储区
8051单片机外部数据存储器最大可以扩展到64KB,用于存放数据。实际使用时,应首先充分利用内部数据存储器空间,只有在实时数据采集和处理,或数据存储量较大的情况下,才扩充数据存储器。
访问外部数据存储器时,使用16位数据存储器地址指针DPTR,同样使用P2口输出地址高8位,P 0口分时输出地址低8位和所读写的数据。用ALE作为地址锁存信号。进行外部存储器读写时,使用MOVX指令,单片机会产生相应的信号和信号(这两个信号有相应的和引脚,分别与外部数据存储器的RD和WR引脚相连),用来选通和读写外部数据存储器。
(2)内部数据存储区(又称为内部RAM)
8051单片机内部集成了128字节RAM,可用于存放程序执行的中间结果和过程数据。内部RAM的地址范围是00H~FFH,共256个单元。这256字节的空间分为两部分,其中地址范围00H~7FH的空间为内部数据RAM(称为基本RAM区),地址范围80H~FFH的内部RAM空间并不存在,该部分空间映射为特殊功能寄存器(SFR)区。基本RAM区又分为工作寄存器区、位寻址区、用户RAM和堆栈区。内部存储器地址空间分配如图2-6所示。
图2-6 内部存储器地址空间分配
1)工作寄存器区。
00H~1FH共32个单元用作工作寄存器,分为4组(每一组称为一个寄存器组),每一组包括8个8位的工作寄存器,分别是R0~R7。通过使用工作寄存器,可以提高指令执行速度,也可以使用其中的R0或R1存放8位地址值,访问一个256B外部RAM块中的单元,此时,高8位地址事先由P2口的内容确定。另外,R0~R7也可以用作计数器,在指令作用下加1或减1。
PSW寄存器中的RS1和RS0两位组合决定当前使用的工作寄存器组,见表2-1。可以通过位操作指令直接修改RS1和RS0的内容,从而选择不同的工作寄存器组。
表2-1 工作寄存器组选择
2)位寻址区。
20H~2FH之间的单元既可以像普通RAM单元一样按字节存取,也可以对单元中的任何一位单独存取(称为位寻址),共128位,所对应的位地址范围是00H~7FH。特殊功能寄存器中,直接地址可被8整除的寄存器(除了IP. 7、IP. 6和IE. 6以外)也可以进行位寻址。
为了更清楚地描述8051单片机中可以进行位寻址的空间,现将RAM中的位地址和特殊功能寄存器中的位地址分别在图2-7和图2-8中列出。
3)用户RAM和堆栈区。
内部RAM中的30H~7FH单元是用户RAM和堆栈区。
8051单片机有一个8位的堆栈指针SP,并且堆栈区只能设置在内部数据存储区。当有子程序调用和中断请求时,返回地址等信息保存在堆栈内。由于堆栈指针是8位的,所以原则上堆栈可由用户分配在片内RAM的任意区域,只要对堆栈指针SP赋予不同的初值就可以指定不同的堆栈区域。但在实际应用时,堆栈区的设置应和RAM的分配统一考虑。工作寄存器和位寻址区域分配好后,再指定堆栈区域。由于8051单片机复位以后,SP为07H,指向了工作寄存器组0中的R7,因此用户初始化程序都应对SP设置初值,一般设在30H以后为宜。8051单片机的堆栈是向上生成的(即朝着地址增加的方向生成)。
图2-7 RAM中的位地址
图2-8 特殊功能寄存器中的位地址
4)特殊功能寄存器(SFR)。
对于8051单片机,80H~FFH为特殊功能寄存器(SFR)区,该段RAM空间的单元不存在,用户不能对这些单元进行读/写操作;对于8052单片机,80H~FFH是RAM区(使用间接寻址访问),同时,特殊功能寄存器的地址与其相同(使用直接寻址访问SFR区)。8051单片机中,除了程序计数器P C和4个工作寄存器组外,其余的寄存器都在SFR区中。特殊功能寄存器反映了8051单片机的状态,它们大体分为两类:一类与芯片的引脚有关。如P0~P3,它们实际上是4个锁存器,每个锁存器附加上相应的一个输出驱动器和一个输入缓冲器就构成了一个并行口。另一类用于芯片内部功能的控制或者内部寄存器。如中断屏蔽及优先级控制、定时器、串行口的控制字,以及累加器A、B、PSW、SP、DP TR等。特殊功能寄存器及其复位值见表2-2。
表2-2 特殊功能寄存器及其复位值
(续)