第2章MCS-51单片机应用教程课件.ppt

上传人(卖家):三亚风情 文档编号:3526210 上传时间:2022-09-11 格式:PPT 页数:135 大小:471.56KB
下载 相关 举报
第2章MCS-51单片机应用教程课件.ppt_第1页
第1页 / 共135页
第2章MCS-51单片机应用教程课件.ppt_第2页
第2页 / 共135页
第2章MCS-51单片机应用教程课件.ppt_第3页
第3页 / 共135页
第2章MCS-51单片机应用教程课件.ppt_第4页
第4页 / 共135页
第2章MCS-51单片机应用教程课件.ppt_第5页
第5页 / 共135页
点击查看更多>>
资源描述

1、第第2章章 单片机的指令系统单片机的指令系统2.1 指令系统概述指令系统概述2.2 寻址方式寻址方式2.3 指令功能介绍指令功能介绍2.4 小结小结习题习题通过对本章的学习,读者应具备以下能力:通过对本章的学习,读者应具备以下能力:熟练掌握不同寻址方式以及汇编指令的用法熟练掌握不同寻址方式以及汇编指令的用法掌握伪指令的使用以及汇编语言程序的完整格式掌握伪指令的使用以及汇编语言程序的完整格式掌握算术运算类指令对掌握算术运算类指令对PSW各标志位的影响各标志位的影响理解汇编语言程序的执行过程理解汇编语言程序的执行过程本章学习目标本章学习目标一种计算机所有指令的集合,称为该计算机的指令一种计算机所有

2、指令的集合,称为该计算机的指令系统。它是表征计算机性能的重要标志。各类计算系统。它是表征计算机性能的重要标志。各类计算机都有专用的指令系统。机都有专用的指令系统。2.1 指令系统概述指令系统概述MCS-51单片机共有单片机共有111条指令,有几种不同的分类条指令,有几种不同的分类方法。方法。(1)按指令功能分类,如图按指令功能分类,如图2-1所示。所示。2.1.1 指令分类指令分类图图2-1 按指令功能分类图按指令功能分类图(2)按指令字长分类,如图按指令字长分类,如图2-2所示。所示。图图2-2按指令字长分类图按指令字长分类图(3)按指令执行时间分类,如图按指令执行时间分类,如图2-3所示。

3、所示。图图2-3 按指令执行时间分类图按指令执行时间分类图用用MCS-51单片机汇编语言表示的指令格式如下:单片机汇编语言表示的指令格式如下:标号标号:操作码操作码目的操作数目的操作数,源操作数源操作数;注释注释一条汇编语句是由标号、操作码、操作数和注释部一条汇编语句是由标号、操作码、操作数和注释部分组成的,其中方括号中的部分是可选项。分组成的,其中方括号中的部分是可选项。例如:例如:AA:ADD A,#10H;执行加法操作执行加法操作AA:为标号,为标号,ADD为操作码,为操作码,A与与10H为操作为操作数,数,“;”后面为注释部分。后面为注释部分。2.1.2 指令格式指令格式用汇编语言编写

4、程序时,应注意以下几个问题:用汇编语言编写程序时,应注意以下几个问题:(1)标号标号标号是语句地址的标志符号。有关标号的规定如下:标号是语句地址的标志符号。有关标号的规定如下:标号由标号由18个字母或数字组成,可以使用一个个字母或数字组成,可以使用一个下划线符号下划线符号“_”。第一个字符必须是字母。第一个字符必须是字母。指令助记符或系统中保留使用的字符串不能作指令助记符或系统中保留使用的字符串不能作为标号。为标号。标号后面必须跟一个冒号。标号后面必须跟一个冒号。一条语句可以有标号,也可以没有标号。标号一条语句可以有标号,也可以没有标号。标号的有无取决于本程序中其他语句是否需要访问这条的有无取

5、决于本程序中其他语句是否需要访问这条语句。语句。以下是合法的标号以下是合法的标号以下是不合法的标号以下是不合法的标号LOOP1:5LOOP:(第一个字符是第一个字符是数字)数字)START:A*5:(“*”不能在标号中出不能在标号中出 现)现)Q4_:ADD:(指令助记符)指令助记符)SSS:START(无冒号)无冒号)L123:L12345678:(超过超过8个字符)个字符)(2)操作码操作码规定语句执行的操作。操作码是以指令助记符或伪规定语句执行的操作。操作码是以指令助记符或伪指令助记符表示的。操作码是汇编指令中惟一不能指令助记符表示的。操作码是汇编指令中惟一不能空缺的部分。空缺的部分。(

6、3)操作数操作数用于给指令的操作提供数据或地址。在一条指令中,用于给指令的操作提供数据或地址。在一条指令中,操作数可以为操作数可以为1项、项、2项或项或3项,各操作数之间用逗项,各操作数之间用逗号隔开,操作数也可能空缺。号隔开,操作数也可能空缺。例如:例如:LOOP:INC A;1项操作数项操作数ADD A,#50H;2项操作数项操作数CJNE A,#5,LOOP;3项操作数项操作数RET;无操作数无操作数(4)注释注释注释不属于语句的功能部分,它只对语句进行解释注释不属于语句的功能部分,它只对语句进行解释说明。在程序汇编时注释字段不被汇编,可有可无,说明。在程序汇编时注释字段不被汇编,可有可

7、无,只起说明作用。注释内容以只起说明作用。注释内容以“;”开头。开头。(5)分隔符分隔符分隔符用于分割语句的各个部分,以便于区分。冒分隔符用于分割语句的各个部分,以便于区分。冒号号“:”用于标号之后;空格用于操作码和操作用于标号之后;空格用于操作码和操作数之间;逗号数之间;逗号“,”用于操作数之间;分号用于操作数之间;分号“;”用于注释之前。用于注释之前。为节省存储空间,为节省存储空间,MCS-51单片机采用变字长指令单片机采用变字长指令方式。按方式。按8位二进制数为一个字节,指令字长有单位二进制数为一个字节,指令字长有单字节、双字节和三字节字节、双字节和三字节3种,在存储单元中分别占种,在存

8、储单元中分别占13个单元。个单元。指令周期是指执行一条指令所需要的时间。指令字指令周期是指执行一条指令所需要的时间。指令字节数越多,所占存储单元则越多,但指令周期并不节数越多,所占存储单元则越多,但指令周期并不与指令所占字节数成比例。与指令所占字节数成比例。2.1.3 指令字长和指令周期指令字长和指令周期寻址方式是指寻址方式是指CPU寻找操作数或操作数地址的方式。寻找操作数或操作数地址的方式。计算机执行程序的过程是不断地寻找操作数并进行计算机执行程序的过程是不断地寻找操作数并进行操作的过程。操作的过程。MCS-51单片机共有单片机共有7种寻址方式,分种寻址方式,分述如下。述如下。2.2 寻址方

9、式寻址方式1.寻址范围寻址范围指令中直接给出操作数所在的单元地址,它的寻址指令中直接给出操作数所在的单元地址,它的寻址范围为单片机内部范围为单片机内部RAM。(1)内部内部RAM低低128单元。在指令中直接以单元单元。在指令中直接以单元地址形式给出,地址范围地址形式给出,地址范围00H7FH;(2)特殊功能寄存器特殊功能寄存器SFR。直接寻址是直接寻址是SFR惟一惟一的一种寻址方式。的一种寻址方式。SFR可以以单元地址给出,也可可以以单元地址给出,也可以用寄存器符号形式给出(以用寄存器符号形式给出(A、AB、DPTR除外)。除外)。2.2.1 直接寻址直接寻址2.使用注意事项使用注意事项(1)

10、寻址特殊功能寄存器寻址特殊功能寄存器SFR时,可以用直接地时,可以用直接地址,也可以用寄存器名。址,也可以用寄存器名。例如:例如:MOV A,0D0H;A(D0H)MOV A,PSW;A(PSW)这两条指令汇编后机器码完全一样,均为这两条指令汇编后机器码完全一样,均为E5D0H,其中其中D0H为程序状态字为程序状态字PSW寄存器的物理地址。寄存器的物理地址。物理地址物理地址D0前要加前要加0(凡以字母(凡以字母AF开头的十六进开头的十六进制数均需加前导制数均需加前导0)。)。(2)在在MCS-51单片机指令系统中,累加器单片机指令系统中,累加器A有三有三种不同的表达方式,即种不同的表达方式,即

11、A、ACC和和E0H,分属不同分属不同的寻址方式,但指令的执行结果完全相同。的寻址方式,但指令的执行结果完全相同。例如:例如:INC A;寄存器寻址方式寄存器寻址方式INC ACC;直接寻址方式直接寻址方式INC 0E0H;直接寻址方式直接寻址方式操作数直接由指令给出,通常紧跟指令操作码之后操作数直接由指令给出,通常紧跟指令操作码之后的字节是操作数,该操作数被称为立即数。一般立的字节是操作数,该操作数被称为立即数。一般立即数可以是即数可以是8位二进制数,也可以是位二进制数,也可以是16位二进制数。位二进制数。2.2.2 立即寻址立即寻址例如:例如:MOV A,#7AH MOV DPTR,#12

12、34H注意:注意:立即数前加立即数前加“#”号,以区别直接地址。号,以区别直接地址。例如:例如:MOV A,#30H;A 30HMOV A,30H;A(30H)第一条指令是把立即数第一条指令是把立即数30H送累加器送累加器A,而第二条而第二条指令把指令把30H单元的内容送累加器单元的内容送累加器A。这种寻址方式中,操作数在寄存器中,确定了寄存这种寻址方式中,操作数在寄存器中,确定了寄存器,就得到了操作数。可用于寄存器寻址的寄存器器,就得到了操作数。可用于寄存器寻址的寄存器有:有:(1)四组工作寄存器四组工作寄存器R0R7共共32个工作寄存器。个工作寄存器。由程序状态字由程序状态字PSW中的中的

13、RS1、RS0两位的状态进行两位的状态进行当前工作寄存器组的选择。当前工作寄存器组的选择。(2)部分特殊功能寄存器有部分特殊功能寄存器有A、AB、DPTR和和Cy。例如:例如:MOV A,R3;当前当前R3中的内容送累加器中的内容送累加器A。2.2.3 寄存器寻址寄存器寻址作为被寻找的操作数。用来存放操作数地址的寄存作为被寻找的操作数。用来存放操作数地址的寄存器称为指针。这种寻址方式称为寄存器间接寻址方器称为指针。这种寻址方式称为寄存器间接寻址方式。式。MCS-51单片机用于间接寻址的寄存器有单片机用于间接寻址的寄存器有R0、R1、堆栈指针堆栈指针SP以及数据指针以及数据指针DPTR。2.2.

14、4 寄存器间接寻址寄存器间接寻址1.寻址范围寻址范围(1)内部内部RAM低低128单元,地址范围单元,地址范围00H7FH,用用Ri(i=0,1)作为间接寻址寄存器。作为间接寻址寄存器。(2)片外片外RAM的的64KB,地址范围地址范围0000HFFFFH,用用DPTR作为间接寻址寄存器。也可用作为间接寻址寄存器。也可用Ri作为间接寻址寄存器,此时用作为间接寻址寄存器,此时用P2口指示高口指示高8位地址,位地址,Ri指示低指示低8位地址,可寻址片外位地址,可寻址片外RAM(I/O口)口)64KB区域。区域。例如:例如:设(设(R1)=60H,(,(60H)=50HMOV A,R1;执行结果(执

15、行结果(A)=50H2.使用注意事项使用注意事项(1)为区别寄存器寻址方式,间接寻址寄存器前为区别寄存器寻址方式,间接寻址寄存器前加加。(2)寄存器间接寻址方式不能用于对特殊功能寄寄存器间接寻址方式不能用于对特殊功能寄存器存器SFR的寻址。的寻址。例如:例如:MOV R0,#0F0HMOV A,R0以上指令不能执行,因为以上指令不能执行,因为0F0H为特殊功能寄存器为特殊功能寄存器B的物理地址,而对于特殊功能寄存器,不能对其进的物理地址,而对于特殊功能寄存器,不能对其进行间接寻址,只能直接寻址。行间接寻址,只能直接寻址。(3)栈操作指令也是间接寻址方式,它以堆栈指栈操作指令也是间接寻址方式,它

16、以堆栈指针针SP作为间接寻址寄存器。作为间接寻址寄存器。MCS-51单片机的变址寻址是以数据指针单片机的变址寻址是以数据指针DPTR或或程序计数器程序计数器PC作为基址寄存器,以累加器作为基址寄存器,以累加器A作为变作为变址寄存器,并以两者内容相加形成新的址寄存器,并以两者内容相加形成新的16位地址作位地址作为操作数地址,再寻址该地址,读取数据。为操作数地址,再寻址该地址,读取数据。例如:例如:MOVC A,A+PC 设执行指令之前(设执行指令之前(A)=50H,要取的操作数为要取的操作数为37H,该指令所在地址为该指令所在地址为3F00H单元。单元。2.2.5 变址寻址变址寻址指令功能是把该

17、指令当前地址指令功能是把该指令当前地址PC值与值与A累加器内容累加器内容相加形成操作码地址相加形成操作码地址3F51H,3F51H中的内容中的内容37H送送A累加器。(当前地址为取指后的累加器。(当前地址为取指后的PC值,本例值,本例PC当前值为当前值为3F01H。)。)指令执行过程如图指令执行过程如图2-4所示。所示。图图2-4 变址寻址示意图变址寻址示意图对对MCS-51单片机指令系统变址寻址方式的几点说单片机指令系统变址寻址方式的几点说明:明:(1)变址寻址方式只能对程序存储器进行寻址,变址寻址方式只能对程序存储器进行寻址,因此只能用于读取数据,而不能用于存放数据,它因此只能用于读取数据

18、,而不能用于存放数据,它主要用于查表性质的访问。主要用于查表性质的访问。(2)变址寻址指令只有变址寻址指令只有3条:条:MOVC A,A+PCMOVC A,A+DPTRJMP A+DPTR前两条指令是在程序存储器中寻找操作数,指令执前两条指令是在程序存储器中寻找操作数,指令执行完毕行完毕PC当前值不变。后一条指令是要获得程序当前值不变。后一条指令是要获得程序的跳转地址,指令执行完毕的跳转地址,指令执行完毕PC值改变。值改变。相对寻址用于访问程序存储器,只出现在转移指令相对寻址用于访问程序存储器,只出现在转移指令中。中。“寻址寻址”不是寻找操作数的地址,而是寻找程不是寻找操作数的地址,而是寻找程

19、序跳转地址,它以序跳转地址,它以PC的当前值加上指令中给出的的当前值加上指令中给出的相对偏移量(相对偏移量(rel)形成转移地址。相对偏移量形成转移地址。相对偏移量(rel)是一个带符号的是一个带符号的8位二进制数,以补码形式位二进制数,以补码形式出现。所以程序的转移范围为以出现。所以程序的转移范围为以PC当前值为中心,当前值为中心,介于介于-128+127之间。之间。2.2.6 相对寻址相对寻址例如:例如:JC rel设设rel=85H,Cy=1,这是一条以这是一条以Cy状态为条件的转状态为条件的转移指令,因为该指令为两字节指令,移指令,因为该指令为两字节指令,CPU取出指令取出指令的第二个

20、字节时,的第二个字节时,PC当前值为原当前值为原PC值值+2。由于。由于Cy=1,因此程序转向(因此程序转向(PC)+2+rel单元去执行。单元去执行。注意此时注意此时rel=85H为负数。为负数。若转移指令放在若转移指令放在2002H单元,取出指令后单元,取出指令后PC指向指向2004H单元,新的转移地址(单元,新的转移地址(PC)+rel=2004H+85H=2004H+FF85H(16位二进制补位二进制补码)码)=1F89H,经补码运算后,形成跳转地址经补码运算后,形成跳转地址1F89H。指令执行过程如图指令执行过程如图2-5所示。所示。图图2-5 相对寻址(相对寻址(JC 85H)示意

21、图示意图MCS-51单片机设有独立的位处理器,又称为布尔单片机设有独立的位处理器,又称为布尔处理器,可对位地址空间的处理器,可对位地址空间的211个位地址进行运算个位地址进行运算和传送操作。和传送操作。2.2.7 位寻址位寻址位寻址范围位寻址范围(1)内部内部RAM的位寻址区,共的位寻址区,共16个单元的个单元的128位,位,单元地址为单元地址为20H2FH,位地址为位地址为00H7FH,位位地址的表示方法可以用直接位地址或单元地址加位地址的表示方法可以用直接位地址或单元地址加位的表示方法。的表示方法。例如:例如:MOVC,7AH或或 MOVC,2FH.2此例中,此例中,7AH与与2FH.2表

22、示的是同一个位地址(见表示的是同一个位地址(见表表1-3,书,书9页页)。)。(2)特殊功能寄存器特殊功能寄存器SFR中可供位寻址的专用寄中可供位寻址的专用寄存器共存器共11个,其中有个,其中有83位可供位寻址,这些位地址位可供位寻址,这些位地址在指令中有在指令中有4种表达方式。种表达方式。直接使用位地址:直接使用位地址:MOV C,0D6H 位名称表示法:位名称表示法:MOV C,AC 单元地址加位的表示法:单元地址加位的表示法:MOV C,0D0H.6 专用寄存器符号加位的表示法:专用寄存器符号加位的表示法:MOV C,PSW.6为了使读者更好地理解寻址方式,为了使读者更好地理解寻址方式,

23、7种寻址方式作种寻址方式作用范围见表用范围见表2-1。(见书。(见书24页)页)以上对于寻址方式举例中,多是针对源操作数的,以上对于寻址方式举例中,多是针对源操作数的,实际上目的操作数也有寻址问题。实际上目的操作数也有寻址问题。源操作数为间接寻址方式,目的操作数为直接寻址源操作数为间接寻址方式,目的操作数为直接寻址方式。但总的来说源操作数寻址方式多,目的操作方式。但总的来说源操作数寻址方式多,目的操作数寻址方式较少。源操作数有立即寻址、直接寻址、数寻址方式较少。源操作数有立即寻址、直接寻址、寄存器寻址、间接寻址、变址寻址和位寻址寄存器寻址、间接寻址、变址寻址和位寻址6种寻种寻址方式。目的操作数

24、有直接寻址、寄存器寻址、间址方式。目的操作数有直接寻址、寄存器寻址、间接寻址和位寻址接寻址和位寻址4种寻址方式。种寻址方式。2.2.8 寻址方式小结寻址方式小结综上所述,综上所述,MCS-51单片机的编址方式有两个突出单片机的编址方式有两个突出的特点:的特点:一是内部数据存储器与内部一是内部数据存储器与内部I/O口统一编口统一编址;二是外部数据存储器与外部址;二是外部数据存储器与外部I/O口也是统一编口也是统一编址。这样对址。这样对I/O口的操作就和对数据存储器的操作口的操作就和对数据存储器的操作一样,对于内部数据存储器以直接寻址方式的一切一样,对于内部数据存储器以直接寻址方式的一切操作,对内

25、部操作,对内部I/O口同样适用。口同样适用。在介绍指令功能之前,先把指令中使用的一些符号在介绍指令功能之前,先把指令中使用的一些符号的意义做简要说明,见表的意义做简要说明,见表2-2。(见书。(见书24页)页)下面按指令功能分类介绍下面按指令功能分类介绍MCS-51单片机的指令。单片机的指令。2.3 指令功能介绍指令功能介绍数据传送类指令是指令系统中使用最频繁的指令,数据传送类指令是指令系统中使用最频繁的指令,主要用于数据的保存及交换等场合。按其操作方式主要用于数据的保存及交换等场合。按其操作方式又可分为数据传送、数据交换和栈操作。又可分为数据传送、数据交换和栈操作。2.3.1 数据传送类指令

26、数据传送类指令1.内部数据传送指令内部数据传送指令MOV指令格式指令格式MOV,这类指令的源操作数和目的操作数都在单片机内部。这类指令的源操作数和目的操作数都在单片机内部。可以是片内可以是片内RAM地址,也可以是特殊功能寄存器地址,也可以是特殊功能寄存器SFR的地址(立即数除外)。的地址(立即数除外)。指令功能是把源操作数指定的字节变量复制到目的指令功能是把源操作数指定的字节变量复制到目的操作数所指定的单元或寄存器中,源字节不变。操作数所指定的单元或寄存器中,源字节不变。(1)立即数传送指令指令功能是把源操作数送指立即数传送指令指令功能是把源操作数送指定单元或寄存器,源操作数为立即数。定单元或

27、寄存器,源操作数为立即数。MOV A,#data;A dataMOV Rn,#data;Rn data,n=07MOV Ri,#data ;(;(Ri)data,i=0,1MOV direct,#data ;direct dataMOV DPTR,#data16;DPTR data16(2)内部数据存储器(内部数据存储器(Rn、内部内部RAM、SFR)与累加器与累加器A之间传送数据。之间传送数据。MOV A,Rn;A(Rn),),n=07MOV Rn,A;Rn(A)MOV A,Ri;A(Ri),),i=01MOV Ri,A;(Ri)(A)MOV A,direct;A(direct)MOV di

28、rect,A;direct(A)(3)内部内部RAM中中Rn、SFR与片内与片内RAM之间的数之间的数据传送。据传送。MOV direct,Rn;direct(Rn)MOV Rn,direct;Rn(direct)MOV direct,Ri;direct(Ri)MOV Ri,direct ;(;(Ri)(direct)MOV direct2,direct1;direct2(direct1)例例2-1 设内部设内部RAM中(中(30H)40H,(,(40H)10H,P1口作输入口,(口作输入口,(P1)0CAH,程序及执程序及执行后的结果如下:行后的结果如下:MOV R0,#30H;单元地址单元

29、地址30H送送R0中中MOV A,R0;R0间接寻址,将间接寻址,将30H单元内容单元内容送送AMOV R1,A;A送送R1MOV B,R1;R1间接寻址,将间接寻址,将40H单元内容单元内容送送BMOV R1,P 1;将将P1内容送内容送40H单元单元MOV P2,P1;将将P1内容送内容送P2执行结果:执行结果:(R0)=30H,(,(R1)=40H,(,(A)=40H,(B)=10H,(,(P1)=0CAH,(40H)=0CAH,(,(P2)=0CAH2.外部数据存储器(或外部数据存储器(或I/O口)的读写指令口)的读写指令MOVX这类指令用于访问片外这类指令用于访问片外RAM或扩展的或

30、扩展的I/O口。口。(1)用用DPTR进行间址寻址的指令进行间址寻址的指令MOVX A,DPTR;A(DPTR)MOVX DPTR,A;(;(DPTR)(A)DPTR为为16位数据指针,该指令可寻址外部位数据指针,该指令可寻址外部RAM 64KB范围(范围(0000H0FFFH)。)。地址低地址低8位由位由P0口口输出,地址高输出,地址高8位由位由P2口输出,数据通过口输出,数据通过P0口读口读/写。写。(2)用用Ri进行间址寻址的指令进行间址寻址的指令MOVX A,Ri;A(Ri)MOVX Ri,A;(;(Ri)(A)指令可寻址范围指令可寻址范围 若外部扩展若外部扩展RAM小于等于小于等于2

31、56个单元,则用个单元,则用Ri间接寻址进行数据传送,间接寻址进行数据传送,8位地址线足够使用。位地址线足够使用。若外部扩展较大的若外部扩展较大的RAM区域,需用区域,需用P2口输出高口输出高8位地址,则用位地址,则用Ri表示低表示低8位地址,位地址,P0口分时作低口分时作低8位地址线和数据线,位地址线和数据线,P2口应事先预置。若设计循口应事先预置。若设计循环程序,则环程序,则Ri被加到被加到0或减到或减到0时必须考虑对时必须考虑对P2口高口高8位地址进位或借位的关系。位地址进位或借位的关系。例如,若外部例如,若外部RAM中,(中,(20FFH)=30H,(2100H)=15H执行:执行:M

32、OV DPTR,#20FFHINCDPTRMOV A,DPTR结果:结果:外部外部RAM中中2100H单元内容送单元内容送A,(,(A)=15H执行:执行:MOV P2,#20HMOV R0,#0FFHINCR0MOVX A,R0结果:结果:外部外部RAM中中2000H单元内容送单元内容送A,而不是而不是2100H单元内容送单元内容送A。例例2-2 把片外把片外RAM的的70H单元中的一个数单元中的一个数X,送到送到片外片外RAM的的1010H单元。单元。程序如下:程序如下:MOV P2,00HMOV R0,70HMOVX A,R0MOV DPTR,1010HMOVX DPTR,A注意:注意:

33、外部外部RAM之间不能直接传送数据,必须通之间不能直接传送数据,必须通过累加器过累加器A传送。传送。3.程序存储器读指令程序存储器读指令MOVCMOVC A,A+DPTR;A(A)+(DPTR)MOVC A,A+PC ;A(A)+(PC)指令功能:指令功能:把累加器把累加器A作为变址寄存器,将其中的作为变址寄存器,将其中的内容与基址寄存器(内容与基址寄存器(DPTR、PC)的内容相加,得的内容相加,得到程序存储器某单元的地址,再把该地址单元中的到程序存储器某单元的地址,再把该地址单元中的内容送累加器内容送累加器A。指令执行后,不改变基址寄存器指令执行后,不改变基址寄存器内容。内容。这两条指令主

34、要用于查表,即完成从程序存储器读这两条指令主要用于查表,即完成从程序存储器读取数据的功能。但由于两者使用的基址寄存器不同,取数据的功能。但由于两者使用的基址寄存器不同,因此适用范围也不同。因此适用范围也不同。(1)第一条指令以第一条指令以DPTR作为基址寄存器,查表作为基址寄存器,查表时时DPTR用于存放表格的起始地址。由于用户可以用于存放表格的起始地址。由于用户可以很方便地通过很方便地通过16位数据传送指令给位数据传送指令给DPTR赋值,因赋值,因此该指令适用范围较为广泛,表格常数可以设置在此该指令适用范围较为广泛,表格常数可以设置在64KB程序存储器中的任何位置。程序存储器中的任何位置。(

35、2)第二条指令以第二条指令以PC作为基址寄存器,由于作为基址寄存器,由于A为为8位无符号数,这就使得该指令查表范围为以位无符号数,这就使得该指令查表范围为以PC当当前值开始后的前值开始后的256个地址范围。个地址范围。例例2-3 已知累加器已知累加器A中有一个中有一个09范围内的数,用范围内的数,用以上查表指令编出能查出该数平方值的程序。设平以上查表指令编出能查出该数平方值的程序。设平方表表头地址为方表表头地址为2000H。(1)采用采用DPTR作为基址寄存器作为基址寄存器MOVDPTR,#2000HMOVC A,A+DPTR2000H DB 0,1,4,9,16DB 25,36,49,64,

36、81若原(若原(A)2,查表得查表得4并存于并存于A中。中。(2)采用采用PC作为基址寄存器作为基址寄存器ORG 1FFBH1FFBHADD A,#data;加修正量加修正量1FFDHMOVC A,A+PC;查表查表1FFEHSJMP ;停机停机2000HDB 02001HDB 12002HDB 42009HDB 81END查表指令所在单元为查表指令所在单元为1FFDH,取指令后的取指令后的PC当前当前值为值为1FFEH。若若A不加修正量调整,将出现查表错不加修正量调整,将出现查表错误。修正量误。修正量=表头首地址表头首地址PC当前值当前值=2000H1FFEH=02H。所以所以data=02

37、H(SJMP指令指令2字节)。字节)。由于由于A为为8位无符号数,因此查表指令和被查表格位无符号数,因此查表指令和被查表格通常在同一页内(页内地址通常在同一页内(页内地址00HFFH)。)。4.堆栈操作指令(堆栈操作指令(PUSH、POP)堆栈操作指令共堆栈操作指令共2条。压栈指令用于保护片内某个条。压栈指令用于保护片内某个单元的内容,出栈指令用于恢复片内某个单元的内单元的内容,出栈指令用于恢复片内某个单元的内容。容。PUSHdirect;SP(SP)+1,(,(SP)(direct)POP direct;direct(SP),),SP(SP)1堆栈中的数据是堆栈中的数据是“后进先出后进先出”

38、的方式,由堆栈指针的方式,由堆栈指针SP自动跟踪栈顶地址。单片机堆栈编址采用向上自动跟踪栈顶地址。单片机堆栈编址采用向上生成方式,即栈底占用较低地址,栈顶占用较高地生成方式,即栈底占用较低地址,栈顶占用较高地址。第一条指令称为压栈指令,压栈过程是先执行址。第一条指令称为压栈指令,压栈过程是先执行(SP)+1 SP,使指针指向新的栈顶单元。然后使指针指向新的栈顶单元。然后把直接地址单元的内容压入把直接地址单元的内容压入SP所指示的单元中。所指示的单元中。压栈指令将改变堆栈区中的数据。第二条指令称为压栈指令将改变堆栈区中的数据。第二条指令称为出栈指令,出栈过程是先将栈顶内容弹出到直接寻出栈指令,出

39、栈过程是先将栈顶内容弹出到直接寻址单元,然后执行址单元,然后执行(SP)1SP,形成新的栈顶地形成新的栈顶地址。出栈指令不会改变堆栈区中的数据。址。出栈指令不会改变堆栈区中的数据。例例2-4 设(设(30H)=X,(,(40H)=Y,试用堆栈实现试用堆栈实现30H和和40H单元中的数据交换。单元中的数据交换。解:解:堆栈区是片内堆栈区是片内RAM的一个数据区,进栈和出的一个数据区,进栈和出栈的数据符合栈的数据符合“后进先出后进先出”的原则。的原则。MOV SP,#50H;设栈顶设栈顶PUSH 40H;51H(40H),),Y压入压入51H单元单元PUSH 30H;52H(30H),),X压入压

40、入52H单元单元POP40H;40H(52H),),X弹到弹到40HPOP30H;30H(51H),),Y弹到弹到30H本例压栈过程如图本例压栈过程如图2-6(a)所示,出栈过程如图所示,出栈过程如图2-6(b)所示。所示。图图2-6 例例2-4堆栈变化示意图堆栈变化示意图5.数据交换指令数据交换指令(1)整字节交换指令整字节交换指令XCH A,RnXCH A,RiXCH A,direct 以上以上3条指令把条指令把A累加器内容与内部累加器内容与内部RAM及及SFR中中的内容互相交换,影响的内容互相交换,影响P标志。标志。例如,若(例如,若(R0)=20H,(,(A)=3FH,(,(20H)=

41、75H,执行指令执行指令XCH A,R0执行结果(执行结果(A)=75H,(,(20H)=3FH,(,(R0)=20H(2)低半字节交换指令低半字节交换指令XCHD A,RiA累加器低累加器低4位与片内位与片内RAM某单元的低某单元的低4位交换,高位交换,高4位不变。位不变。(3)累加器高低半字节交换指令累加器高低半字节交换指令SWAP A将累加器将累加器A中的高中的高4位与低位与低4位内容互换,不影响标位内容互换,不影响标志位。志位。例例2-5 已知外部已知外部RAM 2020H单元中有一个数单元中有一个数X,内内部部RAM 20H单元有一个数单元有一个数Y,试编写试编写X、Y交换存交换存储

42、地址的程序。储地址的程序。程序如下:程序如下:MOV P2,#20H MOV R1,#20HMOVX A,R1XCH A,R1MOVX R1,A例例2-6 已知片内已知片内50H单元中有一个单元中有一个09的数,试编的数,试编程把它变为相应的程把它变为相应的ASCII码。因为码。因为09的的ASCII码码为为3039H,因此程序编写如下:因此程序编写如下:MOV R0,#50HMOV A,#30HXCHDA,R0MOV R0,A算术运算类指令可以完成加、减、乘、除四则运算算术运算类指令可以完成加、减、乘、除四则运算以及增量、减量和二以及增量、减量和二十进制调整操作。这类指令十进制调整操作。这类

43、指令直接支持直接支持8位无符号数操作,借助溢出标志可对带位无符号数操作,借助溢出标志可对带符号数进行补码运算。算术运算指令执行结果将影符号数进行补码运算。算术运算指令执行结果将影响程序状态字响程序状态字PSW,具体影响见表具体影响见表2-3。(见书。(见书30页)页)2.3.2 算术运算类指令算术运算类指令1.加法指令加法指令(1)不带进位的加法指令不带进位的加法指令ADD A,Rn;A(A)+(Rn)ADD A,direct;A(A)+(direct)ADD A,Ri;A(A)+(Ri)ADD A,#data;A(A)+data上述指令,把源字节变量与累加器上述指令,把源字节变量与累加器A的

44、内容相加,的内容相加,结果保存在累加器结果保存在累加器A中。使用中应注意以下问题:中。使用中应注意以下问题:参加运算的两个操作数是参加运算的两个操作数是8位二进制数,操作结位二进制数,操作结果也是果也是8位二进制数,且运算对位二进制数,且运算对PSW中所有标志位中所有标志位都产生影响。都产生影响。用户可以根据需要把参加运算的两个操作数看用户可以根据需要把参加运算的两个操作数看成无符号数(成无符号数(0255),也可以把它们看作是带符),也可以把它们看作是带符号数。若看作带符号数,则通常采用补码形式(号数。若看作带符号数,则通常采用补码形式(-128+127)。例如,若把二进制数)。例如,若把二

45、进制数10011010B看看作无符号数,则该数的十进制值为作无符号数,则该数的十进制值为154;若把它看;若把它看作带符号数,则它的十进制值为作带符号数,则它的十进制值为-102。无符号数运算时,要判断运算结果是否超出范无符号数运算时,要判断运算结果是否超出范围(围(0255),可以看进位标志位),可以看进位标志位CY。若若CY=1则则表示运算结果大于表示运算结果大于255,若,若CY=0则表示运算结果小则表示运算结果小于等于于等于255。带符号数运算时,要判断运算结果是。带符号数运算时,要判断运算结果是否超出范围(否超出范围(-128+127),可以看溢出标志位),可以看溢出标志位OV。若若

46、OV=1表示溢出,表示溢出,OV=0则表示无溢出。则表示无溢出。OV=C7 C6,其中其中C7为最高位进位位,为最高位进位位,C6为次高为次高位进位位。注意位进位位。注意:只有带符号数运算才有溢出问题。只有带符号数运算才有溢出问题。例例2-7 试分析试分析8051执行如下指令后,累加器执行如下指令后,累加器A和和PSW各标志位的变化状况。各标志位的变化状况。MOV A,#0CFHADDA,#0A5H解答见书解答见书31页。页。执行结果:执行结果:(A)=74H,(,(PSW)=0C4H若为无符号数运算,则若为无符号数运算,则Cy=1表示结果超出(表示结果超出(0255)。若为带符号数运算,则(

47、)。若为带符号数运算,则(-49)+(-91)=-140超出(超出(-128+127),),OV=1溢出。溢出。(2)带进位加法指令带进位加法运算指令常用于带进位加法指令带进位加法运算指令常用于多字节加法运算。多字节加法运算。ADDC A,Rn;A(A)+(Rn)+CyADDC A,direct;A(A)+(direct)+CyADDC A,Ri;A(A)+(Ri)+CyADDC A,#data;A(A)+data+Cy这这4条带进位的加法指令将累加器条带进位的加法指令将累加器A的内容加当前的内容加当前Cy标志位内容,再加源操作数,将和存于累加器标志位内容,再加源操作数,将和存于累加器A中。运

48、算结果将影响标志中。运算结果将影响标志Cy、AC、OV、P。例例2-8 设(设(A)=0AAH,(,(R0)=55H,Cy=1执行指令执行指令 ADDC A,R0则使(则使(A)=00H(PSW)=0C0H。2.带借位减法指令带借位减法指令SUBB A,Rn;A(A)()(Rn)CySUBB A,direct;A(A)()(direct)CySUBB A,Ri ;A(A)(Ri)CySUBB A,#data;A(A)dataCy以上以上4条减法指令执行过程与带进位加法指令相似,条减法指令执行过程与带进位加法指令相似,只是把加操作改为减操作即可。只是把加操作改为减操作即可。例例2-9 (A)=7

49、6H,立即数为立即数为C5H,(,(Cy)=0,求求二者相减结果。二者相减结果。程序为:程序为:SUBB A,#0C5HOV=C7 C6=1 0=1,有溢出,运算结果为有溢出,运算结果为177 +127,(,(A)=0B1H,(,(PSW)=84H3.加加1和减和减1指令指令(1)加加1指令加指令加1指令又称增量指令。指令又称增量指令。INC A;A(A)+1INC Rn;Rn(Rn)+1INC direct;direct(direct)+1INC Ri;(;(Ri)(Ri)+1INC DPTR;DPTR(DPTR)+1(2)减减1指令指令DEC A;A(A)1DEC Rn;Rn(Rn)1DE

50、C Ri;(;(Ri)(Ri)1DEC direct;direct(direct)1 除了除了INC A和和DEC A指令影响指令影响PSW的的P标志位外,标志位外,其他几条指令不影响任何标志位。其他几条指令不影响任何标志位。4.乘法指令乘法指令MUL AB指令功能是把累加器指令功能是把累加器A和寄存器和寄存器B中两个中两个8位无符号位无符号二进制数相乘,积的高二进制数相乘,积的高8位存在位存在B寄存器中,积的寄存器中,积的低低8位存在累加器位存在累加器A中。运算结果将对中。运算结果将对Cy、OV、P标志位产生如下影响:标志位产生如下影响:(1)进位标志位进位标志位Cy总是清总是清“0”。(2

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

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(第2章MCS-51单片机应用教程课件.ppt)为本站会员(三亚风情)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|