您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 机械/模具设计 > MCS-51单片机指令系统包括111条指令
Copyright类:1.数据传送和交换指令(29条)2.算术运算指令(24条)3.逻辑运算指令(24条)4.控制转移指令(17条)5.位操作指令(17条)2.2MCS-51单片机指令系统Copyright数据传送和交换类指令常用助记符:MOV单片机内部RAM中的数据传递MOVX累加器和单片机外部数据存储器间数据传递MOVC累加器和程序存储器之间的数据传递XCH累加器和某个内部RAM单元进行数据交换XCHD累加器和某个内部RAM单元进行低半字节数据交换PUSH将某个内部RAM单元的数据压入堆栈POP将堆栈内的数据弹出Copyright数据传送和交换类指令主要有以下几种:1.内部数据传递指令2.数据指针赋值指令3.片外数据传送指令4.ROM数据访问指令5.栈操作指令6.数据交换指令Copyright一、内部RAM单元间的数据传递以累加器为目的的传送指令(4条)MOVA,#data;A←dataMOVA,direct;A←(direct)MOVA,Rn;A←(Rn)MOVA,@Ri;A←((Ri))AXXA33H30H33H结果Eg:MOVA,30HEg:MOVA,#10HAXX30H10H结果10HCopyright:MOVA,@R0E.g.:MOVA,R2注意:在使用Ri进行间址寻址时,只能够使用R0和R1。Copyright以通用寄存器Rn为目的的传送指令:(3条)MOVRn,A;Rn←(A)MOVRn,direct;Rn←(direct)MOVRn,#data;Rn←dataR2R2XX33HA33HEg:MOVR2,AEg:MOVR2,30HEg:MOVR2,#30HR2R2XX55H30H55HR2XXR230H30HCopyright以直接地址为目的的传送指令:(5条)MOVdirect,#data;direct←dataMOVdirect1,direct2;direct1←(direct2)MOVdirect,A;direct←(A)MOVdirect,@Ri;direct←((Ri))MOVdirect,Rn;direct←(Rn)Eg:MOV30H,#33H30H30HXX33H33H30H30HXX55H31H55HEg:MOV30H,31HCopyright@R0Eg:MOV30H,AEg:MOV30H,R3地址55H78H30H78HR0取出55H30H30HA33HXX33H30H30HR333HXX33HCopyright以通用寄存器间接地址为目的的传送指令:(3条)MOV@Ri,A;(Ri)←(A)MOV@Ri,direct;(Ri)←(direct)MOV@Ri,#data;(Ri)←dataEg.:MOV@R1,AEg:MOV@R1,30HEg:MOV@R1,#30H55HAR1(地址)55H78H78H55H30HR1(地址)55H78H78H55H30HR1(地址)55H30HCopyright二、数据指针赋值指令(16位数据指针)当要对片外的RAM和I/O接口进行访问时,或进行查表操作时,通常要对DPTR赋值。指令为:MOVDPTR,#data16Eg:将数据指针DPTR指向存于ROM中的表格首地址。MOVDPTR,#TABLEDPTRDPTRXXXX2000H2000HEg:将数据指针DPTR指向外部RAM的2000H单元。MOVDPTR,#2000HCopyright三、片外数据传递指令使用DPTR和Ri进行间接寻址MOVXA,@DPTR;A←((DPTR))片外MOVXA,@Ri;A←((Ri))片外MOVX@DPTR,A;(DPTR)片外←(A)MOVX@Ri,A;(Ri)片外←(A)注意:该指令用于在单片机和外部RAM、扩展I/O的数据传送;使用Ri时,只能访问低8位地址为00H~FFH地址段;使用DPTR时,能访问0000H~FFFFH地址段。Copyright应用举例:例:MOVDPTR,#2003HMOVA,#00HMOVX@DPTR,A指令执行过程:ADPTR(地址)2003H2003H00H00HCopyright注意:只有累加器A才能把数据传到外部RAM,或接收从外部数据存储器传回的数据。比如:MOVX20H,@DPTRMOVX@DPTR,SBUFMOVX@DPTR,R2MOVX@DPTR,@R1都是错误的思考:如果要将内部RAM中40H单元中的数据传递到外部RAM的2000H单元中,应如何解决?试写出相应程序。MOVDPTR,#2000HMOVA,40HMOVX@DPTR,ACopyright四、查表指令指令格式:MOVCA,@A+DPTR;A←((A)+(DPTR))MOVCA,@A+PC;A←((A)+(PC))3055H相加=3055HA66HDPTR3000H取出地址A55H66HEg:MOVDPTR,#3000HMOVA,#55HMOVCA,@A+DPTR(ROM数据传送指令)2条Copyright例:在累加器A中存放有0~9间的某个数,现要求查出该数的7段共阴显示代码,并将代码传回累加器。解决方案:在程序存储器中划出一个区域用于存放0~9的7段共阴显示代码,比如将代码存放在0400H开始的地方。程序如下:……MOVDPTR,#0400HMOVCA,@A+DPTR……ORG0400HDB3FH;0的7段共阴显示代码DB06H;1的7段共阴显示代码DB5BH;2的7段共阴显示代码DB4FH;3的7段共阴显示代码DB66H;4的7段共阴显示代码……Copyright注意:我们只能将程序存储器中的数据传出(读出),而不能将数据传入(写入)程序存储器。因此,语句:MOVC@A+DPTR,AMOVC@A+PC,A都是错误的。思考题:MCS-51单片机的运算能力比较差,想想能不能够利用查表方式进行函数y=sin(x)的运算?Copyright五、堆栈操作指令堆栈操作指令包含入栈(PUSH)和出栈(POP)。在使用堆栈之前要首先给堆栈指针SP赋值。指令格式:PUSHdirectPOPdirect注意:先入后出原则程序举例:MOVSP,#30HPUSHSBUF;SP←(SP)+1,31H←(SBUF)PUSH60H;SP←(SP)+1,32H←(60H)……POP60H;60H←(32H),SP←(SP)-1POPSBUF;SBUF←(31H),SP←(SP)-1Copyright六、字节交换指令字节交换指令指内部RAM中的某个单元和累加器A之间进行数据交换,可以是整个字节,也可以是半个字节。包含3种交换方式:1、整字节交换指令:XCHA,Rn;(A)←→(Rn)XCHA,direct;(A)←→(direct)XCHA,@Ri;(A)←→((Ri))A内部RAM单元Copyright、半字节交换指令XCHDA,@Ri;(A)3~0←→((Ri))3~0指令执行后A0A1A2A3D4D5D6D7(Ri)D0D1D2D3A4A5A6A7AD0D1D2D3D4D5D6D7(Ri)A0A1A2A3A4A5A6A7A执行指令前Copyright、累加器A高低半字节的交换指令SWAPA执行前A7A6A5A4A3A2A1A0执行后A3A2A1A0A7A6A5A4例:假设在执行指令之前(A)=70H,则在指令执行完后,(A)=07H。执行前01110000执行后00000111Copyright数据传送类指令有几种类型?是否影响标志位?除movA,**类指令影响PWS的P标志外,其余数据传送类指令在执行时均不影响任何标志。如何记忆这些指令?2)对于MOV指令,其目的操作数按A、Rn、direct、@Ri的顺序书写,则可以记住MOV的15条指令。例如:MOVA,#data/direct/A/Rn/@RiMOVRn,#data/direct/AMOVdirect,#data/direct/A/Rn/@RiMOV@Ri,#data/direct/A小结1)功能模块记忆法数据传送组。MOV内部数据传送MOVC程序存储器传送MOVX外部数据传Copyright算术运算指令算术运算指令有加法、减法、乘法和除法四类,除加1和减1指令,其他所有的指令都将影响PSW的标志位。程序状态字PSWD7D6D5D4D3D2D1D0CYACF0RS1RS0OVP进位借位辅助进位自定标志通用寄存器选择位溢出标志奇偶校验Copyright一、不带进位的加法指令ADDA,Rn;A←(A)+(Rn)ADDA,direct;A←(A)+(direct)ADDA,@Ri;A←(A)+((Ri))ADDA,#data;A←(A)+data例:将内部RAM中40H和41H单元的数相加,再把和送到42H单元。MOVA,40HADDA,41HMOV42H,ACopyright、在上例中,如果运算结果超出FFH(255),将产生进位——PSW的CY位将被置1。2、若预先说明40H和41H中放置的是有符号数,则在运算指令“ADDA,41H”执行后,还要检查PSW中溢出位OV的状态,如果OV位为1,则运算结果错误。溢出产生的条件:在运算时,如果D6位和D7位中一个有进位而另一个无进位,则OV=1,溢出。即:OverFlow=C6⊕C7OverFlow=1,溢出OverFlow=0:无溢出。溢出发生在有符号数的运算中,同符号数相加或异符号数相减,则可能发生溢出。异号数相加一定不会产生溢出!Copyright二、带进位的加法运算该类指令主要用于多字节的加法运算ADDCA,Rn;A←(A)+(Rn)+(CY)ADDCA,direct;A←(A)+(direct)+(CY)ADDCA,@Ri;A←(A)+((Ri))+(CY)ADDCA,#data;A←(A)+data+(CY)如果加数和被加数是无符号数,则在计算后要注意是否产生进位。如果加数和被加数是有符号数,则在计算后要注意是否溢出,只要溢出,则运算结果错误;如果无溢出,则注意是否有进位。Copyright例:加数存放在内部RAM的41H(高位)和40H(低位),被加数存放在43H(
本文标题:MCS-51单片机指令系统包括111条指令
链接地址:https://www.777doc.com/doc-4006019 .html