第3章控制核心——51单片机 本章主要介绍51单片机的引脚功能及其结构,通过对引脚功能的学习,帮助大家进一步了解51单片机是如何操作的。读者不需要记住每个引脚的功能,只要求在使用时能够查找到相关的知识即可。 3.151单片机的内部结构 单片机是在一块芯片中集成了CPU(Central Processing Unit,中央处理器)、RAM(Random Access Memory,随机存取存储器)、ROM(Read Only Memory,只读存储器)、定时器/计数器和多种功能的I/O(Input/Output,输入/输出)线等一台计算机所需要的基本功能部件。8051单片机内包含CPU、ROM、RAM、定时器/计数器、并行I/O接口和中断系统等部件。 8051单片机框图如图3.1所示,其中各功能部件由内部总线连接在一起。图3.1中4KB(4096B)的ROM用EPROM(Erasable Programmable Read Only Memory,可擦除可编程只读存储器)替换即成为8751单片机,去掉ROM即成为8031单片机。 图3.18051单片机框图 3.1.1CPU CPU是单片机的核心部件,由运算器和控制器组成。 8051单片机的CPU主要功能如下。 (1) 8位CPU。 (2) 布尔代数处理器,具有位寻址能力。 (3) 128KB内部RAM数据存储器,21个专用寄存器。 (4) 4KB内部掩模ROM程序存储器。 (5) 两个16位可编程定时器/计数器。 (6) 32个(4×8位)双向可独立寻址的I/O接口。 (7) 一个双全工UART(Universal Asynchronous Receiver/Transmitter,异步串行通信口)。 (8) 5个中断源,两级中断优先级的中断控制器。 (9) 时钟电路,外部晶振和电容可产生1.2~12MHz的时钟频率。 (10) 外部程序存储器寻址空间和外部数据存储器寻址空间都为64KB。 (11) 111条指令,大部分为单字节指令。 (12) 单一+5V电源供电,双列直插40引脚DIP封装。 1. 运算器 运算器的功能是进行算术运算和逻辑运算,其操作顺序由控制器控制。运算器由算数逻辑单元(Arithmetic Logical Unit,ALU)、累加器A(Accumulator)、暂存器TMP1和TMP2,以及程序状态字(Program Status Word,PSW)组成。 2. 控制器 控制器由程序计数器(Program Counter,PC)、堆栈指针(Stack Point,SP)、数据指针寄存器(Data Point Register,DPTR)、指令寄存器(Instruction Register,IR)、指令译码器(Instruction Decoder,ID)、定时控制逻辑和振荡器(Oscillator,OSC)等组成。CPU根据PC中的地址将欲执行指令的指令码从存储器中取出,存放在IR中,ID对IR中的指令码进行译码,定时控制逻辑在OSC的配合下对ID译码后的信号进行分时,以产生执行本条指令所需的全部信号。 OSC是控制器的核心,与外部晶振、电容组成振荡器,能为控制器提供时钟脉冲。其频率是单片机的重要性能指标之一,时钟频率越高,单片机控制器的控制节拍就越快,运算速度也就越高。 3.1.2存储器 MCS51单片机的存储器有片内和片外之分,片内存储器集成在芯片内部,片外存储器是专用的存储器芯片,需要通过印制电路板(Printed Circuit Board,PCB)上的三总线与MCS51单片机连接。无论片内还是片外存储器,都可分为程序存储器和数据存储器两类。 1. 程序存储器 一般将ROM用作程序存储器。MCS51单片机具有64KB程序存储器寻址空间,它用于存放用户程序、数据和表格等信息。对于内部无ROM的8031单片机,它的程序存储器必须外接,空间地址为64KB。此时单片机的EA端必须接地,强制CPU从外部程序存储器读取程序。对于内部有ROM的8051等单片机,正常运行时,需EA接高电平,使CPU先从内部的程序存储器中读取程序,当PC值超过内部ROM的容量时,才会转向外部程序存储器读取程序。 8051单片机片内有4KB的程序存储单元,其地址为0000H~0FFFH。单片机启动复位后,PC的内容为0000H,所以系统将从0000H单元开始执行程序。 在程序存储器中有一些特殊的单元,在使用中应加以注意。其中,一组特殊单元是0000H~0002H,系统复位后,PC为0000H,单片机从0000H单元开始执行程序,应在0000H~0002H这3个单元中存放一条无条件转移指令,使CPU直接转到用户指定的程序去执行。另一组特殊单元是0003H~002DH,专门用于存放中断服务程序入口地址,中断响应后,按中断的类型自动转到各自的中断服务入口地址执行程序。因此,以上地址单元不能存放程序的其他内容。 2. 数据存储器 一般将RAM用作数据存储器。8051单片机的数据存储区分为内部数据存储区和外部数据存储区两部分。8051单片机内部有128B或256B的RAM用作数据存储器(不同的型号有区别),它们均可读/写,部分单元还可以位寻址。 8051单片机内部RAM共有256B,分为两部分,其中地址00H~7FH单元作为用户数据RAM,地址80H~FFH单元作为特殊功能寄存器。用户数据RAM又分为工作寄存器区、位寻址区、堆栈和数据缓冲区。 内部RAM的20H~2FH单元为位寻址区,既可作为一般单元用字节寻址,也可以对它们的位进行寻址。位寻址区共有16B(128b),位地址为00H~7FH。位地址分配如表3.1所示。CPU能直接寻址这些位,执行置1、清0、求“反”、转移、传送和逻辑运算等操作。通常称8051单片机具有布尔处理功能,布尔处理的存储空间就是位寻址区。 表3.1位地址分配 单元地址 (MSB) 位地址 (LSB) D7 D6 D5 D4 D3 D2 D1 D0 2FH 7FH 7EH 7DH 7CH 7BH 7AH 79H 78H 2EH 77H 76H 75H 74H 73H 72H 71H 70H 2DH 6FH 6EH 6DH 6CH 6BH 6AH 69H 68H 2CH 67H 66H 65H 64H 63H 62H 61H 60H 2BH 5FH 5EH 5DH 5CH 5BH 5AH 59H 58H 2AH 57H 56H 55H 54H 53H 52H 51H 50H 29H 4FH 4EH 4DH 4CH 4BH 4AH 49H 48H 28H 47H 46H 45H 44H 43H 42H 41H 40H 27H 3FH 3EH 3DH 3CH 3BH 3AH 39H 38H 26H 37H 36H 35H 34H 33H 32H 31H 30H 25H 2FH 2EH 2DH 2CH 2BH 2AH 29H 28H 续表 单元地址 (MSB) 位地址 (LSB) D7 D6 D5 D4 D3 D2 D1 D0 24H 27H 26H 25H 24H 23H 22H 21H 20H 23H 1FH 1EH 1DH 1CH 1BH 1AH 19H 18H 22H 17H 16H 15H 14H 13H 12H 11H 10H 21H 0FH 0EH 0DH 0CH 0BH 0AH 09H 08H 20H 07H 06H 05H 04H 03H 02H 01H 00H 可以看出,内部RAM低128个单元的地址范围为00H~7FH,而位寻址区的位地址范围也为00H~7FH,二者是重叠的,在应用中可以通过指令的类型区分单元地址和位地址。 内部RAM的堆栈及数据缓冲区为30H~7FH,共有80个单元,用于存放用户数据或作为堆栈区使用。8051单片机对该区中的每个RAM单元只实现字节寻址。 3.1.3特殊功能寄存器 特殊功能寄存器(Special Function Register,SFR)也称专用寄存器。8051单片机有21个SFR(PC除外),它们被离散地分布在内部RAM的80H~FFH地址单元中,共占据128个存储单元,构成了SFR存储块。SFR存储块中,如果其单元地址能被8整除,则8051单片机允许对其进行位寻址。SFR反映了8051单片机的运行状态,其功能已有专门的规定,用户不能修改其结构。表3.2所示为SFR分布一览表,这里只对其主要的寄存器进行介绍。 表3.2SFR分布一览表 SFR 功 能 名 称 物理地址 可否位寻址 B 寄存器B F0H 可以 A(ACC) 累加器 E0H 可以 PSW 程序状态字(标志寄存器) D0H 可以 IP 中断优先级控制寄存器 B8H 可以 P3 P3口数据寄存器 B0H 可以 IE 中断允许控制寄存器 A8H 可以 P2 P2口数据寄存器 A0H 可以 SBUF 串行口发送/接收数据缓冲寄存器 99H 不可以 SCON 串行口控制寄存器 98H 可以 P1 P1口数据寄存器 90H 可以 TH1 T1计数器高8位寄存器 8DH 不可以 TH0 T0计数器高8位寄存器 8CH 不可以 TL1 T1计数器低8位寄存器 8BH 不可以 TL0 T0计数器低8位寄存器 8AH 不可以 TMOD 定时器/计数器方式控制寄存器 89H 不可以 续表 SFR 功 能 名 称 物理地址 可否位寻址 TCON 定时器控制寄存器 88H 可以 PCON 电源控制寄存器 87H 不可以 DPH 数据指针寄存器高8位 83H 不可以 DPL 数据指针寄存器低8位 82H 不可以 SP 堆栈指针寄存器 81H 不可以 P0 P0口数据寄存器 80H 可以 1. PC PC在物理上是独立的,它不属于SFR存储块。PC是一个16位的计数器,专门用于存放CPU将要执行的下一条指令的地址,寻址范围为64KB。PC有自动加一功能,即执行完一条指令后,其内容自动加一。PC本身并没有地址,因此不可寻址。用户无法对它进行读/写,但是可以通过转移、调用、返回等指令改变其内容,以控制程序执行的顺序。 2. 累加器A 累加器A是8位寄存器,又记作ACC,是一个最常用的专用寄存器。累加器A在算数/逻辑运算中用于存放操作数或结果,CPU通过累加器A与外部存储器、I/O接口交换信息。大部分的数据操作都会通过累加器A进行,它就像一个交通要道。在程序比较复杂的运算中,累加器A成了制约软件效率的“瓶颈”。它的功能特殊,地位十分重要,因此近年来出现的单片机,有的集成了多累加器结构,或者使用寄存器阵列代替累加器,即赋予更多寄存器以累加器的功能,目的是解决累加器A的“交通堵塞”问题,提高单片机的软件效率。 3. 寄存器B 寄存器B是8位寄存器,是专门为乘除法指令设计的。在乘法指令中,寄存器B专门用于存放乘数和积的高8位; 在除法指令中,寄存器B专门用于存放除数和余数。 4. 工作寄存器 内部RAM的工作寄存器区00H~1FH共32B被均匀地分成4个组,每个组8个寄存器,分别用R0~R7表示,称为工作寄存器或通用寄存器。其中,R0、R1除作为工作寄存器外,还经常用于间接寻址的地址指针。 在程序中,通过PSW寄存器管理它们,CPU通过定义PSW的第4位和第3位(RS1和RS0),即可选中这4组通用寄存器中的某一组。其对应的编码关系如表3.3所示。 表3.3编码关系 RS1(PSW.4) RS0(PSW.3) 工作寄存器组片内RAM地址 选定的当前使用的通用寄存器名称 0 0 第0组 00H~07H R0~R7 0 1 第1组 08H~0FH R0~R7 1 0 第2组 10H~17H R0~R7 11第3组18H~1FHR0~R7 5. PSW PSW是8位寄存器,用于存放程序运行的状态信息。PSW中各位状态通常是在指令执行的过程中自动形成的,但也可以由用户根据需要采用传送指令加以改变。PSW的各标志位定义如表3.4所示。 表3.4PSW的各标志位定义 位序 PSW.7 PSW.6 PSW.5 PSW.4 PSW.3 PSW.2 PSW.1 PSW.0 标志位 CY AC F0 RS1 RS0 OV— P 各标志位简单介绍如下。 CY(PSW.7): PSW的D7位,进位、借位标志。进位、借位时CY=1,否则CY=0。 AC(PSW.6): PSW的D6位,辅助进位、借位标志。当D3向D4有借位或进位时,AC=1,否则AC=0。 F0(PSW.5): PSW的D5位,用户标志位。 RS1和RS0(PSW.4和PSW.3): PSW的D4和D3位,寄存器组选择控制位。 OV(PSW.2): 溢出标志。有溢出时OV=1,否则OV=0。 PSW.1: 保留位,无定义。 P(PSW.0): 奇偶校验标志位,由硬件置位或清0。存在ACC中的运算结果有奇数个1时P=1,否则P=0。 6. DPTR DPTR是一个16位专用寄存器,由DPL(低8位)和DPH(高8位)组成,地址是82H(DPL,低字节)和83H(DPH,高字节)。DPTR是传统8051单片机中唯一可以直接进行16位操作的寄存器,也可分别对DPL和DPH按字节进行操作。STC12C5A60S2系列单片机有两个16位的数据指针DPRT0和DPTR1,这两个DPRT共用同一个地址空间,可通过设置DPS/AUXR1.0来选择具体被使用的数据指针。 7. SP 堆栈是一种数据结构,是内部RAM的一段区域。堆栈有栈顶和栈底之分,堆栈的起始地址称为栈底,堆栈的数据入口称为栈顶。堆栈存取数据的原则是“先进后出”。堆栈有两种操作: 进栈和出栈,都是对栈顶单元进行操作的。 SP是一个8位专用寄存器。当堆栈中为空时,栈顶地址等于栈底地址,两者重合,SP的内容即为栈底地址。栈底地址一旦设置,就固定不变,直至重新设置。每当一个数据进栈或出栈时,SP的内容都会随之变化,即栈顶随之浮动。 在8051单片机中,系统复位后,SP初始化为07H,堆栈指针先加1再堆栈。在响应中断或子程序调用时,发生入栈操作,入栈的是16位PC。8051单片机中有PUSH(压入)和POP(弹出)栈操作指令,如有必要,在中断或调用子程序时可用PUSH指令把PSW或其他需要保护的寄存器的内容压入堆栈加以保护,返回前再使用POP指令把它们恢复。8051单片机的内部RAM只有从00H到7FH共计128B的空间,而且00H~1FH是工作寄存器区,所以SP的范围一般设定为20H~70H,通常设置为60H。51单片机堆栈的容量最大不超过128B。 8. I/O接口专用寄存器(P0、P1、P2和P3) 8051单片机内有4个8位并行I/O接口P0、P1、P2和P3,每个I/O接口内部都有一个8位数据输出锁存器和一个8位数据输入缓冲器,4个数据输出锁存器与端口号P0、P1、P2和P3同名,皆为SFR中的一个,即4个并行I/O接口还可以当作寄存器直接寻址,参与其他操作。 9. 定时器/计数器(TL0、TH0、TL1和TH1) 8051单片机中有两个16位的定时器/计数器T0、T1,它们由4个8位寄存器(TL0、TH0、TL1和TH1)组成。两个16位定时器/计数器是完全独立的,用户可以单独对这4个寄存器进行寻址,但不能把T0和T1当作16位寄存器来使用。 10. 串行数据缓冲器 串行数据缓冲器(Serial Data Buffer,SBUF)用来存放需要发送和接收的数据。它由两个独立的寄存器组成,一个是发送缓冲器,另一个是接收缓冲器,发送和接收的操作其实都是对SBUF进行的。 11. 其他控制寄存器 除了以上介绍的几个专业寄存器外,还有IP、IE、TCON、SCON和PCON等几个寄存器,这几个控制寄存器主要用于中断、定时和串行接口的控制。 3.1.4I/O接口 I/O接口是8051单片机对外部实现控制和信息交换的必经之路,用于信息传送过程中的速度匹配。I/O接口有串行和并行之分,串行I/O接口一次只能传送一位二进制信息,并行I/O接口一次能传送一组二进制信息。 3.1.5定时器/计数器 8051单片机内部有两个16位可编程的定时器/计数器,即定时器T0(由TH0和TL0组成)和定时器T1(由TH1和TL1组成),它们既可用作定时器定时,又可用作计数器记录外部脉冲个数,其工作方式、定时时间、启动、停止等均用指令设定。 3.1.6中断系统 中断是CPU正在执行主程序的过程中,由于CPU之外的某种原因,有必要暂停主程序的执行,转而去执行相应的处理程序(中断服务),待处理程序结束之后,再返回源程序断点处继续运行的过程。中断系统是指处理中断过程所需要的硬件电路。 可以引起中断的事件称为中断源。8051单片机可处理5个中断源发出的中断请求,并可按优先权对其进行处理。8051单片机的引脚中断源有外部和内部之分: 外部中断源有2个,通常指外部设备,其中断信号可从P3.2、P3.3输入,有电平或边沿两种引起中断的触发方式; 内部中断源有3个,包括2个定时器/计数器中断源和1个串行口中断源。内部中断源T0和T1的两个中断方式是在它们从全“1”变为全“0”溢出时,自动向中断系统提出的。内部串行口中断源的中断请求是在串行口每发送完或接收到一个8位二进制数据后,自动向中断系统提出的。 8051单片机的中断系统主要由中断允许控制器(Interrupt Enable,IE)和中断优先级控制器(Interrupt Priority,IP)等电路组成。其中,IE用于控制5个中断源中断请求的允许与禁止,IP用于控制5个中断源的中断请求优先权级别。IE和IP也属于SFR,其状态可由用户通过指令设定。 3.251单片机的外部引脚 如图3.2所示,8051单片机有40个引脚,可分为电源线、端口线和控制线3类。 图3.28051单片机的引脚 1. 电源线 (1) GND(20引脚): 接地引脚。 (2) VCC(40引脚): 正电源引脚。正常工作时,VCC接+5V电源。 2. 端口线 8051单片机内有4个8位并行I/O接口P0、P1、P2和P3,均可双向使用。 (1) P0接口(P0.0~P0.7、39~32引脚)。 P0接口为双向8位三态I/O接口,它既可作为通用I/O接口,又可作为外部扩展时的数据总线及低8位地址总线的分时复用接口。作为通用I/O接口时,需外加上拉电阻。输出数据可缓存,不需外加专用缓存器; 输入数据可缓冲,增加了数据输入的可靠性。P0接口的每个引脚可驱动8个TTL负载。 (2) P1接口(P1.0~P1.7、1~8引脚)。 P1接口为8位准双向I/O接口,内部具有上拉电阻,一般作为通用I/O接口使用。它的每一位都可以定义为输入线或输出线,作为输入时,锁存器必须置1。P1接口的每个引脚可驱动4个TTL负载。 (3) P2接口(P2.0~P2.7、21~28引脚)。 P2接口为8位准双向I/O接口,内部具有上拉电阻,可直接连接外部I/O设备。它与地址总线高8位分时复用,可驱动4个TTL负载。P2接口一般作为外部扩展时的高8位地址总线使用。 (4) P3接口(P3.0~P3.7、10~17引脚)。 P3接口也是一个准双向接口,内部具有上拉电阻。它是双功能复用接口,每个引脚可驱动4个TTL负载。作为第一功能使用时,其功能同P1接口; 作为第二功能使用时,每一位功能定义如表3.5所示。 表3.5功能定义 接口标号 第 二 功 能 P3.0 RXD: 串行输入(数据接收)接口 P3.1 TXD: 串行输出(数据发送)接口 P3.2 INT0: 外部中断0输入线 P3.3 INT1: 外部中断1输入线 P3.4 T0: 定时器0外部输入 P3.5 T1: 定时器1外部输入 P3.6 WR: 外部数据存储器写选通信号 P3.7 RD: 外部数据存储器读选通信号 3. 控制线 (1) RST/VPD(9引脚)。RST/VPD是复位信号/备用电源线引脚。当8051单片机通电时,时钟电路开始工作,在RST引脚上出现24个时钟周期以上的高电平,系统即初始复位。初始复位后,PC指向0000H,P0~P3输出接口全部为高电平,SP为07H,其他专用寄存器被清0。RST由高电平下降为低电平后,系统立刻由0000H地址开始执行程序。8051单片机的复位方式可以是自动复位,也可以是手动复位。RST/VPD引脚的第二功能是作为备用电源输入线,当主电源VCC发生故障而降低到规定电平时,RST/VPD引脚上的备用电源自动投入,以保证单片机内部RAM的数据不丢失。 (2) ALE/PROG(30引脚)。 ALE/PROG是地址锁存允许/编程引脚。当访问外部程序存储器时,ALE的输出用于锁存地址的低8位,以便P0接口实现地址/数据复用; 当不访问外部程序存储器时,ALE将输出一个1/6时钟频率的正脉冲信号,这个信号可以用于识别单片机是否工作,也可以当作一个时钟向外输出。需要注意的是,当访问外部数据存储器时,ALE会跳过一个脉冲。 ALE/PROG是复用引脚,其第二功能是对EPROM型芯片(如8751单片机)进行编程和校验时,此引脚会传送52ms宽的负脉冲选通信号,用于控制芯片的写入操作。 (3) EA/VPP(31引脚)。 EA/VPP是允许访问片外程序存储器/编程电源线。8051单片机和8751单片机内置有4KB的程序存储器,当EA为高平且程序地址小于4KB时,读取内部存储器指令数据; 而超过4KB的地址时,则读取外部程序存储器指令。如果EA为低电平,则不管地址大小,一律读取外部程序存储器指令。显然,对于片内无程序存储器的MCS51单片机(如8031),其EA端必须接地。 EA/VPP的复用引脚,其第二功能是片内EPROM编程/校验时的电源线。在编程时,EA/VPP引脚需加上21V的编程电压。 (4) XTAL1和XTAL2(19、18引脚)。 XTAL1引脚为片内振荡器反相放大器及内部时钟发生器的输入端,XTAL2引脚为片内振荡器反相放大器的输出端。8051单片机的时钟有两种方式: 一种是片内时钟振荡方式,但需在18和19引脚外接石英晶体(频率为1.2~12MHz)和振荡电容,振荡电容的值一般取10~30pF,典型值为30pF; 另外一种是外部时钟方式,外部时钟信号从XTAL1引脚输入,XTAL2引脚悬空。 (5) PSEN(29引脚)。 PSEN是片外ROM选通线。在访问片外ROM执行指令MOVC时,8051单片机自动在PSEN引脚上产生一个负脉冲,用于对片外ROM的读选通,16位地址数据将出现在P2和P0接口上,外部程序存储器则把指令数据放到P0接口上,由CPU读取并执行。在其他情况下,PSEN引脚均为高电平封锁状态。 3.3STC单片机简介 STC单片机是增强型8051单片机。它基于8051内核,指令代码完全兼容传统的8051单片机,速度可提高8~12倍,带有A/D转换器、PWM(Pulse Width Modulation,脉冲密度调制)/双串行口、内置E2PROM、RAM、硬件看门狗; 具有掉电模式,低功耗; 支持ISP下载,加密性好,抗干扰性强; 12时钟/机器周期和6时钟/机器周期可以任意选择,还有单时钟/机器周期类型单片机。STC单片机有多种子系列、几百个品种,可以满足不同领域应用的需求。 STC单片机可直接代替Atmel、Philips、Winbond(华邦)等公司的同类产品。 3.3.1STC单片机的主要特点 STC单片机的主要特点如下。 (1) 抗干扰能力强。STC单片机具有ESD(ElectroStatic Discharge,静电放电)保护,引脚可以直接耐受2KV/4KV的EFT测试(Electrical Fast Transient/Burst,电快速瞬变脉冲群); 宽范围电压供电,对电源抖动不敏感; 其I/O接口、内部供电系统、时钟电路、复位电路、看门狗电路经过特殊处理,抗干扰能力较强。 (2) 对外电磁辐射强度低。STC单片机采用3种降低单片机时钟对外电磁辐射的措施