《第3章MCS-51指系统.ppt》由会员分享,可在线阅读,更多相关《第3章MCS-51指系统.ppt(50页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第3章章 单片机指令系统单片机指令系统 3.1 MCS51指令简介指令简介3.2 指令系统指令系统 LOOP:MOV A,R0 ;将将R0的内容送的内容送A 标号 操作码操作码 第一操作数第一操作数 第二操作数第二操作数 注释 (目的操作数)(目的操作数)(源操作数)(源操作数)注:白色的内容不是必须的注:白色的内容不是必须的 3.1 MCS51指令简介指令简介一、一、MCS51指令格式指令格式 二、二、MCS51系列单片机指令系统分类系列单片机指令系统分类 按寻址方式分为以下七种:按功能分为以下四种:1、立即立即寻址 1、数据传送指令位操2、直接寻址 2、算术运算指令3、寄存器寻址 3、逻
2、辑运算指令4、寄存器间接寻址指令 4、控制转移类指令5、相对寻址 5、位操作指令6、变址寻址7、位寻址三、三、寻址方式寻址方式 寻址方式:寻找(或确定)操作数所在单元地址的方式。寻址方式越多,计算机寻址能力越强,但指令系统也越复杂。说明:以下讨论的寻址方式都是针对源操作数的。但实际上目的操作数也有寻址问题。1、寄存器寻址 MOV A,Rn 操作数在寄存器中,如R0R7,A、B、Cy(位)、DPTR 2、直接寻址 MOV A,40H 操作数直接以单元地址形式给出(也可以寄存器名称形式给出,但A B DPTR 除外)如:MOV A,P0 ;MOV R0,TH03、寄存器间接寻址 MOV A,R1
3、操作数是通过寄存器间接得到的。4、立即寻址 MOV A,#40H 操作数在指令中直接给出。5、基址寄存器加变址寄存器寻址 以DPTR或PC为基址寄存器,以A为变址寄存器,以两者相加形成的16位地址为操作数的地址。MOVC A,A+DPTR MOVC A,A+PC四、四、指令中常用符号说明指令中常用符号说明 Rn当前寄存器区的8个工作寄存器R0R7(n07);Ri当前寄存器区可作地址寄存器的2个工作寄存器R0和R1(i0,1);direct8位内部数据存储器单元的地址及特殊功能寄存器的地址;#data表示8位常数(立即数);#datal6表示16位常数;add 16表示16位地址;addrll表
4、示11位地址;rel8位带符号的地址偏移量;bit表示位地址;间接寻址寄存器或基址寄存器的前缀;()表示括号中单元的内容()表示间接寻址的内容;五、五、MCS51指令简介指令简介 1.以累加器以累加器A为目的操作数的指令为目的操作数的指令 MOV A,data ;A data MOV A,Rn ;n=07,A(Rn)MOV A,Ri ;i=0,1 ,A(Ri)MOV A,direct ;A(Rn)direct为内部RAM或SFR地址 注:MOV A,Ri ;以Ri的内容为地址,把该地址中 的内容送到A中去。A(Ri)MOV A,R0 ;将R0的内容送到A去。A(R0)MOV A,#20H ;(
5、A)=20H A的内容为20H MOV A,20H ;(A)=(20H)A的内容为20H中的内容 注意以上两组指令的不同点 例:例:MOV R0,#30HMOV 30H,#60HMOV A,R0(A)=?2.以以Rn为目的操作数的指令为目的操作数的指令MOV Rn,A ;Rn (A),n=07MOV Rn,direct ;Rn (direct)MOV Rn,data ;Rn data 3.以直接地址为目的操作数的指令以直接地址为目的操作数的指令 MOV direct,A ;direct(A)MOV direct,Rn ;direct(Rn),n=07MOV direct,Ri ;direct(
6、Ri),i=0,1MOV direct,direct ;direct(direct)MOV direct,#data ;direct data 4.以寄存器间接地址为目的操作数指令以寄存器间接地址为目的操作数指令MOV Ri,A ;(Ri)(A),i=0,1MOV Ri,direct ;(Ri)(direct)MOV Ri,data ;(Ri)data应用举例应用举例1MOV P1,#0FEH;11111110B可以使可以使P1.0上的发光二极管点亮上的发光二极管点亮MOV P1,#0F0H;11110000B可以使可以使P1口上的上面口上的上面4个发光二个发光二极管点亮极管点亮P1.0 P1
7、.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 5v8段数码管显示段数码管显示P1.0 aP1.1 bP1.2 cP1.3 dP1.4 eP1.5 fP1.6 gP1.7 dp5vMOV P1,#00H ;显示显示 8.MOV P1,#0F8H ;显示显示 7MOV P1,#88H ;显示显示 A应用举例应用举例2 一个引脚的高低电平,可以通过“光电耦合器”控制继电器,从而以“弱电”控制“强电”。3.2 指令系统指令系统一、一、数据传送指令位操作数据传送指令位操作 1.16位数据传输指令位数据传输指令MOV DPTR,#data16;DPTR data16 DPTR-数据指针
8、,为SFR中(DPH)、(DPL)MOV DPTR,#2010H相当于:MOV DPH,#20H MOV DPL,#10H2、堆栈操作指令堆栈操作指令进栈指令 PUSH direct如:(SP)=60H,(A)=30H,(B)=70H 时,执行 PUSH Acc ;(SP)+1=61HSP,(A)61H PUSH B ;(SP)+1=62HSP,(B)62H结果:(61H)=30H,(62H)=70H,(SP)=62H退栈指令 POP direct如:(SP)=62H,(62H)=70H,(61H)=30H 时,执行 POP DPH ;(SP)DPH,(SP)1=61HSP POP DPHL
9、;(SP)DPL,(SP)1=60HSP结果:(DPTR)=7030H,(SP)=60H堆栈的存储原则:先进后出(SP)(SP+1)(SP+2)(SP+3)3.累加器累加器A与外部数据传输指令与外部数据传输指令MOVX A,DPTR;A(DPTR)地址范围64KMOVX A,Ri ;A(Ri)地址范围0255MOVX DPTR,A;(DPTR)(A)MOVX Ri,A ;(Ri)(A)4.查表指令查表指令MOVC A,A+DPTR;A(A)+(DPTR)例:(DPTR)=0300H,(A)02H ROM中 (0302H)=55H执行:MOVC A,A+DPTR结果:(A)=55HMOVC A,
10、A+PC A(A)+(pc)PC程序指针,指向下一条指令的地址例:根据A中的内容(09)查平方表 MOVC A,A+PC 例子:地址 机器码 源程序 ORG 0000H0000 7403 MOV A,#03H0002 83 MOVC A,A+PC0003 00 DB 00H0004 01 DB 01H0005 04 DB 04H0006 09 DB 09H0007 10 DB 10H0008 19 DB 19H0009 24 DB 24H 000A 31 DB 31H000B 40 DB 40H000C 51 DB 51H(顺便讲解如何查机器码)END5.字节交换指令字节交换指令XCH A,R
11、n ;(A)(Ri)XCH A,direct ;(A)(direct)XCH A,Ri ;(A)(Ri)例:(A)=80H,(R7)=97H执行:XCH A,R7结果:(A)=97H,(R7)=80H例:将片内RAM 60H单元与61H单元的数据交换。XCH 60H,61H 对吗?6.半字节交换指令半字节交换指令XCHD A,Ri ;(A)0-3 (Ri)0-3例:(R0)=60H,(60H)=3EH,(A)=59H执行:XCHD A,R0结果:(A)5E H (60H)39 H二、二、算术操作类指令算术操作类指令1.加法指令(Addtion)2.带进位加法指令3.加1指令(Increase)
12、4.十进制调整指令5.带借位减法指令(Subtraction)6.减1指令(Decrease)7.乘法指令(Multiplication)8.除法指令(Division)PSW寄存器寄存器Cy:进位标志位AC:辅助进位标志位F0:供用户使用的标志位OV:溢出标志位P:奇偶标志位 A中数据的奇偶性。当1的个数为奇数,P=1,否则P=0。RS1 RS0 0 0 区0(地址:00H07H)0 1 区1(地址:08H0FH)1 0 区2(地址:10H17H)1 1 区3(地址:18H1FH)2.带进位加法指令带进位加法指令ADDC A,Rn ;A(A)+(Rn)+(Cy)ADDC A,Ri ;A(A)
13、+(Ri)+(Cy)ADDC A,direct ;A(A)+(direct)+(Cy)ADDC A,data ;A(A)+#data+(Cy)对标志位的影响与ADD相同3.加加1指令指令INC A ;A(A)+1INC Ri ;Ri(A)+1INC direct ;direct(direct)+1INC Ri ;(Ri)(Ri)+1INC DPTR ;DPTR(DPTR)+1对标志位不产生影响若:(A)0FFH ,(Cy)=0执行:INC A结果:(A)00H ,(Cy)=04.十进制调整指令十进制调整指令 DA A 用途:紧跟在BCD码加法指令(不包括减法)之后,进行十进制调整。(96H 为
14、压缩BCD码,表示十位为9,个位为6)如两BCD码加:MOV A,#35H ADD A,#46H (A)=7BH,并不是 81H 但:DA A 后,(A)81H5.带借位减法指令(带借位减法指令(Subtraction)(1)SUBB A,Rn ;A(A)-(Rn)-(Cy)(2)SUBB A,Ri ;A(A)-(Ri)-(Cy)(3)SUBB A,direct ;A(A)-(direct)-(Cy)(4)SUBB A,data ;A(A)-#data-(Cy)(5)对标志位的影响 (6)Cy -进位位(7)AC-半进位位(8)OV-溢出位6.减减1指令(指令(Decrease)减减1类指令共
15、类指令共4条,其功能是将操作数指定单元内容条,其功能是将操作数指定单元内容减减1。DEC A ;A-1A,A中内容减中内容减1DEC Rn ;Rn-1Rn,Rn中内容减中内容减1DEC direct ;(;(direct)-1(direct),直接地址中内容减直接地址中内容减1DEC Ri ;(Ri)-1(Ri),Ri间间址址中中的的内内容容减减1 7.乘法指令(乘法指令(Multiplication)MUL AB ;(A)(B)低8位A 高8位B A、B中都是无符号整数 如果积大于255,OV1,否则OV0;进位标志总是清零 Cy0。8.除法指令(除法指令(Division)DIV AB ;
16、(A)(B)商 A 余数B A、B中都是无符号整数 如果除数B为“0”,OV1,否则OV0;进位标志总是清零 Cy0。三、三、逻辑运算指令逻辑运算指令1.简单逻辑操作指令简单逻辑操作指令 CLR A ;A“0”CPL A ;A A SWAP A ;A03 A47例:(A)=3AH,CPL A,(A)=0C5H 0011 1010B 1100 0101B (A)=3AH,SWAP A,(A)=0A3H 2.循环指令循环指令 左循环指令 (Rotate Accumulator Left)RL A 例(A)6CH =0110 1100B RL A (A)=1101 1000B=0D8Ha7 a0 C
17、带进位左循环指令(Rotate Accumulator Left through Carry flag)RLC A 例(A)6CH =0110 1100B,(C)=1 RLC A (A)=1101 1001B=0D9Ha7 a0 C 右循环指令(Rotate Accumulator Right)RR A例(A)6CH =0110 1100B RR A (A)=0011 0110B=36Ha7 a0 C带进位右循环指令(Rotate A Right with C)RRC A例(A)6CH =0110 1100B,(C)=1 RRC A (A)=1011 0110B=0B6Ha7 a0 C3.逻辑
18、与指令逻辑与指令ANL A,Rn ANL A,direct ANL A,dataANL A,RiANL direct,AANL direct,data“与”,“有0即0,全1为1”0000 0111 )1111 1101 0000 0101 B 05H4.逻辑或指令逻辑或指令ORL A,Rn ORL A,direct ORL A,dataORL A,RiORL direct,AORL direct,data “或”,“有1即1,全0为0”0000 0110 )0110 1101 0110 1111 B 6FH5.逻辑异或指令逻辑异或指令XRL A,Rn XRL A,direct XRL A,d
19、ataXRL A,RiXRL direct,AXRL direct,data “异或”,“相异为1,相同为0”0000 0110 )0110 1101 0110 1011 B 6BH例(A)=01B,表示随机状态,为1或0,执行下述一组指令执行后A的值如何?XRL A,#0C0H;将累加器A的内容D7、D6取反 0 1 ORL A,#03H;将累加器A的内容D1、D0置1 1 1 0 1 0 0 0 0 ANL A,#0E7H;将累加器A的内容D4、D3清0 1 0 0 0 0 0 0 0 1 1 1 0 1 1 1 1 1 0 0 1 1 1 1 0 0 0 1 1 解:执行上述指令后,(A
20、)=100011B。习题习题1:如何将累加器A中的数据高4位清0,低位不变?习题习题2:如何将寄存器R2中的数据奇数位取反,偶数位不变?四、四、控制转移类指令控制转移类指令1.跳转指令跳转指令短跳指令 AJMP addr11 PCaddr11,跳转范围2k长跳指令 LJMP addr16 PCaddr16,跳转范围64k间接跳转指令 JMP A+DPTR PC(A)(DPTR)相对转移指令 SJMP rel PC(PC)+2 PC(PC)+rel rel机器码的相对偏移量,为8位补码 转移范围:前128后127字节 rel(目的地址转移指令地址转移指令字节数)补 (目的地址PC当前值)补编程时
21、,可用标号代替转移目的地址,rel 交给编译程序计算。SJMP NEXT (或AJMP NEXT,SJMP NEXT)NEXT:原地踏步指令的指令:HERE:SJMP HERE常写成:SJMP$地址地址 机器码机器码 源程序源程序 注释注释 ORG 0000H ;整个程序起始地址整个程序起始地址0000 20 00 30 LJMP MAIN ;跳向主程序跳向主程序 ORG 0030H ;主程序起始地址主程序起始地址0030 C3 MAIN:CLR C ;MAIN为程序标号为程序标号0031 E6 LOOP:MOV A,R00032 37 ADDC A,R10033 08 INC R00034
22、DA FB DJNZ R1,LOOP ;相对转移相对转移0036 80 03 SJMP NEXT0038 78 03 MOV R0,#03H003A 18 NEXT:DEC R0003B 80FE SJMP$;HERE:SJMP HERE END ;结束标记结束标记程序中标号与地址之间的关系程序中标号与地址之间的关系2.条件转移指令条件转移指令JZ rel ;(A)0,转移JNZ rel ;(A)0,转移3.比较不相等转移指令比较不相等转移指令CJNE A,#data,rel;(A)=#data,继续 C0 (A)#data,转 C0 (A)#data,转 C1 特点:只有时,C1CJNE A
23、,direct,relCJNE Rn,#data,relCJNE Ri,#data,rel4.减减 1 不为不为 0 转移指令转移指令DJNZ Rn,rel;Rn(Rn)1 (Rn)0,转移 (Rn)0,继续DJNZ direct,rel例:延时子程序 delay:MOV R7,#03H delay0:MOV R6,#19H delay1:DJNZ R6,delay1 DJNZ R7,delay0 RET5.调用子程序指令调用子程序指令短调用指令 ACALL addr11长调用指令 LCALL addr16 编程时,可用标号代替转移目的地址,编程时,可用标号代替转移目的地址,addr11,ad
24、dr16交给编译程序计算。交给编译程序计算。7.中断返回指令中断返回指令 NOP6.子程序返回指令子程序返回指令8.空操作指令空操作指令 RETI RET RET指令从堆栈弹出保存的PC地址,实现子程序返回。五、五、位操作指令位操作指令1.数据位传送指令数据位传送指令MOV C,bit ;bit 可直接寻址位 C(bit)MOV bit,C ;C 进位位(bit)C 例:将位地址20H的一位数传送到位地址30H中:MOV C,20H MOV 30H,C位变量修改指令 CLR C ;将C0 CLR bit CPL C ;将C求反再存入C CPL bit ;将bit求反再存入bit SETB C ;将C1 SETB bit ;(bit)1 2.位变量逻辑指令位变量逻辑指令ANL C,bitANL C,bitORL C,bitORL C,bit3.条件转移类指令条件转移类指令JC rel ;如 C=1,转移JNC rel ;如 C=0,转移JB bit,rel ;如 bit=1,转移JNB bit,rel ;如 bit=0,转移JBC bit,rel ;如 bit=1,转移并 bit0