1、单片机原理及应用基于Proteus与Keil C哈工大出版社,孟祥莲 高洪志主编,第1章 单片机基础,近几十年,随着计算机的飞速发展,单片机也迅速发展起来,并广泛应用于各种智能产品中,逐渐成为21世纪的一项重要技术。学习用单片机进行设计之前,要了解单片机的一些基本知识。 因此,本章主要介绍单片机的基本概念、发展过程、应用领域及展望,并以89C51为代表,介绍单片机的硬件资源和常用的编程方法。,1.1 单片机概述 随着信息技术的飞速发展,计算机越来越朝着微型化、智能化的方向发展,单片机就是在这种情况下应运而生的。 它将组成计算机的基本部件,包括CPU(Central Processing Uni
2、t)、ROM(Read Only Memory)、RAM(Random Access Memory)、定时器/计数器以及I/O(Input/Output)接口等集成在一个芯片上,形成芯片级的微型计算机,称作“单片机(Single Chip Microcomputer)”。,组成单片机的各功能部件与计算机大体相同,但单片机集成在一个芯片上,而计算机中各部件独立封装。与通用的计算机相比,单片机具有许多优越性,主要体现在以下四个方面。体积小、结构简单、集成度高。性价比高。可靠性高,功耗小功能强,应用广泛,使用方便、灵活。,MCS-51/52系列单片机主要包括51和52子系列,它们的区别在于片内RAM
3、的容量,其中51子系列为128 B的片内RAM,而52子系列为256 B的片内RAM。89C51是MCS-51系列单片机中比较有代表性的芯片,本书中主要以89C51为例对单片机基础知识进行阐述。,1.2 单片机的硬件结构 MCS-51系列单片机品种繁多,应用广泛,但不管其复杂程度如何,它们都具有相似的硬件结构。 89C51单片机的总体框图如图1.1所示。,1.2.1 89C51单片机的内部结构通常89C51单片机的内部是由一个8位的微处理器(CPU)、128 B的片内数据存储器(RAM)、4KB的片内程序存储器(ROM)、21个特殊功能寄存器、4个并行I/O口(P0P3)、2个定时/计数器、5
4、个中断源的中断管理控制系统、1个全双工的串口及片内振荡器与时钟产生电路组成,其内部结构框图如图1.2所示。,图1.2 MCS-51单片机内部结构图,1.存储器 单片机的存储空间按存储类型的不同可分为程序存储器和数据存储器两个部分,但根据存储的位置不同,又可以分为片内(程序/数据)存储区和片外(程序/数据)存储区。 89C51单片机片内存储器采用的是哈佛结构,即程序存储器和数据存储器分开存储。因此,89C51的片内存储器分为4KB(即212)程序存储器和256B数据存储器,其中数据存储器的高128B单元为SFR区,被专用寄存器占用,低128 B单元可供用户使用。,在用C51编程中,存储区分为CO
5、DE区(程序代码区)、DATA区(普通内存区)、BDATA区(位寻址区)、IDATA区(间接寻址区)、SFR区(特殊功能寄存器区)和XDATA区(片外存储区)、PDATA区(片外低256 B分页寻址区)。 51单片机实际的硬件存储区称为物理存储区,51编程用到的存储区称为逻辑分区。两者的关系如图1.3所示。,图1.3 物理存储区与逻辑存储区的对应关系图,(1)程序存储器(CODE)89C51的程序存储器是用来存放一段编写好的程序、表格或数据,片内外的程序存储器是统一编址的,CPU可通过引脚EA所接的电平来确定访问片内程序存储器。当EA=1,程序将从片内程序存储器开始执行,即PC的值在0000H
6、0FFFH的范围内,当PC的值超过片内ROM的容量(4K)时,会自动转向片外程序存储器空间执行程序,即PC的值为1000HFFFFH。当EA=0,程序将从片外程序存储器开始执行。,(2)片内数据存储器低128B单元数据存储器用来存放运算的中间结果,数据暂存和缓冲、标志位以及待测试的程序等。89C51片内有128B的RAM单元,其地址范围为00HFFH,分为两大部分: 高128 B(80HFFH)为特殊功能寄存器区,简称SFR;低128 B(00H7FH)为真正的RAM区。89C51片内RAM存储器的组成如图1.4所示。,图1.4 89C51片内RAM分布图,89C51单片机真正的片内数据存储单
7、元共有128个,字节地址为00H7FH。 主要三个区域: 寄存器区位寻址区用户区,寄存器区(00H-1FH) 这部分共有32个单元,是4组通用工作寄存器区,每个区含8个8位寄存器,编号为R0R7,可通过PSW(程序状态字)中的RS0和RS1设定值来选择使用哪一组的寄存器,RS1、RS0与片内工作寄存器组的对应关系如表1.1所示。表1.1 RS1、RS0与片内工作寄存器组的对应关系,位寻址区(20H2FH) MCS-51单片机指令系统中有丰富的位操作指令。其中,处于内部RAM字节地址20H-2FH单元中的16个单元可进行共128位的位地址。 位寻址区的分配如表1.2所示。,表1.2 位寻址区地址
8、分配表,位寻址方式指操作数是二进制的一位(0或1)的寻址方式,这个存储区如果要进行按位寻址时在C51中对应着BDATA区。如果进行字节寻址,要是直接寻址时采用DATA方式,如果是间接寻址采用的是IDATA方式。字节地址30H7FH为用户区这部分存储空间中只能进行字节寻址,共有80字节,可以用作堆栈或数据缓冲区。,(3)SFR区SFR(特殊功能寄存器)指的是片内数据存储区的高128B单元,即在这个存储空间中用于存放控制命令、状态或数据。除PC外,还有21个特殊功能寄存器,离散的分布在该区域中,地址空间为80HFFH,其中11个特殊功能寄存器还可以进行按位寻址,表1.3是SFR的名称及其分布,下面
9、将对部分专用寄存器分类作简要介绍。这部分在C51中如果是直接寻址方式对应着SFR;如果采用间接寻址方式,对应着IDATA。这部分物理存储区和逻辑存储区的对应关系如图1.3中所示。,表1.3 单片机片内的特殊功能寄存器SFR,与算数运算相关的寄存器,如B寄存器、A累加器及PSW程序状态字B寄存器:B是一个通用寄存器,在做乘除运算时,用于暂存数据;A累加器:是ACC的简写,用来存放ALU运算的中间结果,常常作为数据的中转站;PSW(Program Status Word)程序状态字:8位的程序状态字寄存器,用于指示指令执行后的状态信息,供程序查询和判别使用。与中断控制有关的寄存器,如IP、IE。中
10、断优先级控制(IP)用来确定中断优先级的顺序;中断允许控制寄存器(IE)用来确定是否允许中断。,与串行通信有关的寄存器,如SBUF、SCON。串行数据缓冲(SBUF)用于存放待发送或已接受的数据,它由发送缓冲器和接收缓冲器两个独立的寄存器组成;串行口控制寄存器(SCON)常和SBUF一起进行串口通信时使用。与定时/计数有关寄存器,如TH0、TL0、TH1、TL1及TMOD、TCON .89C51中有两个16位的定时/计数器,分别是T0和T1,它们分别由两个8位的寄存器组成,即TH0、TL0和TH1、TL1;定时/计数器方式控制字(TMOD)用来选择两个定时器计数器的工作方式;在定时/计数时,定
11、时/计数器控制字(TCON)常和TMOD联合使用。,指针类寄存器,如DPTR、SP。数据指针DPTR为一个16位的专用寄存器,其高位用DPH表示,低位用DPL表示,它既可以作为一个16位的寄存器来使用,也可作为两个8位的寄存器DPH和DPL使用,DPTR在访问外部数据存储器时既可用来存放16位地址,也可作为地址指针使用。堆栈是数据区域中一个存放数据地址的特殊区域,主要用来存放暂存数据和地址,是按先进后出的原则存储。堆栈指针SP初值是一个8位专用寄存器,指示出堆栈顶部在片内RAM区的位置。系统复位后,SP的初值为07H,实际堆栈操作是从08H开始的。此外,指针还有程序指针PC、数据指针R0和R1
12、。R0和R1位于片内数据存储区的00H1FH中的寄存器区。端口P0P3 P0P3为4个8位的特殊功能寄存器,分别是4个并行I/O端口的锁存器,当I/O端口的某一位用作输入时,对应的锁存器必须先置“1”。,(4)片外数据存储区(PDATA、XDATA)在C51中外部数据存储区常用PDATA、XDATA表示。XDATA表示用DPTR间接访问外部64 K的存储空间,因为DPTR是16位的寄存器,故用DPTR访问外部数据存储空间时可达到 的范围,即可在0000HFFFFH范围内。PDATA表示用R0、R1访问而外部数据存储区中的低256 B字节区,因为R0、R1都是8位的寄存器,因而用R0、R1访问时
13、最大可达到 的范围内,即在00HFFH的范围内进行访问。,总之,在使用C51进行编程时,物理分区和逻辑分区的对应关系如图1.3所示,但是要注意编程时采用的寻址方式。若采用直接寻址方式,DATA用来表示物理存储区为00H7FH的片内数据存储区内共128 B单元的存储区;BDATA用来位寻址,字节地址00HFFH的片内数据存储范围内共16 B单元128位;SFR表示片内数据存储区的80HFFH范围;CODE表示片内/外的64K程序存储空间;若采用间接寻址时,IDATA表示整个片内00-FFH共256 B存储单元;PDATA、XDATA表示外部数据存储单元。直接寻址和间接寻址方式的区别就要看存储区中
14、直接给出的是源操作数还是源操作数的地址。,2.CPU了解单片机的存储器结构以后,有必要了解一下CPU。从图1.2中可以看出,单片机内部最核心的部分是CPU,它能处理8位二进制数和代码,完成各种数据运算和逻辑控制。CPU在功能上可以分为运算器和控制器两个部分,下面分别对这两个部分进行介绍。(1)运算器运算器的功能是对操作数进行算术、逻辑运算和位操作(布尔操作)。主要包括算术逻辑运算单元ALU、累加器A、寄存器B、位处理器、程序状态字寄存器PSW以及BCD码修正电路等。ALU(Arithmetic Logic Unit,逻辑运算单元)。ALU由加法器和逻辑电路构成,可对数据进行与、或、异或、求补、
15、移位等逻辑运算,四则运算、加1、减1以及BCD码调整等算数运算。,A(Accumulator)累加器。 A累加器是累加器ACC的简写,用来存放ALU运算的中间结果,常常作为数据的中转站。累加器为8位寄存器,是程序中最常用的专用寄存器,在指令系统中累加器的助记符为A。B寄存器。 B寄存器为8位寄存器,主要用于乘除指令中。在做乘除运算时,用于暂存数据。乘法指令中,两个操作数分别取自A和B,结果存于B中。在除法指令中,A为被除数,B为除数,结果商存放A中,余数存放B中。在其他指令中,B寄存器也可作为一般的数据单元来使用。,PSW(Program Status Word)。 PSW是一个8位寄存器,它
16、包含程序的状态信息。在状态字中,有些位状态是根据指令执行结果,由硬件自动完成设置,而有些状态位则必须通过软件方法设定。 PSW中的每一位可以作为一个程序执行结果的标志位,指令执行时可以根据测试PSW中某一位的状态作出决定。PSW中各位的信息如图1.5所示:,图1.5 PSW中各位的信息,CY:进位位,在加法运算有进位,减法运算有借位时,CY由硬件置1,否则清零,在进行位运算时,CY简写为C,常作为位累加器。 AC:辅助进位位,当低4位向高4位进位或借位时,AC置“1”。在进行BCD码调整指令时,AC可以作为判断位。 F0:用户标志位,由用户置位或者复位。 RS1,RS0:工作寄存器组选择位,通
17、过这两位的值可以选择当前的工作寄存器组。 P:奇偶标志位,是判断A累加器中8位内容中1的个数是奇数还是偶数个。通过这一位,可以提高串行通信的可靠性。每个指令周期由硬件来置位或清零用以表示累加器A中1的个数的奇偶性,若累加器中1的个数为奇数,则P1,否则P0。,OV:溢出标志位,当进行补码运算时,如果运算结果产生溢出,OV置“1”。当执行算术指令时,由硬件置位或清零来指示溢出状态。 在带符号的加减运算中,OV1表示加减运算结果超出了累加器A所能表示的符号数有效范围(128127),即运算结果是错误的;反之,OV0表示运算正确,即无溢出产生。 无符号数乘法指令MUL的执行结果也会影响溢出标志,若置
18、于累加器A和寄存器B的两个数的乘积超过了255,则OV1;反之,OV0。由于乘积的高8位存放于B中,低8位存放于A中,OV0则意味着只要从A中取得乘积即可,否则要从BA寄存器对中取得乘积结果。在除法运算中,DIV指令也会影响溢出标志,当除数为0时,OV1,否则OV0.,(2)控制器控制器是单片机的指挥控制部件。控制器的主要任务是识别指令,并根据指令的性质控制单片机各功能部件,从而保证单片机各部分能自动而协调地工作。程序指针PC:16位的程序计数器,由8位的PCH和PCL组成,用于将要存放的下一条指令的地址。通过改变PC的值,可以改变程序的执行方向。数据指针DPTR:16位的数据地址寄存器,由8
19、位的DPH和DPL组成,在对片外存储器扩展时,常用DPTR进行间接寻指;在访问程序存储器时,可以作为基址寄存器使用。,(2)控制器控制器是单片机的指挥控制部件。控制器的主要任务是识别指令,并根据指令的性质控制单片机各功能部件,从而保证单片机各部分能自动而协调地工作。指令寄存器:8位的寄存器,用于存放待执行的指令,等待译码。指令译码器:对指令进行译码,将指令转变为所需要的电信号,根据译码器的输出信号,在经过定时控制电路定时产生执行该指令所需要的各种控制信号。,3.接口并行接口:89C51中有P0P3,共4个并行I/O接口。串行接口:串行接口电路为用户提供了两个串行口缓冲寄存器(SBUF),一个称
20、为发送缓存器,用来保存总线送来的需要发送数据,即发送缓冲器只能写不能读,发送缓冲器中的数据通过TXD引脚向外传送。另一个称为接收缓冲器,它的用途是用来保存需要传送给片内总线的数据,即接收缓冲器只能读不能写。接收缓冲器通过RXD引脚接收数据。因为这两个缓冲器一个只能写,一个只能读,所以共用一个地址,即99H。,4.定时/计数器89C51单片机中定时/计数器T0、T1分别由两个相互独立的8位寄存器组成TH0、TL0和TH1、TL1组成,有4种工作方式分别是:方式0工作时,使用低字节的5位和高字节的8位组成13位的计数器 。方式1工作时,使用低字节和高字节组成16位计数器。方式2工作时,是自动预置方
21、式的8位计数器,其使用低字节的8位作为计数器,高字节的8位作为预置常数的寄存器。方式3只适用于定时器计数器T0,T0分为两个独立的8位计数器,即TH0、TL0。,5.中断系统89C51共有5个中断源,其中2个是外部中断,3个是内部中断。89C51单片机的5个中断源分成高和低2个优先级别,每一个中断请求源都可以编程设置为高优先级中断或低优先级中断,能实现两级中断嵌套。应用中可以通过设置4个与中断有关的特殊功能寄存器中的状态位,来使用MCS-51单片机的中断系统。这4个特殊功能寄存器分别是定时器控制寄存器(TCON)、串行口控制寄存器(SCON)、中断允许控制寄存器(IE)、中断优先级控制寄存器(
22、IP)。,6.单片机的时序单片机的时序是从引脚XTAL1和XTAL2引入的时钟,这个时钟的周期为振荡周期,在MCS-51单片机各种周期的存在着如下相互关系。振荡周期:为单片机提供时钟信号的振荡源的周期。时钟周期:是振荡源信号经二分频后形成的时钟脉冲信号所需要的时间。机器周期:通常将完成一个基本操作所需的时间称为机器周期。指令周期:是指CPU执行一条指令所需要的时间。一个指令周期通常含有14个机器周期。,1.2.2 89C51单片机的外部引脚89C51单片机主要采用40脚双列直插(DIP)式封装。89C51的引脚如图1.6中所示。,图1.4 MCS-51单片机的引脚图,下面按功能把这些引脚分四类
23、进行分别进行介绍。1.基本引脚(1)电源引脚Vcc(40)和Vss(20)Vcc(40):电源端,接5V。Vss(20):接地端。(2)时钟电路引脚XTAL1(19)和XTAL2(18)XTAL1:接外部晶振和微调电容的一端,在片内它是振荡器倒相放大器的输入。若使用外部TTL时钟时,该引脚必须接地。XTAL2:接外部晶振和微调电容的另一端,在片内它是振荡器倒相放大器的输出。若使用外部TTL时钟时,该引脚为外部时钟的输入端。,(3)控制信号引脚RST/VPD:复位输入/备用电源输入复位信号。RST:该信号高电平有效,在输入端保持两个机器周期的高电平后,就可以完成复位操作,单片机运行出错或进入死循
24、环时,可按复位键重新运行。当复位信号起作用时,21个特殊功能寄存器复位后的状态为确定值。如表1.4所示。,表1.4 单片机复位后特殊功能寄存器的状态,ALE/PROG :地址锁存输出/编程脉冲输入。地址锁存允许ALE系统扩展时,ALE用于控制地址锁存器锁存P0口输出的低8位地址,从而实现数据与低位地址的复用,具体应用参见外部引脚应用部分。 PSEN:程序存储器允许(从EPROM/ROM中读取指令),是读外部程序存储器的选通信号,低电平有效。EA/Vpp:外部程序存储器地址允许输入/编程电压输入,当程序存储器地址允许输入端VPP当为高电平时,CPU执行片内程序存储器指令,但当PC中的值超过0FF
25、FH时,将自动转向执行片外程序存储器指令。当为低电平时,CPU只执行片外程序存储器指令。当其接高电平时,CPU只访问及执行片内EPROM/ROM,但当PC的值超过0FFFH(对8751/89C51为4KB)时,将自动转去执行片外程序存储器的内容;当其接低电平时,CPU只访问及执行片外EPROM/ROM中的程序。,(4)输入/输出端口P0、P1、P2和P3在89C51中有4个8位双向I/O接口,共有32根引脚线,单片机的端口是集数据输入、输出、缓冲于一体的多功能I/O接口,它们既有相似之处,又有不同点。P0口(P0.0P0.7):字节地址80H,位地址80H87H,它可作为普通的I/O接口,也可
26、作为地址/数据线的复用端口。P1口(P1.0P1.7):字节地址90H,位地址90H97H,它是一个8位准双向I/O接口。P2口(P2.0P2.7):字节地址A0H,位地址A0A7H,在访问外部程序存储器时,它作存储器的高8位地址线,通常,当外部存储器容量大于256 B时,P2口用于扩展的外部存储器大于256 B时的地址;当小于256 B时,P2口作为I/O接口使用。P3口(P3.0P3.7):字节地址B0H,位地址B0B7H,P3口除了做一般的I/O口使用之外,其还具有第二功能,其第二功能如表1.5所示。P3口在做第二功能时,只有一个功能有效,它是一个准双向的、多功能的I/O接口。,2.外部
27、存储器的扩展外围器件与单片机的接口是单片机应用系统至关重要的环节。单片机内资源少,容量小,在进行较复杂过程的控制时,它自身的容量远远不能满足需要,为此,常常使用存储器扩展其存储空间,51系列单片机受到管脚的限制,没有对外专用的地址总线和数据总线,那么在进行对外扩展存贮器或IO接口时,需要首先扩展对外总线,所谓的总线指地址总线、数据总线及控制总线。MCS-51单片机地址总线宽度为16位,寻址范围为64 K,因此它可扩展的程序存储器和数据存储器的最大容量是64 K(216)。当与单片机连接时,P0作为地址线的低8位,P2口作为地址线的高8位;MCS-51单片机的数据总线宽度为8位,P0口作为8位数
28、据口,在系统进行外部扩展时与低8位地址总线分时复用;控制总线的主要控制信号有 WR、RD、ALE、PSEN 、 EA等。,(1)外部程序存储器的扩展可选用的程序存储器有2716、2732、2764、27128、27256等芯片,芯片型号的高两位数字27是表示EPROM,低位数字表示存贮容量的Kbit值,如2764表示64K存储位的EPROM。低位数字除以8为芯片的字节存贮容量。则2764的字节容量为8 K,可以表示成8K8。如图1.7所示,给出了89C51外扩16K字节EPROM的27128的电路图。,图1.7 89C51外扩16K字节EPROM的27128的电路图,实际往往会用到多片程序存储
29、器的扩展,如果要用2716来扩展8K的外部存储空间。由计算可知,需要选用4片2716,并且需要使用4个片选信号。此时,采用线选法的扩展方式时,2716为2K*8的芯片,地址单元需要11个,用P0口的8位(P0.0-P0.7)和P2口3位(P2.0-P2.2)组成11位的地址单元,P2剩余的地址用做片选,P2.3选第一片,P2.4选第二片,P2.5选第三片,P2.6选第四片,则它们所占用的存储空间分别为:第一片2716占用地址:F000-F7FFH;第二片2716占用地址:E000-E7FFH;第三片2716占用地址:D000-D7FFH;第四片2716占用地址:B000-B7FFH;,若采用部
30、分译码法时,P2.3P2.7多余的五位地址中高3位P2.5P2.7不用,使用P2.3、P2.4连接到74LS139(2-4译码器)上,译码后可产生4个输出信号,用这4个输出信号做片选信号,此时,各个芯片的地址范围为:第一片2716占用地址:0000-07FFH;第二片2716占用地址:0800-08FFH;第三片2716占用地址:1000-17FFH;第四片2716占用地址:1800-18FFH; 此时,P2.5P2.7三位没有参加译码,为任意状态,4片2716均可有8个地址范围,产生存储空间重叠现象。若要消除此现象,在部分译码法中没有用的位固定为0或1即可。,(2)外部数据存储器的扩展89C
31、51单片机的外部还可扩展64KB的数据存储器,用来存放随机数据,程序运行时,只能通过地址寄存器DPTR和通用寄存器R0、R1间接寻址。常用的数据存储器RAM芯片有6116 (2k8)、6264(8k8)和62256(32k8)三种。,图1.8 扩展单片6116的电路图,数据存储器的扩展与程序存储器的扩展非常相似,所使用的地址总线和数据总线完全相同,但是它们所用的控制总线不同,数据存储器的扩展所使用的控制总线是 和 ,而程序存储器所使用的控制总线是 ,因此虽然它们的地址空间相同,但是由于控制信号不同所以不会冲突。图1.8给出了89C51外扩2K字节数据存储器6116的电路图。 习惯上计算地址是可
32、以将未用到的地址信号看作1,如果将A11A14都置为1则可以得到该片6116的地址范围为7800H7FFFH。,(3)外部数据/程序存储器综合扩展实际上有时会用到程序存储器和数据存储器的综合扩展。如图1.9所示,单片机扩展1片程序存储器2764和1片数据存储器6116的综合扩展。它采用线选法来实现扩展存储器。,图1.9线选法扩展1片6116和1片2716,此时,如果采用线选法的扩展方式时,2716为2K8的芯片,地址单元需要11个,数据存储器6116为2K8的芯片,地址单元也需要11个,因此用P0口的8位(P0.0P0.7)和P2口3位(P2.0P2.2)组成11位的地址单元,P2剩余的地址用
33、做片选,P2.3选第一片,P2.4选第二片,剩余引脚接地,则它们所占用的存储空间分别为:第一片6116占用地址:0100-0FFFH;第二片2716占用地址:1000-17FFH;,如图1.10所示,为采用部分译码法的实现扩展存储器的方式。若采用部分译码法时,P2.3P2.7多余的5位地址中高3位P2.4-P2.7不用,使用P2.3连接到非门上,以输入信号和非门输出信号做片选信号,此时,各个芯片的地址范围为:第一片2716占用地址:0000-07FFH;第二片2716占用地址:0800-08FFH。 此时,P2.4P2.7没有参加译码,为任意状态,为了消除重叠现象,本图中在部分译码法中没有用的
34、位可固定为0,由此可以看出经过译码电路扩展的存储器是从小到大连续编号的。,图1.10 译码法扩展1片6116和1片2716,1.3 单片机的编程语言 如果说硬件资源是单片机的骨骼,那么软件资源就是单片机的灵魂。单片机的软件资源就是指为了完成某种功能,将若干条指令按先后顺序组织起来的一段程序或者若干段指令的集合。 指令是基本的软件资源,它可以有机器语言、汇编语言和高级语言三种不同的语言形式。,1.4 本章小结本章以单片机与计算机的不同为切入点,引入了单片机的定义、介绍单片机的发展过程、应用领域及展望,并以Intel公司的MCS-51系列单片机89C51为代表,介绍单片机的硬件资源和单片机编程中常用的编程方法。,