收藏 分销(赏)

单片机学习资料2.ppt

上传人:精**** 文档编号:6539674 上传时间:2024-12-12 格式:PPT 页数:120 大小:464KB
下载 相关 举报
单片机学习资料2.ppt_第1页
第1页 / 共120页
单片机学习资料2.ppt_第2页
第2页 / 共120页
单片机学习资料2.ppt_第3页
第3页 / 共120页
单片机学习资料2.ppt_第4页
第4页 / 共120页
单片机学习资料2.ppt_第5页
第5页 / 共120页
点击查看更多>>
资源描述

1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,.,*,第二章:MCS-51单片机指令系统,2.1,概述,2.2,寻址方式,2.3,数据传送,指令,2.4,算逻运算和移位指令,2.5,控制转移和位操作指令,1,.,2.1,:MCS-51指令系统的概述,MCS-51共有111条指令,指令的长度和执行时间因不同的指令而各不相同。,2.1.1,指令格式,2.1.2,指令的三种表示形式,2.1.3,指令的字节数,2.1.4,指令的分类,继续,2,.,2.1.1 指令格式:,指令格式:既指令的结构形式。,OP,DATA,或,ADDRESS,操作码,操作数或操作数地址,

2、由操作码和操作数(或操作数地址)构成指令的结构。,举例:,MOV,A,#0FFH,ADD,A,R0,返回,3,.,指令的表示形式是识别指令的标志。,1,二进制的表示形式:,(以“,累加器的内容+08H,”为例),00100100B,操作码 OP(加法),00001000B,操作数DATA(08H),特点:能被CPU直接识别、运行的形式。也称机器码、汇编语,言的目标代码。,缺点:不便于阅读、记忆和调试修改。,2.1.2 指令的三种表示形式:,4,.,2,十六进制表示方式:,它是对二进制形式的一种简化。,00100100B,24H,00001000B,08H,在实验室等少数环境下,可以将这种形式作

3、为输入程序的一种辅助手段。但是,这种形式的指令格式必须由对应的监控程序把它们翻译成二进制的“机器码”后存入程序存储器并运行。,二进制表示的形式 十六进制表示的形式,5,.,3,指令的“助记符”方式(也称“汇编格式”):,00100100B,24H,00001000B,08H,ADD A,#08H,1,这是一种由,英文单词,或,字母,、,数字,来表征指令功能的,形式。是一种便于阅读、书写和交流的表示形式。,2,这种“汇编”格式的指令必须把它“翻译”为二进制形式,“机器码”后才能为CPU所识别和执行。,3,三种不同的表示方法适用于不同的场合。,本章内容都以汇编的形式介绍指令系统。,二进制表示形式,

4、十六进制表示,汇编格式,返回,6,.,2.1.3 指令的字节数,在,MCS-51,单片机的指令系统中,因指令操作码和操作数的不同,指令(在存储器中)长度也各不相同。,分为单字节、双字节和三字节。,单字节指令(49条),:,分,无操作数,、,有操作数,两种。,无操作数:,如 INC DPTR 10100011B,INC A 00000100B,【,特点,】,:操作数隐含在操作码中。,含有,操作数寄存器名称,的单字节指令:,如:MOV A,R0 11101,000,B,MOV A,R1,11101,001,B,【,特点,】,:寄存器名以三位数代码的形式在指令的后三位。,7,.,双字节指令(46条)

5、:,指令的操作码和操作数各占一个字节。如:,MOV A,#data 01110100B data,很明显:8位的操作数本身占据一个字节。,程序存储器,01110100,data,n,n+1,mov a,#data,双字节指令在程序存储器的存放示意图,8,.,三字节指令(16条):,指令中的操作数为双字节。如:,MOV DPTR,#data16,1001000B,data15-8,data7-0,或者:指令中分别包含1个字节的操作数和1个字节的操作数地址。如:,MOV direct,#data,举例:MOV 20H,#0FFH,10010000,data15-8,data8-0,MOV dptr

6、,#data16,OP (75H),direct(20H),data (FFH),MOV direct,#data,三字节指令在存储器中存放的方式示意图,9,.,指令的字节数与指令的运行时间,指令的字节多是否意味着指令周期就长?,指 令,字节数,周期数,指令说明,MOV A,R0,1,1,R0内容送累加器A,MOV A,#0FFH,2,1,立即数FFH送A,MOV 20H,#30H,3,2,立即数30H送内存20h单元,MUL AB,1,4,乘法指令,INC DPTR,1,1,16位寄存器DPTR加一,从表中可见,指令的字节数与指令周期不是对等的关系,返回,10,.,2.1.4 指令的分类,M

7、CS-51单片机的指令如果按功能划分可以分为五类:,1,数据传送类指令:,完成数据在单片机内部之间的传送。,分为8位数和16位两种。除了奇偶位外,指令的执行对,PSW无影响。,2,算术运算指令:,用于操作数之间的加、减、乘除运算。,【,特点,】,:多数情况下:操作数之一在累加器A中,结果也保留在A中,运算结果要影响PSW(进位标志、奇偶和溢出标志等)。,3,逻辑操作,和,循环移位指令:,操作数之间的逻辑加、逻辑与、取反和异或等操作。多数情况下一个操作数在A中,结果也存于A。移位指令分为左移、右移和带进位和不带进位几种情况。与算术类指令相比逻辑类指令基本不影响PSW的内容。,11,.,4,控制转

8、移类指令:,条件转移、无条件转移,调用和返回。,【,特点,】,:通过修改程序指针PC的内容,使CPU转到另一处执行,从而改变程序的流向。,5,位操作指令:,位传送、位置位、位运算和位控制转移等操作。,【,特点,】,:按位操作而不是按字节的操作。位控转移的判断不是检测某一个字节而是对某一个位进行检测并决定是否进行程序转移。,这类指令基本不影响PSW的内容。,返回,12,.,2.2 寻址方式,在指令的操作数位置上,用于,表征、寻找操作数的方式,定义为“,寻址方式,”。,正确的理解、掌握寻址方式,是学习、使用指令的关键,。,在MCS-51单片机中,共使用了七种寻址方式。它们分别是:,1,寄存器寻址,

9、5,变址寻址,;,2,直接寻址,6,相对寻址,;,3,立即数,寻址 7,位寻址,。,4,寄存器间接寻址,继续,13,.,2.2.1寄存器寻址,当所需要的,操作数,在内部某一个寄存器Rn中时,将此寄存器名,Rn,直接写在指令的操作数的位置上。如:,MOV A,R7,;将寄存器R7中的内容送累加器A中。,MOV,20H,R0,;将寄存器R0中的数据送内存20H单元,INC,R1,;将寄存器R1中的内容加一,ADD A,R3,;A的内容与寄存器R3的内容相加送A,寄存器寻址方式的指令大多是单字节指令。指令本身并不带有操数,而是含有存放操作数的,寄存器的3位代码。,以,MOV A,Rn,为例,使用R7

10、寄存器,所以rrr=111,既指令的机器码为:0EFH,1 1 1 0 1,r r r,操作码,寄存器代码,返回,E8HEFH,MOV A,Rn,14,.,2.2.2 直接寻址,指令本身含有操作数的8位或16位地址。既指令,直接,给出了操作数的地址。如:,MOV A,30H,;将RAM30H单元内容送累加器,这里,30H,是操作数在RAM中的地址。,很明显,直接寻址的指令长度是两个或三个字节。,程序ROM,OP,30H,数据RAM,操作数,x,n,n+1,30H,累加器A,直接寻址示意图,15,.,使用直接寻址应注意的三个问题:,1,指令助记符中direct是用16进制数表示的操作数地址。,当

11、地址恰好在SFR区域时,指令也可以用寄存器名来表示。,如:,MOV A,80H,可以写成,MOV A,P0,后者用SFR中寄存器的名字取代它的物理地址80H。很明显,后者更容易阅读和交流,,所以我们提倡使用SFR中寄存器名称来代替直接地址,。,如:,MOV A,SBUF,;串口数据缓冲器数据送A,MOV IE,#00H,;初始化中断允许寄存器,MOV TH1,#0FEH,;为定时器1赋初值,尽管使用SFR的寄存器名称来取代直接地址,可以带来程序的可读性,但是在汇编时,仍要将寄存器名字转换为直接地址。,16,.,2,当直接地址时在工作寄存器区中时,可以使用两种寻址方式来访问。如:,MOV A,0

12、0H,;将RAM中00H单元数据送累加器A,MOV A,R0,;将工作寄存器R0的内容送累加器A,这里使用了不同的寻址方式,其指令的结构也不相同。,前者是:,11100101(0E5H)、00000000(00H),双字节。,后者的机器码是:,11101000(0E8H),单字节;,在物理结构上,R0与RAM的00H单元恰好是同一单元,所以不同的指令而执行结果是一样的。,类似的还有累加器A:,INC A,寄存器寻址方式(单字节);,INC ACC,直接寻址方式(双字节);,INC 0E0H,直接寻址方式(双字节)。,17,.,3,在指令系统中:,字节地址,与,位地址,是完全不同的概念。,前者用

13、direct表示,而后者用bit 表示,但在指令中都是用16进制表示的数。,如:,MOV A,20H ;将RAM的20H单元内容送A,MOV C,20H ;将位寻址区中的位地址为20H位内容送,PSW 中的Cy中。,18,.,片内 RAM(20H-2FH)中的位寻址区结构图,7F,7E,7D,7C,7B,7A,79,78,77,76,75,74,73,72,71,70,6F,6E,6D,6C,6B,6A,69,68,67,66,65,64,63,62,61,60,5F,5E,5D,5C,5B,5A,59,58,57,56,55,54,53,52,51,50,4F,4E,4D,4C,4B,4A,

14、49,48,47,46,45,44,43,42,41,40,3F,3E,3D,3C,3B,3A,39,38,37,26,25,24,23,22,21,20,2F,2E,2D,2C,2B,2A,29,28,27,26,25,24,23,22,21,20,1F,1E,1D,1C,1B,1A,19,18,17,16,15,14,13,12,11,10,0F,0E,0D,0C,0B,0A,09,08,07,06,05,04,03,02,01,00,2FH,20H,字节地址,返回,24H,位地址,返回前一次,19,.,2.2.3立即寻址,指令本身直接含有所需要的8位或16位的操作数。,将此数称为“立即数

15、”(使用#标明)。如:,MOV A,#30H,;将(8位)立即数送累加器A,MOV DPTR,#2000H,;16位立即数送DPTR积存器,【注意】,:,MOV A,#30H,MOV A,30H,两者的区别。,立即数寻址的指令长度为2或3个字节。,74H,30H,n,n+1,ROM,累加器A,MOV A,#30H,指令执行流程,90H,20H,00H,ROM,DPTR,MOV DPTR,#2000H,指令的存储和执行,返回,20,.,2.2.4 寄存器间接寻址,指令中含有,保存操作数地址的,寄存器Ri,。,MOV A,Ri (i=0、1),CPU首先根据指令中寄存器名Ri找到操作数地址,然后再

16、从该地址中找到操作数,x,。,如:MOV R0,#30H ;立即数送R0寄存器,MOV A,R0 ;从RAM的H单元取数送累加器A,【注意】,MOV A,R0,和,MOV A,R0,指令的区别。,ROM,1110011,0,RAM,x,30H,30H,R0,00H,累加器A,1,2,3,21,.,使用寄存器间址指令时应注意的三个问题:,1,间址寄存器Ri只能使用R0、R1寄存器(i=0、1)。,2,间址方式不仅用于片内RAM,同样也适用于片外RAM。,对于片内RAM使用Ri寄存器,寻址范围为00HFFH。,对于片外RAM,,可以使用Ri,也可以使用DPTR做间址寄存器。两者区别在于后者寻址范围

17、为0000HFFFFH,两者都可以RAM和ROM。,3,间址方式的指令不能访问SFR中的单元。如下面的程序是错误的:,MOV R1,#80H,MOV A,R1 (因为80H为SFR的物理地址),22,.,MCS-51 片内、片外 数据存储器示意图,特殊功能,寄存器,SFR,通用数据,存储器,80H,7FH,00H,FFH,片内数据存储器 片外数据存储器,256B个字节 64KB个字节,片外数据,存储器,64KB,0000H,FFFFH,注意:,1,访问片内RAM20H存储单元;,MOV A,20H,2,访问片外RAM存储单元;,MOV R0,#20H,MOVX A,R0,3,尽管片内与片外的R

18、AM单元,的00H-FFH地址相重叠但由,于指令的不同不会发生地址,混乱。,返回,23,.,2.2.5 变址寻址,指令使用,DPTR,或,PC,中的内容作为基地址,再与累加器A的内容相加,其和作为操作数地址。如:,MOVX A,A+PC,;PC内容与A的内容相加得操作数地址,并将此操作数送A,MOVX A,A+DPTR,;,DPTR内容与A的内容相加得操作数,地址并将此操作数送A,使用变址指令时,要事先分别为,A,、,DPTR,赋值,以便获得操作数得地址。,24,.,变址指令只适用于对ROM存储器得访问,如查表等。,【举例】:,已知ROM中0302H 单元有一个数x,现要把它送到累加器A中,试

19、编程。,MOV DPTR,#0300H,;立即数送DPTR,MOV A,#02H,;立即数送累加器A,MOVC A,A+DPTR,;从ROM的00302单元取数送A,25,.,变址寻址示意图,02H,0300H,ROM,X,ALU,0302H,累加器A,DPTR,0300H,+02H,0302H,MOVC A,A+DPTR,返回,26,.,2.2.6 相对寻址,转移指令中使用的一种寻址方式。MCS-51单片机的指令系统中,有两类转移指令:,相对转移(2个或3个字节),绝对转移(3个字节)。,在,绝对转移指令,中,指令直接给出转移的目标地址(2字节地址),执行时将目标地址直接送给PC,从而控制程

20、序转移;,而,相对转移指令,在执行中是将PC值与指令中的8位偏移量进行相加,形成指令要转移的目标地址。,SJMP rel,由指令中有一个8位偏移量,rel,为带符号位的补码,所以控制程序转移的范围为+127-128。,27,.,54H,2002H,程序存储器ROM,80H,54H,ALU,2056H,累加器A,PC,2002H,+54H,2056H,操作码,偏移量,例如:,SJMP 54H ;,(80H、54H),2000H,2002H,(LOOP1),28,.,相对寻址使用中应注意的问题,与绝对寻址相比,相对寻址具有很好的“浮动性”,因此是编程人员普遍使用的一种寻址方式。,使用时,要注意3点

21、:,1,CPU进行地址计算时,PC取值是执行本指令后的地址值。以上面的例子说明:,指令本身的首地址是2000H,执行完后变为2002H(既下一条指令的首地址)。,如果使用三字节的相对转移指令,则PC=PC+3。,返回上一页,29,.,2,偏移量的计算:,rel=目标地址-源地址-2 (2字节指令),或:rel=目标地址-源地址-3 (3字节指令),结果用补码的形式书写。,为了减少计算偏移量的计算,汇编程序允许使用“符号地址”的方式代替偏移量。如:,SJMP loop1,汇编程序在翻译时,自动计算并将结果替换符号地址。,3,如果转移地址的范围超过相对寻址的范围(如:-127+128)时,就要采用

22、别的方式法,否则在编译时,提示出错。,返回,30,.,2.2.7 位寻址,在,位寻址指令(位操作指令),中使用的位地址。,在一般的情况下,系统的数据都是按字节(8位)来存放、处理。,单片机在控制、检测的应用中,系统的输入、输出数据有很多属于开关量信号。这些开关量信号以,bit,-“,位,”的形式进行各种运算、处理和存储的。,MCS-51,单片机,控制、检测,系统,驱动器,电动机,外设1,外设2,状态信号,状态信号,控制信号,31,.,在MCS-51单片机的硬件设计上充分考虑了这种“布尔”变量的处理,不仅在指令系统中设计了“位操作”指令,而且在片内RAM区中还专门开辟了一个“,位寻址区,”。这样

23、,布尔变量可以向字节数据一样进行存储、寻址。,除了位寻址区外,RAM中的大多SFR都可以按位寻址,换句话,SFR除了有自己的字节地址外,在寄存器内的每一位还有其位地址。,32,.,【举例】:,SETB 20H,;将位地址为20H的位置一,SETB 90H,;将P1口的d0位置一,同字节寻址中的直接寻址一样,为了增加程序的可读性,凡在SFR中的,位地址,都可以使用,符号地址,来替代。如第二例中,完全可以使用下面的指令格式:,MOV P1.0,;将P0口的d0位置一,类似还有:,MOV C,ACC.7,;将累加器中的d7位送PSW的cy,这种指令在汇编程序进行翻译时,还是要先将符号地址转换为真正的

24、位地址。,返回,33,.,2.3 数据传送指令,2.3.0,传送指令的特点,2.3.1,内部数据传送类指令,2.3.2,外部数据传送类指令,2.3.3,堆栈操作指令,2.3.4,数据交换指令,继续,34,.,数据传送是编程中使用最多、最主要的操作。它的功能是将数据在累加器、片内的RAM、SFR及片外ROM、RAM之间进行传送。,在传送类指令中,必须指定被传送数据的,源地址,和,目标地址,。在传送过程中,,源地址的内容,不被改变。,传送类指令除了,以累加器A为目标的传送,对,PSW,的,P,有影响外,其余的传送类指令对PWS一概无影响。,操作码,数据的目标地址,数据的源地址,【举例】,:MOV

25、A,R0,;将R0寄存器中的数据送,累加器A中(注意寻址方式),指令通式:,MOV,2.3.0 传送指令的特点,返回,35,.,2.3.1 内部数据传送类指令,特点:指令的源操作数和目的操作数都在单片机内部。,1,,立即寻址型,传送指令,2,,直接寻址型,传送指令,3,,寄存器寻址型,传送指令,4,,寄存器间址型,传送指令,5,,内部数据传送类指令的使用,继续,36,.,1,立即寻址型传送指令,【,特点,】,:,原操作数字节是立即数,,处在指令的第二或第三字节,所以这类指令都是多字节指令。这类指令有如下4条。,MOV A,#data,;A data (双字节指令),MOV Rn,#data,;

26、Rn data (双字节指令),MOV Ri,#data,;(Ri)data (双字节指令),MOV direct,#data,;direct data (三字节指令),这类指令多用于程序的初始化。如:,MOV R0,#20H,MOV A,#00H,37,.,立即寻址指令举例,已知:R0=20H,试问单片机执行如下指令后,累加器A、,R7、20H和21H单元中的内容是什么。,MOV A,#18H ;,立即数18H送累加器A,MOV R7,#28H ;,立即数28H送寄存器R7,MOV R0,#38H ;,立即数38H送内存20H单元,MOV 21H,#48H ;,立即数48H送内存21H单元,

27、返回,38,.,2,直接寻址型传送指令,【,特点,】,:指令中至少含有一个,源操作数,或,目的操作数的地址,。很明显,这也是2个或3个字节的指令格式,其中直接地址在第2或第3个字节上。这类指令有如下5条:,MOV A,direct,MOV direct,A,MOV Rn,direct,MOV Ri,direct,MOV direct2,direct1,【,注意,】,:direct为内部寄存器、RAM和SFR的地址,换句话说:direct适用于片内所有的地址(寄存器、SFR和RAM)。,39,.,直接寻址指令举例,MOV A,30H ;,内存RAM30h单元数据送A,MOV 50H,A ;,A中

28、内容送RAM的50h单元,MOV R6,31H ;,RAM的30h 内容送R6寄存器,MOV Ri,30H ;,RAM30h内容送Ri指定的RAM单元,MOV P1,32H ;,RAM32h内容送P1口(p1:符号地址),MOV 90H,32H,;,(同上,试比较两种表示方法),返回,40,.,3,寄存器寻址型传送指令,指令中含有存放操作数的寄存器名Rn,其中,(,n,0,1,2,3,4,5,6,7)。,共有如下三条:,MOV A,Rn,MOV Rn,A,MOV direct,Rn,返回,41,.,4,寄存器间接寻址型传送指令,指令特点:指令中Ri中存放的不是操作数本身,而是操作数在RAM中的

29、地址(i=0、1)。,格式如下:,MOV A,Ri,MOV Ri,A,MOV direct,Ri,【注意】;Ri中存放操作数的地址是有所选择的,只有非SFR的RAM单元才能使用这种寻址方式。,42,.,寄存器间接寻址指令举例,已知(,40h)=11h,(41h)=22h,R0=40h和R1=41h。试问,下面的指令执行后,累加器A、40h、41h和42h单元中的内容是什么。,MOV A,R0,;RAM40h单元内容11h送A,MOV R1,A,;A中的11h送RAM的41h单元,MOV 42H,R1,;RAM的41h单元内容11h送,RAM42h中,返回,43,.,5,内部数据传送类指令的使用

30、,1,在使用传送指令时,可以根据实际情况选用恰当寻址方式。上面给出的各种类型的传送指令是INTEL公司在设计MCS-51的硬件时就已经确定下来。编程人员只能像查字典一样去查找、使用。不能根据主观意愿去“创造”指令。,例如:要将R0中的数据传送到R1中。如何使用指令去完成上面的操作?,mov r1,r0,是否可以?回答是否定的!因为在MCS-51的指令系统中没有此条指令!只能使用:,1,mov a,r0,或:,2,mov 01h,00h,mov r1,a,因此,必须从MCS-51的指令表中选择使用指令。,44,.,MCS-51,内部数据传送类指令,方式图,累加器A,direct,直接寻址,Ri间

31、址,Rn寄存器,Data立即数,返回上一次,45,.,2,以累加器A为目的寄存器的传送指令会影响PSW中的,奇偶位P,而其余的指令对PSW均无影响。,3,要会正确地估计指令的字节。凡是指令中包含有立即,数、直接地址的指令,都应当在原有的基础上加1。,【举例】:,mov a,Ri ()个字节,mov a,direct ()个字节,mov direct,data ()个字节,mov direct2,direct1 ()个字节,46,.,4,对于同一问题可以有不同的编程方法。使用不同的方法虽然都可以实现题目的要求,但从指令长度、运行时间和可阅读性上等综合因素考虑,不同的方法就有合理和不合理、优化和繁

32、杂之分。所以,在学习指令系统和编程时开始就要养成一个好的、合理的编程习惯。,5,注意给程序进行正确的注释,这对于阅读、编写和修改程序都是非常重要的。下面就是一些注释的例子:,MOV A,30H,;(30h)A,MOV A,R0,;R0 A,MOV 40H,30H,;(30h)40h,MOV A,Ri,;(Ri)A,47,.,内部传送类指令举例,试编出把30h和40h单元内容进行交换。,MOV A,30H,;(30h)A,MOV 30H,40H,;(40h)30h,MOV 40H,A,;A 40h,RAM,X,Y,累加器A,30H,40H,返回,48,.,2.3.2 外部数据传送类指令,1,,1

33、6位数传送指令,2,,外部ROM的字节传送,3,,外部RAM的字节传送指令,继续,49,.,1,16位数传送指令,MCS-51指令系统中唯一的一条16位数据传送类指令。,MOV DPTR,#data16,DPTR是单片机内部SFR中的两个寄存器DPH、DPL组合而成。其中DPH为高八位,DPL为低八位。,DPTR是一个专门用于访问外部存储器的间址寄存器。寻址能力为 64K(065535)。,返回,50,.,2,外部ROM的字节传送指令,这类指令有两条,都属于变址寻址指令。,MOVC A,A+DPTR ;A,(A+DPTR),MOVC A,A+PC ;PC,PC+1,A,(A+PC),该指令也称

34、为“查表”指令。在ROM中建立一个数据表,可以使用DPTR、PC作为数据表格的基地址。,在第一条指令中:用DPTR作为基地址。使用前,先将数据表的首地址送入DPTR中,累加器A作为偏移量。由两者数据相加得到待查的表中数据地址并取出。,第二条指令是以程序计数器PC为基地址。由于PC的内容与该指令在ROM中的位置有关,所以一旦该指令在程序中的位置确定,其PC的值也就确定。,51,.,外部ROM的字节传送指令,举例,已知累加器A中存有09范围内的数,试用查表指令编写出查找出该数平方的程序。,1,采用DPTR作基址寄存器,:,设平方表的首地址为2000h,累加器A中的内容恰好是查表的偏移量。首先将表的

35、起始地址2000h送入DPTR中。,MOV DPTR,#2000H ;指针赋值,MOVC A,A+DPTR ;平方值送A,ROM,0,1,4,9,16,25,36,49,64,81,2000h,2009h,2008h,2007h,2006h,2005h,2004h,2003h,2002h,2001h,52,.,2,采用PC作基址寄存器,:,与DPTR不同,使用PC作为基地址时,必须对累,加器A的数据进行修正,以保证a+pc恰好找到,待查的平方值地址。,ORG 1FFBH,1FFBH,74 data,ADD A,#data,;data=02h,1FFDH,83H,MOVC A,A+PC,;PC=

36、1FFE,1FFEH,80FEH,SJMP$,2000H,00H,DB 0,;平房表首址,2001H,01H,DB 1,2002H,04H,DB 4,2003H,09H,DB 9,2004H,10H,DB 16,2005H,19H,DB 25,:,:,:,2009H,51H,DB 81,END,data为MOVC指令首地址与表头地址之间的,单元数。,74h,data,83h,80h,FEh,0,1,4,9,16,25,36,49,64,81,2000h,2009h,2008h,2007h,2006h,2005h,2004h,2003h,2002h,2001h,1FFFh,1FFEh,1FFDh

37、,1FFCh,1FFBh,返回,53,.,3,外部RAM的字节传送指令,实现外部RAM和累加器A之间的数据传送。只有寄存器间接寻址的指令。,MOVX A,Ri 使用Ri寄存器间址寻址范围0255h,MOVX Ri,A 在硬件电路中P0口输出8位地址数据。,MOVX A,DPTR 使用DPTR间址,寻址范围065535h,MOVX DPTR,A 在硬件电路中,使用P0口输出低8位,,P2口输出高8位外部RAM地址。,54,.,外部RAM的字节传送指令举例,已知外部RAM的88H单元有一个数x,试编程将x送外部RAM的1818H单元。,【解】:外部,RAM,中的数据是不能直接传送的,因此必须使用两

38、次,MOVX,指令完成此操作。,ORG 2000H,MOV R0,#88H,;为8位指针赋值,MOV DPTR,#1818H,;为16位指针赋值,MOVX A,R0,;取 x 到累加器A,MOVX DPTR,A,;x 送RAM的1818h单元,SJMP$,;停机,END,返回,55,.,2.3.3 堆栈操作指令,堆栈操作是一种特殊的数据传送指令。,堆栈:一个用来保存程序断点、数据的特殊的存储区域。在MCS-51单片机中,栈区是占用片内RAM的存储空间,具体栈位置由指针SP来确定(系统上电时,SP=07h)。,1,进栈操作:,push direct,;sp+1sp,(direct)(sp),2,

39、出栈操作:,pop direct,;(sp)(direct),sp-1sp,【注意】:,寻址方式为直接寻址,所以,push a,是错误的,应当是,push acc,或,push 0e0h,,,同理,:,push r0,也是错误的。,进栈是堆栈向上“生长”的过程,即,sp+1,;出栈则相反。,系统上电时,,sp=07h。SP,的值可以根据需要进行修改,以适应具体编程的需要。在确定栈区位置时要考虑对数据区的影响,以避免数据区与栈区冲突。,56,.,堆栈操作指令举例(一),下面是一个BCD码转换为二进制的子程序BCDB中有关堆栈操作的例子。在这里,进栈操作是为了保护主程序中相关寄存器中的数据,因为子

40、程序要使用这些寄存器。,org 0800h,bcdb:,push psw,push acc,push b,:,:,pop b,pop acc,pop psw,ret,RAM,b,acc,psw,栈底,SP,57,.,堆栈操作指令举例(二),堆栈操作指令除了可以在子程序的设计中,对主程序的数据进行保护。还可以根据堆栈操作的特点完成一些特殊的操作。,【举例】:设片内RAM的30h单元存有x,40h单元存有y。试将两个单元内容互换。,push 30h,push 40h,pop 30h,pop 40h,RAM,x,y,y,x,y,x,栈底,SP=07h,40h,30h,继续,58,.,2.3.4 数据

41、交换指令,为提供一种方便的,累加器,和,寄存器,或,RAM,之间的数据交换。避免了使用一般,mov,传送指令完成交换时的不便。,格式:xch a,Rn ;a Rn,xch a,direct ;a (direct),xch a,Ri ;a (Ri),xchd a,Ri ;a,30,(Ri),30,举例:已知,片外RAM20h单元、内部RAM20h单元分别有数,x,和,y,,试编程互将两数相交换。,mov R1,#20h ;,指针赋初值,movx a,R1 ;,x,a,xch a,R1 ;,交换,a(20h),y,a,movx R1,a ;,y,(20h),片外RAM,59,.,数据交换指令举例(

42、一),举例:已知,片外RAM20h单元、内部RAM20h单元分别有数,x,和,y,,试编程互将两数相交换。,mov R1,#20h ;指针赋初值,movx a,R1 ;,xa,xch a,R1,;交换 a(20h),ya,movx R1,a ;,y(20h)片外RAM,片内RAM,y,(x),片外RAM,x,(y),(y),x,20h,20h,累加器A,1,2,3,60,.,数据交换指令举例(二),已知RAM50h单元有一个09的数,试编程将它变成相应的ASCII码。,【解】:,09,的,ASCII,码是,30h39h,两者相差30h。,方法一:对50h单元的数据高四位组装一个30h。,mov

43、 r0,#50h,;指针赋值,mov a,#30h,;,30hA,xchd a,r0,;,A,30,(r0),30,在A中组成ASCII码,mov r0,a,;,A中的ASCII送回50h单元,0000,0101,50h,0011,0101,A=30h,交换后A=,35h,1,2,继续,61,.,2.4 算逻运算和移位指令,功能:完成算术运算、逻辑运算和循环移位三大功能。,特点:大多指令都要由累加器A来存放一个源操作数,并把操作结果放回累加器A中。,2.4.1:算术运算指令,2.4.2:,逻辑运算,指令,2.4.3:,移位指令,继续,62,.,2.4.1:算术运算指令,不带进位的加法指令(AD

44、D),1,,加法指令,:带进位的加法指令 (ADC),加1指令 (,INC,),(,编程举例,),2,,减法指令,:带进位的减法指令 (SUBB),减1指令 (DEC),3,十进制调整指令:(,D,A A),4,乘法和除法指令:(,MUL D,IV),63,.,加法指令(一):,不带进位的加法指令,格式:ADD A,Rn;,A+RnA,ADD A,direct;,A+(direct)A,ADD A,Ri;,A+(Ri)A,ADD A,#data;,A+dataA,【注意】:,1,,参加运算的数据都应当是8位的,结果也是8位并影响,PSW,。,2,,根据编程者的需要,8位数据可以是无符号数,(0

45、255),,也可以是有符号数,(-127+128),。,3,,不论编程者使用的数据是有符号数还是无符号数,,CPU,都将它们视为有符号数(补码)进行运算并影响,PSW,。,64,.,不带进位的加法指令举例(一),试分析执行下列指令后累加器A和PSW中各标志的变化。,MOV A,#19H,Cy=0;,ADD A,#66H,AC=0,OV=CP,CS=0,25 A=0 0 0 1 1 0 0 1 B,P=1,+102 data=0 1 1 0 0 1 1 0 B,127,0 0 1 1 1 1 1 1 1,B,1,若两数都是无符号数,则因Cy=0无溢出,25+102=127。,2,若两个数是有符号

46、数,则因OV=0无溢出。,cy,0 0 0,CP CS AC,65,.,不带进位的加法指令举例(二),试分析执行下列指令后累加器A和PSW中各标志的变化。,MOV A,#5AH,Cy=0;,ADD A,#6BH,AC=0;,OV=CPCS=1,90 A=0 1 0 1 1 0 1 0 B,P=0,+107 data=0 1 1 0 1 0 1 1 B,197,0 1 1 0 0 0 1 0 1,B,CP,CS,AC,1,若两数是无符号数,因Cy=0无溢出:90+107=197,2,若两数是有符号数,因OV=1,故有溢出,两个正数相加后变为负数,很明显结果是不正确的。,66,.,加法指令(二),

47、:带进位的加法指令,格式:ADDC A,Rn;,A+Rn+CyA,ADDC A,direct;,A+(direct)+CyA,ADDC A,Ri;,A+(Ri)+CyA,ADDC A,#data;,A+data+CyA,【注意】:这里的,Cy是指令执行前的Cy;,对PSW的影响同ADD指令。,67,.,加1指令,格式:INC A ;累加器A加一,INC Rn ;Rn+1Rn,INC direct ;内存单元数据加一,INC Ri ;内存单元数据加一,INC DPTR ;dptr+1dptr,【注意】:,1,,除了第一条对,PSW,的,P,有影响外,其余对,PSW,均无影响。,2,,由于上面的原

48、因,INC指令不能作为一般的数据算术运算 使用,INC主要用于修改数据指针等控制、循环语句中使用。,返回本节目录,68,.,编程举例,已知M1、M2单元中存有两个16位无符号数,x1,、,x2,(低位在前)。试写出x1+x2,并将结果放入M1、M1+1单元(低8位在M1单元)。设两数之和不会超过16位(65535)。,【解】:,MOV R0,#M1,;,x1指针赋初值,MOV R1,#M2,;,x2指针赋初值,MOV A,R0,;,取x1低8位送A,ADD A,R1,;,x1与x2低8位相加,MOV R0,a,;,低8位和送m1单元,INC R0,INC R1,;,修改指针,MOV A,R0,

49、;,取x1的高8位送A,ADDC A,R1,;,x1与x2的高8位和Cy相加,MOV R0,A,;,结果送M1+1单元,RAM,X2 data815,X2 data07,X1data815,X1data07,M1,M1+1,M2,M2+1,返回本节目录,69,.,减法指令,(,带进位的减法指令),在MCS-51单片机的指令系统中,只有:,带进位的减法 SUBB,减一 DEC 两种指令。,1减法指令:,格式:SUBB A,Rn;,A Rn Cy A,SUBB A,direct ;,A (direct)Cy A,SUBB A,Ri;,A (Ri)Cy A,SUBB A,#data ;,A data

50、 Cy A,70,.,使用减法指令要注意的几个问题,1,在单片机内部,减法指令实际上是采用补码的加法实现的。但要判定减法结果编程者可以按二进制减法法则验证。,2,无论相减两数是无符号数还是有符号数,减法操作总是按有符号数来处理、影响PSW中相关的标志(详见举例)。,3,在MCS-51的指令系统中没有不带Cy的减法,所以在使用,SUBB,指令前必须使用一条清除Cy的指令:,CLR C,。,71,.,减法指令应用举例,试分析执行下列指令后累加器A和PSW中各标志的变化。,CLR C,MOV A,#52H 01010010B =82,SUBB A,#0B4H 10110100B =-76,82,a=

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
搜索标签

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服