教学材料《单片机》-第2章_第1页
教学材料《单片机》-第2章_第2页
教学材料《单片机》-第2章_第3页
教学材料《单片机》-第2章_第4页
教学材料《单片机》-第2章_第5页
已阅读5页,还剩85页未读, 继续免费阅读

下载本文档

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

文档简介

2.1MCS-51单片机指令概述指令是使计算机内部执行一定的动作的一种控制命令,由构成计算机的电子器件特性所决定。一台计算机所能识别、执行的指令的集合就是它的指令系统,不同类型的CPU有不同的指令系统。计算机只能识别二进制代码,因此可以用二进制代码来描述指令功能,这样的语言称之为机器语言。机器语言是计算机唯一能识别和执行的指令,由于机器语言不便被人们识别、记忆、理解和使用,为了方便书写和记忆,人们采用助记符来进行控制命令的描述,这样的系统称为汇编语言。计算机的指令系统一般都是利用汇编语言描述的,汇编语言是由计算机硬件设计所决定的,不同的指令系统没有通用性。2.1MCS-51单片机指令概述返回下一页MCS-51单片机指令系统具有功能强、指令短、执行快等特点,共有111条指令。从功能上可划分成数据传送、算术操作、逻辑操作、程序转移、位操作五大类;从指令字节上可以分为单字节指令(49条)、双字节指令(46条)和最长的三字节指令(只有16条);从执行时间上可分成单机器周期指令(64条)、双机器周期指令(45条)和乘、除法两条4个机器周期的指令。可见,MCS-51单片机指令系统在存储空间和执行时间方面具有较高的效率。返回下一页上一页2.1MCS-51单片机指令概述2.1.1MCS-51单片机汇编语言指令格式指令的表示方式称为指令格式,它规定了指令的长度和内部信息的安排。MCS-51单片机完整的指令格式如下:[标号:]操作码[操作数][,操作数][;注释]其中:[]项是可选项,下面分别做简要介绍。

(1)标号:指令的符号地址。其要求为:①用于一段功能程序的识别标记或控制转移地址;②指令前的标号代表该指令的地址,是用符号表示的地址;③一般用英文字母和数字组成;④标号必须用冒号“:”与操作码分隔。

返回下一页上一页2.1MCS-51单片机指令概述(2)操作码:又称助记符,它是由英文缩写构成,规定了指令的操作性质,是指令的核心部分。(3)操作数:参与操作的数据或数据地址。操作数有以下特点:①操作数可以是数据,也可以是数据的地址、数据地址的地址或操作数的其他信息;②操作数可分为目的操作数和源操作数;③操作数可用二进制数、十进制数或十六进制数表示;④操作数的个数可以是0-3个;⑤操作数与操作码之间用空格分隔,操作数与操作数之间用逗号“,”分隔。(4)注释:注释也是指令语句的可选项,它是为增加程序的可读性而设置的,是针对某指令而添加的说明性文字,不产生可执行的目标代码。返回下一页上一页2.1MCS-51单片机指令概述2.1.2指令中的常用符号

MCS-51单片机的指令系统中定义了一些常用的符号,这些符号本身有其特定的含义,它们或用于操作数,或用于指令注释。使用这些符号,不仅增加了指令形式的规范性,也使得指令更加便于理解和记忆。下面列出这些常用的符号及其意义。

(1)#:立即数符。#data:8位立即数;#data16:16位立即数。

(2)direct:8位直接地址,代表内RAMOOH-7FH或SFR的80H-FFHo(3)@:间接寻址符。在间接寻址方式中,表示间接寻址寄存器指针的前缀标志,如@Ri,@DPTR,@A+PC,@A+DPTRo(4)addr11:11位目的地址。主要用于ACALL和AJMP指令中。

返回下一页上一页2.1MCS-51单片机指令概述(5)addr16:16位目的地址。主要用于WALL和Limp指令中。

(6)rel:带符号的8位偏移地址。主要用于相对转移指令,以形成转移的目的地址,其范围是相对于下一条指令第1字节地址的一128^+127个字节。

(7)bit:位地址。代表片内RAM中的可寻址位OOH-7FH及SFR中的可寻址位。

(8)Rn(n=0-7):表示当前工作寄存器RO-R7中的任一个寄存器。

(9)Ri(i=0或1):表示通用寄存器组中用于间接寻址的两个寄存器RO,Rlo

返回下一页上一页2.1MCS-51单片机指令概述(10)A(或ACC),B:表示累加器、寄存器。(A是寄存器方式,ACC是直接方式的累加器)。

(11)C:表示PSW中的进位标志位CY。(12)$:表示当前的指令地址。

(13)/:在位操作指令中,表示对该位先求反后再参与操作。(14)(X):表示由X所指定的某寄存器或某单元中的内容。

(15)((X)):表示由X间接寻址单元中的内容。

(16)~:表示指令的操作结果是将箭头右边的内容传送到左边。

(17)~:表示指令的操作结果是将箭头左边的内容传送到右边。

(18)^、V、:表示逻辑与、或、异或。返回上一页2.1MCS-51单片机指令概述

计算机中说明操作数所在地址的方法称为指令的寻址方式。计算机执行程序的过程实际上是在不断寻找操作数并进行操作的过程。对于不同的计算机,它的寻址方式在设计时已经确定,其寻址方式越多,计算机的灵活性越强,指令系统的功能也就越强。

MCS-51单片机的指令系统有7种寻址方式,分别为立即寻址、直接寻址、寄存器寻址、寄存器间接寻址、变址寻址、相对寻址和位寻址。返回下一页2.2MCS-51单片机的寻址方式2.2.1立即寻址将参与操作的数据直接写在指令中,这种寻址方式称为立即寻址。立即寻址方式特点是第二操作数(源操作数)为8位或16位常数。立即数通常使用#data或#datal6表示,在立即数前面加“#”标志(正因为如此,该操作数被称为“立即数”,并把这一寻址方式形象地称为“立即寻址,’)。例如,对指令“MOVA,#11H",该指令的机器码为“74H11H",指令在程序存储器中存放的位置及执行结果如图2.2-1所示。返回下一页上一页2.2MCS-51单片机的寻址方式在使用本指令时要注意,只有源操作数能使用立即寻址方式,此外,作为源操作数的立即数的长度必须小于或等于目的操作数的长度。例如,"MOVA,#1001H”是错误的,因为累加器A的字长为8位,无法装入16位的二进制数据,这个指令在汇编时会出现错误。2.2.2直接寻址将操作数的地址存放在指令中,这种寻址方式称为直接寻址。直接寻址的特点是指令中含有操作数的地址。该地址给出了参与操作的数据所在的存储单元地址。计算机执行它们时便可根据直接地址找到所需要的操作数。直接寻址方式没有“#”标志,该地址数据可以是8位的,也可以是16位的。例如,指令“MOVA,11H",已知11H单元的内容为30H。返回下一页上一页2.2MCS-51单片机的寻址方式该指令的机器码为,“OESH11H”,指令在存储器中存放的位置及执行结果如图2.2-2所示。直接寻址方式的寻址范围为ROM、片内RAM区和SFRo2.2.3寄存器寻址操作数存放在MCS-51单片机内部的某个工作寄存器Rn(RO~R7)或部分专用寄存器中,这种寻址方式称为寄存器寻址。寄存器寻址的特点是以一个寄存器的内容作为操作数。存放操作数的寄存器在指令代码中不占据单独的一个字节,而是嵌人(隐含)到操作码字节中。这种寻址方式,可以适用于源操作数,也可以适用于目的操作数。返回下一页上一页2.2MCS-51单片机的寻址方式寄存器寻址方式的寻址范围包括四组通用寄存器Rn(RO^}R7)和部分专用寄存器(A,B,DPTR)。例如,执行指令“MOVA,R3",设当前工作寄存器为第一组,R3中存放的数据为02H,该指令执行过程如图2.2-3所示,指令执行完后,(A)_(R3)=02Ho返回下一页上一页2.2MCS-51单片机的寻址方式2.2.4寄存器间接寻址指令中的寄存器中存放的是操作数据的地址,这种寻址方式称为寄存器间接寻址,简称为寄存器间址。寄存器间接寻址是一种二次寻找操作数地址的寻址方式,先从指令中的寄存器找到其中存放的数,然后用找到的这个数再做地址从而找到真正的操作数。寄存器间接寻址的标志是寄存器前边必须加前缀符号“@”。寄存器间址的寻址范围:内部RAM低128B(只能使用R。或R1作间址寄存器)和外部RAM的所有区间;对于外部RAM低256单元的访问,除可以使用DPTR外,还可以使用R。或R1作间址寄存器。注:寄存器间址不能用于寻址特殊功能寄存器SFR。返回下一页上一页2.2MCS-51单片机的寻址方式例如,"MOVA,@R0",其中设(RO)=20H,(20H)=lOH,该指令的执行过程如图2.2-4所示。指令执行时,首先由操作码找到RO,再取出R。中存放的操作数20H,然后以20H做地址,取出20H单元存放的操作数lOH并存入累加器A,指令执行完后(A)=((R0))=(20H)=lOH。操作数存放在变址寄存器(累加器A)和基址寄存器(DPTR或PC>相加形成的16位地址单元中,这种寻址方式称为基址加变址寄存器间接寻址,简称为变址寻址。在执行变址寻址指令时,MCS-51单片机先把基地址(DPTR或PC的内容)和地址偏移量(A的内容)相加,以形成操作数地址,再由操作数地址找到操作数,并完成相应的操作。返回下一页上一页2.2MCS-51单片机的寻址方式变址寻址的指令操作码中隐含作为基址寄存器用的DPTR(或PC>和作为变址用的累加器A,因此变址寻址方式是单字节指令。变址寻址只能对程序存储器ROM进行寻址,主要用于查表性质的访问。2.2.6相对寻址将程序计数器PC的当前值与指令给出的偏移量(rel)相加,形成新的转移目标地址,此种方式称为相对寻址方式。相对寻址方式是为实现程序的相对转移而设计的,为相对转移指令所使用,其指令码中含有相对地址偏移量,能生成浮动代码。如返回下一页上一页2.2MCS-51单片机的寻址方式相对转移指令的目的地址=指令地址+指令字节数+偏移量相对寻址方式只能对程序存储器ROM进行寻址。相对地址偏移量((rel)是一个带符号的8位二进制补码,其取值范围为一128^+127(以PC为中间的256个字节范围),在实际编程中rel可以用标号来代替,系统会自动计算偏移量。返回下一页上一页2.2MCS-51单片机的寻址方式2.2.7位寻址操作数是一个可单独寻址的位地址,这种寻址方式称为位寻址方式。位寻址是直接寻址方式的一种,其特点是对存储器中可位寻址的某一位进行操作。可位寻址的位地址的表示形式如下。其中:OOH是片内RAM中20H地址单元的第0位。(2)字节地址加位序号的形式。如其中:20H.。是片内RAM中20H地址单元的第0位。(3)位的符号地址(位名称)的形式。对于部分特殊功能寄存器,其各位均有一个特定的名字,所以可以用它们的位名称来访问该位,如其中:P是PSW的第0位,C是PSW的第7位。返回下一页上一页2.2MCS-51单片机的寻址方式(4)字节符号地址(字节名称)加位序号的形式。对于部分特殊功能寄存器(如状态标志寄存器PSW),还可以用其字节名称加位序号形式来访问某一位。如:其中:PSW.6表示该位是PSW的第6位。

(5)寻址范围:片内RAM低128B中位寻址区、部分SFR(其中有83位可以位寻址)。以上是MCS-51单片机的7种寻址方式,在使用的时候要注意:(1)指令中的源操作数可以使用上面7种寻址方式中的任何一种,但目的操作数只能是寄存器寻址、寄存器间址、直接寻址和位寻址这4种中的任意一种。(2)片内SFR区只能采用直接寻址方式。

(3)片外RAM区只能采用寄存器寻址、寄存器间接寻址(以RO,R1或DPTR作间址寄存器)的寻址方式访问。

返回上一页2.2MCS-51单片机的寻址方式

MCS-51单片机指令系统使用44种助记符,它们代表着33种功能,可以实现51种操作。指令助记符与操作数各种可能的寻址方式的结合一共可构造出111条指令。一般地,在指令中,操作码占1个字节;操作数中,直接地址direct占1个字节,#data占1字节,#datal6占两个字节;操作数中的A,B,RO~R7,@Ri,@DPTR,@A+DPTR,@A+PC等均隐含在操作码中。2.3MCS-51单片机的指令系统返回下一页2.3.1数据传送指令数据传送是一种最基本、最主要的操作。在通常的应用程序中,传送指令占有极大的比例,数据传送的灵活性对整个程序的编写和执行都起着很大的作用。所谓数据“传送”,就是把源地址单元的内容传送到目的地址单元中去,指令执行后一般源地址单元内容不变,属于“复制”而不是“剪切”;或者源地址单元与目的地址单元内容互换。数据传送指令共29条,可分为内部RAM数据传送、外部RAM数据传送、程序存储器数据传送、数据交换和堆栈操作五类。数据传送指令对标志位的影响:除以累加器A为目的操作数的数据传送指令对P标志位有影响外,其余均不影响标志位。返回下一页上一页2.3MCS-51单片机的指令系统1)内部RAM数据传送指令(16条)

格式:MOVGdest>,Gsrc>其中:Gdest>表示目的操作数,Gsrc>表示源操作数。内RAM数据传送指令按目的操作数可分为以下几类。

(1)以累加器A为目的操作数的指令((4条)。这组指令的作用是把对应的源操作数内容存放到累加器A中。以累加器A为目的操作数的指令,只影响PSW中的P标志位,不影响其他标志位,其指令格式如表2.3-1所列。返回下一页上一页2.3MCS-51单片机的指令系统例2-1把存放在片内RAM50H单元的数据送到累加器A中。解法一MOVA,50H

解法二MOVR0,#50HMOVA,@RO

例2-2若(R6)=40H,(20H)=30H,(RO)=30H,(30H)=20H分析下列每条指令执行后寄存器的内容。

MOVA,R6;}A)=40H,}R6)=40H不变

MOVA,20H;执行后(A)=30H,(20H)=30H不变

MOVA,@RO;执行后(A)=20H,CR0)=30HMOVA,#11H;执行后(助=11H返回下一页上一页2.3MCS-51单片机的指令系统

(2)以工作寄存器Rn为目的操作数的指令(3条)。这组指令的作用是把源操作数内容存放到当前工作寄存器组的RO~R7中的某个寄存器中,源操作数内容不变,指令格式如表2.3-2所列。例2一若(A)=20H,(20H)=60H,分析下面每条指令执行后寄存器的内容。

MOVR2,A;CR2)=20HMOVR2,20H;(R2)=60HMOVR2,#20H;CR2)=20H(3)以直接地址单元为目的操作数的指令(<5条)。

返回下一页上一页2.3MCS-51单片机的指令系统本组指令的作用是把源操作数内容存放到片内RAM的某个直接地址单元中,源操作数内容不变,其指令格式如表2.3-3所列。例2-4若(A)=40H,(R2)=46H,(30H)=70H,(RO)=30H,分析下列每条指令执行后对应单元的内容。

MOV30H,A;(30H)=(40H),CA)=40HMOV40H,R2;C40H)=46H,CR2)=46HMOV41H,@RO;(41H)=70H,(RO)=30H(4)以间址寄存器@Ri为目的操作数的指令(<3条)。本组指令的作用是把对应的源操作数的内容存放到间址寄存器Ri中去,而源操作数不变。指令格式如表2.3-4所列。返回下一页上一页2.3MCS-51单片机的指令系统表2.3-5返回下一页上一页2.3MCS-51单片机的指令系统通过以上内RAM数据传送指令可以得到内部数据传送关系如图2.3-1所示。2)外部RAM数据传送指令(4条)CPU与外部数据存储器之间进行数据传送时,必须使用外部传送指令,外部数据传送必须通过累加器A,且采用寄存器间接寻址(用RO,Rl和DPTR三个间接寻址的寄存器)方式完成,其指令格式如表2.3-6所列。以上4条指令中,以累加器A为目的操作数的指令为外RAM的读指令,以累加器A为源操作数的指令为外RAM写指令。由于Ri是8位的寄存器,所以只能访问片外RAM的低256个单元(OOH~OFFH);DPTR可以访问片外RAM的全部64KB的空间。返回下一页上一页2.3MCS-51单片机的指令系统本组指令中,外RAM的读指令对标志位有影响,其余的指令对标志位没有影响。从上面的指令可以看出,要与外部数据存储器RAM打交道必须通过累加器A,所有需要送入外部RAM的数据要通过累加器送出去,而所有要读人的外部RAM的数据也必须通过累加器A读人。由此可以看出内RAM和外RAM的区别:内RAM之间可以直接进行数据传送;而外RAM之间以及外RAM和内RAM之间不能直接进行数据传送。返回下一页上一页2.3MCS-51单片机的指令系统例2-6下列指令执行完之后,累加器A和外RAM1234H单元内容分别是多少?MOV30H,#44H;(30H)=44HMOVR1,#30H;(R1)=30HMOVXA,@R1;CA)=44HMOVDPTR,#1234H;CDPT助=1234HMOVX@DPTR,A;C1234H)=C助=44H

由注释可知,执行完上述指令之后,(A)=44H,(1234H)=44Ho

返回下一页上一页2.3MCS-51单片机的指令系统3)程序存储器(ROM)数据传送指令(查表指令)(2条)MCS-51单片机的程序存储器ROM分为内ROM和外ROM,程序存储器内部的数据是只读的,因此程序存储器的数据传送是单向的,并且只能读到累加器A中。这类指令在查表中经常用到,又称为查表指令。查表指令一共有2条,都属于变址寻址,指令格式如表2.3-7所列。上面这两条指令功能相同,但在使用方式上有区别,这主要体现在以下几方面。

(1)查表的位置不同。采用DPTR作为基地址寄存器,表可以放在64KB程序存储器空间的任何地址,使用方便,故称为远程查表;返回下一页上一页2.3MCS-51单片机的指令系统采用PC作为基地址寄存器,具体的表在程序存储器中只能在查表指令后的256B的地址空间中,使用有限制,故称为近程查表。(2)偏移量的计算方法不同。采用DPTR作为基地址寄存器,查表目标地址为(DPTR)+(A),A为欲查数值距离表首地址的值;采用PC作为基地址寄存器,查表目标地址为(A)+当前指令的PC值+1,因此A的值必须预先设置为:A的值=查表的目标地址一当前指令的PC值一to

例2一指出下面程序执行后累加器A中的数据。

ORG1000HMOVA,#20H;双字节指令

MOVCA,@A+PC;单字节指令

ORG1020HDBOCOH,OF9H,OA4H,OA5H,30H,44H,50H返回下一页上一页2.3MCS-51单片机的指令系统4)数据交换指令(5条)

数据传输时,若需要保存目的操作数,则经常采用数据交换指令。令有3条整字节交换和2条半字节交换指令,下面分别介绍。

(1)半字节数据交换指令(2条)。半字节交换指令主要有A的高低字节交换和A与间址寄存器低令格式如表2.3-8所列。(2)整字节交换指令(3条)。如表2.3-9

5)堆栈操作指令(2条)

堆栈操作在执行中断、子程序调用、参数传递等程序时用于保护断点和恢复现场。返回下一页上一页2.3MCS-51单片机的指令系统其功能是实现RAM单元数据送入栈顶或由栈顶取出数据至RAM单元,因此堆栈操作指令实际上是以堆栈指针SP为间址寄存器的间址寻址方式。堆栈操作有两种:压栈和出栈,指令符分别为PUSH,POP,堆栈操作指令如表2.3-10所列。在使用堆栈指令时要注意,堆栈区应避开使用的工作寄存器区和其他需要使用的数据区,系统复位后,SP的初始值为07H。为了避免重叠,一般初始化时要重新设置SP。

另外,在书写的时候还要注意,堆栈操作指令是直接寻址指令,直接地址不能是寄存器名,因此应注意指令的书写格式。例如:PUSHPOPACC(不能写成PUSHA)OOH(不能写成POPRO)返回下一页上一页2.3MCS-51单片机的指令系统2.3.2算术运算指令算术运算指令主要完成加、减、乘、除四则运算,以及加1、减1,BCD码的运算和调整等。算术运算指令的两个参与运算的操作数,一个存放在累加器A中(此操作数也为目的操作数);一个存放在RO~R7或@Ri(片内RAM)以及片内RAM某个直接地址中,或是#data(立即数),这类指令大多数都要影响到程序状态字PSW,乘除指令不影响AC标志位。返回下一页上一页2.3MCS-51单片机的指令系统1)不带进位的加法指令((4条)

不带进位的加法指令是将源操作数的内容与累加器A的内容相加,结果存入累加器A。不带进位的加法指令(ADD)对PSW中的所有标志位均产生影响,具体的指令格式如表2.3-11所列。例2-8如果程序执行前(A)=29H,(20H)-88H,(R7)-OAOH,(R0)-30H,(30H)-C2H,求顺序执行完下列每条指令的结果(包括标志位的状态)。

ADDA,#10H;(A)=39H,(Cy)=0,(AC)=0,(OV)=0ADDA,20H;(A)=OCIH,(Cy)=O,(AC)=1,(OV)=0ADDA,R7;(A)=61H,(Cy)=1,(AC)=O,(OV)=1ADDA,@RO;(A)=23H,(Cy)=1,(AC)=O,(OV)=0返回下一页上一页2.3MCS-51单片机的指令系统

2)带进位的加法指令(4条)

带进位的加法指令是将源操作数的内容与累加器A的内容、进位标志位的内容一起相加,结果存入累加器A中。带进位的加法指令(ADDC)对PSW中的所有标志位均产生影响,具体的指令格式如表2.3-12所列。3)带借位的减法指令(4条)

带借位的减法指令是将累加器A的内容减去源操作数的内容,再减去进位标志位的内容,最后将结果存入累加器A中。带借位的减法指令(SUBB)对PSW中的所有标志位均产生影响,具体的指令格式如表2.3-13所列。MCS-51指令系统中没有不带进位的减法,欲实现不带借位的减法,需在执行SUBB指令前,使(Cy)清O。返回下一页上一页2.3MCS-51单片机的指令系统4)十进制调整指令(1条)

十进制调整指令是一条专门的指令,它跟在加法指令ADD或ADDC后面,对运算结果的十进制数进行BCD码修正。因为压缩的BCD码存在6个无效码,BCD加法时,若结果进入无效码区,会出现错误结果,使用十进制调整指令可以使运算结果调整为压缩的BCD码数,以完成十进制加法运算功能。十进制调整指令格式如表2.3-14所列。5)加1指令(5条)

加1指令又称为增量指令,其功能是使操作数所指定单元的内容加1,指令格式如表2.3-15所列。

返回下一页上一页2.3MCS-51单片机的指令系统6)减1指令(4条)

减1指令又称为减量指令,其功能是使操作数所指定的单元的内容减1,指令格式如表2.3-16所列。7)乘除指令(2条)

乘除指令实现乘法或除法操作,这两条指令是MCS-51指令系统中执行时间最长的指令,各占4个机器周期。乘法指令完成2个8位无符号数相乘,乘数和被乘数分别放在A和B寄存器中,乘积的高8位放在B寄存器中,低8位放在累加器A中;除法指令中,被除数和除数分别存放在A和B寄存器中,商存放在A中,余数存放在B中。指令格式如表2.3-17所列。返回下一页上一页2.3MCS-51单片机的指令系统2.3.3逻辑运算和移位指令常用的逻辑运算和移位类指令有逻辑与、逻辑或、逻辑异或、循环移位、清0,求反等指令,它们的操作数都是8位的。逻辑运算都是按位进行的,除用于逻辑运算外,还可用于模拟各种数字逻辑电路的功能,进行逻辑电路的设计。逻辑运算和移位指令中,除了以A为目的操作数的指令影响P标志位以及带进位的循环移位指令影响Cy和P之外,其余均不影响PSW各标志位。1)逻辑与运算指令(6条)

本指令能实现两个操作数的逻辑与,指令格式如表2.3-18所列。返回下一页上一页2.3MCS-51单片机的指令系统2)逻辑或运算指令(6条)

本指令能实现两个操作数的逻辑或,指令格式如表2.3-19所列。3)逻辑异或运算指令(6条)

本指令能实现两个操作数的逻辑或,指令格式如表2.3-20所列。4)循环移位指令(4条)MCS-51单片机的循环移位指令共有不带进位的循环左、右移位(操作码为RL,RR)和带进位的循环左、右移位(操作码为RLC,RRC)指令4条,只能对累加器A进行移位,移位指令可以相当于乘法或除法(左移一位相当于乘2,右移一位相当于除2),其指令格式如表2.3-21所列。返回下一页上一页2.3MCS-51单片机的指令系统5)累加器清0与取反指令(2条)

在MCS-51指令系统中,专门提供了累加器A的清。和取反指令,利用取反,可以进行求补操作,即对要求补的数先取反再加to累加器清。和取反指令均是单字节单周期指令,与逻辑运算或数据传送实现累加器A清。或取反相比,效率较高,而且节约存储空间。其指令格式如表2.3-22所列。6)空操作指令返回下一页上一页2.3MCS-51单片机的指令系统2.3.4控制转移指令计算机在运行的过程中,一般通过程序计数器PC的自动加1实现顺序执行,有时候对于较复杂的操作,需要通过强迫改变PC值的方法来进行程序的分支转移,这就需要用到控制转移指令。控制转移指令的功能就是通过改变程序计数器PC中的内容,控制程序执行的流向,实现程序分支转向,MCS-51单片机提供了17条控制转移指令。这些控制转移指令中,除了CJNE影响PSW的进位标志位Cy外,其余均不影响PSW的各标志位。返回下一页上一页2.3MCS-51单片机的指令系统无条件转移指令((4条)返回下一页上一页2.3MCS-51单片机的指令系统

(1)长转移指令(LJMPaddrl6)。长转移指令提供了16位的目标转移地址,其功能是把指令码中的16位转移目标地址送入PC,因此这条指令可以跳转到64KBROM的任意位置。为了方便程序设计,addrl6通常采用符号地址表示,程序执行时再被汇编成16位二进制地址。(2)绝对转移指令(AJMPaddrll)。这条指令可以在该指令的下一条指令的同一个2KB区域(211)内跳转。PC15~PC11用于把64K的ROM划分为32个区域,相当于32个页(每页2KB,由PC10~PC0确定)。返回下一页上一页2.3MCS-51单片机的指令系统指令执行时,PC首先加2指向当前PC值(即形成新的PC值),然后用指令中的11位地址替换当前PC值的低11位,当前PC值的高5位确定了是哪一页,替代后的低11位代表了该页的页内地址,在实际程序设计中为了方便,ad-drll也常用标号代替,程序执行时再被自动汇编成对应的地址。(3)相对(短)转移指令(SJMPrel)。本指令的目标地址是(PC)=(PC)+2+rel,rel是一个用补码表示的8位带符号的二进制数,范围为一128~+127,负数表示向后(地址变小方向)移,正数表示向前(地址变大方向)移。rel常用符号地址表示,在汇编时计算机能自动计算出rel的值,手工汇编时,需要人工计算rel的值,rel值=转移的目的地址一2一指令执行前的PC值。

返回下一页上一页2.3MCS-51单片机的指令系统(4)间接(散)转移指令(JMP@A+DPTR)。这条指令的功能是把累加器A中的8位无符号数与数据指针DPTR中的16位数相加,送入PC,作为下条指令的地址,利用这条指令能实现程序的散转。2)条件转移指令(8条)

条件转移指令的功能就是在规定的条件满足时进行程序转移,否则程序往下顺序执行。MCS-51单片机中,条件转移指令有累加器A判零转移指令,比较转移指令和减1不为。转移指令等,下面分别介绍。

(1)累加器A判0转移指令(2条)。指令格式如表2.3-25所列。返回下一页上一页2.3MCS-51单片机的指令系统

(2)比较转移指令(4条)。比较转移指令是把两个操作数做比较,以比较的结果作为控制条件来控制程序的转移方向,共有4条指令,指令格式如表2.3-26所列。(3)减1不为。转移指令(2条)。循环转移指令是通过对寄存器或地址单元的数据进行减1并按条件进行转移的指令,主要用于循环程序当中,实现对循环次数的控制,指令格式如表2.3-27所列。返回下一页上一页2.3MCS-51单片机的指令系统3)子程序调用与返回指令(4条)

在程序编写时,有时候会需要一些执行相同操作的程序段,为了减少编写和调试的工作量,人们常常把这些程序段定义为子程序。在程序运行时,可以通过调用指令来调用并执行子程序;子程序执行完后,再用返回指令从子程序返回到主程序。子程序可以嵌套,即在一个子程序执行过程中可以调用另外的子程序,形成子程序的嵌套;嵌套的子程序返回时,先返回后调用的,再返回先调用的,保证调用指令和返回指令成对出现。子程序嵌套有利于模块化程序设计。主程序与子程序之间的调用关系如图2.3-2所示,两级子程序嵌套的示意图如图2.3-3所示。返回下一页上一页2.3MCS-51单片机的指令系统为了实现子程序的完整调用,子程序调用指令和返回指令必须成对出现。子程序调用指令在主程序中使用,在需要调用子程序时,调用指令能自动把程序PC的当前值(断点地址)保护到堆栈中,并将子程序人口地址自动送入程序计数器PC中,从而使程序转去执行子程序;子程序执行完后,需要执行子程序返回指令,它是子程序的最后一条指令,返回指令能自动把堆栈中的断点地址送入PC,使程序能自动返回到主程序中调用指令的下一条指令处(即断点处)。子程序调用和返回指令格式如表2.3-28所列。返回下一页上一页2.3MCS-51单片机的指令系统在使用子程序调用和返回指令时,子程序调用时应注意人口参数设置,子程序返回时应注意出口参数的传递。

(1)长调用指令LCALLo

长调用指令,用于调用存放在64KB空间任意地方的子程序,本指令不影响PSW的各标志位。

(2)短调用指令ACALLo

该指令的调用范围为2KB,执行该指令时共完成2项操作:①断点保护,即通过自动堆栈,把断点地址((PC)+2的值)保存起来;②构造目的地址,即在PC加2之后,用addrll代替PC的低11位,而PC的高5位不变。返回下一页上一页2.3MCS-51单片机的指令系统(3)子程序返回指令RET。

该指令与子程序调用指令成对出现,其功能是从堆栈中取出断点地址,送入PC,使主程序从断点处继续执行。

(4)中断返回指令RETI。

中断服务程序是一种特殊的子程序,它是在计算机响应中断时,由硬件完成调用而进入相应的中断服务程序。RETI指令与RET指令相仿,区别在于RET是从子程序返回,RETI是从中断服务程序返回。无

温馨提示

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

评论

0/150

提交评论