1、第1章 单片机基础1.1 概述概述1.2 MCS51系列单片机基本结构系列单片机基本结构1.3 中央处理器中央处理器CPU1.4 MCS51单片机存储器及存储空间单片机存储器及存储空间1.5 并行输入并行输入/输出接口输出接口1.6 CPU时序与复位时序与复位 1.1 概述 1.1.1 单片机的产生与发展 单片机出现的历史并不长,但发展十分迅猛。它的产生与发展和微处理器的产生与发展大体同步,自1971年美国Intel公司首先推出4位微处理器以来,它的发展到目前为止大致可分为5个阶段:第1阶段(19711976):单片机发展的初级阶段。1971年11月Intel公司首先设计出集成度为2 000只
2、晶体管/片的4位微处理器Intel 4004,并配有RAM、ROM和移位寄存器,构成了第一台MCS4微处理器,而后又推出了8位微处理器Intel 8008,以及其它各公司相继推出的8位微处理器。第2阶段(19761980):低性能单片机阶段。以1976年Intel公司推出的MCS48系列为代表,采用将8位CPU、8位并行I/O接口、8位定时/计数器、RAM和ROM等集成于一块半导体芯片上的单片结构,虽然其寻址范围有限(不大于4 KB),也没有串行I/O,RAM、ROM容量小,中断系统也较简单,但功能可满足一般工业控制和智能化仪器、仪表等的需要。第3阶段(19801983):高性能单片机阶段。这
3、一阶段推出的高性能8位单片机普遍带有串行口,有多级中断处理系统,多个16位定时器/计数器。片内RAM、ROM的容量加大,且寻址范围可达64 KB,个别片内还带有A/D转换接口。第4阶段(198380年代末):16位单片机阶段。1983年Intel公司又推出了高性能的16位单片机MCS96系列,由于其采用了最新的制造工艺,使芯片集成度高达12万只晶体管/片。第5阶段(90年代):单片机在集成度、功能、速度、可靠性、应用领域等全方位向更高水平发展。随着半导体制造工艺的不断改进与发展,芯片集提高,单片机系统正在逐步添加更多新的特性。(1)单片机的CPU核仍以复杂指令集(CISC)为主,但向精简指令集
4、(RISC)演化以提升指令执行速度,且系统结构也有所改进。(2)低功耗。MCSCD*251系列的8031推出时的功耗达630 mW,而现在的单片机功耗普遍都在100 mW左右。随着对单片机功耗要求越来越低,各个制造商基本都采用了CMOS(互补金属氧化物半导体工艺)、HMOS(高密度金属氧化物半导体工艺)CHMOS(互补高密度金属氧化物半导体工艺)。CMOS虽然功耗较低,但由于其物理特征决定其工作速度不够高,而CHMOS则是CMOS和HMOS的结合,既保持了HMOS高速度和高密度的特点,还具有CMOS的低功耗的特点,即同时具备高速和低功耗的特点。同时,新型单片机还增加了等待、暂停、休眠、空闲、节
5、电等工作模式,以降低功耗。(3)低噪声与强抗干扰。为了使产品能适应恶劣的工作环境,满足电磁兼容性方面更高标准的要求,各单片机生产厂商在单片机内部电路中分别采用了一些新型的EFT(Electrical Fast Transient)抗干扰技术、低噪音布线及驱动方式、低频时钟、降噪器件等措施,以提高单片机的抗电磁干扰能力和可靠性,降低系统噪音。(4)连接性。目前,有的单片机内部含有控制器区域网(Controller Area Network,CAN),它是一种可靠、廉价、快速、灵活的串行总线系统,用来在高噪声环境中进行实时数据交换工作,以构成控制网络或形成局部网,提高系统与其他系统在本地或远程的连
6、接能力。另外,还增加了USB、Bluetooth、Ethernet接口,已解决与PC等环境的标准连接,允许把较多的外围器件连接到一个公共界面上。(5)Flash Memory。MCU的Flash版本逐步替代原来的一次性可编程(One Time Programable,OTP)、EPROM、EEPROM等版本,可降低成本,提高编程和生产的灵活性及效率。(6)显示器。将使用内置的QVGA(Quarter VGA)技术,以提供便于连接到大型显示器的接口。(7)用户接口。用户操作由旋钮和按钮向触摸感测转变。(8)支撑系统。为缩短产品的上市时间,单片机制造商会提供更卓越的开发工具链,包括编译器、集成开发
7、环境(IDE)、调试器、实时系统内核(RTOS)、图形工具(GUI)、参考设计以及代码库等。1.1.2 单片机主要生产厂商及系列 1.欧美地区(1)Motorola系列 (2)Philips系列 (3)Microchip系列 (4)Scenix系列 (5)Atmel系列 (6)TI(美国德克萨斯仪器仪表)系列、NS(美国国家半导体)系列 2.亚洲 1)日本(1)TOSHIBA系列 (2)NEC 系列 (3)FUJITSU系列 (4)EPSON(爱普生)系列、HITACHI(日立)系列、OKI(冲电气工业株式会社)系列 2)我国台湾地区 (1)SUNPLUS系列 (2)EMC系列 (3)HOLT
8、EK系列 (4)Winbond系列 3)韩国 (1)SAMSUNG系列 (2)HYUNDAI系列 1.1.3 单片机的应用领域与形式 由于单片机具有体积小、重量轻、价格便宜、功耗低,控制功能强及运算速度快等特点,因而在国民经济建设、军事及家用电器等各个领域均得到了广泛的应用。按照单片机的特点,其应用形式可分为单机应用与多机应用。1.单机应用 在一个应用系统中,只使用1片单片机称为单机应用,这是目前应用最多的一种方式。单机应用的主要领域有:(1)测控系统。用单片机可以构成各种不太复杂的工业控制系统、自适应控制系统、数据采集系统等,达到测量与控制的目的。(2)智能仪表。用单片机改造原有的测量、控制
9、仪表,促进仪表向数字化、智能化、多功能化、综合化、柔性化方向发展。(3)机电一体化产品。单片机与传统的机械产品相结合,使传统机械产品结构简化,控制智能化。(4)智能接口。在计算机控制系统,特别是在较大型的工业测、控系统中,用单片机进行接口的控制与管理,加之单片机与主机的并行工作,大大提高了系统的运行速度。(5)智能民用产品。如在洗衣机、电冰箱、空调、微波炉、电视机、手机、玩具、游戏机、声像设备、电子秤、收银机、办公设备、厨房设备等许多产品中,单片机控制器的引入,不仅使产品的功能大大增强,性能得到提高,而且获得了良好的使用效果。2.多机应用 单片机的多机应用系统可分为功能集散系统、并行多机处理及
10、局部网络系统。(1)功能集散系统。多功能集散系统是为了满足工程系统多种外围功能的要求而设置的多机系统。(2)并行多机控制系统。并行多机控制系统主要解决工程应用系统的快速性问题,以便构成大型实时工程应用系统。(3)局部网络系统。1.2 MCS51系列单片机基本结构 1.2.1 MCS51单片机系列 MCS51系列单片机虽已有10多种产品,但可分为两大系列:MCS51子系列与MCS52子系列。MCS51子系列中主要有8031、8051、8751 三种类型。而MCS52子系列也有三种类型8032、8052、8752。各子系列配置见表11所示。表11 MCS51系列单片机配置一览表 表11中列出了MC
11、S51系列单片机的两个子系列,在4个性能上略有差异。由此可见,在本子系列内各类芯片的主要区别在于片内有无ROM或EPROM;MCS51与MCS52子系列间所不同的是片内程序存储器ROM从4 KB增至8 KB;片内数据存储器由128个字节增至256个字节;定时器/计数器增加了一个;中断源增加了12个。另外,对于制造工艺为CHMOS的单片机,由于采用CMOS技术制造,因此具有低功耗的特点,如8051功耗约为630 mW,而80C51的功耗只有120 mW。1.2.2 MCS51系列单片机内部结构及功能部件 MCS51系列单片机的内部结构框图如图11所示。分析图11,并按其功能部件划分可以看出,MC
12、S51系列单片机是由8大部分组成的。图12为按功能划分的MCS51系列单片机内部结构简化框图。这8大部分是:(1)一个8位中央处理机CPU。(2)128个字节(MCS52子系列为256字节)的片内数据存储器RAM。(3)4 KB(MCS52子系列为8 KB)的片内程序只读存储器ROM或EPROM(8031和8032无)。(4)18个(MCS52子系列为21个)特殊功能寄存器SFR。(5)4个8位并行输入输出I/O接口:P0口、P1口、P2口、P3口(共32线),用于并行输入或输出数据。(6)1个串行I/O接口。(7)2个(MCS52子系列为3个)16位定时器/计数器。(8)1个具有5个(MCS
13、52子系列为6个或7个)中断源,可编程为2个优先级的中断系统。它可以接收外部中断申请,定时器/计数器中断申请和串行口中断申请。图11 MCS51系列单片机内部结构框图 图12 MCS51系列单片机内部结构简化框图 1.2.3 单片机外部引脚 MCS51系列单片机芯片均为40个引脚,HMOS工艺制造的芯片采用双列直插(DIP)方式封装,其引脚示意及功能分类如图13所示。CMOS工艺制造的低功耗芯片也有采用方型封装的,但为44个引脚,其中4个引脚是不使用的。图13 MCS51系列单片机引脚及总线结构 (a)管脚图;(b)引脚功能分类 1.主电源引脚Vcc和Vss VCC(40脚):接+5 V电源正
14、端;VSS(20脚):接+5 V电源地端。2.外接晶体引脚XTAL1和XTAL2 XTAL1(19脚):接外部石英晶体的一端。在单片机内部,它是一个反相放大器的输入端,这个放大器构成了片内振荡器。当采用外部时钟时,对于HMOS单片机,该引脚接地;对于CHMOS单片机,该引脚作为外部振荡信号的输入端。XTAL2(18脚):接外部晶体的另一端。在单片机内部,接至片内振荡器的反相放大器的输出端。当采用外部时钟时,对于HMOS单片机,该引脚作为外部振荡信号的输入端;对于CHMOS芯片,该引脚悬空不接。3.控制信号或与其它电源复用引脚 控制信号或与其它电源复用引脚有RST/VPD、和 等4种形式。(1)
15、RST/VPD(9脚):RST即为RESET,VPD为备用电源,所以该引脚为单片机的上电复位或掉电保护端。(2)(30脚):当访问外部存储器时,ALE(允许地址锁存信号)以每机器周期两次的信号输出,用于锁存出现在P0口的低8位地址。ALE/PROG.PSENPPEA/VALE/PROG (3)(29脚):片外程序存储器读选通信号输出端,低电平有效。(4)(31脚):为访问外部程序存储器控制信号,低电平有效。PSENPPEA/VEA 4.输入/输出(I/O)引脚P0口、P1口、P2口及P3口 (1)P0口(39脚32脚):P0.0P0.7统称为P0口。(2)P1口(1脚8脚):P1.0P1.7统
16、称为P1口,可作为准双向I/O接口使用。(3)P2口(21脚28脚):P2.0P2.7统称为P2口,一般可作为准双向I/O接口。(4)P3口(10脚17脚):P3.0P3.7统称为P3口。表12 P3口第2功能表 1.3 中央处理器CPU 中央处理器是单片机内部的核心部件,它决定了单片机的主要功能特性。它由运算部件和控制部件两大部分组成。1.3.1 运算部件 运算部件是以算术逻辑单元ALU为核心,加上累加器A、寄存器B、暂存器TMP1和TMP2、程序状态寄存器PSW及专门用于位操作的布尔处理机组成的(见图11),它能实现数据的算术逻辑运算,位变量处理和数据传送操作。1.算术逻辑单元ALU与累加
17、器ACC、寄存器B 算术逻辑单元ALU不仅能完成8位二进制数的加(带进位加)、减(带借位减)、乘、除、加1、减1及BCD加法的十进制调整等算术运算,还能对8位变量进行逻辑“与”、“或”、“异或”、求补、清零等逻辑运算,并具有数据传送,程序转移等功能。累加器ACC简称累加器A,为一个8位寄存器,它是CPU中使用最频繁的寄存器。2.程序状态字 程序状态字寄存器PSW(8位)是一个标志寄存器,它保存指令执行结果的特征信息,以供程序查询和判别。其程序状态字格式及含义如下:CY(PSW.7)进位标志位。AC(PSW.6)辅助进位(或称半进位)标志。F0(PSW.5)由用户定义的标志位。RS1(PSW.4
18、)、RS0(PSW.3)工作寄存器组选择位。OV(PSW.2)溢出标志位。由硬件置位或清零。PSW.1未定义位。P(PSW.0)奇偶标志位。3.布尔处理机 布尔处理(即位处理)是MCS51单片机ALU所具有的一种功能。单片机指令系统中的布尔指令集(17条位操作指令),存储器中的位地址空间,以及借用程序状态标志寄存器PSW中的进位标志CY作为位操作“累加器”,构成了单片机内的布尔处理机。1.3.2 控制部件及振荡器 控制部件是单片机的神经中枢,它包括定时和控制电路、指令寄存器、译码器以及信息传送控制等部件。单片机的定时控制功能是由片内的时钟电路和定时电路来完成的,而片内的时钟产生有两种方式:一种
19、是内部时钟方式;一种是外部时钟方式,如图14(a)、(b)所示。图14 HMOS型MCS51单片机时钟产生方式 (a)内部振荡器方式;(b)外部振荡器方式 采用内部时钟方式时,如图14(a)所示。片内的高增益反相放大器通过XTAL1、XTAL2外接作为反馈元件的片外晶体振荡器(呈感性)与电容组成的并联谐振回路构成一个自激振荡器,向内部时钟电路提供振荡时钟。振荡器的频率主要取决于晶体的振荡频率,一般晶体可在1.212 MHz之间任选,电容C1、C2可在530 pF之间选择,电容的大小对振荡频率有微小的影响,可起频率微调作用。1.4 MCS51单片机存储器及存储空间 1.4.1 MCS51单片机存
20、储器分类及配置 MCS51单片机存储器的分类从物理结构上可分为:片内、片外程序存储器(8031和8032没有片内程序存储器)与片内、片外数据存储器4个部分;从寻址空间分布可分为:程序存储器、内部数据存储器和外部数据存储器3大部分;从功能上可分为:程序存储器、内部数据存储器、特殊功能寄存器、位地址空间和外部数据存储器5大部分。MCS51系列单片机存储器的配置除表11所示的片内ROM(或EPROM)和RAM外,另外还有128个字节的RAM区作为特殊功能寄存器(SFR)区。片内、片外程序存储器和数据存储器各自总容量为64 KB。MCS51系列单片机存储器系统空间结构如图15所示。图15 MCS51单
21、片机存储器空间结构图(a)程序存储器;(b)内部数据存储器;(c)外部数据存储器 1.4.2 程序存储器 1.程序存储器的编址 计算机的工作是按照事先编制好的程序命令一条条循序执行的,程序存储器就是用来存放这些已编好的程序和表格常数,它由只读存储器ROM或EPROM组成。2.程序运行的入口地址 实际应用时,程序存储器的容量由用户根据需要扩展,而程序地址空间原则上也可由用户任意安排。但程序最初运行的入口地址,MCS51单片机是固定的,用户不能更改。程序存储器中有复位和中断源共7个固定的入口地址,见表14。表13 MCS51单片机复位、中断入口地址 单片机复位后程序计数器PC的内容为0000H,故
22、必须从0000H单元开始取指令来执行程序。0000H单元是系统的起始地址,一般在该单元存放一条无条件转移指令,用户设计的程序是从转移后的地址开始存放执行的。1.4.3 内部数据存储器 1.内部数据存储器的编址 MCS51系列单片机的内部数据存储器由读写存储器RAM组成,用于存储数据。它由RAM块和特殊功能寄存器(SFR)块组成,其结构如图15(b)所示。2.内部数据存储器RAM块 由图15(b)可见,内部数据存储器RAM块共分为工作寄存器区、位寻址区和数据缓冲区3个部分。1)工作寄存器区 内部RAM块的00H1FH区,共分4个组,每组有8个工作寄存器R0R7,共32个内部RAM单元。寄存器和R
23、AM地址的对应关系如表14所示。表14 工作寄存器和RAM地址对照表 工作寄存器共有4组,但程序每次只用1组,其它各组不工作。哪1组寄存器工作由程序状态字PSW中的PSW.3(RS0)和PSW.4(RS1)两位来选择,其对应关系如表26所示。CPU通过软件修改PSW中RS0和RS1两位的状态,就可任选一个工作寄存器工作,这个特点使MCS51单片机具有快速现场保护功能,对于提高程序的效率和响应中断的速度是很有利的。若程序中并不要4个工作寄存器组,那么剩下的工作寄存器组所对应的单元也可以作为一般的数据缓冲区使用。表15 工作寄存器组的选择表 2)位寻址区 20H2FH单元为位寻址区,这16个单元(
24、共计128位)的每1位都有一个8位表示的位地址,位地址范围为00H7FH,如表16所示。位寻址区的每1位都可当作软件触发器,由程序直接进行位处理。通常可以把各种程序状态标志,位控制变量存于位寻址区内。同样,位寻址的RAM单元也可以按字节操作作为一般的数据缓冲器使用。表16 内部RAM中位地址表 3)数据缓冲区 30H7FH是数据缓冲区,也即用户RAM区,共80个单元。MCS52子系列片内RAM有256个单元,前两个的单元数与地址都和MCS51子系列一致。用户RAM区从30HFFH,共208个单元。4)堆栈与堆栈指针 在程序实际运行中,往往需要一个后进先出的RAM区,在子程序调用、中断服务处理等
25、场合用以保护CPU的现场,这种后进先出的缓冲区称为堆栈。MCS51单片机堆栈区不是固定的,原则上可设在内部RAM的任意区域内,但为了避开工作寄存器区和位寻址区,一般设在30H以后的范围内,栈顶的位置由专门设置的堆栈指针寄存器SP(8位)指出。MCS51单片机的堆栈属向上生长型,如图16所示。图16 MCS51单片机堆栈 3.特殊功能寄存器SFR块 特殊功能寄存器SFR,又称为专用寄存器。它专用于控制、管理单片机内算术逻辑部件、并行I/O口锁存器、串行口数据缓冲器、定时器/计数器、中断系统等功能模块的工作,SFR的地址空间为80HFFH。按地址排列的各特殊功能寄存器名称、标识符、地址等如表1-7
26、所示。表17 特殊功能寄存器名称、标识符、地址一览表 4.位寻址空间 在MCS51单片机的内部数据寄存器RAM块和特殊功能寄存器SFR块中,有一部分地址空间可以按位寻址,按位寻址的地址空间又称之为位寻址空间。位寻址空间一部分在内部RAM的20H2FH的16个字节内,共128位;另一部分在SFR的80HFFH空间内,凡字节地址能被8整除的专用寄存器都有位地址,共93位。因此,MCS51系列单片机共有221个可寻址位,其位地址见表16、表17所示。1.4.4 外部数据存储器 外部数据存储器一般由静态RAM芯片组成。扩展存储器容量的大小,由用户根据需要而定,但MCS51单片机访问外部数据存储器可用1
27、个特殊功能寄存器数据指针寄存器DPTR进行寻址。由于DPTR为16位,可寻址的范围可达64 KB,所以扩展外部数据存储器的最大容量是64 KB。1.5 并行输入/输出接口 1.5.1 P0口 1.P0口结构 P0口是一个三态双向口,可作为地址/数据分时复用口,也可作为通用I/O接口。其1位的结构原理如图17所示。P0口由8个这样的电路组成:锁存器起输出锁存作用,8个锁存器构成了特殊功能寄存器P0;场效应管(FET)V1、V2组成输出驱动器,以增大带负载能力;三态门1是引脚输入缓冲器;三态门2是用于读锁存器端口;与门3、倒相器4及模拟转换开关构成输出控制电路。图17 P0口1位结构原理图 2.地
28、址/数据分时复用功能 当P0口作为地址/数据分时复用总线时,可分为两种情况:一种是从P0口输出地址或数据,另一种是从P0口输入数据。在访问片外存储器需从P0输出地址或数据信号时,控制信号应为高电平1,使转换开关MUX把反向器4的输出端与V1接通,同时把与门3打开。3.通用I/O接口功能 当P0口作为通用I/O接口使用,在CPU向端口输出数据时,对应的控制信号为0,转换开关把输出级与锁存器 端接通,同时因与门3输出为0使V2截止,此时,输出级是漏极开路电路。当P0口作为通用I/O接口时,要注意两点:第一,在输出数据时,由于V2截止,输出级是漏极开路电路,要使“1”信号正常输出,必须外接上拉电阻。
29、第二,P0口作为通用I/O使用时是一准双向口。Q 4.端口操作 MCS51单片机有不少指令可直接进行端口操作,例如:ANL P0,A;(P0)(P0)(A)端口内容“与”指令 ORL P0,data;(P0)(P0)data端口内容“或”指令 DELP0;(P0)(P0)1端口内容减1指令 1.5.2 P1口 P1口为准双向口,其1位的内部结构如图18所示。它在结构上与P0口的区别在于输出驱动部分,其输出驱动部分由场效应管V1与内部上拉电阻组成。当其某位输出高电平时,可以提供拉电流负载,不必象P0口那样需要外接电阻。从功能上来看P1只有一种功能(对MCS51子系列),即通用输入输出I/O接口,
30、具有输入、输出、端口操作3种工作方式,每1位口线能独立地用作输入或输出线。图18 P1口的结构原理图 1.5.3 P2口 P2口也是一准双向口,其1位的内部结构如图19所示。它具有通用I/O接口或高8位地址总线输出两种功能,所以其输出驱动结构比P1口输出驱动结构多了一个输出模拟转换开关MUX和反相器3。图19 P2口的结构原理图 当作为准双向通用I/O接口使用时,控制信号使转换开关接向左侧,锁存器Q端经反相器3接V1,其工作原理与P1相同,也具有输入、输出、端口操作三种工作方式,负载能力也与P1口相同。当P2口作为准双向通用I/O接口使用时,控制信号使转换开关接向左侧,锁存器Q端经反相器3接V
31、1,其工作原理与P1相同,也具有输入、输出、端口操作三种工作方式,负载能力也与P1口相同。当P2口作为外部扩展存储器的高8位地址总线使用时,控制信号使转换开关接向右侧,由程序计数器PC来的高8位地址PCH,或数据指针DPTR来的高8位地址DPH经反相器3和V1原样呈现在P2口的引脚上,输出高8位地址A8A15。在上述情况下,口锁存器的内容不受影响,所以,取指或访问外部存储器结束后,由于转换开关又接至左侧,使输出驱动器与锁存器Q端相连,引脚上将恢复原来的数据。1.5.4 P3口口 P3口的1位结构如图110所示。它的输出驱动由与非门3、V1组成,比P0、P1、P2口结构多了一个缓冲器4。P3口除
32、了可作为通用准双向I/O接口外,每1根线还具有第2功能。当P3口作为通用I/O接口时,第2功能输出线为高电平,使与非门3的输出取决于口锁存器的状态。在这种情况下,P3口仍是1个准双向口,它的工作方式、负载能力均与P1、P2口相同。当P3口作为第2功能(各引脚功能见表12)使用时,其锁存器Q端必须为高电平,否则V1管导通,引脚被箝位在低电平,无法输入或输出第2功能信号。当Q端为高电平时,P3口的口线状态就取决于第2功能输出线的状态。图110 P3口的结构原理图 1.6.1 CPU时序 计算机在执行指令时,通常将一条指令分解为若干基本的微操作,这些微操作所对应的脉冲信号在时间上的先后次序称为计算机
33、的时序。为便于理解时序,先介绍几个常用名词。振荡周期:为单片机提供定时信号的振荡源的周期(晶振周期或外加振荡源周期)。状态周期:2个振荡周期为1个状态周期,用S表示。1.6 CPU时序与复位 机器周期:1个机器周期含6个状态周期,用S1、S2、S6表示,共有12个节拍。指令周期:完成一条指令所占用的全部时间,它以机器周期为单位。MCS-51单片机大多数指令是单字节单周期指令,另外,还有单字节双周期指令、双字节单周期指令、双字节双周期指令,而乘除法指令是单字节4周期指令。例如:外接晶振为12 MHz时,MCS51单片机的4个时间周期的具体值为:振荡周期=1/12 s;状态周期=1/6 s;机器周
34、期=1 s;指令周期=14 s。MCS51单片机的CPU取指令和执行指令的时序如图111所示。图111 MCS51单片机CPU取指/执行时序 单周期指令的执行从S1P2开始,在S1P2期间读入操作码并把它锁存到指令寄存器中。双字节指令,则在同一机器周期的S4期间读出第2个字节。对于单字节指令在S4处仍有一次读操作,但这时读出的字节(下一条指令的操作码)是不予考虑的,而且程序计数器PC也不加1。对于单周期指令,在上述任何情况下,指令都在S6P2期间完成操作。图111 中的(a)和(b)分别表示单字节单周期和双字节单周期指令的执行时序。图111(c)表示单字节双周期指令的时序,单字节双周期指令在两
35、个机器周期内作4次读操作码的操作,由于是单字节指令,后3次读操作是无效的。图111(d)表示执行访问外部数据存储器指令MOVX的时序,这是一条单字节双周期指令,具有其特殊性。1.6.2 复位电路与复位状态 1.复位电路 通过某种方式,使单片机内各寄存器的值变为初始状态的操作称为复位。MCS51单片机在时钟电路工作以后,在RST/VPD端持续给出2个机器周期的高电平就可以完成复位操作(一般复位正脉冲宽度大于10 ms)。复位分为上电复位和外部复位两种方式。图112 MCS51单片机复位参考电路(a)上电复位电路;(b)上电/外部复位电路 2.复位状态 MCS51单片机复位后,程序计数器PC和特殊
36、功能寄存器复位的状态如表29所示。复位不影响片内RAM存放的内容,而ALE、在复位期间将输出高电平。由表18可以看出:(1)(PC)=0000H 表示复位后程序的入口地址为0000H;(2)(PSW)=00H,其中RS1(PSW.4)=0,RS0(PSW.3)=0,表示复位后单片机选择工作寄存器0组;PSEN (3)(SP)=07H 表示复位后堆栈在片内RAM的08H单元处建立;(4)P0口P3口锁存器为全1状态,说明复位后这些并行接口可以直接作输入口,无须向端口写1;(5)定时器/计数器、串行口、中断系统等特殊功能寄存器复位后的状态对各功能部件工作状态的影响,将在后续有关章节介绍。表18 P
37、C与SFR复位状态表 第2章 单片机指令系统2.1 MCS51单片机汇编语言与指单片机汇编语言与指令格式令格式2.2 寻址方式寻址方式2.3 MCS51单片机指令系统单片机指令系统2.1 MCS51单片机汇编语言与指令格式 2.1.1 单片机的汇编语言 由于构成计算机的电子器件特性所决定,计算机只能识别二进制代码。这种以二进制代码来描述指令功能的语言,称之为机器语言,用机器语言组成的程序,称为目标程序。计算机就是按照机器语言的指令来完成各种功能操作的,它具有程序简捷、占用存储空间小、执行速度快、控制功能强等特点。2.1.2 指令格式 MCS51单片机汇编语言指令的标准格式如下:标号:操作码 目
38、的操作数,源操作数 ;注释 例如:LOOP:ADD#A,10H ;(A)(A)+10H (1)方括号 表示该项是可选项,可有可无。(2)标号是用户设定的符号,它实际代表该指令所在的地址。标号必须以字母开头,其后跟18个字母或数字,并以“:”结尾。(3)操作码是用英文缩写的指令功能助记符。它确定了本条指令完成什么样的操作功能。如:ADD表示加法操作。任何一条指令都必须有该助记符项,不得省略。(4)目的操作数提供操作的对象,并指出一个目标地址,表示操作结果存放单元的地址,它与操作码之间必须以一个或几个空格分隔。如上例中A表示操作对象是累加器A的内容,并指出操作结果又回送A存放。(5)源操作数指出的
39、是一个源地址(或立即数),表示操作的对象或操作数来自何处。它与目的操作数之间要用“,”号隔开。(6)注释部分是在编写程序时,为了增加程序的可读性,由用户拟写对该条指令或该段程序功能的说明。它以分号“;”开头,可以用中文、英文或某些符号来表示,显然它不存入计算机,只出现在源程序中。2.1.3 指令中常用符号 在分类介绍各类指令之前,先对描述指令的一些符号意义进行一些简单约定:(1)Ri和Rn:R表示当前工作寄存器区中的工作寄存器,i表示0或1,即R0和R1。n表示07,即R0R7,当前工作寄存器的选定是由PSW的RS1和RS0位决定的。(2)data:表示立即数,data为8位常数。data是指
40、包含在指令中的8位立即数。(3)data16:包含在指令中的16位立即数。(4)rel:相对地址,以补码形式表示的地址偏移量,范围为-128+127,主要用于无条件相对短转移指令SJMP和所有的条件转移指令中。(5)addr16:16位目的地址。目的地址可在全部程序存储器的64 KB空间范围内,主要用于无条件长转移指令LJMP和子程序长调用指令LCALL中。(6)addr11:11位目的地址。目的地址应与下条指令处于相同的2 KB程序存储器地址空间范围内,主要用于绝对转移指令AJMP和子程序绝对调用指令ACALL指令中。(7)direct:表示直接寻址的地址,即8位内部数据存储器RAM的单元地
41、址(0127/255),或特殊功能寄存器SFR的地址。对于SFR可直接用其名称来代替其直接地址。(8)bit:内部数据存储器RAM和特殊功能寄存器SFR中的可直接寻址位地址。(9):间接寻址寄存器或基地址寄存器的前缀,如Ri,DPTR,表示寄存器间接寻址。(10)(X):表示X中的内容。(11)(X):表示由X寻址的单元中的内容,即(X)作地址,该地址的内容用(X)表示。(12)/和符号:/表示对该位操作数取反,但不影响该位的原值。表示指令操作流程,将箭头一方的内容,送入箭头另一方的单元中去。2.2 寻址方式 2.2.1寄存器寻址 选定某寄存器,自该寄存器中读取或存放操作数,以完成指令规定的操
42、作,称为寄存器寻址。例如:MOV A,R0 ;(A)(R0)该指令的功能是把工作寄存器R0中的内容传送到累加器A中,如:R0内容为FFH,则执该指令后A的内容也为FFH。在该条指令中,源操作数和目的操作数是由寻址R0和A寄存器得到的,故属于寄存器寻址。该指令为单字节指令,机器代码为E8H。2.2.2 立即寻址 操作数直接出现在指令中,它紧跟在操作码的后面,作为指令的一部分与操作码一起存放在程序存储器内,可以立即得到并执行,不需要另去寄存器或存储器等处寻找和取数,故称为立即寻址。该操作数称为立即数,并在其前冠以“”号作前缀,以表示并非地址。立即数可以是8位或16位,用十六进制数表示。例如:MOV
43、 A,0FH;(A)0FH 该指令的功能是将立即数0FH传送到累加器A中,对应的机器码为74H。它隐含了寄存器寻址累加器A方式,长一个字节,占用一个存储单元;立即数0FH紧跟在操作码之后,成为指令代码的一部分,长也是一个字节,占用紧跟在后面的另一个存储单元。故该指令为双字节指令,其机器码为74H 0FH。2.2.3 寄存器间接寻址 由指令指出某一个寄存器的内容作为操作数地址的寻址方法,称为寄存器间接寻址方法,简称寄存器间址。这里要强调的是:寄存器的内容不是操作数本身,而是操作数地址。寄存器间接寻址使用所选定寄存器区中的R0和R1作为地址指针(对堆栈操作时,使用堆栈指针SP),来寻址片内数据存储
44、器RAM(00FFH)的256个单元,但它不能访问特殊功能寄存器SFR。寄存器间接寻址也适用于访问外部数据存储器,此时,用R0、R1或DPTR作为地址指针。寄存器间接寻址用符号“”指明。图21 寄存器间接寻址示意图 2.2.4 直接寻址 指令中直接给出操作数所在的存储器地址,以供寻址取数或存数的寻址方式称为直接寻址。例如:MOV A,40H ;(A)(40H)该指令的功能是把内部数据存储器RAM 40H单元内的内容送到累加器A。指令直接给出了源操作数的地址40H。该指令的机器码为E5H 40H。2.2.5 变址寻址 基址寄存器加变址寄存器间接寻址,简称变址寻址。它以数据指针DPTR或程序计数器
45、PC作为基址寄存器,累加器A作为变址寄存器,两者的内容相加形成16位程序存储器地址,该地址就是操作数所在地址。例如:MOVC A,A+DPTR ;(A)(A)+(DPTR)该指令寻址及操作功能如图22所示,该指令为单字节指令,机器代码为93H。这种寻址方式常用于访问程序存储器中的常数表。图22 变址寻址示意图 2.2.6 相对寻址 相对寻址是以当前程序计数器PC值加上指令规定的偏移量rel,而构成实际操作数地址的寻址方法。它用于访问程序存储器,常出现在相对转移指令中。在使用相对寻址时要注意以下两点:第一,当前PC值是指相对转移指令所在地址(一般称为源地址)加上转移指令字节数。即:当前PC值=源
46、地址+转移指令字节数。例如:JZ rel 是一条累加器A为零就转移的双字节指令。若该指令地址(源地址)为2050H,则执行该指令时的当前PC值即为2052H。第二,偏移量rel是有符号的单字节数,以补码表示,其相对值的范围是-128+127(即00HFFH),负数表示从当前地址向上转移,正数表示从当前地址向下转移。所以,相对转移指令满足条件后,转移的地址(一般称为目的地址)应为:目的地址=当前PC值+rel=源地址+转移指令字节数+rel 例如:指令JZ 08H和JZ 0F4H 表示累加器A为零条件满足后,从源地址(2050H)分别向下、向上转移10个单元。其相对寻址示意如图23(a)、(b)
47、所示。这两条指令均为双字节指令,机器代码分别为:60H 08H和60H F4H。图23 相对寻址示意图(a)指令JZ 08H寻址示意图;(b)指令JZ F4H寻址示意图 2.2.7 位寻址 MCS51系列单片机具有位寻址的功能,即指令中直接给出位地址,可以对内部数据存储器RAM中的128位和特殊寄存器SFR中的93位进行寻址,并且位操作指令可对地址空间的每一位进行传送及逻辑操作。例如:SETB PSW.3 ;(PSW.3)1 该指令的功能是给程序状态字PSW中的RS0置1。该指令为双字节指令,机器代码为D2H D3H,指令的第二字节直接给出位地址D3H(PSW.3的位地址)。综上所述,在MCS
48、51系列单片机的存储空间中,指令究竟对哪个存储器空间进行操作是由指令操作码和寻址方式确定的。7种寻址方式如表21所示。表21 7 种寻址方式及使用空间 2.3 MCS51单片机指令系统 MCS51单片机指令系统分为:数据传送类指令、算术运算类指令、逻辑运算及移位类指令、控制转移类指令和位操作(布尔操作)指令5大类,共计111条指令。现按其分类分别介绍各条指令的格式、功能、对状态标志的影响以及应用。2.3.1 数据传送类指令 数据传送类指令共29条,它是指令系统中最活跃、使用最多的一类指令。一般的操作是把源操作数传送到目的操作数,即指令执行后目的操作数改为源操作数,而源操作数保持不变。若要求在进
49、行数据传送时,不丢失目的操作数,则可以用交换型传送指令。数据传送类指令不影响进位标志CY、半进位标志AC和溢出标志OV,但当传送或交换数据后影响累加器A的值时,奇偶标志P的值则按A的值重新设定。按数据传送类指令的操作方式,又可把传送类指令分为3种类型:数据传送、数据交换和堆栈操作,并使用8种助记符:MOV、MOVX、MOVC、XCH、XCHD、SWAP、PUSH及POP。表22给出了各种数据传送指令的操作码助记符和对应的操作数。表22 数据传送类指令助记符与操作 1.内部数据存储器间数据传送指令 内部数据存储器RAM区是数据传送最活跃的区域,可用的指令数也最多,共有16条指令,指令操作码助记符
50、为MOV。内部RAM之间源操作数传递关系如图24所示。为了便于理解指令功能,我们按源操作数的寻址方式逐一介绍各条指令。(1)立即寻址。在该寻址方式下,内部RAM区数据传送指令有如下5条指令。图24 内部RAM间数据传递关系 操作码助记符 目的操作数 源操作数 功能注释 机器代码(H)MOV A,data ;(A)data ,74 data MOV direct,data ;(direct)data ,75 direct data MOV Ri,data ;(Ri)data ,7677 data MOV Rn,data ;(Rn)data ,787F data MOV DPTR,data16 ;