单片机技术及应用.ppt

上传人:小飞机 文档编号:6247862 上传时间:2023-10-10 格式:PPT 页数:79 大小:467.50KB
返回 下载 相关 举报
单片机技术及应用.ppt_第1页
第1页 / 共79页
单片机技术及应用.ppt_第2页
第2页 / 共79页
单片机技术及应用.ppt_第3页
第3页 / 共79页
单片机技术及应用.ppt_第4页
第4页 / 共79页
单片机技术及应用.ppt_第5页
第5页 / 共79页
点击查看更多>>
资源描述

《单片机技术及应用.ppt》由会员分享,可在线阅读,更多相关《单片机技术及应用.ppt(79页珍藏版)》请在三一办公上搜索。

1、2023/10/10,1,单片机技术及应用清华大学基础工业训练中心冯一兵,2023/10/10,2,第一章 单片机的基础知识 第二章 MCS-51单片机的初步认识 第三章 MCS-51的指令系统,2023/10/10,3,第四章 汇编语言程序设计 第五章 定时器/计数器 第六章 中断的基本概念 第七章 串行口的应用,2023/10/10,4,第一章 单片机的基础知识 1.1 微计算机与单片机 单片机是计算机的一种。一台完整的计算机由硬件和软件共同组成。计算机的软件由各种程序组成,包括操作系统(如windows)和各种应用程序(如word),计算机的硬件由下列几个部份构成:CPU、存储器、外部设

2、备及接口。单片机主要用于简单的数据采集和控制,原本的意思是将CPU、存储器和外设接口(I/O)集成在一个芯片(single chip)上的处理器(Processor),后来的正式名称是微控制器(micro controller)。因此在网上查找资料时,可以使用微控制器作为关键词查找。,2023/10/10,5,单片微型计算机就是将CPU、RAM、ROM、定时/计数器和多种接口都集成到一块集成电路芯片上的微型计算机。因此,一块芯片就构成了一台计算机。它已成为工业控制领域、智能仪器仪表、尖端武器、日常生活中最广泛使用的计算机。,2023/10/10,6,CPU:CPU(central contro

3、l unit)的全称是中央处理器。负责计算机的计算和控制计算机的运行。存储器:存储器存放各种程序和数据。存储器分为内部存储器和外部存储器两部分。外部存储器大家都比较熟悉,如硬盘、光盘、软盘等等。内部存储器有两种:一部分称为ROM(只读存储器),存放最基本的程序,主要用于计算机启动时使用,如在PC机中存放BIOS;另一部分成为RAM,它能够随时读写。存放正在运行的程序和使用的数据。内部存储器的读写速度远远高于外部存储器,而外部存储器的容量则远远大于内部存储器。外部输入输出设备(I/O)及接口:用于和人打交道。如显示器、键盘、鼠标等等,硬盘、光盘等也属于外部设备,2023/10/10,7,1.2

4、MCS-51系列单片机 20世纪80年代初,Intel推出了MCS-51系列单片机,3个基本型:8031:内部没有程序存储器 8051:内部有程序存储器(ROM 4K)8751:内部有可编程可改写程序存储器(EPROM 4K)Intel 在推出MCS-51体系结构后不久,开放了8051内核技术,为 MCS-51系列单片机的发展起了很大作用。,2023/10/10,8,在Intel公司推出了MCS-51不久便实施了最彻底的技术开放政策;在众多电器商、半导体商的积极参与下,将MCS-51发展成了众多型号系列的80C51 MCU家族。MCS-51经典的体系结构、极好的兼容性和Intel公司的开放政策

5、不仅使众多厂家参与发展,也诱使半导体厂家对MCS-51实行为所欲为的改造。,2023/10/10,9,Philips公司着力发展基于51内核的控制功能及外围单元,把MCS-51迅速推进到80C51的MCU时代。另外基于Flash ROM的在线可编程(ISP)技术,改变了单片机应用系统的结构模式和开发运行条件。P80C51 P80C52 Atmel公司推出了采用Flash ROM技术的AT89C51 AT89C52 AT89S52等,增加了一些外部接口功能。Cygnal 公司2003年推出51内核的SOC(片上系统)型单片机,C8051F系列单片机。,2023/10/10,10,1.3 计算机中

6、常用的几个术语 1.3.1 电平(level):计算机和数字电路中常使用电平一词,用于反映信号(signal)的状态。一个信号或者作为数字电路的一个输入,或者作为数字电路的输出。通常使用+5V直流电源作为数字电路的供电电源,一个信号有2个稳定的状态,一个称为高电平,一个称为低电平。高电平是指电压在+2.7V以上、5V以下的状态,低电平是指+0.8V以下、0V以上的状态。因此,对于一个器件,输出3.1V或者输出3.8V还是输出4.3V本质上是一样的,都属于高电平状态;同样输出0.7V还是0.3V也属于同一种状态,即低电平状态,也没有什么差别。咱们这次做实验,用的是+5V直流电源。判断一个电路是否

7、正常工作,要按上述标准进行。随着技术的快速发展,现在许多器件使用+3.3V甚至2.2V直流电源,对这些器件,高电平、低电平的定义也进行了相应修改。,2023/10/10,11,1.3.2 二进制和十六进制 由于数字电路中一个信号只有2个稳定的状态:高电平(用“1”表示)和低电平(用“0”表示),因此在计算机中,数据采用的是二进制而不是十进制。二进制数就是以2为基数,数符为0、1,逢二进一。书写时,右边代表低位,左边代表高位。下面是二进制数的例子:(8)(4)(2)(1)0 1 1 0 等于十进制6 1 0 1 0 等于十进制10 1 1 1 1 等于十进制15,2023/10/10,12,虽然

8、计算机中采用的是二进制,不过有时却不太方便,因此有时使用十六进制,即把二进制数中的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 十六进制数只是为了方便人们的阅读和书写,计算机实际处理的还是二进制数。在汇编语言和其它高级语言中,为了将二进制数、十六进制数和十进制数加以区分,在二进制数后加一个后缀B,在十六进制数后加一个后缀H,十进制数后不加任何后缀。如:01

9、011100B 85 85H 0D3H 十六进制数如果最高位是字母,则必须前面加一个0。,2023/10/10,13,1.3.3 位(bit)、字节(byte)、字(word)在二进制中,每一“位”叫bit,一般通俗称为位。连续的8位组织在一起称为一个字节(byte)。字节是计算机组织数据的基本单位。我们通常说一个计算机的内存多大,比如100M,指的就是它的内存是100M字节。再比如说一个硬盘是100G,也是指这个硬盘能够存储100G个字节的数据。1M等于100万,1G等于1000M。字(word)是每种特定的计算机组织数据和进行运算的单位。比如计算机做加法时能够一次做多少位二进制数的加法。每

10、种计算机,字长差别很大,单片机字长一般是8位或者16位,而PC机字长则有64位甚至更多。我们通常说这是多少位的计算机就是指该计算机的字长是多少位。,2023/10/10,14,寄存器(register)CPU中有很多寄存器。所谓寄存器就是可以存放东西的地方,这些东西可以是指令、地址等,也可以是数。寄存器的长度(位数)等于计算机的字长。一个8位单片机中寄存器的长度就是8位。一个64位PC机中寄存器的位数就是64位。下面介绍一些CPU中常用的寄存器。指令寄IR(Instruction Register):存放CPU从存储器中取出的指令码。CPU对指令进行译码,产生各种控制信号,这些控制信号指挥CP

11、U内部的各种部件完成该指令规定的动作,比如对2个数做加法、减法、逻辑与、从存储器中取一个数、向存储器中写一个数、将一个数向外部设备输出、从外部设备输入一个数等等。,2023/10/10,15,1.3.5 程序计数器PC(Program Counter):指出程序中当前指令在存储器中的地址。程序是由一条条指令构成的,它们存放在存储器中。存放程序的存储器叫做程序存储器。存储器由许多单元组成,每个单元像个小房间,可以向里放东西,也可以从中取东西。每个单元对应一个存储器地址(就像房间的房间号)。,2023/10/10,16,1.3.6 数据、地址、指令:之所以将这三者放在一起,是因为这三者的本质都是一

12、样的数字,或者说都是一串0和1组成的序列。换言之,地址、指令也都是数据。指令:由单片机芯片的设计者规定的一种数字,它与我们常用的指令助记符有着严格的一一对应关系,不可以由单片机的开发者更改。地址:是寻找单片机内部、外部的存储单元、输入输出口的依据,内部单元的地址值已由芯片设计者规定好,不可更改,外部的单元可以由单片机开发者自行决定,但有一些地址单元是一定要有的(详见程序的执行过程)。数据:这是由微处理器处理的对象,在各种不同的应用电路中各不相同,,2023/10/10,17,1.3.7 总线:在计算机中,各部件是以处理器(CPU)为核心的,各部件都要与处理器相连接,各部件之间的工作必须相互协调

13、,如果处理器和各部件间单独连线,则线的数量将多得惊人,所以在处理机中引入了总线的概念,各个部件共同享用连线,所有器件的8根数据线全部接到8根公用的线上,即相当于各个器件并联起来。但仅这样还不行,如果有两个器件同时送出数据,一个为0,一个为1,那么,接收方接收到的究竟是什么呢?这种情况是不允许的,所以要对器件进行选择和控制,使器件分时工作,任何时候只能有一个器件发送或接受数据。器件的数据线也就被称为数据总线,器件所有的控制线被称为控制总线。在单片机内部或者外部存储器及其它器件中有存储单元,这些存储单元要被分配地址,才能使用,由于存储单元比较多,所以,用于地址分配的线也较多,这些线被称为地址总线。

14、,2023/10/10,18,2023/10/10,19,1.4 程序的执行过程,2023/10/10,20,一个计算机是这样工作的。当加电之后,时钟信号产生,并且自动产生一个复位信号。复位信号将程序计数器PC复位为0;CPU以PC的值为存储器地址从存储器0单元中取出第一条指令放到指令寄存器IR中;然后CPU对IR中的指令进行译码,产生各种控制信号,这些控制信号完成该指令规定的功能;在完成该指令功能的同时,程序计数器PC加1,为从存储器中取出下一条指令做准备。第一条指令执行结束以后,CPU以PC的值为存储器地址从存储器1单元中取出第2条指令放到指令寄存器IR中,一直继续下去,直到程序执行结束。

15、单片机在通电复位后8051内的程序计数器(PC)中的值为0000,所以程序总是从0000单元开始执行,也就是说:在MCS-51程序存储器中一定要存在0000这个单元,并且在0000单元中存放的一定是一条指令。,2023/10/10,21,1.5 单片机应用的开发过程 1、电路板的制作 2、目标文件的生成:利用PC机上的开发软件,编写 源程 序,经汇编(或编译)后生成目标文件(.HEX).3、目标程序的烧写:将目标程序装入到单片机芯片 或存储器芯片中。使用编程器或采用在系统编程(ISP)技术.,2023/10/10,22,第二章 MCS-51 单片机的初步认识 2.1 引脚功能 电源引脚 Vcc

16、(40):电源+5V0.5V Gnd(20):地 时钟XTAL1(19):内部振荡器输入端XTAL2(18):内部振荡器输出端,2023/10/10,23,2023/10/10,24,(a)内部时钟方式,(b)外部时钟方式,晶振6MHZ 电容5-30P,复位电路(9),电容C 22ufR2 1-2K R1 200,复位后程序计数器PC=0000H 程序从0000H地址单元开始执行,复位时间大约5-10mS,RST引脚加高电平,2023/10/10,25,EA(31):输入 EA引脚接高电平时,从内部程序存储器开始,当程序超过内部程序器的容量时转到外部程序存储器取指令。EA引脚接低电平时,单片机

17、转到外部程序存储器中取指令(无论片内是否有程序存储器)。外部程序存储器的地址从0000H开始编址。,2023/10/10,26,2.2 实验1 指令的初步认识,2023/10/10,27,从上一节我们看到MCS-51有40个管脚,我们已经用了6个,还有34个,这34个管脚中有32个分成了4组,每组8个,分别叫做P0.0-P0.7 P1.0-P1.7 P2.0-P2.7 P3.0-P3.7 分别叫做P0口、P1口、P2口、P3口。这4个口都是双向(既可以输出也可以输入)口,但又有所不同,P0口、P2口、P3口除可以用作输入输出以外还有第二功能,以后用到时再讲。我们的第一个实验是要用单片机点亮一只

18、发光二极管LED或者同时点亮8只发光二极管。我们将这8只发光二极管接在上(管脚1-8)。,2023/10/10,28,在这个图中如果想让某一个发光二极管(比如第1个)亮怎么办呢?当1脚是高电平时,LED不亮,只有1脚是低电平时,LED才发亮。也就是说,我们要能够让1引脚按要求变为高或低电平就可以了。我们又怎样让它变高或变低呢?计算机能听得懂的命令称之为计算机的指令。在MCS-51中,让一个引脚输出高电平或低电平的指令有两种,一种是SETB和CLR指令,这种叫做位操作指令。我们要1脚输出高电平,只要写SETB P1.0,要1脚输出低电平,只要写 CLR P1.0就可以了。还有一种就是数据传送指令

19、,比如 MOV P1,#data。这种指令一次同时改变P1口8位的状态。我们要1脚输出高电平,只要写 MOV P1,#01H,要1脚输出低电平,只要写 MOV P1,#00H就可以了。,2023/10/10,29,我们怎样才能计算机执行这条指令呢?第一步借助计算机里的编辑软件编写源程序。现在普遍使用的是Keil C51软件。计算机是看不懂SETB CLR之类的指令,所以第二步把指令翻译成计算机能懂的方式,再让计算机去读。计算机能懂什么呢?它只懂一样东西数字。因此我们得把SETB P1.0变为(D2H,90H),把CLR P1.0变为(C2H,90H),至于为什么是这两个数字,这也是由51芯片的

20、设计者-INTEL规定的,我们不去研究。这个翻译的过程在计算机术语中叫做编译。编译后生成的文件叫做目标文件。第三步就要把目标文件写入到单片机中去。有两种方法一种是要借助于一个硬件工具“编程器”。还有一种就是在线编程ISP.,2023/10/10,30,ORG 0000H;存储器ROM起始地址LJMP 0100H;跳转到主程序地址ORG 0100H;主程序起始地址CLR P1.0;执行指令ENDORG 0000H;存储器ROM起始地址CLR P1.0;执行指令ENDORG 0000H;存储器ROM起始地址MOV P1,#11111110B;执行指令END,2023/10/10,31,这里ORG、

21、END是伪指令,分号后面的是注释,这些都是不往单片机中写入的,ORG是表示从程序存储器ROM(只读存储器)的什么地址开始存储,END表示指令结束。LJMP是跳转指令,因为芯片的设计者规定,单片机ROM中的开始一些字节有专门的用途,所以我们把指令从0100H这个地址开始存储。,2023/10/10,32,2023/10/10,33,2.3 单片机汇编语言程序初步认识 2.3.1 在前边的实验中我们只是点亮了一个LED,我们还可以让它闪烁。闪烁实际上就是要灯亮一段时间,再灭一段时间,也就是说要P1.0不断地输出低和高电平。但是程序是不是可以直接写入:SETB P1.0 CLR P1.0这是不行的。

22、第一,计算机执行指令的时间很快,执行完SETB P1.0后,灯是灭了,但在极短时间(微秒级)后,计算机又执行了CLR P0.0指令,灯又亮了,所以根本看不出灯曾经灭过。第二,在执行完CLR P1.0后,不会再去执行SETB P1.0指令,以后再也没有机会让LED灭了。为了解决这两个问题,我们可以做如下设想,第一,在执行完SETB P1.0后,延时一段时间(几秒或零点几秒)再执行第二条指令,就可以看出LED曾经灭过了。第二,在执行完第二条指令后,让计算机再去执行第一条指令,不断地兜圈,我们称之为循环,这样就可以完成任务了。,2023/10/10,34,2023/10/10,35,ORG 0000

23、H;存储器ROM起始地址 LJMP 0100H;跳转到主程序地址 ORG 0100H;主程序起始地址LOOP:SETB P1.0;熄灭LED,LCALL DELAY;调用延时子程序 CLR P1.0;点亮LED LCALL DELAY;调用延时子程序 LJMP LOOP DELAY:MOV R7,#250;工作寄存器R7赋初值D1:MOV R6,#250;工作寄存器R6赋初值D2:DJNZ R6,D2;62500 DJNZ R7,D1 RET END,2023/10/10,36,由这个实验我们可能会提出这样几个问题?1、程序中R6 R7代表什么意思?2、程序的延迟是怎么实现的?延迟时间的长短怎

24、 么确定?3、什么是汇编语言,汇编语言的基本格式是怎样 的?,2023/10/10,37,2.3.2 工作寄存器什么是工作寄存器呢?计算机做运算时,为了要得到最终结果,往往要有很多的中间结果,这些中间结果要有个地方才行。所以在单片机中有一个区域称为RAM(RAM随机存储器),也叫数据存储器,也就是随时可以将数据写进去,也可以在需要的时候将数据读出来。在MCS-51单片机中,片内RAM 有128个字节,其中最低的32个字节开辟为工作寄存器区。,2023/10/10,38,2023/10/10,39,2.3.3 CPU 时序的基本概念 在上面一个实验中我们知道DJNZ R6,D2这句话会被执行62

25、500次,但是执行这么多次需要多长时间呢?是否满足我们的要求呢?在计算机中,为了便于管理,常把一条指令的执行过程划分为若干个阶段,每一阶段完成一项工作。例如,取指令、存储器读、存储器写等,这每一项工作称为一个基本操作。完成一个基本操作所需要的时间称为机器周期。我们规定:计算机访问一次存储器的时间,称之为一个机器周期。这是一个时间基准,一个机器周期包括12个时钟周期。设一个单片机工作于12M晶振,它的时钟周期是1/12(微秒)。它的一个机器周期是12*(1/12)也就是1微秒。在工作于6M晶振的单片机中,它的机器周期是2微秒。MCS-51单片机的所有指令中,有一些完成得比较快,只要一个机器周期就

26、行了,有一些完成得比较慢,得要2个机器周期,还有两条指令要4个机器周期才行。,2023/10/10,40,现在让我们来计算刚才那段延时程序的延迟时间。首先必须知道晶振的频率,我们所用晶振为6M,这样一个机器周期就是2微秒。而DJNZ指令是双周期指令,所以执行一次需要4个微秒。一共执行62500次,正好250000微秒,也就是250毫秒。发光二极管在一秒钟内亮灭各两次。问题:如果我们想改变二极管亮灭的频率,该怎么办呢?,2023/10/10,41,2.4 MCS-51 存储器组织 2.4.1 RAM(随机存储器)ROM(只读存储器)RAM CPU在运行时能随时进行数据的写入读 出,电源关闭时,所

27、存信息丢失。ROM 写入信息后,关闭电源,信息不丢失的存 储器,也叫非易失性存储器。因此,写入和擦 除 过程比RAM复杂。根据写入和擦除过程的不 同分:掩膜ROM、光擦除ROM、电可擦除ROM、Flash(闪存)。,2023/10/10,42,2023/10/10,43,2.4.2 MCS-51 程序存储器 80C51分程序存储器和数据存储器,程序存储器分片 内和片外两部分,最大64K.当EA接高电平时,首先从片内存储器取指令,当 超过范围时系统会自动转到片外程序存储器取指令。80C51片内程序存储器大小是4K(0000H-0FFFH)。随着半导体技术的发展,现在常用的89C5X单片机,使用F

28、lash技术内部程序存储器可以达16K、32K或 64K.所以一般只使用内部程序存储器就够了。复位后,程序的第一条指令总是从0000H地址读取。,2023/10/10,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

29、 20H,#01H;两条指令的区别是:第二条D0为“1”,D1-D7都为“0”,第一条D0为“1”,D1-D7保持不变.,2023/10/10,45,2023/10/10,46,通用RAM区 80个,一般用于堆栈或其他操作 片外RAM 64K 0000H-FFFFH 低地址与片内RAM重 合。靠指令区分:MOV 38H,#80H;片内RAM MOVX DPTR,#80H 片外RAM,2023/10/10,47,2.4.4 MCS-51 的特殊功能寄存器(SFR)21个,与片内RAM统一编址,分布在80H-FFH地 址空间内。字节地址能被8整除的(即十六进纸的地址码尾 数为0或8的)单元可以具有

30、位地址功能。例如:P0(字节地址80H 位地址 80H-87H)P1(字节地址90H 位地址 90H-97H)P2(字节地址A0H 位地址 A0H-A7H)P3(字节地址B0H 位地址 B0H-B7H)ACC(字节地址E0H 位地址 E0H-E7H)每个寄存器都有一个名字,不用记它的地址号。,2023/10/10,48,2023/10/10,49,累加器(Acc)运算指令的目标寄存器,用于访问外部存储器的唯一寄存器。B寄存器(B)专用于乘除法指令,亦可作通用寄存器。堆栈指针(SP)栈指针复位状态07H数据指针(DPTR)16位寄存器,由两个8位寄存器DPH与DPL组成。主要作用是提供访问外部数

31、据存储器或I/O端口的地址。DPH与DPL可作为通用寄存器使用。程序计数器(PC)即指令指针。16位寄存器,为CPU提供当前待取的指令地址。CPU每读取一个字节的指令内容,PC即自动加一。复位状态为0000H。不能在程序中直接读或修改PC的内容。,2023/10/10,50,2.5 MCS-51的并行口操作 2.5.1 4个并行口,8位,输入/输出,每一条口线都可以 单独用作位 输入/输出。P0口:用作地址/数据总线,分时复用技术,执行 输出指令时,低8位地址信息、8位数据信息先后出 现在P0口(地址/数据总线)上。执行输入指时,先输出8位地址,然后数据进入内部数据总线。P2口:在有外部ROM

32、或扩展了外部RAM时,用作 地址的高8位。,2023/10/10,51,2023/10/10,52,单片机在读写外部数据时,P0口上首先出现的是低8位地址,然后是数据信号,当然地址信号与指令数据信号之间有一段缓冲的过度时间,这就要求,在数据信号出现以前必须把低8位的地址信号保存起来,这时是用ALE选通脉冲去控制锁存器把低8位地址予以锁存。这就是说在一个单片机的系统中,只要外部扩展有存储器或输入输出设备,就必须增加一片锁存器器件(74LS273或74LS373)。所以单片机上有一个引脚ALE,用来区别P0输出的是地址还是数据。,2023/10/10,53,P3口的第二功能 P3.0 RXD(串行

33、口数据输入)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口,2023/10/10,54,什么时间用到口的第二功能?要不要预先设置?回答是:不用,靠指令来区分。MOVX 指令时:P0 P2 P3(WR RD)外部取指令时:P0 P2 串口I/O功能处于运行状态用到RXD TXD 外部中断已打开时用到INT0 INT1 定时器/计数器处于外部计数状态时用到T0 T1

34、,2023/10/10,55,2.5.3 并行口使用注意事项 1、P0口做为I/O使用时,要接上拉电阻。(一般5K-10K)其他几个口内部有上拉电阻。2、注意每根口线的负载能力(最大吸收电流),和整 个口吸收电流的总和限制。3、4个口都是双向口。当需要读口的引脚状态时,必 需先向口锁存器写入“1”,然后再读数据。,2023/10/10,56,2023/10/10,57,第三章 MCS-51的指令系统3.1 指令:是CPU按照人们的意图来完成某种操作的命令。一台计算机的CPU所能执行的全部指令的集合称为 这个CPU的指令系统。MCS-51指令系统共有111条指令。单字节指令:49条 单周期指令:

35、64条 双字节指令:48条 双周期指令:45条 三字节指令:17条 四周期指令:2条,2023/10/10,58,符号约定:Rn 表示当前工作寄存器中的R0R7Direct 表示对内部单元直接寻址的8位地址Ri 表示8位地址指针R0或R1,地址在R0或R1中。DPTR 表示16位地址指针,地址在DPTR中。#data 表示8位立即数。#data16 表示16位立即数。A+基地址 表示以A为变址寄存器。addr11 表示短转移的11位地址。addr16 表示长转移的16位地址。rel 表示相对转移的地址偏移量。bit 表示位地址。(xx)表示XX单元的内容,如(A)表示寄存器A的内容。(xx)表

36、示以(xx)为指针,所指单元的内容。例如,(DPTR)表示数据指针DPTR所指单元的内容。,2023/10/10,59,程序状态字(PSW)Cy:进位(借位)标志;位操作累加器。AC:半进位(借位)标志,低半字节向上有进位(借位)时。F0:用户标志,由用户自行设置,在程序运行中标识某种状态。OV:溢出标志。有符号数加减运算发生溢出时置位。P:奇偶标志(标识Acc的当前奇偶状态),奇数个1时,P=1,RS1RS0:寄存器组选择,2023/10/10,60,累加器(Acc)运算指令的目标寄存器,用于访问外部存储器的唯一寄存器。B寄存器(B)专用于乘除法指令,亦可作通用寄存器。堆栈指针(SP)栈指针

37、复位状态07H数据指针(DPTR)16位寄存器,由两个8位寄存器DPH与DPL组成。主要作用是提供访问外部数据存储器或I/O端口的地址。DPH与DPL可作为通用寄存器使用。程序计数器(PC)即指令指针。16位寄存器,为CPU提供当前待取的指令地址。CPU每读取一个字节的指令内容,PC即自动加一。复位状态为0000H。不能在程序中直接读或修改PC的内容。,2023/10/10,61,3.2 寻址方式 基本寻址方式:寄存器寻址 直接寻址 寄存器间接寻址 立即寻址 扩展寻址方式:变址寻址 相对寻址 位寻址,2023/10/10,62,3.2.1 寄存器寻址:操作数放在寄存器中,指令中直接给 出该寄存

38、器的名称的寻址方式 例如:若(R0)=30H,指令 MOV A,R0 执行后(A)=30H 采用寄存器寻址的寄存器可以为:工作寄存器 R0-R7 累加器 A 寄存器 B 数据指针 DPTR,2023/10/10,63,3.2.3 直接寻址:在指令中给出了参与运算的操作数所在单元 的地址,或所在位的位地址。例如:MOV A,20H 若(20H)=55H 指令运行后(A)=55H 即把20单元的内容(数)送累加器A 直接寻址方式可以有3种地址空间:1、内部RAM:00H-7FH 2、21个特殊功能寄存器 3、位寻址空间,2023/10/10,64,3.2.4 立即寻址:指令码中直接给出操作数的寻址

39、方式 紧跟在操作码之后的操作数称为立即数,立即数 可以是一个字节,也可以是两个字节,并要用“#”来标识。例如:MOV A,#50H 注意与 MOV A,50H 的区别 MOV DPTR,#2100H 由于立即数是一个常数,所以只能作为源操作数。立即寻址对应的寻址空间位ROM空间,2023/10/10,65,3.2.5 寄存器间接寻址:寄存器中的内容为地址,从该地址 去取操作数的寻址方式。作为地址寄存器的寄存器只有R0、R1、DPTR,在 指令中表示为R0、R1、DPTR。若(R0)=30H,(30H)=5AH,指令 MOV A,R0z执行 后(A)=5AH.寄存器间接寻址的寻址范围:1、片内R

40、AM 00H-7FH(采用R0 R1)2、片外RAM 0000H-FFFFH DPTR指出地址,也 可由R0和R1指出操作数所在单元的低8位地 址,此时高8位地址由P2口提供。片内RAM的数据传送用MOV类指令,片外RAM的数据传送用 MOVX类指令,2023/10/10,66,3.2.6 位寻址方式 对位地址中的内容进行操作的寻址方式.位 寻址方式的实质是属于位的直接寻址。例如:MOV C,00H 若位地址00H的内容为1,执行 后 PSW.7(Cy)的内容为1.CLR 07H SETB ACC.6 位寻址空间:1、片内RAM的20H-2FH单元的128个可寻址位 2、SFR的可寻址位(常用

41、符号位地址表示),2023/10/10,67,3.3 数据传送类指令 3.3.1 MOV型指令 将源操数内容送到目的操作数中,或 将源操作数和目的操作数进行交换。1、以累加器为目的的操作数(4条)MOV A,#DATA;MOV A,direct;MOV A,Rn;MOV A,Ri;2、以直接地址为目的的操作数(5条)MOV direct,#DATA;MOV direct,direct;MOV direct,Rn;MOV direct,Ri;MOV direct,A,2023/10/10,68,举例并说出指令运行结果:MOV A,R1;将工作寄存器R1中的值送入到累加器A中,R1中的值保持不变。

42、MOV A,50H;将内存50H单元中的值送入到累加器A中,50H单元中的值保持不变。MOV A,R1;先看R1中是什么值,把这个值当做地址,并将这个地址单元中的值送入累加器A中,前 面我们已学过,这是寄存器间接寻址方式。,2023/10/10,69,3、以寄存器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;,2023/10/10,70,3.3.2 MOVX

43、型指令(4条)是用于片内和片外数据交换的唯一方式。MOVX A,DPTR MOVX DPTR,A MOVX A,Ri MOVX Ri,A 应用例1:将内部30H单元的内容送外部数据存储器4000H 单元。MOV R0,#30H;设置(内部)源指针 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)单元,2023/10/10,71,注意:1、在89C51中,

44、与外部存储器RAM打交道的只可以是累加器A,所有需要送入外部RAM的数据必须要通过A送出去。而所有要读入外部RAM中的数据也必需要通过A读入。内部RAM间可以直接进行数据传递,而外部则不行。比如,要将外部RAM中某单元(设为110H单元的数据)送入另外一个单元(设为200H单元),也必须要先将110H单元中的内容读入A,然后再送入200H单元中去。2、要读写外部的RAM,当然也必须要先知道RAM的地址,在前两条指令中,地址是被地址放在DPTR中的,而后两条指令,由于Ri(即R0或R1)只是一个8位的寄存器,所以只能提供低8位地址,必须用P2口提供高8位地址。3、使用时应当首先将要读或写的地址送

45、入DPTR或Ri中,然后再用读写命令。,2023/10/10,72,3.3.3 MOVC型指令(2条)用于对程序存储器的操作 MOVC A,A+PC MOVC A,A+DPTR 用于读取ROM中的常数 例如:有一个数在R0中,要求用查表的方法确定它的 平方值(此数的取值范围是0-5)MOV DPTR,#TABLE MOV A,R0 MOVC A,A+DPTR.TABLE:DB 0,1,4,9,16,25,2023/10/10,73,3.3.4 堆栈操作指令(2条)堆栈是在内部RAM中按“后进先出”规则开辟的一片存储区。用来保护CPU执行程序的现场。如CPU相应中断和子程序调用时的返回地址、重要

46、的单元和寄存器的内容等。其中保护重要的单元和寄存器的内容采用堆栈操作指令 完成。PUSH direct;SP(SP)+1(SP)(direct)POP direct;(direct)(SP)SP(SP)-1 使用堆栈指令时应注意:1、PUSH和POP指令的操作数必须是单元地址。2、MCS-51的堆栈建在内部RAM中,系统复位后(SP)=07H.在应用系统中一般把栈区开辟在 30H-7FH.3、入栈指令PUSH和出栈指令应成对出现。否则单元内容恢 复时会发生改变。4、MCS-51单片机不支持对工作寄存器R0-R7直接使用堆栈 指令。,2023/10/10,74,例:写出以下程序的运行结果 MOV

47、 30H,#12 MOV 31H,#23 PUSH 30H PUSH 31H POP 30H POP 31H结果是30H中的值变为23,而31H中的值则变为12。也就两者进行了数据交换。从这个例子可以看出:使用堆栈时,入栈的书写顺序和出栈的书写顺序必须相反(后进先出),才能保证数据被送回原位,否则就要出错了,2023/10/10,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位互换 这是一组

48、累加器A参与的完成的指令。,2023/10/10,76,3.4 算术运算指令 3.4.1 加法运算指令 1、不带进位加 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位二进制运算,两个

49、十进制 数相加也必须也必须借助于二进制加法指令,所以必须进行调 整。该指令必须与加法指令联合使用。,2023/10/10,77,由于51单片机是一种8位机,只能做8位的数学运算,但8位运算的范围只有0-255,这在实际工作中是不够的,因此就要进行扩展,一般是将2个8位的数学运算合起来,成为一个16位的运算,这样,可以表达的数的范围就可以达到0-65535。在计算机中做16位加法时,先做低8位的,如果两数相加产生了进位,也要“点一下”做个标记,这个标记就是进位位C,在PSW中。在进行高位加法是将这个C加进去。例:1067H+10A0H,先做67H+A0H=107H,而107H显然超过了0FFH,

50、因此最终保存在A中的是7,而1则到了PSW中的CY位了,换言之,CY就相当于是100H。然后再做10H+10H+CY,结果是21H,所以最终的结果是2107H。,2023/10/10,78,3.4.2 减法运算指令 1、带进位的减法 SUBB A,#data SUBB A,direct SUBB A,Rn SUBB A,Ri;(A)-源-(Cy)(A)没有不带借位的减法,所以在进行低位减法以前要使用 CLR C 指令将借位标志清0.2、减1指令 DEC A DEC Rn DEC direct DEC Ri;源-1源,2023/10/10,79,3.4.3 乘法指令 MUL AB(A)(B)(A

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号