单片微机原理与应用part_03-1课件_第1页
单片微机原理与应用part_03-1课件_第2页
单片微机原理与应用part_03-1课件_第3页
单片微机原理与应用part_03-1课件_第4页
单片微机原理与应用part_03-1课件_第5页
已阅读5页,还剩90页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、“单片机原理与应用”课程 第 3 章 51系列单片机的指令系统 和程序设计方法2022/7/211第3章:指令系统和程序设计方法 3.1 指令系统概述3.2 寻址方式3.3 数据传送类指令3.4 算术运算类指令 3.8 汇编语言程序设计3.5 逻辑运算类指令3.6 位操作类指令3.7 控制转移类指令2022/7/212【基本知识点与要求】 理解指令的寻址方式及相应的寻址空间。(2) 正确理解51系列单片机的111条基本指令的含义,熟练掌 握其应用方法。(3) 了解机器语言、汇编语言和高级语言的特点,汇编语言程序设计步骤。(4) 掌握汇编语言的基本格式,熟练掌握汇编语言程序设计思想和设计方法。(

2、5) 理解子程序的特点,掌握子程序的设计方法和设计中应注意的问题。 【重点与难点】 重点是指令的寻址方式及相应的寻址空间、指令系统、子程序设计、汇编语言程序设计思想和设计方法。难点是寄存器间接寻址、相对寻址、变址寻址和位寻址,汇编语言程序设计思想和设计方法。第3章:指令系统和程序设计方法 2022/7/2133.1 指令概述3.1.1 51系列单片机指令分类 指令:计算机能够识别和执行、用于控制各种功能部件完成某一特定动作的命令。 指令系统:所有指令的集合构成了该类计算机的指令系统。 这里讲的是汇编语言指令,即以英文名称或者缩写形式作为助记符(帮助记忆的符号)。5l系列单片机共有111条指令,

3、可有下列三种分类。 1. 按指令功能可分成如下五类(1)数据传送类指令(29条):内部8位数据传送指令15条,内部16位数据传送指令1条,外部数据传送指令4条,交换和查表指令9条。2022/7/214 (2)算术传送类指令(24条):加法指令(包括BCD码调整指令1条)14条,减法指令8条,乘/除法指令各1条。3.1 指令概述 (3)逻辑运算类指令(24条):逻辑运算指令20条,循环移位指令4条。 (4)位操作类指令(17条):位传送指令2条,位置位、位清零和位取反6条,位运算指令4条,位转移指令3条,判CY标志指令2条。 (5)控制转移类指令(17条):无条件转移指令4条,条件转移指令8条,

4、调用和返回指令5条。 2. 按指令执行所需要的时间可分为以下三类 (1)单周期指令(64条) (2)双周期指令(45条) (3)四周期指令(2条)2022/7/2153.1 指令概述3. 按指令所占的字节数可分为以下三类 (1)单字节指令(49条) (2)双字节指令(46条) (3)三字节指令(16条)3.1.2 指令格式 1. 指令格式 标号: 操作码 目的操作数 ,源操作数 ;注释 (1)汇编语言语句由标号、操作码、操作数和注释4部分组成。其中,标号和注释部分可以没有,某些指令也可以没有操作数。 (2)标号位于语句的开始,由18个ASCII字符组成,第一个字符必须是字母。标号不能使用系统中

5、已经定义的助记符、伪指令及其它标号。标号的后面必须加冒号,标号与冒号之间不能有空格,冒号与操作码之间可以有空格。2022/7/2163.1 指令概述(3)操作码是用英文缩写的指令功能助记符。它确定了本条指令完成什么样的操作功能,不能缺少。(4)操作数在操作码之后,用空格分开。操作数是指参加操作的对象或者对象存放的地址,可以是数据,可以是地址,也可以没有。指令中有多个操作数时,操作数之间用逗号分开。源操作数,目的操作数。(5)注释在语句的最后,以“;”开始,是说明性的文字,与语句的具体功能无关,但是能增加程序的可阅读性,便于程序的调试与交流。注释内容不参与程序的汇编。 2. 指令中数的表示 十进

6、制数以D结尾或者省略;十六进制以H结尾,如果数据以AF开头,其前必须加数字0,如0FFH;字符串用“”括起来。2022/7/2173.1.3 指令中常用缩写符号的意义3.1 指令概述(1)#data:8位立即数。(2)#data16:16位立即数。(3)Rn:工作寄存器R0R7,其中n=07。(4)Ri:工作寄存器,i=0或1。(5):间接地址符号。Ri,寄存器Ri间接寻址。(6)direct:8位直接地址,可以是特殊功能寄存器SFR的地址或内部数据存储器单元地址。(7)addr11:11位目的地址。用于AJMP和ACALL指令,均在2KB地址范围内转移或调用。(8)addr16:16位目的地

7、址。用于LJMP和LCALL指令,可在64KB地址范围内转移或调用。2022/7/2183.1 指令概述 (9)rel:有符号的8位偏移地址,主要用于所有的条件转移指令和SJMP指令。其范围是相对于下一条指令的第一字节地址,再偏移-128+127字节。(10)bit:位地址。片内RAM的可寻址位和专用寄存器的可寻址位。(11)/ : 位操作数的前缀,表示对该位操作数取反,如 /bit。(12):当前指令存放的地址。(13)(X):表示由X所指定的某寄存器或某单元中的内容。(14)(X):表示由X间接寻址单元中的内容。(15)B:通用寄存器,常用于乘法MUL和除法DIV指令。(16)C:进位标志

8、位或者布尔处理器中的累加器。(17):表示指令的操作结果是将箭头右边的内容传送到左边。2022/7/2193.2.1 立即寻址 3.2 寻址方式 寻址方式:一条指令的运行需要寻找相应操作数或者从操作数所在地址寻找到本指令有关的操作数。 计算机指令系统中的操作数以不同的方式给出,其相应的寻址方式也就有多种。注意通常均以源操作数来介绍寻址方式的。 51系列单片机的指令系统有立即寻址,直接寻址,寄存器寻址,间接寻址,变址寻址,相对寻址,位寻址等七种寻址方式。 立即寻址是指令中直接给出操作数的寻址方式。立即操作数用前面加有#号的8位或16位数来表示。立即数是指令代码的一部分,只能作源操作数。 该寻址方

9、式用于对特殊功能寄存器和指定的存储单元赋初值。2022/7/2110 例如:MOV A,#60H ; (A) 60H MOV DPTR,#3400H ;(DPTR) 3400H MOV 30H, #40H ; (30H)单元 40H 上述三条指令执行后,累加器A中数据为立即数据60H,DPTR寄存器中数据为3400H,30H单元中数据为立即数40H。3.2.2 直接寻址 直接寻址:指令中直接给出操作数所在的存储单元的地址号的寻址方式。可以是操作数所在的字节地址或位地址,也可以直接使用由符号名称所表示的地址,即符号地址。 例如: MOV A,40H ; (A)(40H) 该指令的功能是把内部数据

10、存储器RAM 40H单元的内容送到累加器A。指令直接给出了源操作数的地址40H。3.2 寻址方式2022/7/211151系列单片机中,直接寻址可访问三种地址空间为:(1) 特殊功能寄存器SFR:直接寻址是唯一的访问形式;(2) 内部数据RAM低128个字节单元(地址范围00H7FH);(3) 221个位地址空间。3.2 寻址方式3.2.3 寄存器寻址 寄存器寻址:就是操作数存放于寄存器中(Rn、ACC、B、DPTR、CY)的寻址方式。 例如: MOV A,R7 ;(A)(R7) 其功能是把寄存器R7内的操作数传送到累加器A中。由于操作数在R7中,因此在指令中指定了R7,就能从中取得操作数。2

11、022/7/21123.2 寻址方式3.2.4 寄存器间接寻址 寄存器间接寻址:由指令指出某个寄存器的内容作为操作数地址的寻址方法,简称寄存器间址。 寄存器间接寻址使用所选定寄存器区中的R0和R1作为地址指针,来寻址片内数据存储器RAM(00FFH)的256个单元,但它不能访问特殊功能寄存器SFR。 寄存器间接寻址也适用于访问外部数据存储器,此时,用R0、 R1或DPTR作为地址指针。 为了区别于寄存器寻址,在寄存器间接寻址中的寄存器名前用间址符号“”。 例如: MOV A,R0 ; (A)(R0) MOV A,R0 ; (A)(R0)2022/7/21133.2 寻址方式 第一条指令是寄存器

12、寻址,R0中为操作数,指令码为E8H;指令执行后累加器A中为30H, 第二条指令是寄存器间址,R0中为操作数地址,不是操作数,指令码为E6H。指令执行后累加器A中为操作数20H。2022/7/2114 3.2.5 变址寻址 变址寻址: 就是基址寄存器(DPTR和PC)与变址寄存器(A)的内容相加,作为操作数的地址。 实现对程序存储器的访问。由于程序存储器通常是只读的,因此变址寻址只有读操作而无写操作,指令助记符采用MOVC。 3.2 寻址方式 5l系列单片机的变址寻址指令有3条: MOVC A,A+DPTR ;(A)(A)+(DPTR) MOVC A,A+PC ;(A)(A)+(PC) JMP

13、 A+DPTR ;(PC)(A)+(DPTR)2022/7/21153.2 寻址方式 3.2.6 相对寻址 相对寻址: 以当前程序计数器PC的内容为基础,加上指令给出的1个字节补码(偏移量)形成新的PC值的寻址方式。 (1)当前PC值是指相对转移指令所在地址(一般称为源地址)加上转移指令字节数。即当前PC值= 源地址 + 转移指令字节数,也就是相对转移指令的下一条指令所在的地址。 例如: JZ rel 是一条累加器A为零就转移的双字节指令。若该指令地址(源地址)为2050H,则执行该指令时的当前PC值即为2052H。 2022/7/21163.2 寻址方式 (2)偏移量rel是有符号的单字节数

14、,以补码表示,其相对值的范围是-128+127,负数表示从当前地址向地址减小的方向转移,正数表示从当前地址向地址增大的方向转移。所以,相对转移指令满足条件后,转移的地址(一般称为目的地址)应为:目的地址= 当前PC值+rel=源地址+ 转移指令字节数 + rel 例如: 若指令JZ 08H 和JZ 0F4H 存放在2050H开始的程序存储器单元。则累加器A为零的条件满足后,从源地址(2050H)分别转移10个单元。其相对寻址示意如图3-3(a)、(b)所示。这两条指令均为双字节指令,机器代码分别为:60H、08H和60H、F4H。 2022/7/2117(a) 指令JZ 08H寻址示意图; (

15、b) 指令JZ 0F4H寻址示意图 图3-3 相对寻址示意图3.2 寻址方式2022/7/21183.2 寻址方式 3.2.7 位寻址 位寻址:即指令中直接给出位地址。 51系列单片机具有位寻址功能,可以对内部数据存储器RAM中的位寻址区的128位和部分特殊寄存器SFR中的相关位进行寻址,并且位操作指令可对可寻址的每一位进行传送及逻辑操作。【注意】位寻址只能对有位地址的单元作位寻址操作。位寻址其实是一种直接寻址方式,不过其地址是位地址,只能用在位操作指令之中。 例如: SETB PSW.3 ;(PSW.3)1 该指令的功能是将程序状态字PSW中的第3位(RS0)置1。2022/7/21193.

16、2 寻址方式 51系列单片机的位地址有如下4种表示方法: (1)直接使用位地址。 例如 PSW寄存器位5地址为0D5H。(2)位名称表示方法(位符号名)。 例如 PSW寄存器位5是F0标志位,则可使用F0表示该位。(3)单元地址加位数的表示方法。 例如 PSW寄存器位5,表示为0D0H.5。(4)专用寄存器符号加位数的表示方法。例如 PSW寄存器的 位5,表示为PSW.5。2022/7/21203.2 数据传送类指令 数据传送指令共有29条。51单片机中的传送指令约定从右向左传送数据,把源操作数传送到目的操作数,指令执行后,源操作数不改变,目的操作数的内容修改为源操作数。交换指令也属于数据传送

17、指令,是把两个地址单元的内容相互交换。 作用:数据传送指令主要用于在单片机片内RAM和特殊功能寄存器SFR之间传送数据,也可以用于在累加器A和片外存储单元之间传送数据。 特点:数据传送类指令不影响标志位(进位标志CY、半进位标志AC和溢出标志OV),但当传送或交换数据后影响累加器A的值时,奇偶标志位P的值则按A的值重新设定。2022/7/2121 内部数据存储器RAM区是数据传送最活跃的区域,可用的指令数也最多,共有16条指令,指令操作码助记符为MOV。 指令格式: MOV 目的操作数,源操作数 功能:把源操作数的内容传给目的操作数,而源操作数的内容不变,不影响标志位。但当执行结果改变累加器A

18、的值时,会使奇偶标志P变化。3.3.1 内部RAM数据传送类指令 1. 以累加器为目的操作数的指令(4条)MOV A,Rn ;(A)(Rn),(n=07)MOV A,direct ;(A)(direct)MOV A,Ri ;(A)(Ri),(i=0、1)MOV A,data ;(A) data 2022/7/2122 这组指令的目的操作数都是累加器A,源操作数的寻址方式采用寄存器寻址、直接寻址、寄存器间接寻址和立即寻址。 3.3.1 内部RAM数据传送类指令2. 以寄存器Rn为目的操作数的指令(3条)MOV Rn,A ; (Rn) (A),(n=07) MOV Rn,direct ; (Rn)

19、 (direct),(n=07) MOV Rn,data ; (Rn) data,(n=07) 这组指令都是以工作寄存器为目的操作数,源操作数的寻址方式采用寄存器寻址、直接寻址和立即寻址。2022/7/21233. 以直接地址为目的操作数的指令(5条) MOV direct,A ;(direct)(A) MOV direct,Rn ;(direct)(Rn),(n=07) MOV directl,direct2 ;(direct1)(direct2) MOV direct,Ri ;(direct) (Ri),(i=0、1) MOV direct,data ;(direct)data 这组指令的

20、目的操作数都是直接寻址单元,源操作数采用寄存器寻址、直接寻址、寄存器间接寻址和立即寻址。3.3.1 内部RAM数据传送类指令2022/7/21243.3.1 内部RAM数据传送类指令4. 以间接地址为目的操作数的指令(3条) MOV Ri,A ;(Ri)(A) MOV Ri,direct ;(Ri)(direct) MOV Ri,data ;(Ri)data 这组指令的目的操作数都是间接寻址单元,源操作数可采用寄存器寻址、直接寻址和立即寻址方式。5. 十六位数据的传递指令(1条) MOV DPTR,data16 ;(DPTR)data16 指令功能:将16位立即数送入DPTR,高8位送入DPH

21、,低8位送入DPL。2022/7/2125 例如: MOV DPH,#35H MOV DPL,#12H就相当于执行了 MOV DPTR,#3512H。3.3.1 内部RAM数据传送类指令图3-4 内部RAM间数据传递关系 判断下列指令正、误 MOV #30H,A MOV A ,R2MOV R1,R3 MOV R1,R0 MOV R1 ,R2 MOV R1 ,R0小结与注意点 2022/7/2126【例题3-2】 若(R0)=30H,片内RAM(30H)=57H,片内RAM(40H)=7FH,试比较: MOV A,R0 和 MOV A,R0 MOV A,#40H 和 MOV A,40H 执行后的

22、结果3.3.1 内部数据传送类指令举例解:它们的执行结果为: MOV A,R0 ;(A)=30H MOV A,R0 ;(A)=57H MOV A,#40H ;(A)=40H MOV A,40H ;(A)=7FH 【例题3-5】 完成将片内RAM15H单元的内容0A7H送55H单元。解法1:MOV 55H,15H解法2:MOV R6,15H MOV 55H,R6解法3:MOV R1,15H MOV 55H,R1解法4:MOV A,15H MOV 55H,A2022/7/21273.3.1 内部数据传送类指令举例【例题3-6】 编写把30H和40H单元的内容进行交换的程序段。 解:分析,30H和4

23、0H单元中都装有数据,要想把其中的内容相交换必须寻求第三个存储单元对其中的一个数进行暂存(缓冲),若这个存储单元选为累加器A,则相应程序如下: MOV A,30H ; (A)(30H) MOV 30H,40H ; (30H)(40H) MOV 40H,A ; (40H)(A)2022/7/2128 51系列单片机中,与外部存储器RAM或I/O端口之间进行数据交换的只可以是累加器A。即所有片外RAM或者I/O端口数据传送必须通过累加器A进行。指令助记符为MOVX,其中的X表示外部(External),共计4条指令。MOVX A, Ri ;(A)(Ri) 读操作MOVX Ri, A ;(Ri)(A

24、) 写操作MOVX A,DPTR ;(A)(DPTR)读MOVX DPTR,A ;(DPTR)(A)写要点分析:(1)访问片外RAM,需要知道RAM单元的地址,在后两条指令中,地址是被直接放在DPTR中,可寻址外部RAM的64KB空间。而前两条指令,由于Ri(即R0或R1)是8位的寄存器,所以仅限于访问片外RAM的低256个单元。3.3.2 访问外部RAM数据传送指令2022/7/2129【例题3-7】 实现将外部RAM中0010H单元中的内容送入外部RAM中2000H单元中。3.3.2 访问外部RAM数据传送指令 (2)使用访问外部RAM数据传送指令时,应当首先将要读或写的地址送人DPTR或

25、Ri中,然后再用读或者写命令。 (3)也可以由P2与R0或P2与R1组成16位地址指针,寻址外部RAM的64KB空间。解:程序片段如下: MOV P2,00H MOV R0,10H MOVX A,R0 MOV DPTR,2000H MOVX DPTR,A2022/7/2130【例题3-8】 将外部存储器2000H单元的内容送入2100H单元。 解:程序如下: MOV DPTR,#2000H ; (DPTR) 2000H MOVX A,DPTR ; (A) (DPTR) MOV DPTR,#2100H ; (DPTR) 2100H MOVX DPTR,A ; (DPTR) (A) 3.3.2 访

26、问外部RAM数据传送指令2022/7/2131 这类指令共有2条,均属于变址寻址指令,因专门用于从ROM中查找数据而又称为查表指令。指令助记符为:MOVC,其中的C表示代码(Code)。指令的格式为: MOVC A,A十DPTR ;(A)(A)十(DPTR) 读操作 MOVC A,A十PC ;(PC)(PC)十1,(A)(A)十(PC)3.3.3 程序存储器向A传送数据指令 功能: 把累加器A中内容(8位无符号数)加上基址寄存器(PC,DPTR)内容,求得程序存储器某单元地址,再将该单元内容送到累加器A中。2022/7/21323.3.3 程序存储器向A传送数据指令 (1)MOVC A,A+D

27、PTR 该指令的执行结果只与指针DPTR及累加器A的内容有关,与该指令存放的地址无关。因此,表格的大小和位置可以在64KB程序存储器中任意安排,并且一个表格可以为各个程序块所共用。 (2)MOVC A, A+PC 该指令不改变特殊功能寄存器和PC的状态,只要根据A的内容就可以取出表格中的常数。但是表格只能放在该条查表指令后面的256个单元之内,表格的大小受到限制,而且表格只能被一段程序所利用。?2022/7/2133【例题3-9】 在片内20H单元存有一个09的BCD码数,用查表法获得相应的ASCII码,并将其送入21H单元。(20H)=03H)3.3.3 程序存储器向A传送数据举例 ORG

28、1000H ;指明程序在ROM中存放始地址1000HBCD_ASCl: MOV A,20H ;(A)(20H),(A)03H1002H ADD A,3 ;累加器(A)(A)+3,修正偏移量1004H MOVC A,A+PC ; PC当前值1005H1005H MOV 21H,A ;(A)+(PC)=06H+1005H=100BH1007H RET ;AROM(100BH),(A)=33H1008H TAB: DB 30H1009H DB 31H100AH DB 32H100BH DB 33H100CH DB 34H100DH DB 35H2022/7/2134 一般在采用PC作基址寄存器时,常

29、数表与MOVC指令放在一起,称为近程查表。当采用DPTR作基址寄存器时,程序如下TAB可以放在64KB程序存储器空间的任何地址上,称为远程查表,不用考虑查表指令与表格之间的距离。 ORG 1000BCD_ASC2:MOV A,20H MOV DPTR,TAB ;TAB首址送DPTR MOVC A,A+DPTR ;查表 MOV 21H,A RET TAB: DB 30H,31H,32H,33H,34H,35H, 36H,37H,38H,39H 3.3.3 程序存储器向A传送数据举例2022/7/2135数据交换指令分为两种:字节交换和半字节交换指令,共5条。1.字节交换指令(XCH,Exchan

30、ge 3条) XCH A,Rn ;(A)(Rn) XCH A,Ri ;(A)(Ri) XCH A,direct ;(A)(direct)功能: 将累加器A的内容与源操作数(Rn、direct或Ri)所指定单元的内容相互交换。3.3.4 数据交换指令2. 半字节交换指令(1条) XCHD A,Ri ;(A)30 (Ri)30功能: 将累加器A中的内容的低四位与Ri所指的片内RAM单元中的低四位互换,但它们的高四位均不变。2022/7/21363. 累加器A高低半字节交换指令(1条) SWAP A ; (A)74(A)30 【注意】 数据交换主要是在内部RAM单元与累加器A之间进行,可以保存目的操

31、作数。例如 将片内RAM 60H单元与61H单元的数据交换。不能用: XCH 60H,61H应该写成:MOV A,60H XCH A,61H MOV 60H,A3.3.4 数据交换指令功能:将累加器A的高4位与低4位内容互换,不影响标志位。MOV R0,60H MOV A,R0 XCH A, 61HMOV 61H,A ()MOV R0,#60H MOV A,R0 XCH A, 61H MOV 61H,A ( ) 2022/7/2137 片内RAM数据区中具有先进后出特点的存储区域称为堆栈,主要用于保护断点和恢复现场。堆栈操作有进栈和出栈两种操作,即压入和弹出数据。2条指令PUSH direct

32、 ;(SP)(SP)+1,(SP)(direct)POP direct ;(direct) (SP),(SP)(SP)-13.3.5 堆栈操作指令功能: (1)PUSH称为进栈指令,将指定的直接寻址单元的内容压入堆栈。先将堆栈指针SP的内容+1,指向栈顶的一个单元,然后把指令指定的直接寻址单元内容压入该单元。 (2)POP称为出栈指令,它是将当前堆栈指针SP所指示的单元内容弹出到指定的内部RAM单元中,然后再将SP减1。2022/7/21383.3.5 堆栈操作指令 【注意】 堆栈操作的特点是“先进后出”,在使用时应注意指令顺序;进栈、出栈指令只能以直接寻址方式来取得操作数,不能用累加器A或工

33、作寄存器Rn作为操作数。 指令PUSH 40H操作示意图 指令POP 30H操作示意图2022/7/2139【例题3-13】 分析以下程序的运行结果 MOV R2,05H MOV A,01H PUSH ACC ;ACC表示累加器A的直接地址 PUSH 02H ;02H表示R2的直接地址 POP ACC POP 02H解: 结果是(R2)=01H,而(A)=05H。也就是两者进行了数据交换。因此,使用堆栈时,入栈的顺序和出栈的顺序必须相反,才能保证数据被送回原位,即恢复现场。3.3.5 堆栈操作指令2022/7/2140 51系列单片机的算术运算类指令共有24条,包括加、减、乘、除4种基本算术运

34、算指令,这4种指令能对8位的无符号数进行直接运算,借助溢出标志,可对有符号数进行补码运算;借助进位标志,可实现多字节的加、减运算,同时还可对压缩的BCD码进行运算,其运算功能较强。 算术运算指令执行结果将影响标志位。但是加1和减1指令不影响进位标志(CY),辅助进位标志(AC)、溢出标志位(OV)这些标志。3.4 算术运算类指令2022/7/214151系列的加法指令分为4类,共14条。 1. 不带进位位的加法指令(ADD,Addition 4条)ADD A,Rn;(A)(A)+(Rn)ADD A,direct ;(A)(A)+(direct)ADD A,Ri ;(A)(A)+(Ri)ADD

35、A,#data;(A)(A)+ #data 功能:将两个操作数相加,结果再送回累加器中。 说明:对于无符号数相加,若CY置“1”,说明和数溢出(大于255);对于有符号数相加时,和数是否溢出(大于+127或小于-128),则可通过溢出标志OV来判断,若OV为“1”,说明和数溢出。3.4.1 加法指令2022/7/2142【例题3-14】(A)=85H,R0=20H,(20H)=0AFH,执行指令:ADD A,R0 后,求PSW各位的值。 解: 10000101 + 10101111 - 1 00110100 结果:(A)=34H;CY=1;AC=1;OV=1;P=1。 对于加法,溢出只能发生在

36、两个同符号数相加的情况。在进行有符号数的加法运算时,溢出标志OV是一个重要的编程标志,利用它可以判断两个有符号数相加和数是否溢出。3.4.1 加法指令2022/7/21432. 带进位加法指令(ADDC,Addition with Carry 4条) ADDC A,Rn ; (A) (A)+(Rn)+(CY) ADDC A,direct ; (A) (A)+(direct)+(CY) ADDC A,Ri ; (A) (A)+(Ri)+(CY) ADDC A,#data ; (A) (A)+ data+(CY) 功能:累加器A中的内容加上源操作数中的内容及进位位CY,再存入累加器A中。 说明:进

37、位位为上一次进位标志CY的内容。指令对于标志位的影响与不带进位加法指令相同。 带进位加法指令ADDC常用于完成多字节运算3.4.1 加法指令2022/7/2144【例题3-15】 试把存放在R1R2和R3R4中的两个16位数相加,结果存于R5R6中。 3.4.1 加法指令解:参考程序段如下: MOV A,R2 ;取第一个数的低8位ADD A,R4 ;两数的低8位相加MOV R6,A ;保存和的低8位MOV A,R1 ;取第一个数的高8位ADDC A,R3 ;两数的高8位相加,并把低8位相加时 ;的进位位加进来MOV R5,A ;把相加的高8位存入R5寄存器中SJMP $2022/7/2145

38、3. 增量指令(INC,Increase 5条) INC A ;(A)(A)+1 INC Rn ;(Rn)(Rn)+1 INC direct ;(direct)(direct)+1 INC Ri ;(Ri)(Ri)+1 INC DPTR ;(DPTR)(DPTR)+1 功能:将指令中指出的操作数的内容加1,第一条指令对P标志有影响,其余指令不影响任何标志位。3.4.1 加法指令 说明:原来的内容为0FFH,加1后将产生溢出,使操作数的内容变成00H,但不影响任何标志。最后一条指令是对16位数据指针寄存器DPTR加1操作,指令执行时,先对低8位指针DPL的内容加1,当产生溢出时就对高8位指针DP

39、H加1,不影响任何标志。 2022/7/21463.4.1 加法指令4. 十进制调整指令(Decimal Adjust for Addition 1条) DA A 功能: 若(A30)9或AC=1 ,则(A30)(A30)6; 若(A74) 9或Cy=1 ,则(A74) (A74)6。注意:(1)这条指令必须紧跟在ADD或ADDC指令之后,对加法指令的结果进行调整,且这里的ADD或ADDC的操作是对压缩的BCD码表示的数进行运算。(2)DA指令不影响溢出标志。2022/7/2147例如: 两个十进制数“65”与“58”相加,结果应为BCD码“123”,程序如下:MOV A,#65H ADD A

40、,#58H DA A结果:(A)= 23H (CY)= 13.4.1 加法指令 6 5 0110 0101 5 8 0101 1000 - + 6 6 0110 0110 18 19 10010 0011 1 2 32022/7/21481. 带借位减法指令(SUBB, Subtract with Borrow 4条) SUBB A ,#data ;(A)(A)dataCy SUBB A ,Rn ;(A)(A)(Rn)Cy SUBB A ,direct ;(A)(A)(direct)Cy SUBB A ,Ri ;(A)(A)(Ri)Cy 51系列单片机的减法指令分为2类,共8条。 3.4.2

41、减法指令功能:累加器A中的内容减去源操作数中的内容及进位位Cy,差值存入累加器A中。2. 减1指令(DEC, Decrease 4条) DEC A ;(A)(A)1 DEC Rn ;(Rn)(Rn)1 DEC direct ;(direct)(direct)1 DEC Ri ;(Ri)(Ri)12022/7/2149功能:使指令中源地址所指RAM单元中的内容减1。第一条减1指令对奇偶标志位有影响,其余减1指令不影响PSW标志位。 【例题3-17】 分析执行程序指令SUBB A ,#64H的结果,设(A)=49H,(CY)=1。3.4.2 减法指令 解: 分析, 0100 1001(49H) 0

42、110 0100(64H) -) 1 1110 0100 结果:(A)=E4H,(CY)=1,(P)=0, (AC)=0,(OV)=02022/7/2150 功能:把累加器A和寄存器B中的8位无符号整数相乘,乘积为16位,乘积的低8位存于A中,高8位存于B中。指令执行后对PSW的影响如下:(1)若乘积大于255,OV=1;否则OV=0;(2)Cy总是为“0”。(3)P受累加器A中的内容影响。乘法指令 (MUL,Multiplication)MULAB ;(B)(A)(A)(B)3.4.3 乘法指令2022/7/21513.4.3 乘法指令 【例题3-20】设有任意一个三字节数EFL作为被乘数,

43、有一单字节数N作为乘数,试编程求其积,并将结果存在20H23H单元中(由低字节到高字节顺序存放)。解: E F L ) N LN高(R1) LN低(R0) FN高(R3) FN低 (R2) EN高(R5) EN低(R4) 23H 22H 21H 20H 2022/7/2152 功能:把累加器A中的8位无符号整数除以寄存器B中8位无符号整数,商放在A中,余数放在B中。指令执行对PSW的影响如下: (1)Cy、OV,清“0” (2)若(B)=0,OV=1。 (3)P随累加器A 中的内容变化。 除法指令(DIV, Division) DIV AB ;(A)(A/B)的商,(B)(A/B)的余数)3.

44、4.4 除法指令2022/7/2153【例题3-21】 试编写程序,要求:把A中的二进制数转换为3位BCD码。百位放在20H,十位、个位放在21H中。3.4.4 除法指令 解:编程要点分析: (1)将要转换的二进制数除以100,商即为百位数,余数再除以10,商和余数分别为十位和个位数。 (2)通过SWAP、ADD指令组成一个压缩的BCD数,其中十位数放在A7-4,个位数放在A3-0。MOV B,#100 ;置除数为100DIV AB ;除以100MOV 20H,A ;商放入20H MOV A,B ;余数放AMOV B,#10 ;置除数为10 DIV AB ;除以10,个位数放入 ;B,十位放入

45、ASWAP A ;十位数放入A74ADD A,B ;组合BCD码MOV 21H,A ;存十位和个位数 SJMP $2022/7/2154乘除法指令说明: (1)乘法指令和除法指令需要4个机器周期,是指令系统中执行时间最长的指令。 (2)进行8位数乘除法运算时,必须将相应的被乘数和乘数、被除数和除数分别放入累加器A和寄存器B中,才能进行计算。 (3)在51单片机中,乘法和除法指令仅适用于8位数乘法和除法运算。如果被乘数、被除数和除数中有一个是16位数时,不能直接使用这两条指令。 3.4.4 除法指令2022/7/2155 逻辑操作指令用于对两个操作数进行逻辑乘、逻辑加、逻辑取反和异或等操作。循环

46、移位指令可以对累加器A中的数进行循环移位。 逻辑运算指令共24条,包括与、或、异或、清零、求反和左、右移位等逻辑指令。按操作数也可分为单、双操作数两种。逻辑运算指令涉及寄存器A时,影响P,但对AC、OV及CY没有影响。3.5 逻辑运算类指令2022/7/21563.5.1 累加器A的逻辑运算指令 A操作指令共有6条,可以实现将累加器A中的内容进行取反,清零,循环左、右移位、带Cy循环左、右移位。1. 累加器清“0”( CLR, Clear 1条) CLR A ; (A)02. 累加器按位取反指令(CPL,Complment 1条) CPL A ;(A) (/A)【注意】 逻辑运算是按位进行的,

47、累加器的按位取反实际上是逻辑非运算;当需要只改变字节数据的某几位,而其余位不变时,不能使用直接传送方法,只能通过逻辑运算完成。3. 循环移位指令(4条) 前两条属于不带Cy标志位的循环移位指令,后面两条指令为带CY标志位的左移和右移。2022/7/21573.5.1 累加器A的逻辑运算指令RL A ;RL-Rotate Left,将A的内容循环左移1位RR A ;RR-Rotate Right,循环右移1位RLC A ;RLC-Rotate Left with Carry,带Cy循环左移1位RRC A ;RRC-Rotate Right with Carry带Cy循环右移1位 【注意】 执行R

48、L指令1次,相当于把原内容乘以2;执行RR指令1次,相当于把原内容除以2。2022/7/21583.5.1 累加器A的逻辑运算指令【例题3-22】 编程实现16位数的算术左移。设16位数存放在内部RAM 40H、41H 单元,低位在前。算数左移是指将操作数整体左移一位,最低位补充0。相当于完成对16位数的乘2操作。解:需要带CY的循环左移,在第一次移位之前CY必须清0。程序如下: CLR C ;CY清0 MOV A,40H ;取操作数低8位送A RLC A ;低8位左移一位 MOV 40H,A ;送回原单元保存 MOV A ,41H ;指向高8位 RLC A ;高8位左移 MOV 41H,A

49、;送回41H单元保存2022/7/2159 两个操作数的逻辑运算指令共有18条,分为逻辑与指令、逻辑或指令和逻辑异或指令。 1. 逻辑“与”操作指令(And on Logical 6条) ANL A,Rn ;(A) (A)(Rn) ANL A,direct ;(A) (A)(direct) ANL A,Ri ;(A) (A)(Ri) ANL A,#data ;(A) (A) data ANL direct,A ;(direct) (direct)(A) ANL direct, #data ;(direct) (direct) data3.5.2 两个操作数的逻辑运算指令 功能:将两个操作数的内

50、容按位进行逻辑与操作,并将结果送回目的操作数的单元中。 利用“与”操作可屏蔽一些位或影响标志位。例如要将一个字节中的高4位清0可用0FH进行“与”操作。2022/7/21602. 逻辑“或”操作指令( Or on Logical 6条) ORL A,Rn ;(A) (A)(Rn) ORL A,direct ;(A) (A)(direct) ORL A,Ri ;(A) (A)(Ri) ORL A,#data ;(A) (A)data ORL direct,A ;(direct) (direct)(A) ORL direct,#data ;(direct) (direct) data 3.5.2

51、两个操作数的逻辑运算指令功能:将两个操作数的内容按位进行逻辑或操作,并将结果送回目的操作数的单元中。 利用“或”操作可进行数位的组合或置位。例如要把数字转换成ASCII码,可用30H进行或操作。2022/7/2161 【例题3-23】 在30H与31H单元有两个非压缩BCD码(高位在30H单元),编程将它们合并到30H单元。解:程序如下:MOV A,30HSWAP A ;(A)74 (30H)30ORL A,31H ;合并为压缩BCD码MOV 30H ,A ;回存到30H单元 3. 逻辑异或指令( Exclusive or on Logical 6条) XRL A,Rn ;(A) (A)(Rn

52、) XRL A,direct ;(A) (A) (direct) XRL A,Ri ;(A) (A) (Ri) XRL A,#data ;(A) (A) data XRL direct,A ;(direct) (direct) (A) XRL direct,#data ;(direct) (direct) data3.5.2 两个操作数的逻辑运算指令2022/7/2162功能:将两个操作数的内容按位进行逻辑“异或”操作,并将结果送回目的操作数。 【注意】逻辑“异或”指令常用对某些位进行取反操作,其它位保持不变。若某位需要取反则该位与“1”相异或;保留某位则该位与“0”相“异或”。利用“异或”指

53、令对某单元自身“异或”,可以实现清零操作。【例题3-26】 编写程序完成利用移位指令实现累加器A的内容乘6解: CLR C RLC A ;左移一位,相当于乘2 MOV R0,A CLR C RLC A ;再乘2,即乘4 ADD A,R0 ;乘2 + 乘4 = 乘63.5.2 两个操作数的逻辑运算指令2022/7/2163【例题3-27】 将累加器A中压缩BCD码拆分为两个字节,形成非压缩BCD码,放入30H和31H单元中。解: MOV 40H,A ;保存A中的内容 ANL A,#00001111B ;清高4位,保留低4位 MOV 30H,A MOV A,40H ;取原数据 ANL A,#111

54、10000B ;保留高4位,清低4位 SWAP A MOV 31H,A 3.5.2 两个操作数的逻辑运算指令2022/7/21643.6 位操作类指令 位操作指令又称为布尔指令。51系列单片机的硬件结构除了8位CPU外,还有一个布尔处理机(也称位处理机),可以进行位寻址。位操作指令可以分为位传送指令,位修改及位逻辑操作等等。该类指令一般不影响标志位。 寻址内部RAM中的范围为:内部20H2FH(00H0FFH)中的128个可寻址位和SFR中的可寻址位。2022/7/21653.6.1 位变量传送指令 位变量传送指令有互逆的2条,可实现进位位C与某直接寻址位bit间内容的传送。 MOV C,bi

55、t ;(CY) (bit) MOV bit,C ;(bit) (CY) 功能:把源操作数的布尔变量送到目的操作数指定的位地址单元。其中一个操作数必须为进位标志CY,另一个操作数可以是任何可直接寻址位。【例3-28】 编写程序将20H.0的内容传送到22H.0。解:程序如下:MOV C,20H.0MOV 22H.0,C也可写成:MOV C,00H ;(Cy)20H.0MOV 10H,C ;22H.0(CY)注意:00H和10H分别为20H.0和22H.0位地址,非字节地址。2022/7/21663.6.2 位变量修改指令 位变量修改指令共有6条,分别是对位进行清0、置1和取反指令,不影响其它标志

56、。 CLR C ;(CY) 0 CLR bit ;(bit) 0 CPL C ;(CY) (/CY) 3.6.3 位变量逻辑操作指令 位变量逻辑操作指令包括:位变量逻辑“与”和逻辑“或”,共有4条指令。 CPL bit ;(bit) (/bit) SETB C ;(CY) 1 SETB bit ;(bit) 1 ANL C,bit ;(Cy)(Cy)(bit) ANL C,/bit ;(Cy)(Cy)(/bit) ORL C,bit ;(Cy)(Cy)(bit) ORL C,/bit ;(Cy)(Cy)(/bit) 注意:位变量逻辑运算中无逻辑异或(XRL)。2022/7/21673.6 位操

57、作类指令举例【例题3-29】 编写程序段满足只在P1.0为1、ACC.7为1和OV为0时,置位P3.1的逻辑控制。(其电路如图所示)。&P3.11P1.0A.7OV解:程序如下: MOV C,P1.0 ANL C,ACC.7 ANL C,/OV MOV P3.1,C该例说明:通过软件编程可以实现硬件电路的逻辑功能,软件可以代替硬件。2022/7/21683.7 控制转移类指令 转移类指令的共同特点是可以改变程序执行的顺序,使CPU转移到另一处执行程序,或者是继续顺序地执行程序。无论是哪一类指令,执行后都将改变程序计数器PC的值。 转移类指令分为四类:无条件转移、条件转移、调用指令及返回指令,共

58、计有21条指令,另外还有一条NOP指令。除NOP指令执行时间为一个机器周期外,其它转移指令的执行时间都是两个机器周期。2022/7/21693.7.1 无条件转移指令无条件转移指令有4条,执行该指令后程序的执行必须转移。绝对转移指令 (Absolute Jump)AJMP addr11 ;(PC) (PC)2,(PC)100 addr11 这是2KB范围内的无条件转移指令,执行该指令时,先将PC的内容加2,然后将addr11送入PC10PC0,而PC15PC11保持不变。需要注意的是,由于AJMP是双字节指令,当程序转移时PC的内容加2,因此转移的目标地址应与AJMP下相邻指令第一字节地址在同

59、一双字节范围。本指令不影响标志位。其指令代码格式为: A10 A9 A8 0 0 0 0 1 A7 A6 A5 A4 A3 A2 A1 A0 2022/7/21703.7.1 无条件转移指令2. 相对转移指令 (Short Jump) SJMP rel ; (PC) (PC)+2+rel转移范围为当前PC值的128+127范围内,共256个单元。 若偏移量rel取值为FEH(2的补码),则目标地址等于源地址,相当于动态停机,程序终止在这条指令上,停机指令在调试程序时很有用。 51系列单片机没有专用的停机指令,若要求动态停机可用SJMP指令来实现: HERE:SJMP HERE; 动态停机 或写

60、成 HERE:SJMP $;“$”表示本指令首字节所在单元的地址,使用它可省略标号。 2022/7/21713.7.1 无条件转移指令3. 长转移指令 (Long Jump) LJMP addr16 ;(PC) addr16 执行该指令时,将16位目标地址addr16装入PC,程序无条件转向指定的目标地址。转移指令的目标地址可在64KB程序存储器地址空间的任何地方,不影响任何标志。4. 间接转移指令(散转指令) JMP A+DPTR ;(PC) (A)+(DPTR)功能: 把累加器A的8位无符号数与DPTR的16位数相加,其和作为下一条指令的地址送入PC,不影响标志。移,转移地址可以在程序运行

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论