第3章单片机指令系统教材_第1页
第3章单片机指令系统教材_第2页
第3章单片机指令系统教材_第3页
第3章单片机指令系统教材_第4页
第3章单片机指令系统教材_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

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

文档简介

第三章指令系统51系列单片机指令集含有111条指令每条指令在执行时要花去一定的时间,以机器周期为单位。按指令执行时间分类:单周期(64条);双周期(45条);4周期(2条)按指令的功能分类,可分为5大类:数据传送类(28条);算术运算类(24条)逻辑运算及移位类(25条);控制转移类(17条)位操作类(17条)每条指令在程序存储器ROM中占据一定的空间,以字节为单位。按指令所占字节数分类:单字节(49条);双字节(45条);3字节(17条)MCS-51单片机指令系统有如下特点:(1)指令执行时间快。(2)指令短,约有一半的指令为单字节指令。(3)用一条指令即可实现2个一字节的相乘或相除。(4)具有丰富的位操作指令。(5)可直接用传送指令实现端口的输入输出操作。指令格式在MCS-51指令中,一般指令主要由操作码、操作数组成。指令应具有以下功能:(1)操作码指明执行什么性质和类型的操作。例如,数的传送、加法、减法等。(2)操作数指明操作的数本身或者是操作数所在的地址。(3)指定操作结果存放的地址。单字节指令操作码和操作数在同一个字节中。双字节指令前一个字节为操作码,后一个字节为操作数。三字节指令前一个字节为操作码,后两个字节为操作数。

指令描述符号介绍Rn——当前选中的寄存器区中的8个工作寄存器

R0~R7(n=0~7)。Ri——当前选中的寄存器区中的2个工作寄存器

R0、R1(i=0,1)。direct—8位的内部数据存储器单元中的地址。#data——包含在指令中的8位常数。#data16——包含在指令中的16位常数。addr16——16位目的地址。addr11——11位目的地址。rel——8位带符号的偏移字节,简称偏移量。DPTR——数据指针,可用作16位地址寄存器。bit——内部RAM或专用寄存器中的直接寻址位。A——累加器。B——专用寄存器,用于乘法和除法指令中。C——进位标志或进位位,或布尔处理机中的累加器。@——间址寄存器或基址寄存器的前缀,如@Ri,@DPTR。

/——位操作数的前缀,表示对该位数操作取反,如/bit。(×)——片内RAM的直接地址。((×))——由×寻址的单元中的内容。

——箭头左边的内容被箭头右边的内容所代替。51单片机指令的寻址方式立即寻址直接寻址寄存器寻址寄存器间接寻址变址寻址(基址寄存器+变址寄存器间接寻址)相对寻址位寻址寻址方式:指令按地址获得操作数的方式七种寻址方式,一条指令可能含多种寻址方式。立即寻址

指令中直接给出操作数的寻址方式。立即操作数用前面加有#号的8位或16位数来表示。例如:MOV A,#60H ;A←#60HMOV DPTR,#3400H ;DPTR←#3400HMOV 30H,#40H ;30H单元←#40H上述三条指令执行完后,累加器A中数据为立即数据60H,DPTR寄存器中数据为3400H,30H单元中数据为立即数40H。注意:符号“#”表明其后跟的是立即数,

立即数——就是数字量本身。直接寻址

指令中直接给出操作数地址的寻址方式,能进行直接寻址的存储空间有SFR寄存器和内部数据RAM。例如:MOVR1,1FH;R1←(1FH)

MOV30H,4AH;30H←(4AH)在本单片机中规定:访问特殊功能寄存器SFR只能采用直接寻址方式。例如:MOVA,SP;A←(SP)MOVA,81H;A←(SP)MOVP1,#5AH;P1←#5AHMOV90H,#5AH;P1←#5AHMOVB,30H;B←(30H)相同相同寄存器寻址

以通用寄存器的内容为操作数的寻址方式。通用寄存器指A、B、DPTR以及R0~R7

。从寄存器中读取操作数或存放操作数进寄存器例如:CLR A ;A←0INC DPTR ;DPTR←(DPTR)+1ADD R5,#20H ;R5←(R5)+#20H

MOVA,B;

A←(B)

MOV30H,R0;30H←(R0)

MOVA,R1;A←(R1)寄存器间接寻址

寄存器中的内容是一个地址,由该地址单元寻址到所需的操作数。间接寻址的存储器空间包括内部数据RAM和外部数据RAM。能用于寄存器间接寻址的寄存器有R0,R1,

DPTR,SP。其中R0、R1必须是工作寄存器组中的寄存器。SP仅用于堆栈操作。注意:1)“间接”表示某寄存器中的“内容”只是一个“单元地址”,这个地址单元中存放的数据才是要找的“操作数”。2)符号“@”表示“在…”,其含义与读音皆同“at”。例如:MOV@R0,A;(R0)←(A)

其指令操作过程示意图如图3-1所示。又如:MOVXA,@R1;A←外部RAM((P2R1))

其指令操作过程示意图如图3-2所示。再如:MOVX@DPTR,A;外部RAM(DPTR)←(A)

其指令操作过程示意图如图3-3所示。

片内RAM30HR034HA30H34H图3-1MOV@R0,A间接寻址示意图片外RAM34HP245HA3410H45H10HR1片外RAM2000HDPTR30HA2000H30H图3-2MOVXA,@R1间接寻址示意图

图3-3MOVX@DPTR,A间接寻址示意图变址寻址

变址寻址只能对程序存储器中数据进行操作。由于程序存储器是只读的,因此变址寻址只有读操作而无写操作,在指令符号上采用MOVC的形式。例如:MOVCA,@A+DPTR;A←((A)+(DPTR))[设:A中已存有#10H,DPTR中已存有#2000H]操作:将10H+2000H=2010H单元中的数放进累加器A又如MOVCA,@A+PC;A←((A)+(PC))

这条指令与上条指令不同的是,基址寄存器是PC。图3-4变址寻址示意图程序存储器2000HDPTR64H(10H)A2010H64H10H2000H相对寻址

以当前程序计数器PC的内容为基础,加上指令给出的一字节补码数(偏移量)形成新的PC值的寻址方式。相对寻址用于修改PC值,主要用于实现程序的分支转移。

SJMPrel

操作:跳转到的目的地址=当前16位PC值+rel

注意:1)“当前PC值”指程序中下一条指令所在的首地址,是一个16位数;2)符号“rel”表示“偏移量”,是一个带符号的单字节数,范围是:-128—+127(80H—7FH),程序存储器(2000H)200AHSJMP200AH08H2000H+208HPC2000H例如,SJMP08H;PC←(PC)+2+08H

图3-5相对寻址示意图位寻址位寻址只能对有位地址的单元作位寻址操作。位寻址其实是一种直接寻址方式,不过其地址是位地址。指令中直接给出了操作数所在的位地址。例如:SETB10H;将10H位置1若22H单元中存放着数据40H,22H单元的D0位的位地址为10H,执行上述指令后(22H)=41H。又如:MOV32H,C;32H←(C)ORLC,32H;C←(C)∨(32H)分类指令

数据传送类指令算术运算类指令逻辑运算与循环类指令程序转移类指令调用子程序及返回指令位操作指令空操作指令数据传送类指令数据传送类指令共28条,是将源操作数送到目的操作数。指令执行后,源操作数不变,目的操作数被源操作数取代。数据传送类指令用到的助记符有MOV、MOVX、MOVC、XCH、XCHD、SWAP、PUSH、POP8种。源操作数可采用寄存器、寄存器间接、直接、立即、变址5种寻址方式寻址,目的操作数可以采用寄存器、寄存器间接、直接寻址3种寻址方式。MCS-51单片机片内数据传送途径如图3-6所示。直接地址direct累加器A直接地址direct间接地址@Ri寄存器Rn立即数#data寄存器DPTR图3-6MCS-51单片机片内数据传送图1.以A为目的操作数MOVA,Rn

;A←(Rn)MOVA,direct;A←(direct)MOVA,@Ri

;A←((Ri))MOVA,#data;A←#data例:MOVA,R1 MOVA,10HMOVA,@R1 MOVA,#30H2.以Rn为目的操作数MOVRn,A ;Rn←(A)MOVRn,direct;Rn←(direct)MOVRn,#data ;Rn←#data例:MOVR1,A MOVR1,10HMOVR1,#10H3.以直接地址为目的操作数MOVdirect,A;

direct←(A)MOVdirect,Rn

;direct←(

Rn

)MOVdirect1,direct2;direct1←(direct2)MOVdirect,@Ri;

direct←(

(Ri))MOVdirect,#data;

direct←#data4.以间接地址为目的操作数MOV@Ri,A ;(Ri)←(A)MOV@Ri,direct ;(Ri)←(direct)MOV@Ri,#data ;(Ri)←#data例如:设(30H)=6FH,R1=40H,执行MOV@R1,30H后,30H单元中数据取出6FH送入R1间接寻址的40H单元,(40H)=6FH。5.以DPTR为目的操作数MOVDPTR,#data16;DPTR←#data16例如执行MOVDPTR,#2000H后,(DPTR)=2000H。6.访问外部数据RAM

MOVXA,@DPTR ;A←((DPTR))MOVX@DPTR,A ;(DPTR)←(A)MOVXA,@Ri

;A←((P2Ri))MOVX@Ri,A ;(P2Ri)←(A)7.读程序存储器MOVCA,@A+DPTR;A←((A)+(DPTR))MOVCA,@A+PC ;A←((A)+(PC))例如已知A=30H,DPTR=3000H,程序存储器单元(3030H)=50H,执行MOVCA,@A+DPTR后,A=50H。8.数据交换l

字节交换XCHA,Rn

;(A)<=>(Rn)XCHA,direct ;(A)<=>(direct)XCHA,@Ri

;(A)<=>((Ri))l

半字节交换XCHDA,@Ri

;(A)0~3<=>((Ri))0~3SWAPA ;(A)0~3<=>(A)4~79.堆栈操作所谓堆栈是在片内RAM中按“先进后出,后进先出”原则设置的专用存储区。数据的进栈出栈由指针SP统一管理。堆栈的操作有如下两条专用指令:

PUSHdirect;SP←(SP)+1,(SP)←(direct)

POP direct;direct←(SP),SP←(SP)-1PUSH是进栈(或称为压入操作)指令。片内RAM30H11H10HSP××片内RAM50H40H11H10HSP××40H30H片内RAM50H40H11H10H50H××SP30H片内RAM40H11H10H34H××SP30H34H34H××××执行前执行前执行前PUSH指令后执行POP指令后图3-7指令PUSH操作示意图图3-8指令POP操作示意图【例3.1】将片内RAM30H单元与40H单元中的内容互换。方法1(直接地址传送法):

MOV 31H,30HMOV 30H,40HMOV 40H,31HSJMP $方法2(间接地址传送法):

MOV R0,#40HMOV R1,#30HMOV A,@R0MOV B,@R1MOV @R1,AMOV @R0,BSJMP $方法3(字节交换传送法):

MOV A,30HXCH A,40HMOV 30H,ASJMP $方法4(堆栈传送法):

PUSH 30HPUSH 40HPOP 30HPOP 40HSJMP $算术运算类指令

1.加法指令ADDA,Rn

;A←(A)+(Rn)ADDA,direct ;A←(A)+(direct)ADDA,@Ri

;A←(A)+((Ri))ADDA,#data;A←(A)+#data2.带进位加指令ADDCA,Rn

;A←(A)+(Rn)+(C)ADDCA,direct;A←(A)+(direct)+(C)ADDCA,@Ri

;A←(A)+((Ri))+(C)ADDCA,#data;A←(A)+#data+(C)C为来自PSW状态寄存器中的进位位C。例如,设A=20H,R0=21H,C=1,执行指令ADDC

A,R0后,A=42H。3.带借位减指令SUBBA,Rn

;A←(A)-(Rn)-(C)SUBBA,direct;A←(A)-(direct)-(C)SUBBA,@Ri

;A←(A)-(Ri)-(C)SUBBA,#data;A←(A)-#data–(C)例如,设A=39H,R0=20H,(20H)=32H,C=1,执行指令

SUBBA,@R0后,A=06H。4.乘法指令MULA,B ;BA←(A)×(B)A和B中各存放一个8位无符号数,指令执行后,16位乘积的高8位在B中,低8位存A中。例如,A=30H,B=60H,执行MULAB后,A=00H,B=12H。

5.除法指令DIVA,B;(A)÷(B)→商在A中,余数在B中

A和B中各存放一个8位无符号数,A放被除数,B放除数。指令执行后,A中存放商,B中存入余数。若B=00H,则指令执行后OV=1,A与B不变。例如,A=30H,B=07H,执行DIVAB后,

A=06H,B=06H。6.加1指令INCA ;A←(A)+1INCRn

;Rn←(Rn)+1INCdirect;direct←(direct)+1INC@Ri

;(Ri)←((Ri))+1INCDPTR;DPTR←(DPTR)+1例如,(30H)=22H,执行INC30H后,(30H)=23H。7.减1指令DECA ;A←(A)-1DECRn

;Rn←(Rn)-1DECdirect ;direct←(direct)-1DEC@Ri

;(Ri)←((Ri))-1例如,R0=30H,(30H)=22H,执行DEC@R0后,(30H)=21H。8.十进制调整指令DAA

;把A中按二进制相加的结果调整成按BCD码相加的结果。例如,A=65BCD,B=78BCD,C=0,执行下列语句ADD A,BDA A后,A=43BCD,C=1。【例3.2】试把存放在R1R2和R3R4中的两个16位数相加,结果存于R5R6中。解:参考程序如下:

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$1.“与”操作指令2.“或”操作指令3.“异或”操作指令4.求反与清除指令5.移位指令逻辑运算类指令逻辑与(ANL),逻辑或(ORL),逻辑异或(XRL):累加器清零/取反操作(CLR,CPL——2条)CLRA——对累加器清零1Byte1个TmCPLA——对累加器按位取非1Byte1个Tm指令形式ByteTmANL(ORL,XRL)direct,

A21ANL(ORL,XRL)direct,#data32ANL(ORL,XRL)A,#data21ANL(ORL,XRL)A,direct21ANL(ORL,XRL)A,

@Ri11ANL(ORL,XRL)A,

Rn11逻辑运算指令的常见用法逻辑与ANL用于清0或者保留某些位:例:ANLA,#0FH;则(A)=0AH(已知累加器A中已存有数:9AH)逻辑或ORL用于置1或者保留某些位:例:ORLA,#0FH;则(A)=9FH逻辑异或XRL用于取反或者保留某些位:例:XRLA,#0FH;则(A)=95H(A)

10011010#0FH

0000111195H

10010101逻辑运算及移位类指令累加器移位操作:(RL,RLC,RR,RRC——4条)RLA左环移累加器A累加器ACy累加器ACy累加器ARRCA带进位位右环移RRA右环移RLCA带进位位左环移控制转移类指令无条件转移:LJMP,AJMP,SJMP,JMP——4条LJMPaddr16长跳转指令

——可在64K范围内跳转AJMPaddr11绝对跳转指令

——可在指令所在的2K范围内跳转SJMPrel

相对跳转指令

——可在当前PC-128与+127范围内跳转JMP@A+DPTR间接长跳转指令

——可在以DPTR为基址+A为偏移量之和所指向的64K程序范围内跳转控制转移类指令条件转移:JZ,JNZ,CJNE,DJNZ——8条JZrelJNZrel——根据Acc的内容是否为0决定是否跳转DJNZdirect,relDJNZRn,

rel——将direct(或Rn)里的内容减1,结果不等于0就跳转;等于0则不跳转继续往下走。条件转移(续)CJNEA,#data,relCJNEA,direct,rel

CJNE@Ri,#data,relCJNERn,#data,rel——将A(或@Ri

温馨提示

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

评论

0/150

提交评论