单片机指令系统(精品培训)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第3章单片机指令系统3.1MCS-51指令简介3.2指令系统LOOP:MOVA,R0;将R0的内容送A[标号]操作码第一操作数第二操作数[注释](目的操作数)(源操作数)注:白色的内容不是必须的3.1MCS-51指令简介一、MCS-51指令格式二、MCS-51系列单片机指令系统分类按寻址方式分为以下七种:按功能分为以下四种:1、立即立即寻址1、数据传送指令位操2、直接寻址2、算术运算指令3、寄存器寻址3、逻辑运算指令4、寄存器间接寻址指令4、控制转移类指令5、相对寻址5、位操作指令6、变址寻址7、位寻址三、寻址方式寻址方式:寻找(或确定)操作数所在单元地址的方式。寻址方式越多,计算机寻址能力越强,但指令系统也越复杂。说明:以下讨论的寻址方式都是针对源操作数的。但实际上目的操作数也有寻址问题。1、寄存器寻址MOVA,Rn操作数在寄存器中,如R0~R7,A、B、Cy(位)、DPTR2、直接寻址MOVA,40H操作数直接以单元地址形式给出(也可以寄存器名称形式给出,但ABDPTR除外)如:MOVA,P0;MOVR0,TH03、寄存器间接寻址MOVA,@R1操作数是通过寄存器间接得到的。4、立即寻址MOVA,#40H操作数在指令中直接给出。5、基址寄存器加变址寄存器寻址以DPTR或PC为基址寄存器,以A为变址寄存器,以两者相加形成的16位地址为操作数的地址。MOVCA,@A+DPTRMOVCA,@A+PC四、指令中常用符号说明Rn——当前寄存器区的8个工作寄存器R0~R7(n=0~7);Ri——当前寄存器区可作地址寄存器的2个工作寄存器R0和R1(i=0,1);direct——8位内部数据存储器单元的地址及特殊功能寄存器的地址;#data——表示8位常数(立即数);#datal6——表示16位常数;add16——表示16位地址;addrll——表示11位地址;rel——8位带符号的地址偏移量;bit——表示位地址;@——间接寻址寄存器或基址寄存器的前缀;()——表示括号中单元的内容(())——表示间接寻址的内容;五、MCS-51指令简介1.以累加器A为目的操作数的指令MOVA,#data;A←#dataMOVA,Rn;n=0~7,A←(Rn)MOVA,@Ri;i=0,1,A←((Ri))MOVA,direct;A←(Rn)direct为内部RAM或SFR地址注:MOVA,@Ri;以Ri的内容为地址,把该地址中的内容送到A中去。A←((Ri))MOVA,R0;将R0的内容送到A去。A←(R0))MOVA,#20H;(A)=20HA的内容为20HMOVA,20H;(A)=(20H)A的内容为20H中的内容注意以上两组指令的不同点例:MOVR0,#30HMOV30H,#60HMOVA,@R0(A)=?2.以Rn为目的操作数的指令MOVRn,A;Rn←(A),n=0~7MOVRn,direct;Rn←(direct)MOVRn,#data;Rn←#data3.以直接地址为目的操作数的指令MOVdirect,A;direct←(A)MOVdirect,Rn;direct←(Rn),n=0~7MOVdirect,@Ri;direct←((Ri)),i=0,1MOVdirect,direct;direct←(direct)MOVdirect,#data;direct←#data4.以寄存器间接地址为目的操作数指令MOV@Ri,A;((Ri))←(A),i=0,1MOV@Ri,direct;((Ri))←(direct)MOV@Ri,#data;((Ri))←#data应用举例1MOVP1,#0FEH;11111110B可以使P1.0上的发光二极管点亮MOVP1,#0F0H;11110000B可以使P1口上的上面4个发光二极管点亮P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.75v8段数码管显示P1.0aP1.1bP1.2cP1.3dP1.4eP1.5fP1.6gP1.7dp5vMOVP1,#00H;显示8.MOVP1,#0F8H;显示7MOVP1,#88H;显示A应用举例2一个引脚的高低电平,可以通过“光电耦合器”控制继电器,从而以“弱电”控制“强电”。3.2指令系统一、数据传送指令位操作1.16位数据传输指令MOVDPTR,#data16;DPTR←#data16DPTR----数据指针,为SFR中(DPH)、(DPL)MOVDPTR,#2010H相当于:MOVDPH,#20HMOVDPL,#10H2、堆栈操作指令进栈指令PUSHdirect如:(SP)=60H,(A)=30H,(B)=70H时,执行PUSHAcc;(SP)+1=61H→SP,(A)→61HPUSHB;(SP)+1=62H→SP,(B)→62H结果:(61H)=30H,(62H)=70H,(SP)=62H退栈指令POPdirect如:(SP)=62H,(62H)=70H,(61H)=30H时,执行POPDPH;((SP))→DPH,(SP)-1=61H→SPPOPDPHL;((SP))→DPL,(SP)-1=60H→SP结果:(DPTR)=7030H,(SP)=60H堆栈的存储原则:先进后出(SP)(SP+1)(SP+2)(SP+3)3.累加器A与外部数据传输指令MOVXA,@DPTR;A←((DPTR))地址范围64KMOVXA,@Ri;A←((Ri))地址范围0~255MOVX@DPTR,A;(DPTR)←(A)MOVX@Ri,A;(Ri)←(A)4.查表指令MOVCA,@A+DPTR;A←((A)+(DPTR))例:(DPTR)=0300H,(A)=02HROM中(0302H)=55H执行:MOVCA,@A+DPTR结果:(A)=55HMOVCA,@A+PCA←((A)+(pc))PC--程序指针,指向下一条指令的地址例:根据A中的内容(0~9)查平方表MOVCA,@A+PC例子:地址机器码源程序ORG0000H00007403MOVA,#03H000283MOVCA,@A+PC000300DB00H000401DB01H000504DB04H000609DB09H000710DB10H000819DB19H000924DB24H000A31DB31H000B40DB40H000C51DB51H(顺便讲解如何查机器码)END5.字节交换指令XCHA,Rn;(A)←→(Ri)XCHA,direct;(A)←→(direct)XCHA,@Ri;(A)←→(Ri)例:(A)=80H,(R7)=97H执行:XCHA,R7结果:(A)=97H,(R7)=80H例:将片内RAM60H单元与61H单元的数据交换。XCH60H,61H←对吗?6.半字节交换指令XCHDA,@Ri;(A)0-3←→((Ri))0-3例:(R0)=60H,(60H)=3EH,(A)=59H执行:XCHDA,@R0结果:(A)=5EH(60H)=39H二、算术操作类指令1.加法指令(Addtion)2.带进位加法指令3.加1指令(Increase)4.十进制调整指令5.带借位减法指令(Subtraction)6.减1指令(Decrease)7.乘法指令(Multiplication)8.除法指令(Division)PSW寄存器CyACF0RS1RS0OV—PCy:进位标志位AC:辅助进位标志位F0:供用户使用的标志位OV:溢出标志位P:奇偶标志位A中数据的奇偶性。当1的个数为奇数,P=1,否则P=0。RS1RS000区0(地址:00H~07H)01区1(地址:08H~0FH)10区2(地址:10H~17H)11区3(地址:18H~1FH)2.带进位加法指令ADDCA,Rn;A←(A)+(Rn)+(Cy)ADDCA,@Ri;A←(A)+((Ri))+(Cy)ADDCA,direct;A←(A)+(direct)+(Cy)ADDCA,#data;A←(A)+#data+(Cy)对标志位的影响与ADD相同3.加1指令INCA;A←(A)+1INCRi;Ri←(A)+1INCdirect;direct←(direct)+1INC@Ri;(Ri)←((Ri))+1INCDPTR;DPTR←(DPTR)+1对标志位不产生影响若:(A)=0FFH,(Cy)=0执行:INCA结果:(A)=00H,(Cy)=04.十进制调整指令DAA用途:紧跟在BCD码加法指令(不包括减法)之后,进行十进制调整。(96H为压缩BCD码,表示十位为9,个位为6)如两BCD码加:MOVA,#35HADDA,#46H(A)=7BH,并不是81H但:DAA后,(A)=81H5.带借位减法指令(Subtraction)(1)SUBBA,Rn;A←(A)-(Rn)-(Cy)(2)SUBBA,@Ri;A←(A)-((Ri))-(Cy)(3)SUBBA,direct;A←(A)-(direct)-(Cy)(4)SUBBA,#data;A←(A)-#data-(Cy)(5)对标志位的影响(6)Cy------进位位(7)AC------半进位位(8)OV------溢出位6.减1指令(Decrease)减1类指令共4条,其功能是将操作数指定单元内容减1。DECA;A-1→A,A中内容减1DECRn;Rn-1→Rn,Rn中内容减1DECdirect;(direct)-1→(direct),直接地址中内容减1DEC@Ri;(Ri)-1→(Ri),Ri间址中的内容减17.乘法指令(Multiplication)MULAB;(A)×(B)低8位→A高8位→BA、B中都是无符号整数如果积大于255,OV=1,否则OV=0;进位标志总是清零Cy=0。8.除法指令(Division)DIVAB;(A)÷(B)商→A余数→BA、B中都是无符号整数如果除数B为“0”,OV=1,否则OV=0;进位标志总是清零Cy=0。三、逻辑运算指令1.简单逻辑操作指令CLRA;A←“0”CPLA;A←ASWAPA;A0~3A4~7例:(A)=3AH,CPLA,(A)=0C5H00111010B→11000101B(A)=3AH,SWAPA,(A)=0A3H2.循环指令左循环指令(RotateAccumulatorLeft)RLA例(A)=6CH=01101100BRLA(A)=11011000B=0D8Ha7←a0C带进位左循环指令(RotateAccumulatorLeftthroughCarryflag)RLCA例(A)=6CH=01101100B,(C)=1RLCA(A)=11011001B=0D9Ha7←a0C右循环指令(RotateAccumulatorRight)RRA例(A)=6CH=01101100BRRA(A)=00110110B=36Ha7←a0C带进位右循环指令(RotateARightwithC)RRCA例(A)=6CH=01101100B,(C)=1RRCA(A)=10110110B=0B6Ha7←a0C3.逻辑与指令ANLA,RnANLA,directANLA,#dataANLA,@RiANLdirect,AANLdirect,#data∧--“与”,“有0即0,全1为1”00000111∧)1111110100000101B=05H4.逻辑或指令ORLA,RnORLA,directORLA,#dataORLA,@RiORLdirect,AORLdirect,#data∨--“或”,“有1即1,全0为0”00000110∨)0110110101101111B=6FH5.逻辑异或指令XRLA,RnXRLA,directXRLA,#dataXRLA,@RiXRLdirect,AXRLdirect,#data--“异或”,“相异为1,相同为0”00000110)0110110101101011B=6BH例(A)=01××××××B,×表示随机状态,为1或0,执行下述一组指令执行后A的值如何?XRLA,#0C0H;将累加器A的内容D7、D

1 / 50
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功