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

下载本文档

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

文档简介

1、指令系统数据传送指令 数据传送指令包括数据的传送、交换、堆栈数据的压入与弹出,是最基本、使用率最高的一类指令。助记符有MOV、MOVX、MOVC、XCH、XCHD、SWAP、PUSH、POP共八种。1MOV类指令及功能(16条)这类指令的功能是从源操作数到目的操作数的数据传送。MOV  A, Rn    ;RnA,寄存器Rn的内容送到累加器AMOV  A, direct   ;(direct)A,直接地址中的内容送AMOV  A, Ri    ;(Ri)A

2、,Ri间址的内容送AMOV  A, #data   ;dataA,立即数送AMOV  Rn, A    ;ARn,累加器A中的内容送寄存器RnMOV  Rn, direct   ;(direct)Rn;直接地址中的内容送RnMOV  Rn, #data   ;dataRn;立即数送RnMOV  direct, A   ;A(direct),A中的内容送入直接地址中MOV  di

3、rect, Rn   ;Rn(direct),寄存器内容送入直接地址中MOV  direct, direct  ;(direct) (direct),源操作数直接地址的内容送入;目的操作数的直接地址中MOV  direct, Ri  ;(Ri)(direct),Ri间址内容送入直接地址中MOV  direct, #data  ;data(direct),立即数送入直接地址中MOV  Ri, A    ;A(Ri),A中内容送到

4、Ri间址单元中MOV  Ri, direct  ;(direct)(Ri),直接地址中内容送入Ri间址单元中MOV  Ri, #data   ;data(Ri),立即数送入Ri间址单元中MOV  DPTR, #data16      ;data16DPTR,16位常数送入数据指针DPTR中,高8;位送入DPH,低8位送入DPH,低8位送入DPL中从上述指令可以看出目的操作数有A累加器、Rn寄存器、直接地址direct及间接地址Ri,源操作数除此之外还多一种立即数da

5、ta。例1  R0中有常数30H,而30H地址中有常数50H执行MOV A, R0后,A30H,R0不变。执行MOV A, R0后A50H,而不是30H,这条指令的功能是把R0中内容为地址的单元的书送入A,R0中是30H也就是把30H地址中内容50H送入A。例2  若(40H)20H,(50H)30H执行MOV 40H, 50H; (50H) (40H)结果:(40H)30H,50H地址中内容仍为30H。例3  若A40H,R030H,执行MOV R0, A         

6、     ;A(R0)结果:(30H)40H,A与R0皆不变,即A40H,R030H。该指令功能是把A中内容送入R0间址单元即R0中内容为地址的单元。例4  执行MOV DPTR, #2040H          ;2040HDPTR结果:DPH=20H, DPL=40HDPTR是片外RAM地址指针,只有这一条指令是传送16位数据。2MOVC类指令及功能(2条)MOVC A, A+PC       

7、;            ;PC+1PC, (A+PC) AMOVC A, A+DPTR                  ;(A+DPTR) A功能:该类属于查表指令,利用这两条指令很方便地查找放在程序存储器中数据表格的内容。例1  程序  1000H MOV A, #10H&

8、#160;      ;10HA  1002H MOVC A, A+PC       ;PC+1PC,PC=1003H,(A+PC)=(10H+1003H)A    1010H 02H  1011H 04H  1012H 06H  1013H 08H程序执行结果:A08H用MOVC A, A+PC指令需注意两点:1)指

9、令中的PC是执行完本条指令后的PC值,即PC等于本条指令地址加1。2)A是修正值,它等于查表指令和欲查数据相间隔字节数。A的范围是0255,一次该指令只能查找本指令后的256B范围内的表格,故称为近程查表。例2  程序  1000H MOV A, #01H     ;01HA  1002H MOV DPTR, #6000H    ;6000HDPTR  1005H MOVC A,A+DPTR   ;(A+D

10、PTR)=(01H+6000H)=(6001H) A  6001H 0AH  6002H 0BH  6003H 0CH  6004H 0DH程序执行结果:A0AH,查到了地址为6001H单元中的数据。用MOVC A, A+DPTR指令查表特点:A, DPTR都可以改变,因此可在64KB范围内查表,故称为远程查表。这条指令更方便。3MOVX类指令(4条)MOVX A, DPTR         ;(

11、DPTR) A,DPTR间址单元内容送AMOVX DPTR, A         ;A(DPTR), A 中内容送入DPTR间址单元MOVX A, Ri          ;(Ri) A,Ri间址单元内容送AMOVX Ri, A          ;A(Ri), A中内容送Ri间址单元MOVX类指令功能:这四条指令专门用来与外部数据存储区

12、传送数据。CPU与外部RAM传送数据时只能用间接寻址方式。例1  把外部数据存储单元2000H中的数据送到4000H单元中,设2000H中有数据30H。       程序             各条指令执行结果        MOV DPTR, #2000H      

13、0;  ;2000H DPTR, DPTR=2000H        MOVX A, DPTR          ;(DPTR)  A即(2000) A,A=30H        MOV DPTR, #4000H        ;4000HDPTR, DPTR=4000H 

14、60;      MOVX DPTR, A          ;A(DPTR)即A(4000H), (4000H)=30H例2  把内部RAM50H单元数据送到片外20H单元,设50H中单元存有数据10H。       程序              

15、;  各条指令执行结果        MOV A,50H              ;(50H) 各条指令执行结果A, A=10H        MOV R0,#20H          ;20HR0, R0=20H &

16、#160;      MOVX R0, A          ;A(R0)即A(20H)则20H10H注意:与外部RAM传送数据时,地址小于256B用Ri间址,大于256B时用DPTR间址。4交换指令       XCH A, Rn             ;Rn A, Rn与A

17、内容交换       XCH A,direct            ;(direct)  A, 直接地址内容与A内容交换       XCH A, Ri         ;(Ri)  A,Ri间址内容与A内容交换    

18、0;  XCHD A, Ri         ;(Ri.3Ri.0) A.3A.0, Ri间址内容低4 位与A中低4 位内容交换       SWAP  A          ;A.3A.0  A.7A.4, A中高4位与低4位交换例  若R0=30H, A=F0H, (30H)=46H执行   

19、XCH A, R0               ;结果:A=30H,R0=F0H, R0与A 内容交换 执行    XCH A, R0               ;结果:A=46H, (30H)=F0H, R0中不变,;实际上是(R0) A即(30H) A  若执行&

20、#160;XCHD A, R0               ;结果:A=F6H,(30)H=40H                    ;A与(30H)中低4位交换,高4位不变  执行 SWAP A    &

21、#160;            ;结果:A=0FH, 高低4位互换5堆栈操作指令(2条) PUSH、POP属堆栈操作指令,其功能是把直接地址中的内容压入堆栈保存,或从堆栈中取出(弹出)数据到直接地址中。         PUSH direct     ;SP+1SP, (direct) (SP)    &#

22、160;            ;直接地址内容压入堆栈顶         POP  direct     ;(SP)(direct), SP-1SP                 ;堆栈栈

23、顶内容弹出到直接地址 注意:堆栈是用户自己设定的内部RAM中的一块专用存储区,使用堆栈时一定先设堆栈指针。堆栈遵循后进先出的原则安排数据。压入数据时SP先加1,再压入;弹出时,先弹出数据,SP再减1。例  设堆栈指针为30H,为保护现场把A和B中的内容压入堆栈保护,然后根据需要再把两者弹出。设A中为30H,B中为01H。       程序        执行结果        

24、MOV   SP, #30H  ;30HSP, SP=30H设堆栈指针为30H        PUSH  ACC        ;SP+1SP=31H, A(SP)即A(31H),(31H)=30H        PUSH  B    ;SP+1SP=32H, B(SP)即B(32H),(

25、32H)=01H        POP   B    ;SPB即(32H)B, B=01H, SP-1SP=31H        POP  ACC    ;SPA即(31H)A, A=30H, SP-1SP=30H从此例可以看出压入、弹出过程SP的变化规律算术运算指令算术运算指令的主要功能是实现算术加、减、乘、除等运算。1ADD类指令是不带进位的加

26、法运算指令(4条)。ADD A,Rn          ;A+RnA, A与Rn寄存器内容相加,结果送到A中ADD A,direct         ;(direct)+AA, A与直接地址内容相加,和送AADD A, Ri      ;(Ri)+AA, A与Ri间址内容相加,和送AADD A, #data      

27、   ;data+AA, A与立即数相加,和送A注意:ADD类指令相加结果均在A中,相加后源操作数不变。若A中最高位有进位,Cy置1;若半加位有进位,AC置1。A的结果还影响奇偶标志位P。例  A=30H, R0=10H执行  ADD A,R0  结果:A=40H, R0=10H,标志位 P=1, Cy=0, OV=0, AC=02ADDC类指令(带进位加法4条)ADDC A, Rn      ;A+Rn+CyA,  A与R n内容、进位状态相加,和送到A中ADDC A, d

28、irect     ;(direct)+Cy+AA, A与直接地址中内容、进位状态相加,和送A ADDC A, Ri      ;(Ri)+Cy+AA, A与Ri间址单元中内容、进位状态相加,和送A       ADDC A, #data         ;data+Cy+AA, A与 立即数、进位状态相加,和送A与ADD类指令的区别是,

29、ADDC指令相加时连同进位标志Cy内容一起相加,主要用于多字节加法中的高位字节的相加,而最低位字节相加用ADD指令。进位位Cy加到字节的最低位。例  编写计算1234H+0FE7H的程序,将结果存入内部RAM的41H和40H单元,40H存低8位,41H存高8位。      程序       MOV A, #34H   ;被加数低8位数34H送A       ADD A, #0E7H

30、60;  ;加数低8位数E7H与之相加,A=1BH,Cy=1       MOV 40H, A   ;A40H即34H+E7H结果存入40H中(40H=1BH)       MOV A, #12H   ;被加数高8位数12H送A       ADDC A, #0FH   ;加数高8位0FH和Cy与A相加,A=

31、22H       MOV 41H, A   ;高8位与进位位之和存入41H中(41H)=22H           ;总和为221BH,总结果在41H,40H单元中3SUBB类指令(4条) SUBB类指令是带借位减法指令,其功能是将A中被减数减去源操作数指出的内容,再减去借位标志Cy(原进位标志)状态,差值在A中。SUBB A, Rn    ;A-Rn-C

32、yA ,A减寄存器Rn内容及进位标志     SUBB A, direct   ;A-(direct)-CyA,A减直接地址内容和进位标志     SUBB A, Ri    ;A-(Ri)-CyA, A减Ri间址单元内容和进位位标志     SUBB A, #data   ;A-data-CyA, A减立即数和进位标志说明:1) 多字节减法时,低

33、位相减有借位则把Cy置1,否则Cy为0。2) MCS-51系列指令中没有不带借位的减法指令,所以在单字节或低位字节减法时用SUBB类指令前要先将Cy清0。3)减去一个数实际上是加上这个数的相反数(负数),减法运算常常用补码相加方式。4MUL(乘)和DIV(除)指令 乘法指令只有一条:MUL  AB          ;A×BB和A,结果16位,高8位存入B,低8位在A中 若乘积大于FFH则将溢出标志OV置1。 除法指令也只有一条:DIV  AB&

34、#160;             ; A÷B商A,余数B 注意:当除数为0时结果不确定,则溢出将OV置1。5INC(加1)和DEC(减1)类指令 加1类指令共5条,其功能是将操作数内容加1。INC A     ;A+1A, A加1INC   Rn         ;Rn+1Rn, Rn中内容加1I

35、NC   direct       ;(direct)+1(direct), 直接地址中内容加1INC Ri        ;(Ri)+1(Ri), Ri间址中的内容加1INC   DPTR    ;DPTR+1DPTR, 数据指针加1例  判断INC R0和INC R0两条指令结果,比较两者的区别。设R030H,(30H)=00H。 执行  IN

36、C   R0            ;R0+1=30H+1R0, 结果R0=31H 执行  INC   R0           ;(R0)+1=(30H)+1(R0),结果(30H)=01H,R0中内容不变,仍为30H 减1类指令共4条,其功能是将操作数指定单元内容减1。    

37、0;  DEC  A     ;A-1A, A中内容减1       DEC  Rn         ;Rn-1Rn, Rn中内容减1       DEC  direct    ;(direct)-1(direct), 直接地址中内容减1   

38、60;   DEC  Ri         ;(Ri)-1(Ri), Ri间址中的内容减1 操作过程与加1指令类似,这里不再举例。6十进制加法调整指令(1条)       DA   A 功能:在加法指令后,把A中二进制码自动调整成BCD码。例   MOV  A, #05H       ;05HA &

39、#160;     ADD  A, #08H       ;05H+08HA=0DH       DA   A        ;结果调整A=13H,即是13的BCD码 注意:DA A指令只能跟在ADD或ADDC加法指令后,不适用于减法。逻辑运算指令1ANL类指令(6条)ANL类是逻辑与指令,其功能是将源操作数作数内容和目的操作数

40、内容按位相“与”,结果存入目的操作数指定单元中,源操作数不变。ANL A, Rn        ;ARnAANL A, direct       ;A(direct) AANL A, Ri       ;A(Ri) AANL A, #data       ;AdataAANL direct, A    

41、60;  ;(direct)A(direct)ANL direct, #data      ;(direct)data(direct)例  设A=F6H,(30H)=0FH执行  ANL A, 30H          ;A (30H) A操作如下: 11110110  (F6H)  00001111  (0FH)   注意:按位相“与”  

42、60; 00000110  (06H)结果:A=06H, 30H地址内容不变,即(30H)=0FH若执行ANL 30H, A           ;(30H) A(30H)操作同上,结果放在30H地址中,A中内容不变,即(30H)=06H, A=F6H。2ORL类指令(6条)ORL类指令是逻辑或指令,其功能是将源操作数作数内容和目的操作数内容按位逻辑“或”,结果存入目的操作数指定单元中,源操作数不变。ORL A, Rn     ;ARnAORL A,dir

43、ect       ;A(direct) A       ORL A, Ri    ;A(Ri) A       ORL A, #data       ;AdataA       ORL direct, A    

44、60;  ;(direct)A(direct)       ORL direct, #data      ;(direct)data(direct) “或”运算和“与”运算过程类似,这里不再举例。3XRL类指令(6条) XRL类是异或指令,其功能是将两个操作数指定内容按位“异或”,结果存于目的操作数指定单元中。“异或”原则是相同为“0”,相异为“1”。XRL A, Rn        ;

45、ARnA       XRL A, direct       ;A(direct) A        XRL A, Ri    ;A(Ri) A       XRL A, #data       ;AdataA   &#

46、160;   XRL direct, A       ;(direct)A (direct)       XRL direct, #data   ;(direct)data(direct)例  (50H)=05H 执行  XRL 50H, #06H             ;(50H)06

47、H(50H) 操作如下:     00000101 (05H)  00000110 (06H)        00000011 (03H)结果:(50H)=03H4循环移位指令(4条) 循环移位指令的功能是将累加器A中内容循环位移或者和进位位一起移位。例  A=01H, Cy=1若执行一次  RRC  A后,结果为:A=10000000B  Cy=1若执行一次  RLC

48、0; A后,结果为:A=00000011B  Cy=05取反、清0指令     CPL  A                  ;累加器内容按位取反。如果1就变0,如果0就变1     CLR  A          &

49、#160;       ;累加器A清0 控制转移类指令计算机运行过程中,有时因为操作的需要,程序不能按顺序逐条执行指令,需要改变程序运行方向,即将程序跳转到某个指定的地址再顺序执行下去。控制转移类指令的功能就是根据要求修改程序计数器PC的内容,以改变程序运行方向,实现转移。控制转移类指令可分为:无条件转移、条件转移、绝对转移、相对转移和调用、返回指令。下面我们将分类介绍。1无条件转移指令(4条)LJMP   add16         

50、  ;add16PC,无条件跳转到add16地址,可在64KB范围内转移,称为长转移指令AJMP   add11          ;add11PC,无条件转向add11地址,在2KB范围内转移SJMP   rel           ;PC2relPC,相对转移,rel是偏移量,8 位有符号数,范围128127,即可向后跳转128,向前可跳转127JMP  

51、;  A+DPTR         ;A+DPTRPC ,属散转指令,无条件转向A与DPTR内容相加后形成的新地址例1  执行指令LJMP   9100H不管这条指令存放在哪里,执行时将使程序转移到9100H,和AJMP,SJMP指令是有差别的。例2  程序2000H   MOV   R0 , #10H  ;10HPC 2002H   SJMP  03H  

52、 ;PC+2+rel=2002H+2+03H=2007HPC          2006H     2007H       从说明中可见,执行SJMP  03H 指令后,马上跳转到2007H地址执行程序。2条件转移指令(8条)条件转移指令是根据某种特定条件转移的指令。条件满足时转移,条件不满足时则顺序执行下面的指令。JZ   rel     

53、60;     ;A=0转向PC+2+relPC,A0顺序执行JNZ  rel           ;A转向PC+2+relPC ,A0顺序执行CJNE A, direct, rel     ;A (direct)转向PC+3+relPC且当A>(direct),Cy=0;当A<(direct),Cy=1;否则A=(direct),PC+3PC即顺序执行CJNE A, #data, rel &#

54、160;    ;A data P转向PC+3+relPC且当A >data,Cy=0;当A <data,Cy=1,;A=data,PC+3PC顺序执行CJNZ  Rn, #data, rel  ;Rndata转向PC+3+relPC;且当Rn>data,Cy=0,当Rn<data,Cy=1;Rn=data,PC+3PC顺序执行CJNE  Ri,#data, rel  ;(Ri) data ,PC+3+relPC ;且当(Ri)>data ,Cy=0,当(Ri)<data,Cy=1;(Ri

55、)=data, PC+3PC顺序执行DJNZ  Rn, rel       ;Rn1Rn ,Rn 0转向PC+2+relPC ;Rn=0,PC+2PC顺序执行DJNZ direct, rel      ;(direct)1(direct),(direct) 0转向 PC+2+relPC;(direct)=0 ,PC+2PC顺序执行注意:1)CJNE类指令借用进位标志Cy作为比较结果的标志位。从指令中可知,目的操作数内容小于原操作数内容Cy置1,反之Cy清0,该类指令多用于分支程序。2) DJNZ

56、指令执行时Rn或direct先减1,然后再判断Rn或direct内容是否等于0。不为0则转,为0顺序执行。DJNZ用在循环程序中,控制循环次数很方便。3) JZ和JNZ的操作数只有一个,是对A的内容的进行判断的指令。例1 以下程序的循环次数是多少,最后(R0)?MOV  R0 , #0LL:     DJNZ  R0 , LL分析:由于DJNZ是减1再判断大小的,因为R0=0,所以第一次执行DJNZ  R0 , LL后R0FFH255,则程序要执行的次数为256次,R0最后的值为0。解:程序要循环的次数为256次,最后R0=

57、03.调用、返回、控操作指令在程序设计中,常常要把具有一定功能的公用程序编制成子程序。当主程序转至子程序时用调用指令,而在子程序的最后安排一条返回指令,使执行完子程序后再返回到主程序。(1) LCALL    addr16    ;调用入口地址为addr16的子程序这是一条长调指令,可调用64KB范围内的子程序,因此,可放在程序的任何位置。指令的执行过程分两步:第一步把断点(当前执行指令的下一条指令地址)压入堆栈。第二步将调用的子程序的入口地址装入PC。即addr16(16位地址)PC,转向执行子程序。(2) ACALL &

58、#160;  addr11      ;子程序入口地址为addr11的子程序这是一条短调指令,只能实现2KB范围内的子程序的调用。其指令执行过程与LCALL指令一样。但是需要注意的是:ACALL中addr11只占用PC的PC.0PC.10位。(3) RET         ;放在子程序最后,使程序准确返回到主程序断点处执行过程为:(SP)PC.8PC.15断点地址高字节送入PC  SP1SP,(SP) PC.0PC.7断点低字节送入PC,这时PC

59、中为主程序断点地址,程序准确返回到调用指令的下一条。例  设SP=62H,(62H)=07H,(61H)=30H,执行指令RET结果:SP=60H,(PC)=0730H,CPU从0730H开始执行程序。(4) RETI     ;中断返回指令该指令用于中断服务程序,使中断程序结束后准确返回到主程序断点处,执行过程同RET,它还能清除优先级状态。(5) NOP         ;空操作执行该指令时,CPU只进行取指令、译码,而不进行任何操作,故称为控操作。常

60、用于产生一个机器周期延时。位操作指令MCS-51单片机的特色之一是具有很强的位处理功能。位操作指令又称为布尔指令,其功能是对内部RAM中可进行位操作的区域进行位操作。    在进行位操作时,位累加器C即进位标志Cy,位地址是片内RAM字节地址20H2FH单元中连续的128个位(位地址00H7FH)和部分功能寄存器。凡SFR中字符等地址能被8整除的特殊功能寄存器都具有可寻址的位地址,其中ACC(位地址E0HE7H),B(位地址F0HF7H)和片内RAM中128个位都可作软件标志或存储位变量。1. 位数据传送类指令(2条)MOV   C , bit

61、      ;(bit) C,寻址位的状态送入CMOV   bit , C      ;C(bit),C的状态送入位地址中2. 位修正指令(6条)CLR  C        ;0C, 清0累加器CLR  bit    ;0(bit);清0寻址位CPL  C       

62、 ;/CC,取反CPL  bit       ;(/bit) (bit),寻址位取反SETB   C       ;1C,C置1SETB   bit       ;1 (bit),寻址位置13. 位逻辑运算指令(4条)ANL  C , bit   ;C(bit) C,寻址位和C“与”,结果放在CANL  C , /bi

63、t      ;C(/bit) C,寻址位的非和C“与”,结果放在CORL  C , bit   ;C(bit) C,寻址位和C“或”,结果放在CORL  C , /bit      ;C(bit) C,寻址位和C的非“或”,结果放在C4. 位条件转移指令(5条)JC   rel    ;C=1转向PC+2+relPC             

温馨提示

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

评论

0/150

提交评论