《单片机技术及应用ppt课件.ppt》由会员分享,可在线阅读,更多相关《单片机技术及应用ppt课件.ppt(79页珍藏版)》请在三一办公上搜索。
1、,单片机技术及应用清华大学基础工业训练中心冯一兵,2022年11月20日星期日,2,第一章 单片机的基础知识 第二章 MCS-51单片机的初步认识 第三章 MCS-51的指令系统,2022年11月20日星期日,3,第四章 汇编语言程序设计 第五章 定时器/计数器 第六章 中断的基本概念 第七章 串行口的应用,2022年11月20日星期日,4,第一章 单片机的基础知识 1.1 微计算机与单片机 单片机是计算机的一种。一台完整的计算机由硬件和软件共同组成。计算机的软件由各种程序组成,包括操作系统(如windows)和各种应用程序(如word),计算机的硬件由下列几个部份构成:CPU、存储器、外部设
2、备及接口。 单片机主要用于简单的数据采集和控制,原本的意思是将CPU、存储器和外设接口(I/O)集成在一个芯片(single chip)上的处理器(Processor),后来的正式名称是微控制器(micro controller)。因此在网上查找资料时,可以使用微控制器作为关键词查找。,2022年11月20日星期日,5,单片微型计算机就是将CPU、RAM、ROM、定时/计数器和多种接口都集成到一块集成电路芯片上的微型计算机。因此,一块芯片就构成了一台计算机。它已成为工业控制领域、智能仪器仪表、尖端武器、日常生活中最广泛使用的计算机。,2022年11月20日星期日,6,CPU: CPU(cent
3、ral control unit)的全称是中央处理器。负责计算机的计算和控制计算机的运行。 存储器:存储器存放各种程序和数据。存储器分为内部存储器和外部存储器两部分。外部存储器大家都比较熟悉,如硬盘、光盘、软盘等等。内部存储器有两种:一部分称为ROM(只读存储器),存放最基本的程序,主要用于计算机启动时使用,如在PC机中存放BIOS;另一部分成为RAM,它能够随时读写。存放正在运行的程序和使用的数据。内部存储器的读写速度远远高于外部存储器,而外部存储器的容量则远远大于内部存储器。 外部输入输出设备(I/O)及接口:用于和人打交道。如显示器、键盘、鼠标等等,硬盘、光盘等也属于外部设备,2022年
4、11月20日星期日,7,1.2 MCS-51系列单片机 20世纪80年代初,Intel推出了MCS-51系列单片机,3个基本型: 8031 : 内部没有程序存储器 8051 : 内部有程序存储器(ROM 4K) 8751 : 内部有可编程可改写程序存储器(EPROM 4K) Intel 在推出MCS-51体系结构后不久,开放了8051内核技术,为 MCS-51系列单片机的发展起了很大作用。,2022年11月20日星期日,8,在Intel公司推出了MCS-51不久便实施了最彻底的技术开放政策;在众多电器商、半导体商的积极参与下,将MCS-51发展成了众多型号系列的80C51 MCU家族。MCS-
5、51经典的体系结构、极好的兼容性和Intel公司的开放政策不仅使众多厂家参与发展,也诱使半导体厂家对MCS-51实行为所欲为的改造。,2022年11月20日星期日,9,Philips公司着力发展基于51内核的控制功能及外围单元,把MCS-51迅速推进到80C51的MCU时代。 另外基于Flash ROM的在线可编程(ISP)技术,改变了单片机应用系统的结构模式和开发运行条件。P80C51 P80C52 Atmel公司推出了采用Flash ROM技术的AT89C51 AT89C52 AT89S52等,增加了一些外部接口功能。 Cygnal 公司2003年推出51内核的SOC(片上系统)型单片机,
6、C8051F系列单片机。,2022年11月20日星期日,10,1.3 计算机中常用的几个术语 1.3.1 电平(level):计算机和数字电路中常使用电平一词,用于反映信号(signal)的状态。一个信号或者作为数字电路的一个输入,或者作为数字电路的输出。通常使用+5V直流电源作为数字电路的供电电源,一个信号有2个稳定的状态,一个称为高电平,一个称为低电平。高电平是指电压在+2.7V以上、5V以下的状态,低电平是指+0.8V以下、0V以上的状态。因此,对于一个器件,输出3.1V或者输出3.8V还是输出4.3V本质上是一样的,都属于高电平状态;同样输出0.7V还是0.3V也属于同一种状态,即低电
7、平状态,也没有什么差别。 咱们这次做实验,用的是+5V直流电源。判断一个电路是否正常工作,要按上述标准进行。随着技术的快速发展,现在许多器件使用+3.3V甚至2.2V直流电源,对这些器件,高电平、低电平的定义也进行了相应修改。,2022年11月20日星期日,11,1.3.2 二进制和十六进制 由于数字电路中一个信号只有2个稳定的状态:高电平(用“1”表示)和低电平(用“0”表示),因此在计算机中,数据采用的是二进制而不是十进制。二进制数就是以2为基数,数符为0、 1,逢二进一。书写时,右边代表低位,左边代表高位。下面是二进制数的例子:(8) (4) (2) (1) 0 1 1 0 等于十进制6
8、 1 0 1 0 等于十进制10 1 1 1 1 等于十进制15,2022年11月20日星期日,12,虽然计算机中采用的是二进制,不过有时却不太方便,因此有时使用十六进制,即把二进制数中的4位作为一组一起表示。在十六进制中,数符为0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。其中A、B、C、D、E、F分别代表十进制的10、11、12、13、14、15。如: 二进制数 01011001 表示为十六进制数59 二进制数 00111111 表示为十六进制数3F 十六进制数只是为了方便人们的阅读和书写,计算机实际处理的还是二进制数。在汇编语言和其它高级语言中,为了将二进制数、十六进制
9、数和十进制数加以区分,在二进制数后加一个后缀B,在十六进制数后加一个后缀H,十进制数后不加任何后缀。如: 01011100B 85 85H 0D3H 十六进制数如果最高位是字母,则必须前面加一个0。,2022年11月20日星期日,13,1.3.3 位(bit)、字节(byte)、字(word) 在二进制中,每一“位”叫bit,一般通俗称为位。连续的8位组织在一起称为一个字节(byte)。字节是计算机组织数据的基本单位。我们通常说一个计算机的内存多大,比如100M,指的就是它的内存是100M字节。再比如说一个硬盘是100G,也是指这个硬盘能够存储100G个字节的数据。1M等于100万,1G等于1
10、000M。 字(word)是每种特定的计算机组织数据和进行运算的单位。比如计算机做加法时能够一次做多少位二进制数的加法。每种计算机,字长差别很大,单片机字长一般是8位或者16位,而PC机字长则有64位甚至更多。我们通常说这是多少位的计算机就是指该计算机的字长是多少位。,2022年11月20日星期日,14,1.3.4 寄存器(register) CPU中有很多寄存器。所谓寄存器就是可以存放东西的地方,这些东西可以是指令、地址等,也可以是数。寄存器的长度(位数)等于计算机的字长。一个8位单片机中寄存器的长度就是8位。一个64位PC机中寄存器的位数就是64位。下面介绍一些CPU中常用的寄存器。 指令
11、寄IR(Instruction Register):存放CPU从存储器中取出的指令码。CPU对指令进行译码,产生各种控制信号,这些控制信号指挥CPU内部的各种部件完成该指令规定的动作,比如对2个数做加法、减法、逻辑与、从存储器中取一个数、向存储器中写一个数、将一个数向外部设备输出、从外部设备输入一个数等等。,2022年11月20日星期日,15,1.3.5 程序计数器PC(Program Counter): 指出程序中当前指令在存储器中的地址。程序是由一条条指令构成的,它们存放在存储器中。存放程序的存储器叫做程序存储器。存储器由许多单元组成,每个单元像个小房间,可以向里放东西,也可以从中取东西。
12、每个单元对应一个存储器地址(就像房间的房间号)。,2022年11月20日星期日,16,1.3.6 数据、地址、指令:之所以将这三者放在一起,是因为这三者的本质都是一样的数字,或者说都是一串0和1组成的序列。换言之,地址、指令也都是数据。 指令:由单片机芯片的设计者规定的一种数字,它与我们常用的指令助记符有着严格的一一对应关系,不可以由单片机的开发者更改。 地址:是寻找单片机内部、外部的存储单元、输入输出口的依据,内部单元的地址值已由芯片设计者规定好,不可更改,外部的单元可以由单片机开发者自行决定,但有一些地址单元是一定要有的(详见程序的执行过程)。 数据:这是由微处理器处理的对象,在各种不同的
13、应用电路中各不相同,,2022年11月20日星期日,17,1.3.7 总线:在计算机中,各部件是以处理器(CPU)为核心的,各部件都要与处理器相连接,各部件之间的工作必须相互协调,如果处理器和各部件间单独连线,则线的数量将多得惊人,所以在处理机中引入了总线的概念,各个部件共同享用连线,所有器件的8根数据线全部接到8根公用的线上,即相当于各个器件并联起来。但仅这样还不行,如果有两个器件同时送出数据,一个为0,一个为1,那么,接收方接收到的究竟是什么呢?这种情况是不允许的,所以要对器件进行选择和控制,使器件分时工作,任何时候只能有一个器件发送或接受数据。器件的数据线也就被称为数据总线,器件所有的控
14、制线被称为控制总线。在单片机内部或者外部存储器及其它器件中有存储单元,这些存储单元要被分配地址,才能使用,由于存储单元比较多,所以,用于地址分配的线也较多,这些线被称为地址总线。,2022年11月20日星期日,18,2022年11月20日星期日,19,1.4 程序的执行过程,2022年11月20日星期日,20,一个计算机是这样工作的。当加电之后,时钟信号产生,并且自动产生一个复位信号。复位信号将程序计数器PC复位为0;CPU以PC的值为存储器地址从存储器0单元中取出第一条指令放到指令寄存器IR中;然后CPU对IR中的指令进行译码,产生各种控制信号,这些控制信号完成该指令规定的功能;在完成该指令
15、功能的同时,程序计数器PC加1,为从存储器中取出下一条指令做准备。第一条指令执行结束以后,CPU以PC的值为存储器地址从存储器1单元中取出第2条指令放到指令寄存器IR中,一直继续下去,直到程序执行结束。 单片机在通电复位后8051内的程序计数器(PC)中的值为0000,所以程序总是从0000单元开始执行,也就是说:在MCS-51程序存储器中一定要存在0000这个单元,并且在0000单元中存放的一定是一条指令。,2022年11月20日星期日,21,1.5 单片机应用的开发过程 1、电路板的制作 2、目标文件的生成: 利用PC机上的开发软件,编写 源程 序,经汇编(或编译)后生成目标文件 (.HE
16、X). 3、 目标程序的烧写:将目标程序装入到单片机芯片 或存储器芯片中。 使用编程器或采用在系统编程(ISP)技术.,2022年11月20日星期日,22,第二章 MCS-51 单片机的初步认识 2.1 引脚功能 电源引脚 Vcc(40):电源 +5V0.5V Gnd(20):地 时钟XTAL1(19):内部振荡器输入端XTAL2(18):内部振荡器输出端,2022年11月20日星期日,23,2022年11月20日星期日,24,(a)内部时钟方式,(b)外部时钟方式,晶振6MHZ 电容5-30P,复位电路(9),电容C 22ufR2 1-2K R1 200,复位后程序计数器PC=0000H 程
17、序从0000H地址单元开始执行,复位时间大约5-10mS,RST引脚加高电平,2022年11月20日星期日,25,EA(31):输入 EA引脚接高电平时,从内部程序存储器开始,当程序超过内部程序器的容量时转到外部程序存储器取指令。 EA引脚接低电平时,单片机转到外部程序存储器中取指令(无论片内是否有程序存储器)。外部程序存储器的地址从0000H开始编址。,2022年11月20日星期日,26,2.2 实验1 指令的初步认识,2022年11月20日星期日,27,从上一节我们看到MCS-51有40个管脚,我们已经用了6个,还有34个,这34个管脚中有32个分成了4组,每组8个,分别叫做P0.0-P0
18、.7 P1.0-P1.7 P2.0-P2.7 P3.0-P3.7 分别叫做P0口、 P1口、 P2口、 P3口。这4个口都是双向(既可以输出也可以输入)口,但又有所不同, P0口、P2口、 P3口除可以用作输入输出以外还有第二功能,以后用到时再讲。我们的第一个实验是要用单片机点亮一只发光二极管LED或者同时点亮8只发光二极管。我们将这8只发光二极管接在P1.0-P1.7上(管脚1-8)。,2022年11月20日星期日,28,在这个图中如果想让某一个发光二极管(比如第1个)亮怎么办呢?当1脚是高电平时,LED不亮,只有1脚是低电平时,LED才发亮。也就是说,我们要能够让1引脚按要求变为高或低电平
19、就可以了。 我们又怎样让它变高或变低呢?计算机能听得懂的命令称之为计算机的指令。在MCS-51中,让一个引脚输出高电平或低电平的指令有两种,一种是SETB和CLR指令,这种叫做位操作指令。我们要1脚输出高电平,只要写SETB P1.0,要1脚输出低电平,只要写 CLR P1.0就可以了。还有一种就是数据传送指令,比如 MOV P1,#data。这种指令一次同时改变P1口8位的状态。我们要1脚输出高电平,只要写 MOV P1,#01H,要1脚输出低电平,只要写 MOV P1,#00H就可以了。,2022年11月20日星期日,29,我们怎样才能计算机执行这条指令呢?第一步借助计算机里的编辑软件编写
20、源程序。现在普遍使用的是Keil C51软件。计算机是看不懂SETB CLR之类的指令,所以第二步把指令翻译成计算机能懂的方式,再让计算机去读。计算机能懂什么呢?它只懂一样东西数字。因此我们得把SETB P1.0变为(D2H,90H ),把CLR P1.0变为 (C2H,90H ),至于为什么是这两个数字,这也是由51芯片的设计者-INTEL规定的,我们不去研究。这个翻译的过程在计算机术语中叫做编译。编译后生成的文件叫做目标文件。第三步就要把目标文件写入到单片机中去。有两种方法一种是要借助于一个硬件工具“编程器”。还有一种就是在线编程ISP.,2022年11月20日星期日,30,ORG 000
21、0H;存储器ROM起始地址LJMP 0100H;跳转到主程序地址ORG 0100H;主程序起始地址CLR P1.0;执行指令ENDORG 0000H;存储器ROM起始地址CLR P1.0;执行指令ENDORG 0000H;存储器ROM起始地址MOV P1,#11111110B;执行指令END,2022年11月20日星期日,31,这里ORG、END是伪指令,分号后面的是注释,这些都是不往单片机中写入的,ORG是表示从程序存储器ROM(只读存储器)的什么地址开始存储,END表示指令结束。LJMP是跳转指令,因为芯片的设计者规定,单片机ROM中的开始一些字节有专门的用途,所以我们把指令从0100H这
22、个地址开始存储。,2022年11月20日星期日,32,2022年11月20日星期日,33,2.3 单片机汇编语言程序初步认识 2.3.1 在前边的实验中我们只是点亮了一个LED,我们还可以让它闪烁。闪烁实际上就是要灯亮一段时间,再灭一段时间,也就是说要P1.0不断地输出低和高电平。但是程序是不是可以直接写入:SETB P1.0 CLR P1.0这是不行的。第一,计算机执行指令的时间很快,执行完SETB P1.0后,灯是灭了,但在极短时间(微秒级)后,计算机又执行了CLR P0.0指令,灯又亮了,所以根本看不出灯曾经灭过。第二,在执行完CLR P1.0后,不会再去执行SETB P1.0指令,以后
23、再也没有机会让LED灭了。为了解决这两个问题,我们可以做如下设想,第一,在执行完SETB P1.0后,延时一段时间(几秒或零点几秒)再执行第二条指令,就可以看出LED曾经灭过了。第二,在执行完第二条指令后,让计算机再去执行第一条指令,不断地兜圈,我们称之为循环,这样就可以完成任务了。,2022年11月20日星期日,34,2022年11月20日星期日,35,ORG 0000H ;存储器ROM起始地址 LJMP 0100H ; 跳转到主程序地址 ORG 0100H ;主程序起始地址LOOP: SETB P1.0 ;熄灭LED, LCALL DELAY ;调用延时子程序 CLR P1.0 ;点亮LE
24、D LCALL DELAY ;调用延时子程序 LJMP LOOP DELAY:MOV R7,#250 ;工作寄存器R7赋初值D1: MOV R6,#250 ;工作寄存器R6赋初值D2: DJNZ R6,D2 ;62500 DJNZ R7,D1 RET END,2022年11月20日星期日,36,由这个实验我们可能会提出这样几个问题? 1、程序中R6 R7代表什么意思? 2、程序的延迟是怎么实现的?延迟时间的长短怎 么确定? 3、什么是汇编语言,汇编语言的基本格式是怎样 的?,2022年11月20日星期日,37,2.3.2 工作寄存器什么是工作寄存器呢?计算机做运算时,为了要得到最终结果,往往要
25、有很多的中间结果,这些中间结果要有个地方才行。所以在单片机中有一个区域称为RAM(RAM随机存储器),也叫数据存储器,也就是随时可以将数据写进去,也可以在需要的时候将数据读出来。在MCS-51单片机中,片内RAM 有128个字节,其中最低的32个字节开辟为工作寄存器区。,2022年11月20日星期日,38,2022年11月20日星期日,39,2.3.3 CPU 时序的基本概念 在上面一个实验中我们知道DJNZ R6,D2这句话会被执行62500次,但是执行这么多次需要多长时间呢?是否满足我们的要求呢?在计算机中,为了便于管理,常把一条指令的执行过程划分为若干个阶段,每一阶段完成一项工作。例如,
26、取指令、存储器读、存储器写等,这每一项工作称为一个基本操作。完成一个基本操作所需要的时间称为机器周期。 我们规定:计算机访问一次存储器的时间,称之为一个机器周期。这是一个时间基准,一个机器周期包括12个时钟周期。设一个单片机工作于12M晶振,它的时钟周期是1/12(微秒)。它的一个机器周期是12*(1/12)也就是1微秒。在工作于6M晶振的单片机中,它的机器周期是2微秒。 MCS-51单片机的所有指令中,有一些完成得比较快,只要一个机器周期就行了,有一些完成得比较慢,得要2个机器周期,还有两条指令要4个机器周期才行。,2022年11月20日星期日,40,现在让我们来计算刚才那段延时程序的延迟时
27、间。首先必须知道晶振的频率,我们所用晶振为6M,这样一个机器周期就是2微秒。而DJNZ指令是双周期指令,所以执行一次需要4个微秒。一共执行62500次,正好250000微秒,也就是250毫秒。发光二极管在一秒钟内亮灭各两次。 问题:如果我们想改变二极管亮灭的频率,该怎么办呢?,2022年11月20日星期日,41,2.4 MCS-51 存储器组织 2.4.1 RAM (随机存储器) ROM(只读存储器) RAM CPU在运行时能随时进行数据的写入读 出,电源关闭时,所存信息丢失。 ROM 写入信息后,关闭电源,信息不丢失的存 储器,也叫非易失性存储器。因此,写入和擦 除 过程比RAM复杂。根据写
28、入和擦除过程的不 同分:掩膜ROM、光擦除ROM、电可擦除ROM、 Flash(闪存)。,2022年11月20日星期日,42,2022年11月20日星期日,43,2.4.2 MCS-51 程序存储器 80C51分程序存储器和数据存储器,程序存储器分片 内和片外两部分,最大64K. 当EA接高电平时,首先从片内存储器取指令,当 超过范围时系统会自动转到片外程序存储器取指令。 80C51片内程序存储器大小是4K(0000H-0FFFH)。 随着半导体技术的发展,现在常用的89C5X单片机, 使用Flash技术内部程序存储器可以达16K、32K或 64K. 所以一般只使用内部程序存储器就够了。 复位
29、后,程序的第一条指令总是从0000H地址读取。,2022年11月20日星期日,44,2.4.3 MCS-51 数据存储器 也分片内RAM和片外RAM。 片内RAM128个字节,地址00H-7FH,片外RAM最大 64K,地址0000H-FFFFH 工作寄存器区 32个 00H-1FH 位寻址区 20FH-2FH 16个字节,128位,00H-7FH 被寻址的位可以进行位操作。 没有用到的单元可以按通用RAM进行字节操作。 位操作还是字节操作,由指令区分 例如: SETB 00H ;使20H单元的D0位置“1” MOV 20H,#01H ; 两条指令的区别是:第二条D0为“1”, D1-D7都为
30、“0”,第一条D0为“1”, D1- D7保持不变.,2022年11月20日星期日,45,2022年11月20日星期日,46, 通用RAM区 80个,一般用于堆栈或其他操作 片外RAM 64K 0000H-FFFFH 低地址与片内RAM重 合。 靠指令区分:MOV 38H,#80H ;片内RAM MOVX DPTR,#80H 片外RAM,2022年11月20日星期日,47,2.4.4 MCS-51 的特殊功能寄存器(SFR) 21个 ,与片内RAM统一编址,分布在80H-FFH地 址空间内。 字节地址能被8整除的(即十六进纸的地址码尾 数为0或8的)单元可以具有位地址功能。 例如:P0(字节地
31、址80H 位地址 80H-87H) P1 (字节地址90H 位地址 90H-97H ) P2 (字节地址A0H 位地址 A0H-A7H ) P3 (字节地址B0H 位地址 B0H-B7H ) ACC (字节地址E0H 位地址 E0H-E7H ) 每个寄存器都有一个名字,不用记它的地址号。,2022年11月20日星期日,48,2022年11月20日星期日,49,累加器(Acc)运算指令的目标寄存器,用于访问外部存储器的唯一寄存器。B寄存器(B)专用于乘除法指令,亦可作通用寄存器。堆栈指针(SP)栈指针复位状态07H数据指针(DPTR)16位寄存器,由两个8位寄存器DPH与DPL组成。主要作用是提
32、供访问外部数据存储器或I/O端口的地址。DPH与DPL可作为通用寄存器使用。程序计数器(PC)即指令指针。16位寄存器,为CPU提供当前待取的指令地址。CPU每读取一个字节的指令内容,PC即自动加一。复位状态为0000H。不能在程序中直接读或修改PC的内容。,2022年11月20日星期日,50,2.5 MCS-51的并行口操作 2.5.1 4个并行口,8位,输入/输出,每一条口线都可以 单独用作位 输入/输出。 P0口:用作地址/数据总线,分时复用技术,执行 输出指令时,低8位地址信息、8位数据信息先后出 现在P0口(地址/数据总线)上。执行输入指时, 先输出8位地址,然后数据进入内部数据总线
33、。 P2口:在有外部ROM或扩展了外部RAM时,用作 地址的高8位。,2022年11月20日星期日,51,2022年11月20日星期日,52,单片机在读写外部数据时,P0口上首先出现的是低8位地址,然后是数据信号,当然地址信号与指令数据信号之间有一段缓冲的过度时间,这就要求,在数据信号出现以前必须把低8位的地址信号保存起来,这时是用ALE选通脉冲去控制锁存器把低8位地址予以锁存。这就是说在一个单片机的系统中,只要外部扩展有存储器或输入输出设备,就必须增加一片锁存器器件(74LS273或74LS373)。所以单片机上有一个引脚ALE,用来区别P0输出的是地址还是数据。,2022年11月20日星期
34、日,53,P3口的第二功能 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 (外部数据存储器“读”控制信号) P1口:I/O口,2022年11月20日星期日,54,2.5.2 什么时间用到口的第二功能?要不要预先设置? 回答是:不用,靠指令来区分。 MOVX 指令时:P0 P2 P3 (WR RD) 外部取指令时:P0 P2 串口I/O功能处于运行
35、状态用到RXD TXD 外部中断已打开时用到INT0 INT1 定时器/计数器处于外部计数状态时用到T0 T1,2022年11月20日星期日,55,2.5.3 并行口使用注意事项 1、P0口做为I/O使用时,要接上拉电阻。(一般5K- 10K)其他几个口内部有上拉电阻。 2、注意每根口线的负载能力(最大吸收电流),和整 个口吸收电流的总和限制。 3、4个口都是双向口。当需要读口的引脚状态时,必 需先向口锁存器写入“1”,然后再读数据。,2022年11月20日星期日,56,2022年11月20日星期日,57,第三章 MCS-51的指令系统3.1 指令:是CPU按照人们的意图来完成某种操作的命令。
36、 一台计算机的CPU所能执行的全部指令的集合称为 这个CPU的指令系统。 MCS-51指令系统共有111条指令。 单字节指令:49条 单周期指令:64条 双字节指令:48条 双周期指令:45条 三字节指令:17条 四周期指令:2条,2022年11月20日星期日,58,符号约定:Rn 表示当前工作寄存器中的R0R7Direct 表示对内部单元直接寻址的8位地址Ri 表示8位地址指针R0或R1,地址在R0或R1中。DPTR 表示16位地址指针,地址在DPTR中。#data 表示8位立即数。#data16 表示16位立即数。A+基地址 表示以A为变址寄存器。addr11 表示短转移的11位地址。ad
37、dr16 表示长转移的16位地址。rel 表示相对转移的地址偏移量。bit 表示位地址。(xx) 表示XX单元的内容,如(A)表示寄存器A的内容。(xx) 表示以(xx)为指针,所指单元的内容。例如,(DPTR) 表示数据指针DPTR所指单元的内容。,2022年11月20日星期日,59,程序状态字(PSW)Cy:进位(借位)标志;位操作累加器。 AC:半进位(借位)标志,低半字节向上有进位(借位)时。F0:用户标志,由用户自行设置,在程序运行中标识某种状态。 OV:溢出标志。有符号数加减运算发生溢出时置位。 P:奇偶标志(标识Acc的当前奇偶状态),奇数个1时,P=1,RS1RS0:寄存器组选
38、择,2022年11月20日星期日,60,累加器(Acc)运算指令的目标寄存器,用于访问外部存储器的唯一寄存器。B寄存器(B)专用于乘除法指令,亦可作通用寄存器。堆栈指针(SP)栈指针复位状态07H数据指针(DPTR)16位寄存器,由两个8位寄存器DPH与DPL组成。主要作用是提供访问外部数据存储器或I/O端口的地址。DPH与DPL可作为通用寄存器使用。程序计数器(PC)即指令指针。16位寄存器,为CPU提供当前待取的指令地址。CPU每读取一个字节的指令内容,PC即自动加一。复位状态为0000H。不能在程序中直接读或修改PC的内容。,2022年11月20日星期日,61,3.2 寻址方式 基本寻址
39、方式: 寄存器寻址 直接寻址 寄存器间接寻址 立即寻址 扩展寻址方式: 变址寻址 相对寻址 位寻址,2022年11月20日星期日,62,3.2.1 寄存器寻址: 操作数放在寄存器中,指令中直接给 出该寄存器的名称的寻址方式 例如:若(R0)=30H,指令 MOV A,R0 执行后 (A)=30H 采用寄存器寻址的寄存器可以为: 工作寄存器 R0-R7 累加器 A 寄存器 B 数据指针 DPTR,2022年11月20日星期日,63,3.2.3 直接寻址: 在指令中给出了参与运算的操作数所在单元 的地址,或所在位的位地址。 例如:MOV A,20H 若(20H)=55H 指令运行后 (A)=55H
40、 即把20单元的内容(数)送累加器A 直接寻址方式可以有3种地址空间: 1、内部RAM: 00H-7FH 2、21个特殊功能寄存器 3、位寻址空间,2022年11月20日星期日,64,3.2.4 立即寻址:指令码中直接给出操作数的寻址方式 紧跟在操作码之后的操作数称为立即数,立即数 可以是一个字节,也可以是两个字节,并要用 “#”来标识。 例如: MOV A,#50H 注意与 MOV A,50H 的区别 MOV DPTR,#2100H 由于立即数是一个常数,所以只能作为源操作数。 立即寻址对应的寻址空间位ROM空间,2022年11月20日星期日,65,3.2.5 寄存器间接寻址:寄存器中的内容
41、为地址,从该地址 去取操作数的寻址方式。 作为地址寄存器的寄存器只有R0、 R1、 DPTR,在 指令中表示为R0、R1、DPTR。 若(R0)=30H ,(30H)=5AH,指令 MOV A,R0z执行 后(A)=5AH. 寄存器间接寻址的寻址范围: 1、片内RAM 00H-7FH(采用R0 R1) 2、片外RAM 0000H-FFFFH DPTR指出地址,也 可由R0和R1指出操作数所在单元的低8位地 址,此时高8位地址由P2口提供。 片内RAM的数据传送用MOV类指令,片外RAM的数据传送用 MOVX类指令,2022年11月20日星期日,66,3.2.6 位寻址方式 对位地址中的内容进行
42、操作的寻址方式.位 寻址方式的实质是属于位的直接寻址。 例如:MOV C,00H 若位地址00H的内容为1,执行 后 PSW.7 (Cy) 的内容为1. CLR 07H SETB ACC.6 位寻址空间: 1、片内RAM的20H-2FH单元的128个可寻址位 2、SFR的可寻址位(常用符号位地址表示),2022年11月20日星期日,67,3.3 数据传送类指令 3.3.1 MOV型指令 将源操数内容送到目的操作数中,或 将源操作数和目的操作数进行交换。 1、以累加器为目的的操作数(4条) MOV A,#DATA; MOV A,direct; MOV A,Rn; MOV A,Ri; 2、以直接地
43、址为目的的操作数(5条) MOV direct,#DATA; MOV direct,direct; MOV direct,Rn; MOV direct,Ri; MOV direct,A,2022年11月20日星期日,68,举例并说出指令运行结果:MOV A,R1 ;将工作寄存器R1中的值送入到累加器A中, R1中的值保持不变。MOV A,50H;将内存50H单元中的值送入到累加器A中, 50H单元中的值保持不变。MOV A,R1;先看R1中是什么值,把这个值当做地址, 并将这个地址单元中的值送入累加器A中,前 面我们已学过,这是寄存器间接寻址方式。,2022年11月20日星期日,69,3、以寄
44、存器Rn为目的操作数(3条) MOV Rn,#DATA ; MOV Rn,direct MOV Rn,A 4、以寄存器间接寻址为目的操作数(3条) MOV Ri,#DATA ; MOV Ri,direct MOV Ri,A 5、以数据指针为目的的16位数据传送(1条) MOV DPTR,#DATA16 ;,2022年11月20日星期日,70,3.3.2 MOVX型指令(4条) 是用于片内和片外数据交换的唯一方式。 MOVX A,DPTR MOVX DPTR,A MOVX A,Ri MOVX Ri,A 应用例1:将内部30H单元的内容送外部数据存储器4000H 单元。 MOV R0,#30H ;
45、设置(内部)源指针 MOV DPTR,#4000H ;设置(外部)目标指针 MOV A,R0 ;读源数据 MOVX DPTR,A ;写目标数据 应用例2:读外部RAM 3000H单元内容 MOV P2,#30H ;由P2口提供高8位地址30H MOV R0,#0 ;低8位地址为00H MOVX A,R0 ;读(3000H)单元,2022年11月20日星期日,71,注意:1、在89C51中,与外部存储器RAM打交道的只可以是累加器A,所有需要送入外部RAM的数据必须要通过A送出去。而所有要读入外部RAM中的数据也必需要通过A读入。内部RAM间可以直接进行数据传递,而外部则不行。比如,要将外部RA
46、M中某单元(设为110H单元的数据)送入另外一个单元(设为200H单元),也必须要先将110H单元中的内容读入A,然后再送入200H单元中去。2、要读写外部的RAM,当然也必须要先知道RAM的地址,在前两条指令中,地址是被地址放在DPTR中的,而后两条指令,由于Ri(即R0或R1)只是一个8位的寄存器,所以只能提供低8位地址,必须用P2口提供高8位地址。3、使用时应当首先将要读或写的地址送入DPTR或Ri中,然后再用读写命令。,2022年11月20日星期日,72,3.3.3 MOVC型指令(2条)用于对程序存储器的操作 MOVC A,A+PC MOVC A,A+DPTR 用于读取ROM中的常数
47、 例如:有一个数在R0中,要求用查表的方法确定它的 平方值(此数的取值范围是0-5) MOV DPTR,#TABLE MOV A,R0 MOVC A,A+DPTR . .TABLE: DB 0,1,4,9,16,25,2022年11月20日星期日,73,3.3.4 堆栈操作指令 (2条)堆栈是在内部RAM中按“后进先出”规则开辟的一片存储区。用来保护CPU执行程序的现场。如CPU相应中断和子程序调用时的返回地址、重要的单元和寄存器的内容等。其中保护重要的单元和寄存器的内容采用堆栈操作指令 完成。 PUSH direct ;SP(SP)+1 (SP) (direct) POP direct ;
48、(direct) (SP) SP(SP)-1 使用堆栈指令时应注意: 1、PUSH和POP指令的操作数必须是单元地址。 2、MCS-51的堆栈建在内部RAM中,系统复位后 (SP)=07H .在应用系统中一般把栈区开辟在 30H-7FH. 3、入栈指令PUSH和出栈指令应成对出现。否则单元内容恢 复时会发生改变。 4、MCS-51单片机不支持对工作寄存器R0-R7直接使用堆栈 指令。,2022年11月20日星期日,74,例:写出以下程序的运行结果 MOV 30H,#12 MOV 31H,#23 PUSH 30H PUSH 31H POP 30H POP 31H结果是30H中的值变为23,而31
49、H中的值则变为12。也就两者进行了数据交换。从这个例子可以看出:使用堆栈时,入栈的书写顺序和出栈的书写顺序必须相反(后进先出),才能保证数据被送回原位,否则就要出错了,2022年11月20日星期日,75,3.3.5 交换指令 1、半字节交换指令 XCHD A,Ri 累加器A的低4位与指定单元内容的低4位进行换, 高4位不变。 2、字节交换指令 XCH A,direct XCH A,Rn XCH A,Ri 3、高低4位互换指令 SWAP A ;A的高低4位互换 这是一组累加器A参与的完成的指令。,2022年11月20日星期日,76,3.4 算术运算指令 3.4.1 加法运算指令 1、不带进位加
50、ADD A,#data ADD A,direct ADD A,Rn ADD A,Ri ; (A)+源(A) 2、带进位加 ADDC A,#data ADDC A,direct ADDC A,Rn ADDC A,Ri ;(A)+源+(Cy)(A) 3、加1指令 INC A INC Rn INC direct INC Ri INC DPTR 4、十进制加法调整指令 DA A 每位十进制数可以用4位二进制编码来表示。一个单元可以放2位 十进制数。在MCS-51中仅支持2个8位二进制运算,两个十进制 数相加也必须也必须借助于二进制加法指令,所以必须进行调 整。该指令必须与加法指令联合使用。,2022年