单片机原理及应用 第三章 80C51单片机的指令系统_第1页
单片机原理及应用 第三章 80C51单片机的指令系统_第2页
单片机原理及应用 第三章 80C51单片机的指令系统_第3页
单片机原理及应用 第三章 80C51单片机的指令系统_第4页
单片机原理及应用 第三章 80C51单片机的指令系统_第5页
已阅读5页,还剩113页未读 继续免费阅读

下载本文档

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

文档简介

1、单片机原理及应用,北京化工大学 信息科学与技术学院 主讲教师:林伟国 E-mail: ,cn,第三章 MCS-51指令系统,本章重点,寻址方式 指令格式 操作结果及对标志位影响,第一节 概述,分类,数据传送类指令 29,数学运算类指令 24,逻辑运算类指令 24,控制转移类指令 17,位操作指令 17,指令格式,标号:操作码 (目的操作数),(源操作数) ;注释,指令的符号地址,由字母打头的字母数字串组成,长度一般不超过6个符号,指令操作的性质,用规定的汇编语言助记符表示,指令操作的对象,按指令长度分类,单字节指令,双字节指令,三字节指令,指令执行时间,12

2、个振荡周期 64条,24个振荡周期 45条,48个振荡周期 2条,第二节 MCS-51的寻址方式,寻址方式就是确定操作数所在的位置(地址),把操作数提取出来的方法。,基本寻址方式:,1、寄存器寻址2、直接寻址 3、寄存器间接寻址4、立即寻址 5、基址寄存器加变址寄存器间接寻址 6、相对寻址7、位寻址,一、寄存器寻址,以通用寄存器的内容作为操作数,在指令的助记符中直接以寄存器的名字表示操作数位置,寻址范围:,工作寄存器Rn(R0R7),寄存器ACC(累加器A),B,DPTR,Cy,例:MOV A,R0,二、直接寻址,指令中直接给出操作数地址,寻址范围:,1、内部数据RAM的低128个字节单元 2

3、、特殊功能寄存器 3、位地址空间,通用符号:direct,例:MOV A,3AH,MOV A,P0,MOV A,80H,等价,三、寄存器间接寻址方式,指令指定的寄存器内容为操作数地址,间址寄存器:,R0,R1,DPTR,SP,寻址范围:,1、内部RAM的低128字节(00H7FH) R0, R1 (Ri ,i=0,1),2、外部RAM的64KB(0000HFFFFH) DPTR, R0, R1,例:MOV A,R0 设: (R0)=30H (30H)=6FH,操作结果: (30H),A,A=6FH,如指令为 MOV A,R0 则 A=30H,四、立即寻址方式,指令直接给出操作数,操作数为8位或

4、16位二进制数,称立即数,寻址范围:,程序存储器中的立即数,通用符号:#data (8位),#data16(16位),例:MOV A,#0FH MOV DPTR , #1000H,五、变址间接寻址,基址寄存器内容加上间址寄存器内容(地址偏移量)为有效地址,基址寄存器:PC,DPTR 变址寄存器:A,寻址范围:程序存储器,例: MOVC A,A+DPTR 设 A=11H DPTR=02F1H,操作数地址为 02F1H+11H=0302H,操作:,(0302H),A,六、相对寻址方式,以PC当前值为基址,加上指令中给出的偏移量(del)形成有效的程序转移地址。,仅用在控制转移类指令中,转移范围:以

5、PC当前值为起始地址,相对偏移在+127-128个字节单元之间。,偏移量rel带符号数,为八位二进制补码,例: 1005H:JC 80H,执行过程:,读指令,完成后 (PC)=(PC)+2,如 C=1,则 (PC)=(PC)+rel 转移至 1007H-80H=0F87H 单元,如C=0 则执行1007H单元中的指令,1005H 40H 1006H 80H 1007H,后向128个单元 前向127个单元,七、位寻址,MCS-51设有独立的位处理器,位地址一般用直接位地址方式给出,可归入直接寻址方式,寻址范围:,位寻址内部RAM 128位 可位寻址的SFR 82位,通用符号:bit,指令中位地址

6、的表示方式:,1、直接地址(位地址) 2、位名称 3、第几单元第几位,寄存器名+位,4、用伪指令指定的符号地址,例:,PSW中F0(用户标志)可表示如下:,D5H F0 PSW.5 AF(AF EQU F0),第三节 数据传送类指令,按操作方式,分为三种:,数据传送,数据交换,栈操作,一、普通传送类指令,格式:,MOV (目的操作数),(源操作数),操作码助记符,操作:,将源操作数单元内容,传送到目的操作数单元中,源操作数内容不变。不影响标志位Cy,AC和OV。,操作数的组合关系,1、立即数的传送,MOV A, #data,(A),#data,MOV Rn, #data,(Rn),#data,

7、MOV Ri, #data,(Ri),#data,MOV direct, #data,(direct),#data,MOV DPTR, #data16,(DPTR),#data,说明:,a、MOV A,#data,将8位立即数送入累加器A中,例:MOV A,#80H,操作结果: (A)= 80H,b、MOV Rn,#data n=07,将8位立即数送入工作寄存器Rn中,例:MOV R4,#80H,操作结果: (R4)= 80H,c、MOV Ri, #data,将8位立即数送入由Ri指定的地址单元中,i=0,1。,Ri中的地址为00H7FH(8051),00HFFH(8052),注:仅寻址内部R

8、AM,不能寻址SFR,例:MOV R0,#32H 设 (R0)=70H , (70H)=11H,执行结果:(70H)=32H,d:MOV direct,#data,将8位立即数送入由direct直接寻址的地址单元中。,direct:00HFFH,8位二进制地址码 寻址内部RAM(00H7FH)及SFR,例:MOV 70H,#70H,MOV P0,#70H MOV 80H,#70H,e:MOV DPTR,#data,唯一的16位数据传送指令,把16位立即数送入DPTR中,例:MOV DPTR,#2034H,执行结果:(DPH)=20H (DPL)=34H,2、内部数据存储器与累加器A传送数据,M

9、OV A, direct,(A),(direct),MOV direct, A,(A),(direct),MOV A, Rn,(A),(Rn),MOV Rn, A,(A),(Rn),MOV A, Ri,(A),(Ri),MOV Ri, A,(Ri),(A),例:MOV R1,#82H MOV A,R1,指令错误。因为82H是DPL的地址值,对于SFR,不能使用间接寻址方式,正确指令:MOV A,DPL 或 MOV A,82H,3、内部数据存储器中Rn、SFR和片内数据RAM之间的数据传送,MOV direct,direct,(direct目的),(direct源),MOV direct, Rn

10、,(direct),(Rn),MOV Rn, direct,(direct),(Rn),MOV direct, Ri,(direct),(Ri),MOV Ri, direct,(Ri),(direct),例1:设PSW中标志位RS1,RS0为“11”,则选中第三组工作寄存器,MOV 40H,R0,MOV 40H,18H,等价,用立即寻址指令为片内RAM中20H,25H和P1口上置数,例2:,MOV 20H, #25H MOV 25H, #10H MOV P1, #0CAH,执行结果(20H)=25H,(25H)=10H (P1)=CAH,将以上状态作为初值,执行以下程序,结果如何,MOV R0

11、, #20H MOV A, R0 MOV R1, A MOV B, R1 MOV R1, P1 MOV P3, P1,(R0)=20H,(A)=(R0)=(20H)=25H,(R1)=A,(B)=(R1)=(25H)=10H,(R1)=P1 (25H)=CAH,P3=P1=CAH,(A)=? (R1)=? (B)=? (25H)=? (P3)=? (P1)=? (20H)=?,25H 25H 10H CAH CAH CAH 25H,二、外部数据存储器的数据传送指令,只能采用间接寻址方式,且只能与累加器A进行数据传送,格式:MOVX (目的操作数),(源操作数),MOVX A, DPTR,(A)

12、,(DPTR),MOVX DPTR, A,(DPTR),(A),MOVX A,Ri,(A),(Ri),MOVX Ri, A,(Ri),(A),例:,若片外数据存储单元中,(3007H)=60H,执行:,MOV DPTR, #3007H MOVX A, DPTR,结果:,(A)=60H,使用Ri作间址寄存器,此时需用P2口输出高八位地址,应事先预置P2,Ri的值,以下程序功能与上例相同: MOV P2 , #30H MOV R0 , #07H MOVX A, R0,三、程序存储器向累加器A传送指令MOVC,MOVC A , A+PC,(PC),(PC)+1,(A),(A)+(PC),MOVC A

13、, A+DPTR,(A),(A)+(DPTR)),功能:把A中内容与基址寄存器(PC,DPTR)内容相加,求得程序存储器某单元地址,再将该地址单元内容送累加器A,8位无符号整数,说明:,1、以PC作为基址寄存器,因为PC值不能任意更改,所以查表范围为PC当前值开始后的256字节。,偏移量计算式: DIS=表首地址(该指令所在地址+1),2、以DPTR作为基址寄存器,因为DPTR的内容可以通过赋值改变,使表格可以设置在64KB程序存储器的任意地址空间。,3、以上两条指令中,表格长度均受到变址寄存器A的限制,不超过256字节。,例1:编制根据累加器A中的数(09)查其平方表的子程序。,COUNT:

14、PUSH DPH; 保护DPTR内容 PUSH DPL; MOV DPTR,#TABLE ;赋表首地址给DPTR MOVC A, A+DPTR ; 根据A中内容查表 POP DPL; 恢复DPTR内容 POP DPH RET; 返回主程序,ORG 1000H TABLE:DB 00 DB 01 DB 04 DB 09 DB 16 DB 25 DB 36 DB 49 DB 64 DB 81,DB:伪指令,作用是把其后的值存入由标号开始的连续单元中,例2:编子程序根据A中二进制数查其ASCII码,BITOASC:,ADD A,#02H MOVC A, A+PC SJMP BARET DB 30H,

15、 31H, 32H, 33H DB 34H, 35H, 36H, 37H DB 38H, 39H, 41H, 42H DB 43H, 44H, 45H, 46H RET,TABLE:,BARET:,四、数据交换指令,1、字节交换指令,XCH A, Rn XCH A, direct XCH A, Ri,(A) (Rn) (A) (direct) (A) (Ri),例:设(R0)=20H,(A)=3FH,(20H)=75H,执行指令:XCH A,R0,执行结果:(A)=75H,(20H)=3FH,2、半字节交换指令,XCHD A, Ri (A30) (Ri)30),例:设(R1)=30H,(A)=

16、67H,(30H)=84H,执行指令:XCHD A, R1,执行结果:(A)=64H (30H)=87H,3、累加器A高4位与低4位内容互换指令,SWAP A ;( A 03) (A 03),例:设(A)=0CAH,执行指令:SWAP A 执行结果:(A)=0ACH,5、堆栈操作类指令,PUSH direct,(SP) (SP)+1 (SP) (direct),POP direct,(direct) (SP) (SP) (SP)-1,要点:入栈操作,先执行SP+1,再入栈 出栈操作,先出栈,再执行SP-1,例:在中断响应时,(SP)=09H,数据指针DPTR的内容为0123H,执行以下指令:,

17、PUSH DPL PUSH DPH,(SP)+1,使(SP)=0AH (DPL)压入0AH单元,(SP)+1,(SP)=0BH (DPH)压入0BH单元,执行结果:,(0AH)=23H (0BH)=01H (SP)=0BH,堆栈操作需遵循先入后出,后入先出原则,才能保持原单元内容不变,例:设(DPTR)=0123H,PUSH DPH PUSH DPL . . POP DPL POP DPH,执行结果:(DPTR)=0123H,如执行:,PUSH DPH PUSH DPL POP DPH POP DPL,执行结果: (DPTR)=2301H,第四节 算术运算类指令,类型:加,减,乘,除,增量、减

18、量以及二十进制调整指令,ADD、ADDC、SUBB指令的执行将影响标志位(PSW中的OV,Cy,AC及P),一、加法指令ADD,目的操作数为A内容,源操作数可以采用4种寻址方式,结果存放于A中,ADD A,Rn (A) (A)+(Rn) ADD A,direct (A) (A)+(direct) ADD A,Ri (A) (A)+(Ri) ADD A,#data (A) (A)+#data,运算均针对无符号二进制数进行,但结合OV标志可实现有符号数运算。结果将影响OV,Cy,AC,P标志,当最高位有进位,Cy=1 位3向位4有进位,AC=1 OV取决于6、7两位的进位情况,同时有进位或无进位,

19、则OV=0;只有一位有进位,OV=1 A中有偶数个1,P=0;否则,P=1,例:设(A)=0C3H,(R0)=0AAH 执行指令:ADD A,R0 写出执行结果及对标志位影响,(A) 1 1 0 0 0 0 1 1 + (R0) 1 0 1 0 1 0 1 0,0 1 1 0 1 1 0 1,C=1,AC=0,OV=1,P=1,(A)=6DH,只对有符号数运算有意义。两负数相加,结果为正数,溢出,二、带进位加法指令ADDC,ADDC A, Rn ; (A) (A)+(C)+(Rn) ADDC A,direct ; (A) (A)+(C)+(direct) ADDC A,Ri ; (A) (A)

20、+(C)+(Ri) ADDC A, #data ; (A) (A)+(C)+(#data),常用于多字节加法,例:设(A)=0C3H,(R0)=0AAH,C=1 执行指令:ADDC A,R0,(A) 1 1 0 0 0 0 1 1 + (C) 0 0 0 0 0 0 0 1,1 1 0 0 0 1 0 0,+(R0) 1 0 1 0 1 0 1 0,0 1 1 0 1 1 1 0,C=1,AC=0,OV=1,P=1,(A)=6EH,三、带借位减法指令SUBB,SUBB A,Rn ; (A) (A)-(C)-(Rn) SUBB A,direct ; (A) (A)-(C)-(direct) SU

21、BB A,Ri ; (A) (A)-(C)-(Ri) SUBB A,#data ; (A) (A)-(C)-#data,影响标志位:,最高位有借位,Cy=1 位3向位4有借位,AC=1 最高两位同时有借位或无借位,OV=0;只有一位有借位,OV=1,例:设(A)=0C9H,(30H)=54H,C=1 执行:SUBB A,30H,(A) 1 1 0 0 1 0 0 1 - (C) 0 0 0 0 0 0 0 1,1 1 0 0 1 0 0 0,- (30H) 0 1 0 1 0 1 0 0,0 1 1 1 0 1 0 0,C=0,AC=0,OV=1,P=0,(A)=74H,只有在符号数相减时,O

22、V才意味着溢出与否,如出现以下两种情况,OV置1:负-正=正 正-负=负,四、增量指令INC,INC A ; (A) (A)+1 INC Rn ; (Rn) (Rn)+1 INC direct ; (direct) (direct)+1 INC Ri ; (Ri) (Ri)+1 INC DPTR; (DPTR) (DPTR)+1,操作:指定变量加1,结果仍存于原地址单元中。除P外,不影响任何标志位。,例:设(R0)=7EH,(7EH)=0FFH (7FH)=40H,执行下列指令:,INC R0 ; INC R0 ; INC R0 ;,(R0)=(R0)+1, (7EH)=00H,(R0)=(R

23、0)+1, (7FH)=41H,(R0)=(R0)+1, (R0)=7FH,运行结果: (R0)=7FH,(7EH)=00H (7FH)=41H,例:执行指令序列,MOV DPTR,#1FFEH; INC DPTR ; INC DPTR ; INC DPTR ;,(DPTR)=1FFEH,(DPTR)=1FFFH,(DPTR)=2000H,(DPTR)=2001H,五、减量指令DEC,DEC A ; (A) (A)-1 DEC Rn ; (Rn) (Rn)-1 DEC direct ; (direct) (direct)-1 DEC Ri ; (Ri) (Ri)-1,操作:指定变量减1,结果送

24、回原地址单元,不影响标志位(除P)。,设(40H)=00H 执行 DEC 40H,结果:(40H)=FFH 不影响标志位,六、乘法指令,MUL AB ;,(A)07 (B)815,(A)*(B),影响标志位: 如乘积255 (0FFH) (即B0) ,OV=1 C总是被清0,即C=0 AC不变,对P有影响,例:设(A)=80H(128),(B)=32H(50),执行指令:MUL AB,结果:乘积为1900H(6400),(A)= (B)=,00H,19H,OV= Cy= P=,1,0,0,七、除法指令,DIV AB ;,(A) (B),商 余数,(A)/(B),对标志位影响: 当B中除数为00

25、H,除法运算结果为不定值,则A、B中内容均为不定值,OV置1 C=0,例: (A)=87H(135),(B)=0CH(12) DIV AB,(A)= (B)=,0BH(11),03H,OV= C=,0 0,八、二十进制调整指令,DA A ; 调整A中内容为BCD码,调整方法: 根据C和AC的状态,并结合A的内容,IF (A03)9 OR (AC)=1, THEN (A03)=(A03)+06H;,IF (A47)9 OR (C)=1 , THEN (A47)=(A47)+60H,因为指令要利用C和AC,所以必须跟在加法指令(ADD,ADDC)后面,根据A中的数值及PSW相应标志位的状态,可能的

26、操作为A加06H,60H,66H,例: (A)=0101 0110B(56) (R3)=0110 0111B(67)以上均为ASCII码 (C)=0,执行指令: ADDC A,R3 DA A,(A) 0 1 0 1 0 1 1 0 +(R3) 0 1 1 0 0 1 1 1,1 0 1 1 1 1 0 1,A309,AC=0 A749,C=0 +66H调整,+ 0 1 1 0 0 1 1 0,0 0 1 0 0 0 1 1,结果: (A)=23H (C)=1,对于无符号BCD码运算,56+67=123,使用此指令条件:,1、两个操作数均为压缩BCD码 2、不适合减法和增1运算,例:对于十进制减

27、法运算,可采用补码相加的方法 即用9AH减去减数得到以十为模的补码,设被减数存30H单元,减数存40H单元,结果存50H单元。程序如下:,CLR C ; MOV A,#9AH; SUBB A, 40H ; ADD A , 30H; DA A ; MOV 50H, A,清进位位,求减数的十补码,补码相加,调整至BCD码,第五节 逻辑运算类指令,按操作数分为两类:,单操作数指令 双操作数指令,针对累加器A进行,A与第二操作数之间进行,操作:清零、求反、移位,与、或、异或,一、单操作数逻辑运算类指令,1、累加器A清零指令 CLR A; (A) 0,2、累加器求反指令 CPL A; (A) (A),例

28、:设(A)=0AAH(10101010B) 执行:CPL A,结果: (A)=01010101B(55H),3、累加器A循环左移指令 RL A;,4、累加器A连同进位位C循环左移指令,RLC A;,例: (A)=0C5H(1100 0101B),RL A,(A)=1000 1011B=8BH,例: (A)=45H(0100 0101 B),(C)=1,RLC A ;,(A)=1000 1011B=8BH,(C)=0,5、累加器A循环右移指令,RR A ;,6、累加器A连同进位位C循环右移指令,RRC A ;,例: (A)=0C5H(1100 0101B),(C)=1,执行指令: RRC A,结

29、果: (A)=1110 0010B=0E2H,(C)=1,二、双操作数逻辑运算类指令,1、逻辑“与”指令,ANL A , Rn ANL A , direct ANL A , Ri ANL A , #data,以A为第一操作数,逻辑“与”运算的结果存入A,ANL direct,A ANL direct,#data,目的操作数为direct,源操作数为A和立即数,与指令常用于屏蔽某些不用位。,方法是将该位与“0”相“与”,保留位与“1”相“与”,如 ANL A,#1111 0000B; 屏蔽低4位,高4位不变,2、逻辑“或”指令,ORL A , Rn ORL A , direct ORL A ,

30、Ri ORL A , #data ORL direct , A ORL direct , #data,ORL指令常用于使字节中某些位置1,方法:欲置1的位与“1”相或,欲保留不变的位与“0”相或,如 ORL A,#0FH; 高4位不变,低4位置1,3、逻辑“异或”指令,XRL A , Rn XRL A , direct XRL A , Ri XRL A , #data XRL direct , A XRL direct , #data,XRL 指令可用于对某些位取反,方法:欲取反的位用“1”去异或,保留位用“0”去异或,如 XRL A,#0FH;高4位不变,低4位取反,例: 设(A)=0C3H

31、(1100 0011B) (R0)=0AAH(1010 1010B),分别执行以下指令:,ANL A,R0 ; ORL A,R0 ; XRL A,R0 ;,(A)=1000 0010B=82H,(A)=1110 1011B=0EBH,(A)=0110 1001B=69H,第六节 控制转移类指令,3类:,无条件转移 条件转移 子程序调用及返回,一、无条件转移指令,1、绝对无条件转移,AJMP addr11;,(PC) (PC)+2 (PC 010) addr 010 (PC 1115)不变,addr11:11位地址,是转移目的地址的低11位。 在汇编语言程序中,可写成4位16进制地址,也可写成代

32、表16位地址的标号(符号地址)形式。,转移范围:2K字节,例1: 0345H:AJMP addr11 addr11取值可为000 0000 0000B111 1111 1111B,执行时 (PC)=(PC)+2=0347H,15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0,0347H:,0 0 0 0 0 0 1 1 0 1 0 0 0 1 1 1 B,转移目标地址范围:PC 1115不变,0 0 0 0 0 0 0 0 0 0 0 B,1 1 1 1 1 1 1 1 1 1 1 B,有效转移地址范围: 0000H07FFH,例2: 07FFH: AJMP adr11

33、,(PC)+2=07FFH+2=0801H,0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1B,0 0 0 0 0 0 0 0 0 0 1B,1 1 1 1 1 1 1 1 1 1 1B,0801H,0801H,0FFFH,转移范围,转移范围:包括当前指令的下一条指令在内的同一2K字节内,addr11:在0801H0FFFH范围内,例3: 0345H:AJMP 0123H 2567H:AJMP 29ABH,是否正确,正确,错误,2567H:0 0 1 0 0 1 0 1 0 1 1 0 0 1 1 1 B,1 1 1 1 1 1 1 1 1 1 1 B,27FFH,转移地址最大为

34、27FFH,29ABH大于27FFH,超出有效转移地址范围,2、长转移指令,LIMP addr16 ; (PC) addr16,转移范围: 64KB,3、相对转移指令,SJMP rel ;,(PC) (PC)+2 (PC) (PC)+rel,rel:8位二进制补码,可写成符号地址的形式,转移范围:PC当前值为基准,-128+127,例: 0345H:SJMP rel,PC 当前值:0347H,向后128字节 02C7H,向前127字节 03C6H,rel=80H,rel=7FH,当rel取值为FEH(-2),则目的地址与源地址相同,如 设rel=FEH,执行指令 HERE:SJMP HERE,

35、程序在此指令处无限循环,4、间接转移指令,JMP A+DPTR ; (PC) (A)+(DPTR),多分支转移指令,DPTR内容为多分支转移程序的首地址,由累加器A的内容来选择其中的某一个分支转移指令,例:,MOV DPTR , #JMP_TBL JMP A+DPTR . AJMP LABEL0 AJMP LABEL1 AJMP LABEL2 AJMP LABEL3,JMP_TBL:,AJMP 为两字节指令,所以A中内容为偶数,JMPTBL为分支转移表的起始地址,分支表的长度应不超过256字节,二、条件转移指令,均为相对寻址方式,指令提供偏移量rel,转移范围为PC当前值的-128+127,1

36、、判零转移指令,JZ rel ;,(PC) (PC)+2 如(A)=0,则(PC)=(PC)+rel 否则,程序顺序执行,JNZ rel ;,(PC) (PC)+2 如(A)=0,则(PC)=(PC)+rel 否则,程序顺序执行,例:将外部数据存储器的一个数据块传送到内部数据RAM,两者的首地址分别为DATA1和DATA2,遇到传送的数据为0时停止传送。,分析:数据块传送,长度较短,均采用间接寻址方式,其中R0寻址外部数据存储器,R1寻址内部RAM。,传送时,要以累加器A作为过渡,利用判零转移可以判别是否继续传送还是终止,程序如下:,MOV R0,#DATA1 ; MOV R1,#DATA2

37、; MOVX A,R0 ; JZ STOP ; MOV R1,A ; INC R0 ; INC R1 ; SJMP LOOP ;,LOOP:,HERE:,外部数据块首址,内部数据块首址,外部数据传入A,为零则终止,不为零则传送至内部RAM单元,修改地址指针,继续循环,STOP:,2、比较转移指令,格式: CJNE (目的操作数),(源操作数),rel,根据目的和源操作数的寻址方式不同,共有4条,CJNE A , #data , rel CJNE A , direct , rel CJNE Rn , #data , rel CJNE Ri , #data , rel,均为三字节指令,例:设(R7

38、)=56H,执行指令,CJNE R7,#60H,K1 ,K1:,例2、设P1口P10P13为准备就绪信号输入端,当该4位输入全“1”说明各项工作准备好,单片机可顺序执行主程序,否则循环等待。,程序片段如下:,L0:,MOV A , P1 ; ANL A , #0FH ; CJNE A , #0FH , L0 ; ,MAN1:,读P1口内容,高4位无意义,屏蔽,低4位不全为1,返回L0,否则继续执行,3、循环转移指令(减1条件转移指令),DJNZ Rn,rel ;,(PC) (PC)+2 (Rn) (Rn)-1 If(Rn)=0,(PC) (PC)+rel Else,程序向下执行,DJNZ di

39、rect,rel;,(PC) (PC)+3 (direct) (direct)-1 If (direct)=0, (PC) (PC)+rel Else, 程序向下执行,若循环变量为00H,则循环次数为256次,例1: (40H)=01H,(50H)=70H (60H)=15H,以下程序片段的执行结果,DJNZ 40H,LABEL1; DJNZ 50H,LABEL2; DJNZ 60H,LABEL3;,结束循环向下执行,转向LABEL2执行,继续循环,需等上条指令执行完,才执行本指令,各单元内容变为:,(40H)=00H,(50H)=6FH,(60H)=15H,例2:,MOV R2,#8 ; C

40、PL P17 ; DJNZ R2,TOGGLF;,TOGGLF:,循环次数送R2,P17取反,1个机周,R2控制循环,2个机周期,执行结果:,三、子程序调用及返回指令,1、长调用指令,LCALL addr16 ;,(PC)=(PC)+3 (SP)=(SP)+1 (SP)=(PC 07) (SP)=(SP)+1 (SP)=(PC 815) (PC)=addr 015,64KB范围内子程序调用,例:设(SP)=53H,子程序首址在3000H单元,并以标号STR表示。即 2000H: LCALL STR,执行时: (PC)=(PC)+3=2003H,(SP)+1, (54H)=03H,(SP)+1,

41、(55H)=20H,执行结果:,(SP)= (54H)= (55H)= (PC)=,55H,03H,20H,3000H,STR (PC),2、绝对调用指令,ACALL addr11 ;,(PC)=(PC)+2 (SP)=(SP)+1 (SP)=(PC 07) (SP)=(SP)+1 (SP)=(PC 815) (PC 010) addr11 (PC 1115)不变,提供2KB范围内的子程序调用,调用范围同AJMP指令,3、返回指令,RET ;,(PC 815) (SP) (SP) (SP)-1 (PC 07) (SP) (SP) (SP)-1,例:设(SP)=6BH,内部RAM(6AH)=23

42、H (6BH)=01H,执行 RET,(PC 815) (6BH),(PC 07) (6AH),执行结果: (PC)=0123H,(SP)=69H,4、中断返回指令,RETI ;,功能:,A)恢复断点,同RET B)恢复中断逻辑,使CPU能接收同级或低级中断请求,5、空操作指令,NOP ; (PC) (PC)+1,功能:无任何操作,继续执行下一条指令,不影响任何标志,产生一个机器周期的延时,例: 利用NOP指令产生方波,CLR P2.7 ; NOP NOP NOP SETB P2.7 ;,P2.7清0输出,置位P2.7高电平输出,第七节 位操作指令,位处理器:,CPU 程序存储器 数据存储器

43、累加器(C) I/O口,数据RAM可位寻址空间128位 SFR的可寻址位82位,位地址表示:bit 在汇编语言中有5种表示方法: (以用户标志F0为例),1、位地址 D5H 2、字节地址位 D0H5 3、位寄存器名称 F0 4、寄存器名位 PSW5 5、事先用伪指令定义的符号地址 格式: 字符名称 BIT 位地址 A1 BIT F0,一、位传送指令,MOV C , bit ; ( C ) (bit) MOV bit , C ; (bit) ( C ),注:位传送必须通过累加器C进行,例:将30H位的内容传送到20H位,MOV C,30H MOV 20H,C,二、位状态控制指令,1、位清零指令

44、CLR bit ; (bit) 0 CLR C ; (C) 0,2、位求反指令 CPL bit ; (bit) (bit) CPL C ; (C) (C),3、位置位指令 SETB bit ; (bit) 1 SETB C ; (C) 1,例: 设(P1)=00110101 B 执行以下指令: CLR P1.0 ; CPL P1.0 ; SETB P1.6 ;,P1=00110100 B,P1=00110101B,P1=01110101 B,三、位逻辑操作指令,1、位逻辑“与” ANL C,bit ; (C) (C)与(bit) ANL C,/bit ; (C) (C)与(bit),2、位逻辑

45、“或” ORL C,bit ; (C) ()或(bit) ORL C,/bit ; (C) (C)或(bit),例:设E,B,D都代表位地址,试编写程序完成E、B内容的异或操作。即D=EB+EB,程序如下: MOV C,B ANL C,/E MOV F0,C MOV C,E ANL C,/B ORL C,F0 MOV D,C,;C=EB,;暂存 EB,;C=EB,;C=EB+EB,;将运算结果存入D,四、位控制转移指令,1、判C转移 JC rel ; C=1 转移 JNC rel ; C=0 转移,例: 设(C)=0,以下程序段的执行路径是什么,JC L1 CPL C JC L2 L1: L2

46、:,;C=0,不转移,顺序执行,;C取反,C=1,;C=1,转向L2执行,2、判位变量转移指令,JB bit ,rel ; (bit)=1 转移 JNB bit,rel ; (bit)=0转移,判位变量并清0转移指令 JBC bit,rel ;,(PC) (PC)+3 IF(bit)=1, Then(PC) (PC)+rel And (bit)=0,例1:MOV P1,#0CAH MOV A,#56H JB P1.2 , L1 JNB ACC.3 , L2 L1: L2: ,; P1=1100 1010 B,; A=0101 0110 B,; P1.2=0,不转,; ACC.3=0,转L2执行,例2: MOV A , #43H JBC ACC.2 , L1 JBC ACC.6 , L2 L1 : L2 : ,; A=43H= 01

温馨提示

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

评论

0/150

提交评论