第1章单片机基础
【本章要点】
单片机定义。
MCS-51系列单片机基本配置、内部结构、引脚定义与I/O引脚结构。
MCS-51系列单片机存储器结构。
1.1概述
20世纪80年代,Intel公司首先推出了8051单片机,至今已有20多年的历史。目前,单片机以其体积小,质量轻,抗干扰能力强,对环境要求低,高性价比和可靠性,易于开发等优点,广泛应用于工业控制、数据采集、自动检测、智能仪器仪表、家用电器、军工产品、电力电子、机电一体化设备等领域。并且可以看到,随着电子技术的发展和市场对产品功能和性能要求的不断提高,Flash技术、在线可编程、高速度、低功耗、低价格、大规模集成是单片机的发展方向。
单片微机的全称是单片微型计算机(Single Chip Microcomputer),简称单片机,也称为微控制器(Micro-Controller Unit,MCU)。它在一块半导体芯片上集成了中央处理器CPU、存储器(RAM、ROM和EPROM)、各种I/O接口电路(并行接口和串行接口)、定时器/计数器和中断控制器等功能部件。
1.1.1单片机的产生和发展
单片机出现的历史不算短,但是近十年的发展十分迅速。它的产生与发展和微处理器的产生与发展大体同步,自1971年美国Intel公司首先推出4位微处理器以来,它的发展到目前为止大致可分为5个阶段。
第1阶段(1971~1976年):单片机发展的初级阶段。1971年11月,Intel公司首先设计出单芯片内集成2000只晶体管的4位微处理器Intel 4004,并配有RAM、ROM和移位寄存器,构成了第一台MCS-4微处理器,而后又推出了8位微处理器Intel 8008,以及其他公司相继推出的8位微处理器。它们虽说还不是单片机,但从此拉开了研制单片机的序幕。
第2阶段(1976~1980年):低性能单片机阶段。以1976年Intel公司推出的MCS-48系列为代表,采用将8位CPU、8位并行I/O接口、8位定时器/计数器、RAM和ROM等集成于一块半导体芯片上的单片结构,虽然其寻址范围有限(不大于4KB),也没有串行口,RAM和ROM容量小,中断系统也较简单,但功能可满足一般工业控制和智能化仪器仪表等的要求。这种采用将CPU与计算机外围电路集成到一块芯片上的技术,标志着单片机与通用CPU发展方向的分离,在构成新型工业微控制器方面取得了成功,为进一步发展单片机开辟了成功之路。
第3阶段(1980~1983年):高性能单片机阶段。这一阶段推出的高性能8位单片机普遍带有串行口,有多级中断处理系统,多个16位定时器/计数器。片内RAM和ROM的容量加大,且寻址范围可达64KB,个别片内还带有A/D转换接口。其典型产品为1980年Intel公司推出的MCS-51系列单片机,其他代表产品有Motorola公司的6801和Zilog公司的Z8等。这类单片机拓宽了单片机的应用范围,使之能用于智能终端、局部网络的接口等方面。因而,它是目前国内外产品的主流,各生产厂家仍在不断地改进和发展它。
第4阶段(1983~20世纪80年代末):16位单片机阶段。1983年,Intel公司又推出了高性能的16位单片机MCS-96系列,其采用了最新的制造工艺,使芯片集成度高达12万只晶体管/片。CPU为16位,支持16位算术逻辑运算,并具有32位除16位的除法能力;片内RAM和ROM容量更进一步增大;除两个16位定时器/计数器外,还可设定4个软件定时器;具有8个中断源;片内带有多通道高精度A/D转换和高速输入/输出部件(HSIO);运算速度和控制功能也大幅度提高,具有很强的实时处理能力。
第1章单片机基础
单片微机原理及应用
第5阶段(20世纪90年代~至今):单片机在集成度、功能、速度、可靠性、应用领域等全方位向更高水平发展。例如,CPU的位数有8位、16位、32位,而结构上更进一步采用双CPU结构或内部流水线结构,以提高处理能力和运算速度;时钟频率高达20MHz,使指令执行速度相对加快;提供新型的串行总线结构,为系统的扩展与配置打下良好的基础;新增的特殊功能部件(如PWM输出、看门狗定时器WDT、可编程序计数器阵列PCA、DMA传输、调制解调器、通信控制器、浮点运算元等);半导体制造工艺的不断改进,使芯片向高集成化、低功耗方向发展等。以上这些方面的发展,使单片机在数据的实时处理、高级通信系统、数字信号处理、复杂工业过程控制、高级机器人以及局域控制网络等领域得到大量应用。
1.1.2单片机的应用
由于单片机具有体积小、质量轻、价格便宜、功耗低、易扩展、可靠性高、控制功能强以及运算速度快等特点,因而在国民经济建设、军事产品以及家用电器等各个领域均得到了广泛的应用。
1.工业自动化
. 在自动化技术中,无论是过程控制技术、数据采集还是测控技术,都离不开单片机。在工业自动化领域中,机电一体化技术将发挥愈来愈重要的作用,在这种集机械、微电子和计算机技术为一体的综合技术(如机器人技术)中,单片机发挥着非常重要的作用。
2.智能仪器仪表
目前对仪器仪表的自动化和智能化要求越来越高。在智能仪器仪表中,单片机应用十分普及。单片机的使用有助于提高仪器仪表的精度和准确度,简化结构,减小体积而易于携带和使用,加速仪器仪表向数字化、智能化、多功能化方向发展。
3.消费类电子产品
单片机在消费类电子产品的应用主要集中在家电领域。目前家电产品的一个重要发展趋势是不断提高其智能化程度。例如,在洗衣机、电冰箱、空调机、电视机、微波炉、手机、IC卡、汽车电子设备等设备中使用了单片机后,其产品功能得到增强,性能得到提高,并实现了智能化、最优化控制。
4.通信方面
在调制解调器、程控交换技术以及各种通信设备中,单片机均得到了广泛的应用,并收到了良好的效果。
5.军事产品
在现代化的军事产品中,如飞机、军舰、坦克、导弹、鱼雷制导、智能武器装备、航空航天导航系统,都有单片机的应用深入其中。
6.终端及外部设备控制
在计算机网络终端设备,如银行终端以及计算机外部设备、打印机、硬盘驱动器、绘图仪、传真机、复印机等都使用了单片机。
7.多机分布式系统
可用多片单片机构成分布式测控系统,它使单片机的应用进入一个新的水平。
综上所述,目前单片机已用于工业控制、机电一体化设备、智能仪器仪表、信号处理、现代军事产品、交通能源、商用设备、医疗设备及家用电器等各个领域。随着单片机性能的不断提高,它的应用将会更加广泛。
1.2MCS-51单片机基本结构[*2/3]
1.2.1MCS-51单片机系列
MCS是Intel公司生产的单片机的系列符号,如Intel公司的MCS-48、MCS-51、MCS-96系列单片机。目前,MCS-51系列单片机已有10多种产品,可分为两个子系列:C51子系列和C52子系列。C51子系列中主要有8031、8051、8751 3种类型。而C52子系列中也有3种类型8032、8052、8752。表1-1中列出了MCS-51系列单片机的2个子系列,在4个性能方面上的差异。
表1-1MCS-51单片机系列单片机配置一览表
系列
片内存储器(字节)
片内ROM
无
ROM片内
ROM片内
EPROM
片内RAM
定时器/
计数器并行I/O串行I/O中断源制造
工艺
C51子系列
80318051
4KB8751
4KB128B2×164×8位15HMOS
80C3180C51
4KB87C51
4KB128B2×164×8位15CHMOS
C52子系列
80328052
8KB8752
8KB256B3×164×8位16HMOS
80C3280C52
8KB87C52
8KB256B3×164×8位17CHMOS
从表1-1中可以看出,在相同子系列内,各类芯片的主要区别在于有无ROM或EPROM;C51与C52子系列所不同的是片内程序存储器ROM从4KB增至8KB;片内数据存储器由128字节增至256字节;定时器/计数器增加了1个;中断源增加了1~2个。另外,制造工艺为CHMOS的单片机采用,CMOS技术制造,因此具有低功耗的特点,如8051功耗约为630mW,而80C51的功耗只有120mW。
1.2.2MCS-51系列单片机内部结构
MCS-51系列单片机的内部结构框图如图1-1所示。
MCS-51系列单片机内部结构按其功能部件可以分为八大部分。
1.中央处理器(CPU)
MCS-51系列单片机有1个8位的CPU,由运算部件、控制部件构成,其中包括振荡电路和时钟电路,主要完成单片机运算和控制功能。它是单片机的核心部件,决定了单片机的主要功能特性。MCS-51单片机的CPU不仅可以处理字节数据,还可以处理位变量。
图1-1MCS-51系列单片机内部结构框图
2.片内数据存储器(RAM)
片内带有128字节(C52子系列为256字节)的数据存储器RAM。其片外数据存储器的寻址范围为64KB。数据存储器用于存储单片机运行过程中的工作变量、中间结果和最终结果等。
3.片内程序存储器(ROM/EPROM)
片内带有4KB(C52子系列为8KB)程序存储器ROM,其片外可寻址范围为64KB。8031(或8032)单片机内部无ROM。程序存储器既可以存放已编制的程序,也可以存放一些原始数据和表格。
4.特殊功能寄存器(SFR)
片内有21个(C52子系列为26个)特殊功能寄存器(SFR),用于控制和管理内部算术逻辑部件、并行I/O口、串行I/O口、定时器/计数器、中断系统等功能模块的工作。
5.并行口
4个8位的并行I/O分别为P0、P1、P2、P3。
6.串行口
1个全双工的串行口,可以实现单片机与外设之间数据的逐位传送。
7.定时器/计数器
片内有两个(C52子系列有3个)16位的定时器/计数器,可以设置为定时方式或计数方式。
8.中断系统
具有5个中断源,可编程为两个优先级的中断系统。
串行口、定时器/计数器和中断系统的应用知识将在第4章中详细介绍。
1.2.3MCS-51系列单片机外部引脚
MCS-51系列单片机中各种型号芯片的引脚是互相兼容的。制造工艺为HMOS的芯片采用双列直插(DIP)封装,其引脚数为40。而CMOS工艺制造的芯片也有采用方形(PLCC)封装的,其引脚数为44(其中有4个未连接引脚)。图1-2是双列直插封装MCS-51系列单片机的引脚分配图。
MCS-51系列单片机的40个引脚中有两个电源引脚,两个时钟引脚,4个控制引脚,以及32条输入输出I/O引脚。下面介绍各类引脚的功能。
1.电源引脚VCC和GND
VCC(引脚40):接+5V电源。
GND(引脚20):接地。
2.时钟引脚XTAL1和XTAL2
XTAL1(引脚19):接外部晶体的一端。在单片机内部,它是一个反相放大器的输入端,这个放大器构成片内振荡器。当采用外部时钟时,对于HMOS单片机,该引脚接地;对CHMOS单片机,该引脚作为外部振荡信号的输入端。
XTAL2(引脚18):接外部晶体的另一端。在单片机内部,接至片内振荡器的反相放大器的输出端。当采用外部时钟时,对于HMOS单片机,该引脚作为外部振荡信号的输入端;对于CHMOS单片机,该引脚悬空不接。
3.控制引脚
此类引脚提供控制信号,有的引脚还具有复用功能。
1)RST/VPD(引脚9):RST(RESET)是复位信号输入端,高电平有效。VPD为备用电源。当单片机运行时,只要在该引脚上出现持续时间大于两个机器周期的高电平,就可完成复位操作,使单片机回复到初始状态。
当VCC发生故障、降低到低电平规定值或掉电时,可以将+5V电源接入VPD引脚,为内部RAM供电,以保证RAM中的数据不会丢失。
2)ALE/PROG(引脚30):ALE引脚输出地址锁存允许信号。当访问外部存储器时,ALE以每个机器周期两次的信号输出,用于锁存出现在P0口的低8位地址。在不访问外部存储器时,ALE端仍以上述不变的频率(振荡器频率的1/6),周期性地出现正脉冲信号,可作为对外输出的时钟脉冲或用于定时。但要注意,在访问片外数据存储器期间,ALE脉冲只会出现1次,此时作为时钟输出是不妥当的。
对于片内含有EPROM的单片机,在对EPROM编程期间,PROG引脚作为编程脉冲的输入端。
3)PSEN(引脚29):片外程序存储器读选通信号输出端,低电平有效。当从外部程序存储器读取指令或常数期间,每个机器周期内PSEN信号两次有效,以通过数据总线读回指令或常数。当访问外部数据存储器期间,PSEN信号将不会出现。
4)EA/VPP(引脚31):EA为访问外部程序存储器控制信号,低电平有效。当EA端保持高电平时,单片机访问片内程序存储器。超出该范围时,自动转去执行外部程序存储器的程序。当EA端保持低电平时,无论片内有无程序存储器,均只访问外部程序存储器。
对于片内含有EPROM的单片机,在EPROM编程期间,VPP引脚用于12V编程电源。
4.输入/输出(I/O)引脚P0、P1、P2及P3口
1)P0口(引脚32~引脚39):P0.0~P0.7统称为P0口。当不接外部存储器或不扩展I/O接口时,它可作为准双向口8位输入/输出接口。当接有外部存储器或扩展I/O接口时,P0口为低8位地址/数据分时复用口,分时用作低8位地址总线和8位双向数据总线。
2)P1口(引脚1~引脚8):P1.0~P1.7统称为P1口,作为准双向I/O口使用。
对于C52子系列单片机,P1.0与P1.1还有第2功能:P1.0可用作定时器/计数器2的计数脉冲输入端T2;P1.1用作定时器/计数器2的外部控制端T2EX。
3)P2口(引脚21~引脚28):P2.0~P2.7统称为P2口,可作为准双向I/O接口使用。当接有外部存储器或扩展I/O接口且寻址范围超过256字节时,P2口用于高8位地址总线送出高8位地址。
4)P3口(引脚10~引脚17):P3.0~P3.7统称为P3口,是双功能口。它可以作为一般的准双向I/O接口,也可以将每根口线用于第2功能。P3口的第2功能见表1-2。
表1-2P3口第2功能
引脚第2功能引脚第2功能
P3.0RXD:串行口接收数据输入端
P3.1TXD:串行口发送数据输出端
P3.2INT0:外部中断申请输入端0
P3.3INT1:外部中断申请输入端1
P3.4T0:外部计数脉冲输入端0
P3.5T1:外部计数脉冲输入端1
P3.6WR:写外设控制信号输出端
P3.7RD:读外设控制信号输出端
综上所述,MCS-51单片机的40根引脚由4组8位的I/O口线和8根其他控制功能的引脚组成。了解单片机的引脚特征是掌握单片机
图1-2双列直插封装MCS-51系列单片机的引脚分配
整体结构特征以及单片机应用系统设计的重要基础之一。双列直插封装MCS-51单片机的引脚分配如图1-2所示。
1.3中央处理器CPU
中央处理器CPU是单片机内部的核心部件,它决定了单片机的主要功能特性。它由运算部件和控制部件两部分组成。
1.3.1运算部件
运算部件以算术逻辑单元(ALU)为核心,加上累加器(ACC)、寄存器B、暂存器TMP1和TMP2、程序状态字PSW以及专门用于位操作的布尔处理器组合而成,它能实现数据的算术、逻辑运算和位操作。
1.算术逻辑单元
算术逻辑单元(Arithmetic Logic Unit,ALU)不仅能完成二进制数的加、减、乘、除、加1、减1等算术运算,还能对8位变量进行逻辑“与”、“或”、“异或”、求补、清零和循环移位等逻辑运算。
2.累加器和寄存器B
累加器(Accumulator,ACC)是一个8位的寄存器,是CPU中使用最频繁的寄存器,简称累加器A。进入ALU的操作数多来源于累加器A,运算结果也常送回累加器A中保存。寄存器B是为ALU进行乘除法运算设置的。在执行乘法运算指令时,寄存器B用于存放一个乘数和乘积的高8位数。执行除法指令时,寄存器B中存放除数和余数。不做乘、除运算时,可作为通用寄存器使用。
3.程序状态字
程序状态字(Program Status Word,PSW)是一个8位的标志寄存器,位于单片机内部RAM存储器的特殊功能寄存器区。它保存指令执行结果的特征信息,供程序查询和判别。程序状态字PSW的格式及含义如下:
PSW.7PSW.0
CYACF0RS1RS0OV—P
1)CY(PSW.7):进位/借位标志位。由硬件或软件置位和清零。它表示累加器ACC中的运算结果是否有进位(或借位)。如果运算结果在最高位有进位输出(加法时)或有借位输入(减法时),则CY=1;否则,CY=0。
2)AC(PSW.6):辅助进位/借位标志位,或称半进位/借位标志位。它表示在运算过程中,累加器ACC中低4位有无进位(或借位)的情况发生。当低4位相加(或相减)时,若D3位向D4位有进位(或借位),则AC=1;否则,AC=0。在BCD码运算的十进制调整中自动判别该标志。
3)F0(PSW.5):可由用户定义的标志位。用户在软件设计过程中可以对F0赋以一定的含义,并根据F0=1或0来决定程序的执行方式。
4)RS1(PSW.4)、RS0(PSW.3):工作寄存器组选择位。可用软件置位或清零,用以选择4组工作寄存器中的哪一组为当前使用的工作寄存器组(4组工作寄存器位于单片机内部的RAM存储器中,详见1.4.3节)。RS1、RS0与4组工作寄存器组的关系如表1-3所
表1-3工作寄存器组选择表
RS1RS0所选的4组工作寄存器
000组(内部RAM区地址00H~07H)
011组(内部RAM区地址08H~0FH)
102组(内部RAM区地址10H~17H)
113组(内部RAM区地址18H~1FH)
示。
5)OV(PSW.2):溢出标志位。由硬件置位或清零。它表示运算结果是否溢出,溢出时,OV=1;否则,OV=0。溢出是指有符号数运算时,运算结果超出了累加器ACC以补码所能表示一个有符号数的范围(-128~+127)。一旦出现溢出现象,运算结果就不正确。
6)PSW.1:未定义。
7)P(PSW.0):奇偶标志位。在执行指令后,CPU根据累加器ACC中1个数的奇偶自动将该标志置位或清零。当ACC中1的个数为奇数时,P=1;否则,P=0。此标志位对串行通信中的数据传输有重要意义。在串行通信中,常用奇偶校验法来检验数据传输的可靠性。
1.3.2控制部件
控制部件是单片机的指挥核心,它包括程序计数器(PC)、指令寄存器(IR)、指令译码器(ID)、条件转移逻辑电路以及时序控制逻辑电路等部件。在单片机执行指令过程中,控制部件先以主振频率为基准发出CPU的时序,从程序存储器中读出指令送入指令寄存器(IR),接着送到指令译码器(ID)进行译码,译码结果送到时序控制逻辑电路,最后发出各种控制信号,协调单片机内部各功能部件之间的数据传送和运算等操作,并对外发出地址锁存ALE信号、外部程序存储器选通PSEN信号,以及通过P3.6和P3.7发出数据存储器读RD、写WR等控制信号,并且接收处理外接的复位RST和外部程序存储器访问控制EA信号。
1.3.3CPU时序
1.时钟电路
时钟电路用于产生MCS-51单片机工作时所必需的时钟控制信号。MCS-51单片机内各功能部件的运行都以时钟控制信号为基准,严格按时序一步一步地工作。时钟频率直接影响单片机的速度,时钟电路的稳定性也直接影响单片机系统的稳定性。单片机的时钟电路设计有两种方式:内部时钟方式和外部时钟方式。
图1-3是采用内部时钟方式时的电路图。在这种方式下,单片机内部的高增益反相放大器通过XTAL1、XTAL2外接作为反馈元件的外部晶体振荡器(呈感性)与电容组成的并联谐振回路构成一个自激振荡器,向内部时钟电路提供振荡时钟。振荡器的频率主要取决于晶体的振荡频率。MCS-51单片机的晶体频率可以在1~12MHz范围内选择,电容C1、C2选择范围是15~45pF(推荐使用30pF),电容的大小会影响振荡器的稳定性和起振的速度。
图1-4是采用外部时钟方式时的电路图。在这种方式下,外部时钟信号通过XTAL2端直接接至内部时钟电路,这时内部反相放大器的输入端XTAL1端必须接地。通常外接时钟信号为低于12MHz的方波信号。
图1-3MCS-51单片机内部时钟方式
图1-4MCS-51单片机外部时钟方式
2.CPU时序
CPU在执行指令时,通常将一条指令分解为若干基本的微操作,这些微操作所对应的脉冲信号在时间上的先后次序称为CPU时序。为了便于理解CPU时序,先介绍几个基本的时间概念。
1)时钟周期(或振荡周期)Tc:为单片机提供时钟信号的时钟源的周期(晶振周期或外部时钟源周期)。若时钟晶振的频率为fosc,则时钟周期Tc=1/fosc。
2)状态周期Ts:两个时钟周期为1个状态周期。两个时钟周期作为两个节拍分别称为节拍P1和节拍P2。在单片机应用系统开发过程中,状态周期的概念使用得较少。
3)机器周期Tm:1个机器周期分为6个状态周期,用S1~S6表示,共12个节拍。因此,1个机器周期可表示为S1P1、S1P2、S2P1、S2P2、…、S6P2。
4)指令周期Ti:CPU执行一条指令所需要的机器周期数。MCS-51单片机汇编指令集中,不同指令的执行时间是不同的。对于一些简单的指令,取出指令立即执行,只需1个机器周期。而有些复杂的指令,如乘除法指令则需要4个机器周期。
例1-1外接晶振频率fosc=12MHz时,单片机的时钟周期Tc=1/12μs,状态周期Ts=1/6μs,机器周期Tm=1μs,指令周期Ti=1~4μs。
MCS-51单片机的CPU取指令和执行指令的时序图如图1-5所示。在图1-5中,由于内部时钟信号在单片机外部无法观察到,所以以外部XTAL2的振荡信号和地址锁存允许ALE信号作为参考。ALE信号是MCS-51单片机扩展外部存储器的低8位地址锁存信号,在访问外部程序存储器的机器周期内,ALE信号两次有效,分别在S1P2至S2P1和S4P2至S5P1产生。而在访问外部数据存储器的机器周期内,ALE信号仅1次有效,只在S1P2至S2P1期间产生。
图1-5MCS-51单片机CPU时序
图1-5a和图1-5b分别表示单字节单周期和双字节单周期指令的执行时序。单周期指令的执行从S1P2开始,在S1P2期间读入操作码并把它锁存到指令寄存器中。双字节指令则在同一机器周期的S4P2期间读入第2字节。单字节指令在S4P2期间仍有一次读操作,但这时读出的字节是不予考虑的,而且程序计数器PC也不会自增1。对于单周期指令,在上述任何情况下,指令都在S6P2期间完成操作。
图1-5c是单字节双周期指令的执行时序。单字节双周期指令在两个机器周期内做4次读操作码操作,由于采用单字节指令,因此后3次读操作是无效的。
图1-5d是访问外部数据存储器指令MOVX指令的执行时序,这是一条单字节双周期指令,具有特殊性。在执行MOVX指令时,仍在第1个机器周期的S1P2期间读入操作码,在S4P2期间也执行读操作,但读入的下一个操作码不予考虑(因为MOVX是单字节指令)。由第1个机器周期的S5开始,送出外部数据存储器的地址,随后读或写数据,直到第2个机器周期的S3结束,在此期间不产生ALE有效信号(这就是在1.2.3节介绍ALE引脚功能时提到在访问外部数据存储器期间,ALE信号只有1次有效的原因)。而在第2个机器周期期间,因为外部数据存储器已被选址和选通,所以也不产生取指操作。
1.3.4CPU复位
1.复位操作
复位操作是使单片机进入某种确定的初始状态。MCS-51单片机在时钟电路工作以后,在RST/VPD引脚持续加上两个机器周期的高电平可以完成复位操作(一般复位高电平时间大于10ms)。单片机复位后,程序计数器(PC)和特殊功能寄存器复位状态如表1-4所示。复位不影响片内RAM存放的内容,而ALE、PSEN引脚在复位期间将输出高电平。
表1-4PC和特殊功能寄存器复位状态表
寄存器复位状态寄存器复位状态
PC0000HTMOD00H
ACC00HTCON00H
B00HTH000H
PSW00HTL000H
SP07HTH100H
DPTR0000HTL100H
P0~P3FFHSCON00H
IP×××00000BSBUF××H
IE0××00000BPCON0×××0000B
2.复位电路
MCS-51单片机复位电路有两种:上电复位和手动复位。图1-6是MCS-51单片机两种复位方式的参考电路。上电复位利用电容两端电压不能突变的原理,在上电瞬间RST/VPD引脚与VCC引脚电压相同,随着电容充电两端电压逐渐上升,RST/VPD引脚电压逐渐下降。在图1-6a电路中,电容C取10μF,电阻R取10kΩ,可在RST/VPD引脚提供足够的高电平脉冲,使单片机能可靠地上电自动复位。
图1-6MCS-51单片机复位参考电路
图1-6b的参考电路既可以上电复位,也可以外部手动复位。当按键K1按下时,对单片机实现手动复位。其中,电阻R2可取100Ω。
1.3.5布尔处理器
布尔处理(即位处理)是MCS-51系列单片机ALU所具有的一种功能。单片机指令系统中的布尔指令集(17条位操作指令)、数据存储器中的位寻址空间,以及程序状态字(PSW)中的CY位作为位操作“累加器”,构成了单片机内的布尔处理机。它可对直接寻址的位变量进行置位、清零、取反、判别转移以及逻辑“与”、“或”等操作。用户在编程时可以利用位操作指令完成原来单凭硬件电路完成的功能,并可方便地设置标志等。
1.4MCS-51单片机存储器结构
MCS-51单片机存储器采用的是新型哈佛(Harvard)结构,即程序存储器空间和数据存储器空间是各自独立的,各自有独立的地址总线和数据总线。
1.4.1MCS-51单片机存储器分类及配置
MCS-51单片机存储器从物理结构上可分为:片内、片外程序存储器(8031和8032内部没有程序存储器)与片内、片外数据存储器4个部分。MCS-51单片机存储器空间结构如图1-7所示。
图1-7MCS-51单片机存储器空间结构图
1.4.2程序存储器
1.程序存储器的编址
计算机负责按照事先编制好的程序指令一条一条按顺序执行,程序存储器负责存放经调试正确的程序和一些表格之类的固定常数。为了有序地工作,计算机设置了一个专用寄存器——程序计数器(PC),用以存放将要执行的指令地址。每取出的1字节后,其内容自行加1,指向下一条指令所在的地址,依次使计算机从程序存储器中取出指令执行,完成程序要求的操作。MCS-51单片机的程序计数器为16位,因而可寻址的地址空间是64KB,地址范围是0000H~FFFFH,其结构见图1-7a。
8051和8751单片机内部有4KB ROM或EPROM程序存储器,片内编址范围为0000H~0FFFH,片外扩展程序存储器编址范围为1000H~FFFFH。8052和8752单片机内部有8KB ROM或EPROM程序存储器,片内编址范围为0000H~1FFFH,片外扩展编址范围为2000H~FFFFH。8031和8032单片机片内没有程序存储器,只能在片外扩展,其编址范围为0000H~FFFFH。由此可见程序存储器的编址规则为:先片内,后片外、片内、片外连续编址,两者地址不重叠。
MCS-51单片机的EA引脚电平属性决定执行程序时,是从片内程序存储器取指令,还是从片外程序存储器取指令。当EA=1为高电平时,先从内程序存储器内取指令执行程序,当程序计数器(PC)的内容超过0FFFH(如8051单片机的4KB片内程序存储器)或1FFFFH(如8052单片机片内的8KB片内程序存储器)时,将自动转向片外程序存储器取指令执行程序。当EA=0为低电平时,单片机只从片外程序存储器取指令。对于片内没有程序存储器的8031和8032单片机,EA引脚应该保持低电平。对于片内有程序存储器的单片机,如果EA引脚保持低电平,则单片机只执行片外程序存储器内的程序。由此可见,是执行片内,还是片外程序存储器中的程序,是由EA引脚的电平属性决定的。
2.程序运行的入口地址
实际应用时,单片机程序存储器的容量空间可以根据需要扩展。但是,必须注意的是,MCS-51单片机程序最初运行的入口地址是固定的,用户只能遵守,不能更改。表1-5是MCS-51单片机程序存储器中中断源和复位的入口地址。
表1-5MCS-51单片机程序存储器中的中断源和复位入口地址
中断源入口地址中断源入口地址
复位0000H
外部中断0(INT0)0003H
定时器/计数器0溢出(T0)000BH
外部中断1(INT1)0013H
定时器/计数器1溢出(T1)001BH
串行口接收/发送0023H
在单片机软件系统设计中,通常在程序固定入口地址处存放一条绝对跳转指令,跳向用户设计的程序处开始执行。
另外,当单片机从片外程序存储器读取指令时,要相应提供片外程序存储器的地址信号和控制信号ALE、PSEN。关于单片机扩展片外程序存储器的相关内容在第5章中详细阐述。
1.4.3内部数据存储器
1.内部数据存储器的编址
MCS-51系列单片机的内部数据存储器由读写存储器RAM组成,用于存储数据,其结构如图1-7b所示。对于C51子系列单片机,RAM区有128字节,其编址范围为00H~7FH;特殊功能寄存器(SFR)区占128字节,其编址范围为80H~FFH。对于C52子系列单片机,RAM区有256字节,其编址范围为00H~FFH;特殊功能寄存器(SFR)区仍占128字节,编址范围为80H~FFH。C52子系列单片机RAM区的后128字节和特殊功能寄存器区在编址上是重叠的。通过使用不同的指令来决定程序访问的是RAM区,还是特殊功能寄存器区(SFR),从而不会引起混乱。
2.内部数据存储器分区
单片机内部数据存储器RAM区分为工作寄存器区、位寻址区和普通RAM区3部分。
(1)工作寄存器区
内部RAM区的00H~1FH区分为4组,每组有8个工作寄存器R0~R7,共32个内部RAM单元。表1-6是工作寄存器与RAM地址的对照表。
表1-6工作寄存器与RAM地址对照表
工作寄存器0组工作寄存器1组工作寄存器2组工作寄存器3组
地址寄存器地址寄存器地址寄存器地址寄存器
00HR008HR010HR018HR0
01HR109HR111HR119HR1
02HR20AHR212HR21AHR2
03HR30BHR313HR31BHR3
04HR40CHR414HR41CHR4
05HR50DHR515HR51DHR5
06HR60EHR616HR61EHR6
07HR70FHR717HR71FHR7
工作寄存器共有4组,程序在某一时段只用其中的一组,其他各组可以用作普通RAM区。程序状态子PSW中PSW.3(RS0)和PSW.4(RS1)两位决定程序使用哪一组工作寄存器(PSW.3、PSW.4与工作寄存器组的对应关系已在1.3.1节介绍)。MCS-51单片机的指令系统中有专门为寄存器设计的指令,因此程序设计中多使用寄存器有助于提高程序执行的效率。但需要注意的是,用户程序中某时段不使用的寄存器组,通常不作为普通RAM使用,而是预留作为寄存器组之间切换使用。
(2)位寻址区
内部RAM区的20H~2FH单元是位寻址区,共16个字节单元。位寻址区的字节单元中的每一位允许按位(1bit)访问。因此,16个字节单元共计128个位寻址空间,地址范围为00H~7FH。表1-7是位寻址区的地址表。通常,单片机应用系统软件开发过程中,各种程序状态标志、位控制变量均定义于位寻址区。此外,位寻址区的16个单元也可以按字节访问。
表1-7位寻址区地址表
RAM地址D0D1D2D3D4D5D6D7
20H00H01H02H03H04H05H06H07H
21H08H09H0AH0BH0CH0DH0EH0FH
22H10H11H12H13H14H15H16H17H
23H18H19H1AH1BH1CH1DH1EH1FH
24H20H21H22H23H24H25H26H27H
25H28H29H2AH2BH2CH2DH2EH2FH
26H30H31H32H33H34H35H36H37H
27H38H39H3AH3BH3CH3DH3EH3FH
28H40H41H42H43H44H45H46H47H
29H48H49H4AH4BH4CH4DH4EH4FH
2AH50H51H52H53H54H55H56H57H
2BH58H59H5AH5BH5CH5DH5EH5FH
2CH60H61H62H63H64H65H66H67H
2DH68H69H6AH6BH6CH6DH6EH6FH
2EH70H71H72H73H74H75H76H77H
2FH78H79H7AH7BH7CH7DH7EH7FH
(3)普通RAM区
30H~7FH是普通RAM区,共80个单元,只能按字节访问。C52子系列单片机内部普通RAM区的地址范围是30H~FFH,共208个单元。
3.特殊功能寄存器区
特殊功能寄存器(Special Function Register,SFR),专用于控制、管理单片机内算术逻辑部件、并行I/O锁存器、串行口数据缓冲器、定时器/计数器、中断系统等功能模块的工作,共有21个,地址范围是80H~FFH。表1-8是特殊功能寄存器的名称及其地址分布。
表1-8特殊功能寄存器名称及其地址分布
特殊功能寄存器名称符号地址位地址
P0口P080H80H~87H
堆栈指针SP81H
数据指针低字节
数据指针高字节
DPL
DPTR
DPH
82H
83H
定时器/计数器控制TCON88H88H~8FH
定时器/计数器方式控制TMOD89H
定时器/计数器0低字节TL08AH
定时器/计数器1低字节TL18BH
定时器/计数器0高字节TH08CH
定时器/计数器1高字节TH18DH
P1口P190H90H~97H
电源控制PCON97H
串行口控制SCON98H98H~9FH
串行数据缓冲器SBUF99H
P2口P2A0HA0H~A7H
中断允许控制IEA8HA8H~AFH
P3口P3B0HB0H~B7H
中断优先级控制IPB8HB8H~BFH
程序状态字PSWD0HD0H~D7H
累加器ACC(或A)E0HE0H~E7H
B寄存器BF0HF0H~F7H
表1-8中地址能被8整除的SFR,可以按位寻址。可按位寻址的SFR中各功能位的具体定义在后续有关章节中详细介绍。此外,需要注意的是,特殊功能寄存器区共128字节,但是仅有21字节作为SFR使用(C51子系列为21字节或C52子系列为26字节)。对于其他没有定义的字节,不能对其进行读/写操作。若对其进行访问,将得到一个不确定的随机数,是没有意义的。
下面简单介绍特殊功能寄存器区中的一些寄存器,其他寄存器将在后续有关章节中介绍。
(1)堆栈指针
堆栈是在内部RAM区开辟的一个区域,用来保存程序运行过程中的一些特殊数据,它遵循顺序存取和后进先出(Last In First Out,LIFO)或先进后出(First In Last Out,FILO)的原则。MCS-51单片机堆栈区是不固定的,理论上可设在内部RAM区的任意位置,但为了避开工作寄存器区和位寻址区,一般设在RAM区内靠后的一个连续地址范围内,栈顶的位置由专用堆栈指针(SP)寄存器(8位)指定。MCS-51单片机的堆栈属于向上生长型。堆栈区域设置的初始时刻,栈顶和栈底在同一个位置,随着对堆栈的操作,栈底是固定的,栈顶在变化。
堆栈的操作有两种:压入(PUSH)堆栈和弹出(POP)堆栈。当数据压入堆栈时,SP的内容先自动加1作为本次压栈的地址,然后再存入数据。随着数据的存入,SP的值随之增大。当数据从堆栈弹出时,先将当前栈顶的内容弹出至指定单元,然后SP的内容自动减1。随着数据的弹出,SP的值随之减小。单片机复位时,SP=07H,堆栈实际位置从08H开始,即在工作寄存器区内。为此,在初始化程序中要给SP重新赋值,以指定堆栈的起始位置。
(2)数据指针
数据指针(DPTR)是一个16位的特殊功能寄存器,其高8位字节寄存器用DPH表示,低8位字节用DPL表示,DPTR既可以用作一个16位的寄存器DPTR,也可以用作两个独立的8位寄存器DPH和DPL。
(3)B寄存器
B寄存器是为执行乘法和除法操作设置的。
执行乘法操作时,算术逻辑单元ALU的两个输入分别是累加器A、B寄存器。乘积的高8位存放于B寄存器中,低8位存放于累加器A中。
执行除法操作时,被除数存放于累加器A中,除数存放于B寄存器中。执行除法后,商存放于累加器A中,余数存放于B寄存器中。
在不执行乘、除法操作的情况下,B寄存器可以用作一个普通寄存器。
4.位寻址空间
在MCS-51系列单片机的RAM区和SFR区中,有一部分地址空间可以按位寻址,按位寻址的地址空间称为位寻址空间。位寻址空间一部分是内部RAM区的20H~2FH的16字节单元的128位。另一部分在SFR区80H~FFH空间内,地址能被8整除的寄存器都有位地址,共93位。因此,MCS-51系列单片机共有221个位寻址空间。这些位寻址单元与布尔指令集构成了MCS-51系列单片机的布尔处理机系统,它是一个完整的1位微型计算机。
1.4.4外部数据存储器
MCS-51系列单片机的外部数据存储器的结构如图1-7c所示。扩展外部数据存储器的容量,由用户根据实际需要而定。但是MCS-51系列单片机访问外部数据存储器时由P2口和P0口提供16位地址,所以可寻址范围是64KB,即扩展外部数据存储器的最大容量是64KB。
由于访问片外数据存储器有专用的MOVX指令,访问内部数据存储器用MOV指令,控制信号上有PSEN和RD来区分片外程序存储器和数据存储器的选通,所以其编址既可以与程序存储器全部64KB地址重叠,也可以与片内数据存储器128B地址重叠,地址范围为0000H~FFFFH。当需要扩展的外部数据存储器容量小于256B时,也可以将R0或R1(8位)作为访问寄存器,其地址范围为00H~FFH。
1.5MCS-51单片机输入/输出端口
MCS-51系列单片机共有4组8位的双向并行I/O端口:P0口、P1口、P2口和P3口,共32根I/O口线。P0~P3口寄存器属于特殊功能寄存器,既可以按字节访问,也可以按位寻址。每个端口在功能上有所不同,但均由锁存器、输出驱动器和输入缓冲器组成。下面分别介绍4个端口的结构、原理及功能。
1.5.1P0口
1. P0口结构
P0口是一个三态双向口,可作为地址/数据分时复用口,也可作为通用I/O口。图1-8是P0口中1位的结构原理图。P0口由8个同样的电路组成:8个锁存器构成了特殊功能寄存器P0;场效应管(FET)V1、V2组成输出驱动器,以增加负载驱动能力;三态门1是输入引脚缓冲器,三态门2用于读锁存器端口;反相器3、与门4及模拟选择开关组成输出控制电路。
图1-8P0口中1位的结构原理图
2.地址/数据分时复用功能
当P0口用作地址/数据分时复用端口时,可分为两种情况:一种是从P0口输出地址或数据,另一种是从P0口输入数据。
当访问片外存储器需要从P0口输出地址/数据时,控制信号为高电平1,使模拟选择开关把反相器3的输出端与V1相连,同时使与门4一个输入端为高电平1。当输出地址/数据为1时,经过反相器3使V1截止,并经与门4使V2导通,最后P0.X引脚输出高电平1。当输出地址/数据为0时,经反相器3使V1导通,而V2是截止的,最后P0.X引脚输出低电平0。这样就将地址/数据的信号输出。
当从P0口输入数据时,执行取指操作或输入数据指令,读引脚脉冲打开三态门1,使引脚上的数据经缓冲器送至内部总线。
3.通用I/O功能
当P0口作为通用I/O接口使用,在单片机向端口输出数据时,控制信号为低电平0,首先模拟选择开关将输出端与锁存器Q端相连,同时经与门4使V2截止。此时,输出引脚是开漏极电路。当写脉冲加在锁存器时钟端CLK时,Q端输出的数据是锁存器D端数据的取反,Q端数据又经过V1反相,在P0口引脚上输出的数据就是内部总线的数据。当要从P0口输入数据时,引脚信息仍经三态门1进入内部总线。
当P0口用作通用I/O接口时,需要注意两点。
1)在输出数据时,由于V2截止,输出引脚是开漏极电路,要使高电平1信号正常输出,必须外接上拉电阻。
2)P0口用作通用I/O接口时是一个准双向口。其特点是在输入数据时,应对该引脚写入1,此时锁存器Q端为0,使V1、V2均截止,只有引脚处于悬浮状态,才可进行高阻输入。因为,当P0口引脚输入数据时,V2一直处于截止状态,引脚上的外部信号既加在三态门1的输入端,又加在V1的漏极。假定在此之前曾锁存过数据0(Q=0,Q=1),则V1是导通的,这样引脚上的电平就始终被箝位于低电平0,使输入高电平1无法读入。因此,在输入数据时,必须先对该引脚写入1,使V1、V2均截止,方可正确读入数据。所以,P0口用作通用I/O时,是一个准双向口。但在P0口用作地址/数据分时复用端口扩展外部存储器时,则是一个真正的三态双向口。
4.端口操作
MCS-51系列单片机有一些指令可以直接对端口操作。
例1-2ANLP0,A; P0锁存器内容和累加器A内容“与”操作后送P0口
例1-3ORLP0,#data; P0锁存器内容和立即数data“或”操作后送P0口
这些指令的执行过程分成“读-改-写”3步。先将P0口的数据读入单片机,在ALU中进行运算,运算结果再送回P0口。执行“读-改-写”类指令时,单片机使用通过三态门2读回锁存器Q端的数据代表引脚状态。如果直接通过三态门1从引脚读回数据,可能会发生错误。
综上所述,P0口在扩展外部存储器时被用作地址/数据分时复用端口,此时P0口是一个三态双向口。在没有扩展外部存储器时,P0口用作通用I/O接口,是一个准双向口。
1.5.2P1口
P1口为准双向口,其1位的内部结构如图1-9所示。它在结构上与P0口的区别在于输出驱动部分,其输出驱动部分由场效应管V1与内部上拉电阻组成。当引脚输出高电平时,可以提供输出电流驱动负载,而不需要外接上拉电阻。
图1-9P1口中1位的结构原理图
对于C51子系列单片机,从功能来看,P1口只能用作通用I/O口,具有输入、输出和端口操作3种工作方式,每1位口线能独立地用作输入或输出线。当作为输出线时,若将1写入锁存器,Q端将使V1截止,输出线由内部上拉电阻拉成高电平,则从引脚输出1。若将0写入锁存器,Q端使V1导通,从而使引脚接地输出0。当作为输入线时,因为P1口是准双向口,必须先将1写入锁存器,使V1截止,该口线由内部上拉电阻拉成高电平,做高阻输入。引脚信息由三态门1读入内部总线。P1口的端口操作原理与P0口操作相同。综上所述,P1口是一个准双向口,系统中通常作为通用I/O接口使用。
此外,对于C52子系列单片机P1口的P1.0与P1.1,除了作为通用I/O接口外,两者还具有第2功能,即P1.0可作为定时器/计数器2的外部计数脉冲输入端T2,P1.1可作为定时器/计数器2的外部控制输入端T2EX。
1.5.3P2口
P2口为一个准双向口,其1位的内部结构如图1-10所示。P2口既可以作为通用I/O接口使用,也可以作为在单片机扩展外部设备时,高8位地址总线使用。其结构在输出驱动部分比P1口多了一个输出模拟选择开关和反相器3。
图1-10P2口中1位的结构原理图
当作为通用准双向I/O口使用时,控制信号为低电平0,锁存器Q端经反相器3与V1连通,其工作原理与P1口相同,也具有输入、输出和端口操作3种工作方式,负载能力也与P1口相同。
当作为扩展外部设备的高8位地址总线使用时,控制信号为高电平1,由程序计数器(PC)输出的高8位地址PCH,或数据指针(DPTR)输出的高8位地址DPH经反相器3和V1,将高8位地址A8~A15输出至P2口的引脚。在上述情况下,锁存器的内容不受影响。因此,访问外部设备结束后,控制信号由高电平1变为低电平0,使输出驱动器与锁存器Q端相连,引脚将恢复原来的数据。
1.5.4P3口
P3口的1位结构如图1-11所示。它的输出驱动由与非门3和场效应管V1组成,比P0、P1、P2口结构多了一个三态门4。除了可作为通用准双向I/O接口外,P3口每一根引脚还具有第2功能。
P3口作为通用I/O接口时,第2功能输出线为高电平,使与非门3的输出取决于锁存器Q端的状态。在这种情况下,P3口是一个准双向口,它的工作方式、负载能力均与P1、P2口相同。
当P3口作为第2功能(各引脚功能见表1-2)使用时,其锁存器Q端必须为高电平,否则V1导通,引脚被箝位于低电平0,无法输入或输出第2功能信号。当Q端为高电平时,P3口的口线状态取决于第2功能输出线的状态。同样,P3口的每1位可独立定义为通用I/O的输入输出或第2功能输入输出。另外,在P3口的引脚信号输入通道中有两个三态门,第2功能输入信号取自三态门4的输出端,通用I/O接口输入信号取自三态门1的输出端。
图1-11P3口中1位的结构原理图
习题
1-1单片机的发展可以分为哪几个阶段?
1-2简述单片机主要的应用领域。
1-3MCS-51系列单片机片内包含哪些功能部件?各功能部件的功能是什么?
1-4MCS-51系列单片机引脚中有多少条I/O线?它们和单片机对外的地址总线与数据总线有什么关系?地址总线和数据总线各是多少位?什么是“准双向口”?
1-5MCS-51系列单片机的EA引脚的作用是什么?该引脚分别接高电平和低电平时各有何种功能?
1-6MCS-51系列单片机的RST引脚的作用是什么?说明单片机上电复位的工作过程。
1-7MCS-51系列单片机存储器从物理结构、寻址空间分布及功能上如何分类?其寻址范围是多少?
1-8决定程序执行顺序的寄存器是哪个?它是几位的寄存器?它是不是特殊功能寄存器?
1-9MCS-51系列单片机内部RAM低128字节单元分为哪3个部分?
1-10堆栈有哪些用途?堆栈指针(SP)寄存器的作用是什么?在程序设计时,为什么要对SP重新赋值?
1-11MCS-51系列单片机有多少个特殊功能寄存器?其中可以按位寻址的特殊功能寄存器有多少个?
1-12简述时钟周期、机器周期和指令周期的关系。当晶振的振荡频率为6MHz时,一个机器周期为多长时间?