C51单片机指令系统.ppt

上传人:za****8 文档编号:13189226 上传时间:2020-06-06 格式:PPT 页数:50 大小:470.01KB
返回 下载 相关 举报
C51单片机指令系统.ppt_第1页
第1页 / 共50页
C51单片机指令系统.ppt_第2页
第2页 / 共50页
C51单片机指令系统.ppt_第3页
第3页 / 共50页
点击查看更多>>
资源描述
第3章机械工业出版社同名教材配套电子教案,单片机原理与控制技术第2版,第3章80C51系列单片机指令系统,本章要点,80C51指令的基本格式80C51指令功能分类指令系统中的常用符号80C51指令系统的七种寻址方式数据传送类指令算术运算类指令逻辑运算及移位指令位操作类指令控制转移类指令,3-1指令系统基本概念,标号:操作码操作数;注释,一、指令基本格式,标号:指令的符号地址。,用于一段功能程序的识别标记或控制转移地址。,指令前的标号代表该指令的地址,是用符号表示的地址。,一般用英文字母和数字组成。,标号必须用冒号“:”与操作码分隔。,操作码:表示指令的操作功能。,操作码用助记符表示,它代表了指令的操作功能。,操作码是指令的必需部分,是指令的核心,不可缺少。,操作数:参加操作的数据或数据地址。,操作数与操作码之间用空格分隔,操作数与操作数之间用逗号“,”分隔。,操作数可以是数据,也可以是数据的地址、数据地址的地址或操作数的其他信息。,操作数可分为目的操作数和源操作数。,操作数可用二进制数、十进制数或十六进制数表示。,操作数的个数可以是03个。,注释:指令功能说明。,注释属于非必需项,是为便于阅读,对指令功能作的说明和注解。,注释必须以“;”开始。,二、指令分类,按指令功能分类:可分为数据传送类、算术运算类、逻辑运算类、位操作类和控制转移类等5大类指令。,80C51共有111条指令。,按指令长度分类:可分为1字节、2字节和3字节指令。,按指令执行时间分类:可分为1机周、2机周和4机周指令。,三、指令系统中的常用符号,bit:位地址。代表片内RAM中的可寻址位00H7FH及SFR中的可寻址位。,#:立即数符。#data:8位立即数;#data16:16位立即数。,direct:8位直接地址代表内RAM00H7FH或SFR的80HFFH。,:间接寻址符。如Ri,DPTR,A+PC,A+DPTR。,addr11:11位目的地址。addr16:16位目的地址。,rel:带符号的8位偏移地址。用于转移指令,其范围是相对于下一条指令第1字节地址的-128+127个字节。,四、寻址方式,【例】,寻址就是寻找操作数的地址。,立即寻址,立即寻址是直接给出操作数,操作数前有立即数符“#”。,MOVA,#30H;将立即数30H传送至A中MOVDPTR,#5678H;将立即数5678H传送至DPTR,直接寻址,MOVA,3AH;将内RAM3AH单元中的数据传送至A中MOVA,P0;将特殊功能寄存器P0口中的数据传送至A中说明:3AH和P0是以direct形式出现的直接地址,直接寻址是给出操作数的直接地址。直接寻址范围为内RAM128B和特殊功能寄存器。,【例】,寄存器寻址,MOVA,R0;将R0中的数据传送至A中,寄存器寻址的操作数在规定的寄存器中。规定的寄存器有:工作寄存器R0R7累加器A双字节AB数据指针DPTR位累加器Cy这些被寻址寄存器中的内容就是操作数,【例】,寄存器间接寻址,MOVA,R0;将以R0中内容为地址的存储单元中的数据传送至A中MOVXA,DPTR;将外RAMDPTR所指存储单元中的数据传送至A中PUSHPSW;将PSW中数据传送至堆栈指针SP所指的存储单元中,间接寻址是根据操作数地址的地址寻找操作数。间接寻址用间址符“”作为前缀。,【例】,变址寻址,MOVCA,A+DPTR,【例】,在变址寻址中,操作数地址基址变址用于读ROM数据操作。,;将A的内容与DPTR内容相加,得到一个新地址,从该地址ROM中读取数据送入A中。,相对寻址一般用于相对转移指令,转移目的地址当前PC值相对偏移量rel。,;将位地址07H(字节地址20H中最高位)中的数据传送至进位位Cy。,相对寻址,位寻址,位寻址是对内RAM和特殊功能寄存器中的可寻址位进行操作的寻址方式。,【例】,MOVC,07H,3-2指令系统,MOVA,Rn;RnA,n=07MOVA,Ri;(Ri)A,i=0、1MOVA,direct;(direct)AMOVA,#data;dataA,一、数据传送类指令,内RAM数据传送指令,以累加器A为目的字节的传送指令(4条),MOVRn,A;ARn,n=07MOVRn,direct;(direct)Rn,n=07MOVRn,#data;dataRn,n=07,以工作寄存器Rn为目的字节的传送指令(3条),以直接地址为目的字节的传送指令(5条),MOVdirect,A;A(direct)MOVdirect,Rn;Rn(direct),n=07MOVdirect,Ri;(Ri)(direct),i=0、1MOVdirect1,direct2;(direct2)(direct1)MOVdirect,#data;data(direct),以寄存器间址为目的字节的传送指令(3条),MOVRi,A;A(Ri),i=0、1MOVRi,direct;(direct)(Ri),i=0、1MOVRi,#data;data(Ri),i=0、1,16位数据传送指令,MOVDPTR,#data16;data16DPTR,【例】,MOVDPTR,#1234H;DPTR=1234H该指令也可以用两条8位数据传送指令实现:MOVDPH,#12H;DPH=12HMOVDPL,#34H;DPL=34H,DPTR=1234H,MOVXA,Ri;(Ri)A,i=0、1MOVXA,DPTR;(DPTR)AMOVXRi,A;A(Ri),i=0、1MOVXDATR,A;A(DATR),外RAM传送指令(4条),读ROM指令(2条),内RAM(包括特殊功能寄存器):用MOV指令传送;外RAM:用MOVX指令传送;ROM:用MOVC指令传送。,MOVCA,A+DPTR;(A+DPTR)AMOVCA,A+PC;PC+1PC,(A+PC)A,三个不同的存储空间用三种不同的指令传送:,PUSHdirect;SP+1SP,(direct)(SP)POPdirect;(SP)(direct),SP-1SP,堆栈操作指令(2条),PUSH为入栈指令例PUSH30H;(30H)=2BH,具体操作是:,先将堆栈指针SP的内容(0FH)加1,指向堆栈顶的一个空单元,此时SP=10H;然后将指令指定的直接寻址单元30H中的数据(2BH)送到该空单元中。,POP为出栈指令例POP40H;(40H)=4CH,具体操作是:,先将SP所指单元0FH(栈顶地址)中的数据(4CH)弹出,送到指定的内RAM单元40H,(40H)=4CH;然后SP-1SP,SP=0EH,SP仍指向栈顶地址。,交换指令(5条),XCHA,Rn;ARn,n=07XCHA,Ri;A(Ri),i=0、1XCHA,direct;A(direct),SWAPA;A74A30,字节交换指令,半字节交换指令,XCHDA,Ri;A30(Ri)30高4位不变。i=0、1,累加器高低四位互换,ADDA,Rn;A+RnA(n=07)有进位,Cy=1;无进位,Cy=0ADDA,Ri;A+(Ri)A(i=0、1)有进位,Cy=1;无进位,Cy=0ADDA,direct;A+(direct)A有进位,Cy=1;无进位,Cy=0ADDA,#data;A+dataA有进位,Cy=1;无进位,Cy=0,二、算术运算类指令,加法指令,不带Cy加法指令(4条),带Cy加法指令(4条),ADDCA,Rn;A+Rn+CyA(n=07)有进位,Cy=1;无进位,Cy=0ADDCA,Ri;A+(Ri)+CyA(i=0、1)有进位,Cy=1;无进位,Cy=0ADDCA,direct;A+(direct)+CyA有进位,Cy=1;无进位,Cy=0ADDCA,#data;A+data+CyA有进位,Cy=1;无进位,Cy=0,减法指令(4条),SUBBA,Rn;A-Rn-CyA,(n=07),有借位,Cy=1;无借位,Cy=0SUBBA,Ri;A-(Ri)-CyA,(n=01),有借位,Cy=1;无借位,Cy=0SUBBA,direct;A-direct-CyA,有借位,Cy=1;无借位,Cy=0SUBBA,#data;A-data-CyA,有借位,Cy=1;无借位,Cy=0,INCA;A+1AINCRn;Rn+1Rn,n=07INCRi;(Ri)+1(Ri),i=0、1INCdirect;(direct)+1(direct)INCDPTR;DPTR+1DPTR,加1减1指令,加1指令(5条),减1指令(4条),DECA;A-1ADECRn;Rn-1Rn,n=07DECRi;(Ri)-1(Ri),i=0、1DECdirect;(direct)-1(direct),加1减1指令涉及A时,会影响P,但不影响其他标志位。,DIVAB;(AB)商A,余数BCy=0,OV=0,BCD码调整指令,DAA,功能:对加法运算结果进行BCD码调整。,乘除法指令,乘法指令(1条),MULAB;ABBA,除法指令(1条),三、逻辑运算及移位指令,ANLA,Rn;ARnAANLA,Ri;A(Ri)AANLA,#data;AdataAANLA,direct;A(direct)AANLdirect,A;(direct)AdirectANLdirect,#data;(direct)datadirect,逻辑“与”运算指令(6条),逻辑“或”运算指令(6条),ORLA,Rn;ARnAORLA,Ri;A(Ri)AORLA,#data;AdataAORLA,direct;A(direct)AORLdirect,A;(direct)AdirectORLdirect,#data;(direct)datadirect,逻辑“异或”运算指令(6条),XRLA,Rn;ARnAXRLA,Ri;A(Ri)AXRLA,#data;AdataAXRLA,direct;A(direct)AXRLdirect,A;(direct)AdirectXRLdirect,#data;(direct)datadirect,CLRA;0ACPLA;AA,清零和取反指令,循环移位指令(4条),循环左移:RLA,带Cy循环左移:RLCA,循环右移:RRA,带Cy循环右移:RRCA,MOVC,bit;(bit)CyMOVbit,C;Cybit,四、位操作类指令,位传送指令(2条),位取反指令:CPLC;CCCPLbit;(bit)bit,位修正指令(6条),位清0指令:CLRC;0CCLRbit;0bit,位置1指令:SETBC;1CSETBbit;1bit,位逻辑“与”运算指令:ANLC,bit;C(bit)CANLC,/bit;C(bit)C,位逻辑“或”运算指令:ORLC,bit;C(bit)CORLC,/bit;C(bit)C,位逻辑运算指令(4条),相对转移指令SJMPrel;PC+2PC,PC+relPC,五、控制转移类指令,无条件转移指令(3条),长转移指令LJMPaddr16;addr150PC,,短转移指令AJMPaddr11;PC+2PC,addr100PC100,PC1511不变,间接转移指令(散转指令)JMPA+DPTR;A+DPTRPC,LJMP、AJMP、SJMP三条无条件转移指令的区别:,转移范围不一样。LJMP转移范围是64KB;AJMP转移范围是与当前PC值同一2KB;SJMP转移范围是当前PC-128B+127B。使用AJMP和SJMP指令应注意转移目标地址是否在转移范围内,若超出范围,程序将出错。,指令字节不一样。LJMP是3字节指令;AJMP、SJMP是2字节指令。,条件转移指令(13条),条件转移指令根据判断条件可分为:判C转移判bit转移判A转移减1非0转移比较不相等转移指令满足条件,则转移;不满足条件,则程序顺序执行。,C=0转移指令:JNCrel;PC+2PC,若Cy=0,则PC+relPC,转移若Cy=1,则程序顺序执行。,判C转移指令(2条),C=1转移指令:JCrel;PC+2PC,若Cy=1,则PC+relPC,转移若Cy=0,则程序顺序执行。,(bit)=1转移并清0指令:JBCbit,rel;PC+3PC,;若(bit)=1,则PC+relPC,转移,且0(bit);若(bit)=0,则程序顺序执行,判bit转移指令(3条),(bit)=1转移指令:JBbit,rel;PC+3PC,若(bit)=1,则PC+relPC,转移若(bit)=0,则程序顺序执行,(bit)=0转移指令:JNBbit,rel;PC+3PC,若(bit)=0,则PC+relPC,转移若(bit)=1,则程序顺序执行,A=0转移指令:JZrel;PC+2PC,若A=0,则PC+relPC,转移若A0,则程序顺序执行,判A转移指令(2条),A0转移指令:JNZrel;PC+2PC,若A0,则PC+relPC,转移若A=0,则程序顺序执行,减1非0转移指令(2条),DJNZdirect,rel;PC+3PC,(direct)-1direct若(direct)=0,则程序顺序执行若(direct)0,则PC+relPC,转移,DJNZRn,rel;PC+2PC,Rn-1Rn,若Rn=0,则程序顺序执行若Rn0,则PC+relPC,转移,比较转移指令(4条),CJNEA,direct,rel;PC+3PC,;若A=(direct),则程序顺序执行;若A(direct),则PC+relPC,转移;且若A(direct),Cy=0;若A(direct),Cy=1,CJNEA,#data,rel;PC+3PC,;若A=data,则程序顺序执行;若Adata,则PC+relPC,转移;且若Adata,Cy=0;若Adata,Cy=1,CJNERn,#data,rel;PC+3PC,;若Rn=data,则程序顺序执行;若Rndata,则PC+relPC,转移;且若Rndata,Cy=0;若Rndata,Cy=1,CJNERi,#data,rel;PC+3PC,;若(Ri)=data,则程序顺序执行;若(Ri)data,则PC+relPC,转移;且若(Ri)data,Cy=0;若(Ri)data,Cy=1,产生当前PC:PC+3PC,(PC+3是因为该指令为三字节指令)断口地址低8位保存到堆栈中:SP+1SP,(PC)07(SP)断口地址高8位保存到堆栈中:SP+1SP,(PC)815(SP)形成转移目标地址:addr16PC,调用和返回指令,LCALLaddr16;PC+3PC,SP+1SP,(PC)07(SP);SP+1SP,(PC)815(SP);addr16PC,长调用指令,LCALL指令执行步骤:,产生当前PC:PC+2PC,(PC+2是因为该指令为双字节指令)断口地址低8位保存到堆栈中:SP+1SP,(PC)07(SP)断口地址高8位保存到堆栈中:SP+1SP,(PC)815(SP)形成转移目标地址:addr11PC010,PC1115不变,短调用指令,ACALLaddr11;PC+2PC,SP+1SP,(PC)07(SP);SP+1SP,(PC)815(SP);addr010PC010,PC1115不变,ACALL指令执行步骤:,(SP)PC815,SP-1SP;(SP)PC07,SP-1SP。,返回指令:,返回指令有子程序返回和中断返回两种:,RET;子程序返回RETI;中断返回,返回指令执行步骤:,空操作指令(1条),NOP为单机周指令,在时间上占用一个机器周期,常用于时间“微调”。,NOP;PC+1PC,
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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