第二章 MCS-51系列单片机的指系统及汇编语言程序设计.ppt

上传人:hyn****60 文档编号:70680363 上传时间:2023-01-24 格式:PPT 页数:130 大小:1.41MB
返回 下载 相关 举报
第二章 MCS-51系列单片机的指系统及汇编语言程序设计.ppt_第1页
第1页 / 共130页
第二章 MCS-51系列单片机的指系统及汇编语言程序设计.ppt_第2页
第2页 / 共130页
点击查看更多>>
资源描述

《第二章 MCS-51系列单片机的指系统及汇编语言程序设计.ppt》由会员分享,可在线阅读,更多相关《第二章 MCS-51系列单片机的指系统及汇编语言程序设计.ppt(130页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、第二章第二章 MCS-51MCS-51系列单片机的系列单片机的 指令系统及汇编语言程序设计指令系统及汇编语言程序设计2.1 2.1 指令格式与寻址方式指令格式与寻址方式2.1.1 2.1.1 指令格式指令格式2.1.2 2.1.2 MCS-51MCS-51单片机指令中常用符号含义单片机指令中常用符号含义2.1.3 2.1.3 MCS-51MCS-51单片机的寻址方式单片机的寻址方式 MCS-51单片机汇编语言指令格式为:2.1.1 2.1.1 指令格式指令格式标号:操作码 操作数或操作数地址;注释MCS-51单片机汇编语言指令由以下几个部分组成:标号标号操作码操作码操作数或操作数地址操作数或操

2、作数地址注释注释 标号标号标号是程序员根据编程需要给指令设定的符号地址,可有可无;标号由18个字符组成,第一个字符必须是英文字母,不能是数字或其它符号;标号后必须用冒号;在程序中,不可以重复使用。操作码操作码 操作码表示指令的操作种类,规定了指令的具体操作。比如:比如:ADD(加操作),加操作),MOV(数据的传送操作)。数据的传送操作)。操作数或操作数地址操作数或操作数地址 操作数或操作数地址表示参加运算的数据或数据的地址。操作数和操作码之间必须用逗号分开。操作数一般有以下几种形式:没有操作数项,操作数隐含在操作码中,如RET指令;只有一个操作数,如CPL A指令;有两个操作数,如MOV A

3、,#00H指令,操作数之间以逗号相隔;有三个操作数,如CJNE A,#00H,NEXT指令,操作数之间也以逗号相隔。注释注释 注释是对指令的解释说明,用以提高程序的可读性;注释前必须 以“;”和指令分开,注释在每条指令后都可以设有。2.1.2 指令中符号的意义说明指令中符号的意义说明Rn 当前工作寄存器中的某一个,即R0R7;Ri R0或者R1Direct 单片机内部RAM低128字节中的某个字节地址,或者是某个专用寄存器的名字;#data 8位(1字节)立即数#data16 16位(2字节)的立即数Addr16 16位目的地址,在LJMP和LCALL的指令中采用Addr11 11位目的地址,

4、只在AJMP和ACALL指令中采用Rel 相对转移指令中的偏移量。DPTR 数据指针(由DPH和DPL构成)Bit 内部RAM(包括专用寄存器)中可寻址位的地址或名字A 累加器ACCB B寄存器 间接寻址标志/加在位地址前,表示对该位状态取反(X)某寄存器或某单元的内容(X)由X间接寻址的单元中的内容箭头右边的内容传递给箭头左边2.1.3 MCS-512.1.3 MCS-51单片机的寻址方式单片机的寻址方式MCS-51有7种不同的寻址方式:1.1.立即寻址立即寻址2.2.直接寻址直接寻址3.3.寄存器寻址寄存器寻址4.4.寄存器间接寻址寄存器间接寻址5.5.位寻址位寻址6.6.变址寻址变址寻址

5、7.7.相对寻址相对寻址1、立即寻址、立即寻址MOV AMOV A,#40H#40H;将40H这个立即数传送给累加器ACC,“#”符号称为立即数符号,40H在这里称为立即数。比如:MOV DPTR,#6789HMOV R0,#23HA XXMOVA,#40H40H2、直接寻址、直接寻址MOV A,30H;将内部RAM30H单元内的数传送给累加器ACC。MOV A,60HADD A,30HINC 70HMOV 30H,70HDEC 50H例如:例如:MOV A,30H ;假如(假如(30H)=55H30HMOVA,30H55HXXA55HMOV A,R0数据存放在R0R7中的某个通用寄存器内,或

6、者放在某个专用寄存器中。比如:MOV A,R7 MOV A,SBUF ADD A,R03 3、寄存器寻址、寄存器寻址操作过程:操作过程:MOVA,R0;设;设R0的值为的值为40HR0MOVA,R0AXX40H40H4、寄存器间接寻址、寄存器间接寻址在51单片机中有两个寄存器可以用于间接寻址,它们是R0和R1。当指向片外的64KB的RAM地址空间时,可用DPTR作间接寄存器。MOV A,R0假如R0寄存器中的数据是50H,则以上指令的意思是:将内部RAM中50H单元内的数传送给累加器ACC。Exp:假如R1内的数是70H,在内部RAM的70H单元中存放的数据是00H,在执行以下指令后,外部RA

7、M中3FFFH单元的内容是00H。MOV A,R1MOV DPTR,#3FFFHMOVX DPTR,A以以R0作为间址寄存器方式:作为间址寄存器方式:MOVA,R0以以DPTR作为间址寄存器方式:作为间址寄存器方式:55HAR055H取出取出地址地址78H78H3FFFHADPTR3FFFH取出取出地址地址78H78H5、位寻址、位寻址当单片机要进行某一位二进制数操作时,可采用位寻址。Exp:SETB C指令含义:将专用寄存器PSW中的CY位置为1。CLR P1.0;将单片机的P1.0清“0”。SETB P1.0;将单片机的P1.0置“1”。P1.0X“0”0P1.0P1.0X“1”1P1.0

8、6、变址寻址、变址寻址Exp:MOVC A,A+DPTR指令含义:假设在执行指令前,数据指针DPTR中的数据是1000H,累加器ACC中的数据是50H,则上述指令执行的操作是将:程序存储器1050H单元中的数据传送给累加器ACC。同样寻址方式的指令还有两条:MOVC A,A+PCJMP A+DPTRv该类指令常用于编写查表程序。指令:指令:MOVCA,A+DPTR工作过程:工作过程:3055H相加相加=3055HADPTR3000H取出取出地址地址A55H66H66H7、相对寻址、相对寻址在跳转程序中有一种相对寻址方式,程序的书写方式是:SJMP rel程序含义:当程序执行到上述语句时,在当前

9、语句位置的基础上向前或向后跳转rel中指明的位置。范例JZ relCJNE A,#DATA,relDJNZ R0,relMCS-51MCS-51单片机指令系统包括单片机指令系统包括111111条指令条指令按功能可以划分为以下按功能可以划分为以下5 5类:类:1.1.数据传送和交换指令(数据传送和交换指令(2929条)条)2.2.算术运算指令(算术运算指令(2424条)条)3.3.逻辑运算指令(逻辑运算指令(2424条)条)4.4.控制转移指令(控制转移指令(1717条)条)5.5.位操作指令(位操作指令(1717条条)2.2 2.2 MCS-51MCS-51单片机指令系统单片机指令系统2.2.

10、1 2.2.1 数据传送和交换类指令数据传送和交换类指令 常用助记符:MOV 单片机内部RAM中的数据传递 MOVX 累加器和单片机外部数据存储器间数据传递 MOVC 累加器和程序存储器之间的数据传递 XCH 累加器和某个内部RAM单元进行数据交换 XCHD 累加器和某个内部RAM单元进行低半字节数据交换 PUSH 将某个内部RAM单元的数据压入堆栈 POP 将堆栈内的数据弹出数据传送和交换类指令主要有以下几种:数据传送和交换类指令主要有以下几种:1.1.内部数据传递指令内部数据传递指令2.2.数据指针赋值指令数据指针赋值指令3.3.片外数据传送指令片外数据传送指令4.4.ROMROM数据访问

11、指令数据访问指令5.5.栈操作指令栈操作指令6.6.数据交换指令数据交换指令一、一、内部内部RAMRAM单元间的数据传递单元间的数据传递1.以累加器为目的的传送指令:以累加器为目的的传送指令:MOV A,#data;A data MOV A,direct ;A(direct)MOV A,Rn ;A(Rn)MOV A,Ri ;A(Ri)AXXA33H30H33H结果结果Eg:MOVA,30HEg:MOVA,#10HAXX30H10H结果结果10HAXXA33HR233H55H78HA78HR055H取出取出地址地址Eg:MOV A,R0Eg:MOV A,R2注意:在使用注意:在使用Ri进行间址寻

12、址时,只能够使用进行间址寻址时,只能够使用R0和和R1。2.以通用寄存器以通用寄存器Rn为目的的传送指令:为目的的传送指令:MOVRn,A;Rn(A)MOVRn,direct;Rn(direct)MOVRn,#data;RndataR2R2XX33HA33HEg:MOV R2,AEg:MOVR2,30HEg:MOVR2,#30HR2R2XX55H30H55HR2XXR230H30H3.以直接地址为目的的传送指令:以直接地址为目的的传送指令:MOV direct,#data ;direct data MOV direct1,direct2 ;direct1(direct2)MOV direct,

13、A ;direct(A)MOV direct,Ri ;direct(Ri)MOV direct,Rn ;direct(Rn)Eg:MOV30H,#33H30H30HXX33H33H30H30HXX55H31H55HEg:MOV30H,31HEg:MOV30H,R0Eg:MOV 30H,AEg:MOV30H,R3地址地址55H78H30H78HR0取出取出55H30H30HA33HXX33H30H30HR333HXX33H4.以通用寄存器间接地址为目的的传送指令:以通用寄存器间接地址为目的的传送指令:MOVRi,A;(Ri)(A)MOVRi,direct;(Ri)(direct)MOVRi,#d

14、ata;(Ri)dataEg:MOVR1,AEg:MOVR1,30HEg:MOVR1,#30H55HAR1(地址地址)55H78H78H55H30HR1(地址地址)55H78H78H55H30HR1(地址地址)55H30H二、数据指针赋值指令(二、数据指针赋值指令(16位数据指针)位数据指针)当要对片外的RAM和I/O接口进行访问时,或进行查表操作时,通常要对DPTR赋值。指令为:MOV DPTR,#data16 Eg:将数据指针将数据指针DPTR指向存于指向存于ROM中的表格首地址。中的表格首地址。MOVDPTR,#TABLEDPTRDPTRXXXX2000H2000HEg:将数据指针将数据

15、指针DPTR指向外部指向外部RAM的的2000H单元。单元。MOVDPTR,#2000H三、片外数据传递指令三、片外数据传递指令 使用使用DPTR和和Ri进行间接寻址进行间接寻址 MOVX A,DPTR ;A(DPTR)片外片外 MOVX A,Ri ;A(Ri)片外片外 MOVX DPTR,A ;(DPTR)片外片外(A)MOVX Ri,A ;(Ri)片外片外(A)v注意:注意:该指令用于在单片机和外部该指令用于在单片机和外部RAM、扩展扩展I/O的数据传送;的数据传送;使用使用Ri时,只能访问低时,只能访问低8位地址为位地址为00HFFH地址段;地址段;使用使用DPTR时,能访问时,能访问0

16、000H FFFFH地址段。地址段。应用举例:应用举例:例:例:MOV DPTR,#2003H MOV A,#00H MOVX DPTR,A指令执行过程:ADPTR(地址地址)2003H2003H00H00H注意:只有累加器注意:只有累加器A才能把数据传到外部才能把数据传到外部RAM,或或 接收从外部数据存储器传回的数据。接收从外部数据存储器传回的数据。比如:比如:MOVX 20H,DPTR MOVX DPTR,SBUF MOVX DPTR,R2 MOVX DPTR,R1 都是错误的都是错误的思考:思考:如果要将内部如果要将内部RAM中中40H单元中的数据传递单元中的数据传递到外部到外部RAM

17、的的2000H单元中,应如何解决?试写单元中,应如何解决?试写出相应程序。出相应程序。四、查表指令(四、查表指令(ROM数据传送指令数据传送指令)指令格式:指令格式:MOVC A,A+DPTR ;A(A)+(DPTR)MOVC A,A+PC ;A(A)+(PC)3055H相加相加=3055HA66HDPTR3000H取出取出地址地址A55H66HEg:MOVDPTR,#3000HMOVA,#55HMOVCA,A+DPTR例:在累加器例:在累加器A中存放有中存放有09间的某个数,现要求查出该数的间的某个数,现要求查出该数的7段段共共阴显示代码,并将代码传回累加器。阴显示代码,并将代码传回累加器。

18、解决方案:在程序存储器中划出一个区域用于存放09的7段共阴显示代码,比如将代码存放在0400H开始的地方。程序如下:MOV DPTR,#0400H MOVC A,A+DPTR ORG 0400H DB 3FH ;0的的7段共阴显示代码段共阴显示代码 DB 06H ;1的的7段共阴显示代码段共阴显示代码 DB 5BH ;2的的7段共阴显示代码段共阴显示代码 DB 4FH ;3的的7段共阴显示代码段共阴显示代码 DB 66H ;4的的7段共阴显示代码段共阴显示代码 v注意:我们只能将程序存储器中的数据传出(读出),而注意:我们只能将程序存储器中的数据传出(读出),而不能将数据传入(写入)程序存储器

19、。因此,语句:不能将数据传入(写入)程序存储器。因此,语句:MOVC A+DPTR,A MOVC A+PC,A 都是错误的。都是错误的。思考题:思考题:MCS-51单片机的运算能力比较差,想想单片机的运算能力比较差,想想能不能够利用查表方式进行函数能不能够利用查表方式进行函数y=sin(x)的运算?的运算?五、堆栈操作指令五、堆栈操作指令堆栈操作指令包含入栈(堆栈操作指令包含入栈(PUSH)和出栈(和出栈(POP)。)。在使用在使用堆栈之前要首先给堆栈指针堆栈之前要首先给堆栈指针SP赋值。赋值。指令格式:指令格式:PUSH direct POP direct注意:先入后出原则注意:先入后出原则

20、程序举例:程序举例:MOV SP,#30H PUSH SBUF;SP (SP)+1,31H(SBUF)PUSH 60H ;SP (SP)+1,32H(60H)POP 60H ;60H(32H),SP (SP)-1 POP SBUF;SBUF(31H),SP(SP)-1(SP+1)栈底栈底(SP+2)入栈入栈出栈出栈(SP)六、字节交换指令六、字节交换指令字节交换指令指内部字节交换指令指内部RAM中的某个单元和累加器中的某个单元和累加器A之间进行数据交换,可以是整个字节,也可以是半个字之间进行数据交换,可以是整个字节,也可以是半个字节。包含节。包含3种交换方式:种交换方式:1、整字节交换指令:、

21、整字节交换指令:XCH A,Rn ;(A)(Rn)XCH A,direct ;(A)(direct)XCH A,Ri ;(A)(Ri)A内部内部RAM单元单元2、半字节交换指令、半字节交换指令 XCHD A,Ri ;(A)30 (Ri)30指令执行后指令执行后A0A1A2A3D4D5D6D7(Ri)D0D1D2D3A4A5A6A7AD0D1D2D3D4D5D6D7(Ri)A0A1A2A3A4A5A6A7A执行指令前执行指令前3、累加器、累加器A高低半字节的交换指令高低半字节的交换指令 SWAP A执行前执行前A7A6A5A4A3A2A1A0执行后执行后A3A2A1A0A7A6A5A4例:例:假

22、设在执行指令之前(假设在执行指令之前(A)=70H,则在指令执行完后,则在指令执行完后,(A)=07H。执行前执行前01110000执行后执行后000001112-2-2 2-2-2 算术运算指令算术运算指令 算术运算指令有加法、减法、乘法和除法四类,算术运算指令有加法、减法、乘法和除法四类,除加除加1和减和减1指令,其他所有的指令都将影响指令,其他所有的指令都将影响PSW的标的标志位。志位。程序状态程序状态字字PSWD7D6D5D4D3D2D1D0CYACF0RS1 RS2OVP进位进位借位借位辅助辅助进位进位自定自定标志标志通用寄存通用寄存器选择位器选择位溢出溢出标志标志奇偶奇偶校验校验一

23、、不带进位的加法指令一、不带进位的加法指令ADD A,Rn ;A(A)+(Rn)ADD A,direct ;A(A)+(direct)ADD A,Ri ;A(A)+(Ri)ADD A,#data ;A(A)+data例:将内部例:将内部RAM中中40H和和41H单元的数相加,再把单元的数相加,再把和送到和送到42H单元。单元。MOV A,40H ADD A,41H MOV 42H,A加法运算对加法运算对PSW标志位的影响标志位的影响1、在上例中,如果运算结果超出、在上例中,如果运算结果超出FFH(255),),将产生进位将产生进位PSW的的CY位将被置位将被置1。2、若预先说明、若预先说明40

24、H和和41H中放置的是有符号数,中放置的是有符号数,则在运算指令则在运算指令“ADD A,41H”执行后,还要检查执行后,还要检查PSW中溢出位中溢出位OV的状态,如果的状态,如果OV位为位为1,则运算结,则运算结果错误。果错误。溢出产生的条件:溢出产生的条件:在运算时,如果在运算时,如果D6D6位和位和D7D7位中一个有进位而另一个位中一个有进位而另一个无进位,则无进位,则OV=1OV=1,溢出。溢出。二、带进位的加法运算二、带进位的加法运算该类该类指令主要用于多字节的加法运算指令主要用于多字节的加法运算ADDC A,Rn ;A(A)+(Rn)+(CY)ADDC A,direct ;A(A)

25、+(direct)+(CY)ADDC A,Ri ;A(A)+(Ri)+(CY)ADDC A,#data ;A(A)+data+(CY)v如果加数和被加数是无符号数,则在计算后要如果加数和被加数是无符号数,则在计算后要注意是否产生进位。注意是否产生进位。v如果加数和被加数是有符号数,则在计算后要如果加数和被加数是有符号数,则在计算后要注意是否溢出,只要溢出,则运算结果错误;如注意是否溢出,只要溢出,则运算结果错误;如果无溢出,则注意是否有进位。果无溢出,则注意是否有进位。例:加数存放在内部例:加数存放在内部RAM的的41H(高位)和高位)和40H(低位),被加数存放在低位),被加数存放在43H(

26、高位)和高位)和42H(低位),将它们相加,和存放在低位),将它们相加,和存放在46H44H中。中。程序:程序:CLR C MOV A,40H ADD A,42H MOV 44H,A MOV A,41H ADDC A,43H MOV 45H,A CLR A ADDC A,#00H MOV 46H,A三、加三、加1指令指令INC A ;A(A)+1INC Rn ;Rn(Rn)+1INC direct ;direct(direct)+1INC Ri ;(Ri)(Ri)+1INC DPTR ;DPTR(DPTR)+1注意:以上所有指令不会影响注意:以上所有指令不会影响PSW中的各个标志位。中的各个标

27、志位。例:设例:设(A)=FFH,(R0)=25H,(26H)=3AH,(DPTR)=2000H执行程序:执行程序:INC A INC R0 INC R0 INC DPTR结果为:结果为:(A)=00H,(R0)=26H,(26H)=3BH,(DPTR)=2001H四、减四、减1指令指令DEC A ;A(A)-1 DEC Rn ;Rn(Rn)-1 DEC direct ;direct(direct)-1 DEC Ri ;(Ri)(Ri)-1注意:减注意:减1指令也不会影响指令也不会影响PSW的的各个标志位。各个标志位。思考:设思考:设(A)=FFH,(R0)=27H,(26H)=3AH 执行程

28、序:执行程序:DEC A DEC R0 DEC R0 结果结果(A)=_ ,(R0)=_,(26H)=_。五、减法指令五、减法指令 SUBB A,Rn ;A(A)-(Rn)-(CY)SUBB A,direct ;A(A)-(direct)-(CY)SUBB A,Ri ;A(A)-(Ri)-(CY)SUBB A,#data ;A(A)-data-(CY)v如果减数和被减数是无符号数,则在计算后要注如果减数和被减数是无符号数,则在计算后要注意是否产生借位。意是否产生借位。v如果减数和被减数是有符号数,则在计算后要注如果减数和被减数是有符号数,则在计算后要注意是否溢出,只要溢出,则运算结果错误;如果

29、无意是否溢出,只要溢出,则运算结果错误;如果无溢出,则注意是否有借位。溢出,则注意是否有借位。例:设(例:设(A)=C9H,(,(R2)=54H,(,(CY)=1,执行指令执行指令SUBB A,R2 11001001 01010100 -1 01110100结果结果:(A)=74H,借位位借位位(CY)=0。六、乘法运算六、乘法运算 MUL AB 指令含义:将指令含义:将(A)(B),乘积的低位字节放在乘积的低位字节放在A中,高位字节放在寄存器中,高位字节放在寄存器B中。中。v对对PSW状态位的影响:状态位的影响:Cy位被清位被清0乘积大于乘积大于FFH时,时,OV位为位为1。七、除法运算七、

30、除法运算DIV AB指令含义:将指令含义:将(A)(B),将商放入将商放入A,余数放入余数放入寄存器寄存器B中。中。v对对PSW标志位的影响:标志位的影响:Cy位被清位被清0如果除数如果除数(B)=0,则,则OV位被置位被置1,表示除法无意,表示除法无意义,不能进行。义,不能进行。八、十进制调整指令八、十进制调整指令DA A这条指令用于对这条指令用于对BCDBCD编码的十进制数相加结果进行编码的十进制数相加结果进行调整。例:调整。例:10010011 (93)BCD +00111000 (38)BCD 11001011(CBH)131相应程序:相应程序:MOV R2,#93H MOV A,#3

31、8H ADD A,R2 DA A2-2-3 2-2-3 逻辑运算指令逻辑运算指令该类该类指令包含与、或、非、清指令包含与、或、非、清0 0、异或和移位指令、异或和移位指令等共等共2424条。这些指令都不会影响条。这些指令都不会影响PSWPSW的各标志位。的各标志位。一、逻辑与运算指令组一、逻辑与运算指令组 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(A)(direct)ANL direct,#data ;direct(direct)da

32、ta例例:(A)=78H,(R1)=37H,:(A)=78H,(R1)=37H,则执行指令则执行指令 ANL A,R1后后,(,(A)=30H (A)01111000 (R1)00110111 (A)00110000程序设计程序设计:读入读入P1P1口的数据口的数据,将其低将其低4 4位清位清0,0,高高4 4位保留位保留,再把结果放到内部再把结果放到内部RAMRAM的的40H40H单元。单元。MOVA,P1ANLA,#0F0HMOV40H,A二、逻辑或运算指令二、逻辑或运算指令 ORL A,Rn ;A(A)V(Rn)ORL A,direct;A(A)V(direct)ORL A,Ri;A(A

33、)V(Ri)ORL A,#data;A(A)Vdata ORL direct,A ;direct(A)V(direct)ORL direct,#data ;direct(direct)Vdata 或或运算举例:假设运算举例:假设(A)=60H,(30H)=79H,(A)=60H,(30H)=79H,则执行指令则执行指令 ORL A,30HORL A,30H后后,(A)=,(A)=79H79H (A)01100000 (30H)V 01111001 01111001程序设计举例程序设计举例:将串口缓冲区将串口缓冲区SBUFSBUF中的数据送到内中的数据送到内 部部RAM40HRAM40H单元单元

34、,再将其低再将其低7 7位位(D6D0)(D6D0)全部变成全部变成1.1.MOV40H,SBUFORL40H,#7FH三、逻辑异或运算三、逻辑异或运算 XRL A,Rn ;A(A)(Rn)XRL A,direct;A(A)(direct)XRL A,Ri;A(A)(Ri)XRL A,#data;A(A)data XRL direct,A ;direct(A)(direct)XRL direct,#data ;direct(direct)data异或运算举例:假设异或运算举例:假设(A)=45H,(60H)=78H,(A)=45H,(60H)=78H,则在执行则在执行指令。指令。XRL A,6

35、0H后后(A)=3DH (A)01000101 (60H)01111000 00111101 异或指令可用于判断两个字节中的数据是否相等异或指令可用于判断两个字节中的数据是否相等.程序设计程序设计:如果如果(40H)=(60H),(40H)=(60H),将将PSWPSW中的中的F0F0位置位置1.1.CLR F0 MOV A,40H XRL A,60H JNZ OUT SETB F0四、累加器清四、累加器清0 0和取反指令和取反指令累加器清累加器清0 0指令指令 CLR A ;A 0累加器按位取反指令累加器按位取反指令 CPL A ;A/A例:假设例:假设(A)=89H,(A)=89H,在执行

36、指令在执行指令 CPL A后后,(A)=76H 89H=10001001取反取反:01110110=76H 五、累加器移位指令五、累加器移位指令D0D1D2D3D4D5D6D71 1、循环左移、循环左移 RL A01100101假设假设:(A)=0A6H,:(A)=0A6H,则在执行指令则在执行指令“RL ARL A”后后,(A)=4DH(A)=4DH执行前执行前(A):(A):10110010执行后执行后(A):(A):D0D1D2D3D4D5D6D72 2、循环右移、循环右移RR A01100101假设假设:(A)=0A6H,:(A)=0A6H,则在执行指令则在执行指令“RR A”RR A

37、”后后,(A)=53H执行前执行前(A):(A):11001010执行后执行后(A):(A):3、带进位循环左移带进位循环左移RLC A例例:假设假设(A)=0A6H,(CY)=0;(A)=0A6H,(CY)=0;则在执行指令则在执行指令“RLC RLC A A”后后(A)=_,(CY)=_(A)=_,(CY)=_执行前执行前:CYD7 D6 D5 D4 D3 D2 D1 D0010100110101001100执行后执行后:4、带进位位循环右移带进位位循环右移RRC A例例:假设假设(A)=0A6H,(CY)=0;(A)=0A6H,(CY)=0;则在执行指令则在执行指令“RRC ARRC A

38、”后后(A)=_,(CY)=_(A)=_,(CY)=_执行前执行前:CY D7 D6 D5 D4 D3 D2 D1 D0010100110110010100执行后执行后:2-2-4 2-2-4 控制转移指令控制转移指令 在在编写一个略复杂的控制程序时编写一个略复杂的控制程序时,不免要涉及到程不免要涉及到程序的跳转和子程序调用序的跳转和子程序调用,这时就要用到转移类指令。这时就要用到转移类指令。转移类指令包含有条件转移和无条件转移两种转移类指令包含有条件转移和无条件转移两种一、无条件转移指令组一、无条件转移指令组1、长转移指令、长转移指令 LJMP 目标语句目标语句说明:目标语句可以是程序存储器

39、说明:目标语句可以是程序存储器64KB空间的任空间的任何地方。何地方。2、绝对转移指令绝对转移指令 AJMP 目标语句目标语句 例:例:4002H AJMP MM 4600H MM:MOV A,#00H 注意:目标语句必须和当前语句同页。在注意:目标语句必须和当前语句同页。在5151单片单片机中,机中,64KB64KB程序存储器分成程序存储器分成3232页,每页页,每页2KB(7FFH)2KB(7FFH)。比如比如:0000H07FFH 0800H0FFFH 1000H17FFH 1800H1FFFH3、短跳转指令短跳转指令 SJMP 目标语句目标语句(rel)例:例:4060H SJMP L

40、OOP 4090H LOOP:MOV A,#0FFH v注意:短跳转的目标语句地址必须在当前语句注意:短跳转的目标语句地址必须在当前语句向前向前128128(80H80H)字节,向后字节,向后127127(7FH7FH)字节,否字节,否则在进行程序编译时肯定出错。则在进行程序编译时肯定出错。4、变址寻址转移指令变址寻址转移指令 JMP A+DPTR该指令主要用于多分支的跳转程序设计。跳转该指令主要用于多分支的跳转程序设计。跳转的目标地址是累加器的目标地址是累加器A A和和数据指针数据指针DPTRDPTR之和,它可之和,它可以是以是64KB64KB存储空间的任何地方。存储空间的任何地方。程序设计

41、举例:如果程序设计举例:如果(A)=00H,(A)=00H,执行执行SSSS子程序;子程序;如果如果(A)=01H(A)=01H,执行执行MMMM子程序;如果子程序;如果(A)=02H(A)=02H,执行执行XXXX子程序。子程序。ORG 4000H MOV DPTR,#5000H MOV R2,A CLR C RLC A ADD A,R2 JMP A+DPTR ORG 5000H5000H LCALL SS5003H LCALL MM5006H LCALL XX 二、条件转移指令组二、条件转移指令组所谓条件转移,指指令中规定的条件满足时,程序跳所谓条件转移,指指令中规定的条件满足时,程序跳转

42、到目标地址。转到目标地址。1 1、累加器判零转移指令、累加器判零转移指令JZJZ 目标地址目标地址(rel);(rel);如如(A)=0,(A)=0,跳到目标语句跳到目标语句 ;如如(A)0,(A)0,顺序执行下顺序执行下 ;一条指令一条指令JNZ JNZ 目标地址目标地址(rel);(rel);如如(A)0,(A)0,跳到目标语句跳到目标语句 ;如如(A)=0,(A)=0,顺序执行下一条顺序执行下一条 ;指令指令v注意注意:目标语句的地址是相对地址目标语句的地址是相对地址,应该在当前语句向应该在当前语句向前不超过前不超过128128字节字节,向后不超过向后不超过127127字节字节.程序举例

43、程序举例:MOV A,#10H JZ OUT MOV R2,#30H OUT:RLC A 2 2、数值比较转移指令、数值比较转移指令 CJNE A,#data,目标语句目标语句(rel)(rel)指令含义指令含义:如累加器的数和立即数不相等如累加器的数和立即数不相等,则则跳到目标语句跳到目标语句;若相等则顺序执行下一条指令。若相等则顺序执行下一条指令。CJNE A,direct,rel CJNE Rn,#data,rel CJNE Ri,#data,rel 程序举例:如果程序举例:如果(A)=00H,(A)=00H,执行执行SSSS子程序;如子程序;如果果(A)=10H(A)=10H,执行执行

44、MMMM子程序;如果子程序;如果(A)=20H(A)=20H,执行执行XXXX子程序。子程序。CJNE A,#00H,SSCJNE A,#10H,MMCJNE A,#20H,XXSS:MM:XX:3、减减1 1条件转移指令组条件转移指令组该类指令主要用于循环程序设计。该类指令主要用于循环程序设计。DJNZ Rn,目标地址目标地址(rel);如果如果(Rn)-10(Rn)-10,则程序跳转到目标语句,则程序跳转到目标语句,否则顺序执行下一条语句。否则顺序执行下一条语句。DJNZ direct,目标地址目标地址(rel)程序设计举例:程序设计举例:将内部将内部RAMRAM中中30H30H3FH3F

45、H的数依次送到的数依次送到70H7FH 单元中。单元中。ORG0000H MOV R0,#30H ;数据源首地址数据源首地址 MOV R1,#70H ;数据存放目标首地址数据存放目标首地址 MOV R2,#10H ;数据个数数据个数LOOP:MOV A,R0 MOV R1,A INC R0 INC R1 DJNZ R2,LOOP SJMP$END 三、子程序调用和返回指令三、子程序调用和返回指令子程序调用指令子程序调用指令、长调用指令、长调用指令 LCALL 目标子程序标号目标子程序标号例:例:LCALL DELAY ;调用调用DELAY 子程序子程序v目标子程序的地址可以是目标子程序的地址可

46、以是64K64K存储器空间存储器空间的任何地方。的任何地方。2 2、绝对调用指令、绝对调用指令 ACALL 目标子程序目标子程序例例:ACALL DELAY注意:目标子程序必须和调用语句同页注意:目标子程序必须和调用语句同页3 3、子程序返回指令、子程序返回指令 RET ;子程序调用返回子程序调用返回4 4、中断服务子程序返回指令、中断服务子程序返回指令 RETI ;中断服务子程序返回中断服务子程序返回 四、空操作指令四、空操作指令指令格式指令格式 NOPv指令作用:计算机执行这条指令时,只是消耗指令作用:计算机执行这条指令时,只是消耗1 1个机器周期的时间。个机器周期的时间。2-2-5 2-

47、2-5 位操作指令位操作指令 v位寻址区域:内部位寻址区域:内部RAMRAM中中20H20H2FH2FH单元中的单元中的128128位和位和专用寄存器中的专用寄存器中的8383位,一共是位,一共是211211位,凡是可以进行位,凡是可以进行位寻址的位,都可以进行位操作。位寻址的位,都可以进行位操作。一、位传送指令一、位传送指令MOV C,bit ;Cy(bit)MOV bit,Cy ;bit(Cy)例:例:MOV C,00H;将将00H位的状态传送给位的状态传送给CY MOV P1.0,C;将将CY位的状态传给位的状态传给P1口口 ;的第的第0位位二、位置二、位置“1 1”和清和清“0 0”C

48、LR bit ;bit 0CLR C ;Cy 0SETB bit ;bit 1SETB C ;Cy 1例例:将将P1口的第口的第7位置成高电平。位置成高电平。SETB P1.7例例:SETB 20H MOV C,20H CLR 20H三、位逻辑运算指令三、位逻辑运算指令ANL C,bit ;C(C)(bit)ANL C,/bit ;C(C)(/bit)ORL C,bit ;C(C)V(bit)ORL C,/bit ;C(C)V(/bit)CPL C ;C/CCPL bit ;bit/bit一、一、MCS-51单片机汇编语言的伪指令单片机汇编语言的伪指令MCS-51单片机汇编语言程序设计中,常用

49、的伪指令单片机汇编语言程序设计中,常用的伪指令(七条七条):ORG定位伪指令定位伪指令END结束汇编伪指令结束汇编伪指令EQU赋值伪指令赋值伪指令DB定义字节指令定义字节指令DW定义数据字指令定义数据字指令DS定义存储区指令定义存储区指令BIT位定义指令位定义指令2-3 2-3 汇编语言程序设计方法(一)汇编语言程序设计方法(一)题题意意分分析析、熟熟悉悉并并了了解解汇汇编编语语言言指指令令的的基基本本格格式式和和主主要要特点、明确被控对象对软件的要求、设计出算法等。特点、明确被控对象对软件的要求、设计出算法等。1.分配内存工作区及有关端口地址。分配内存工作区及有关端口地址。2.画画出出程程序

50、序流流程程图图。编编写写较较复复杂杂的的程程序序时时,画画出出程程序序流流程程图图是是十十分分必必要要的的。程程序序流流程程图图也也称称为为程程序序框框图图,是是根根据据控控制制流流程设计的,它可以使程序清晰,结构合理,便于调试。程设计的,它可以使程序清晰,结构合理,便于调试。3.编制汇编源程序。编制汇编源程序。4.仿真、调试和优化程序。仿真、调试和优化程序。5.固化程序。固化程序。二、单片机汇编语言程序设计的基本步骤如下二、单片机汇编语言程序设计的基本步骤如下1.顺序程序顺序程序:顺序程序是最简单、最基本的程序结构,顺序程序是最简单、最基本的程序结构,其特点是按指令的排列顺序一条条地执行,直

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com