单片机教程3-MCS-51指令系统课件

上传人:痛*** 文档编号:244258173 上传时间:2024-10-03 格式:PPT 页数:64 大小:607.01KB
返回 下载 相关 举报
单片机教程3-MCS-51指令系统课件_第1页
第1页 / 共64页
单片机教程3-MCS-51指令系统课件_第2页
第2页 / 共64页
单片机教程3-MCS-51指令系统课件_第3页
第3页 / 共64页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,*,*,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,3.1,概述,7,种寻址方式,,111,条指令,字节数,运算速度,单字节指令:,49,条,双字节指令:,45,条,三字节指令:,17,条,单周期指令:,64,条,双周期指令:,45,条,四周期指令:,2,条,第三章,MCS-51,指令系统,10/3/2024,1,功能,数据传送类:,29,条,算术运算类:,24,条,逻辑运算类:,24,条,控制转移类:,17,条,位操作类:,17,条,10/3/2024,2,常用符号,Rn,:,工作寄存器中的寄存器,R0,、,R1R7,之一,,Ri,:,工作寄存器中的寄存器,R0,或,R1,#data,:,8,位立即数,#data16,:,16,位立即数,direct,:,片内,RAM,或,SFR,的地址(,8,位),间接寻址寄存器,Bit,:,片内,RAM,或,SFR,的位地址,addr11,:,11,位目的地址,addr16,:,16,位目的地址,10/3/2024,3,rel,:,补码形式的,8,位地址偏移量。,偏移范围为,-128,127,/,:,位操作指令中,该位求反后参与操作,不影响该位,X,:,片内,RAM,的直接地址或寄存器,(X),:,相应地址单元中的,内容,:,箭头左边的内容送入箭头右边的单元内,10/3/2024,4,3.2,寻址方式,3.2.1,立即寻址,Immediate Addressing,操作数就包含在指令代码中,在操作码之后,称为立即数,用“,”表示。,MCS-51,如:,MOV P1,#80H,MOV R7,#0F5H,MOV DPTR,,,#1245H,操作数存在程序存储器中,10/3/2024,5,3.2.2,直接寻址,Direct Addressing,直接使用数所在单元的,地址,找到了操作数,所以称,这种方法为,直接寻址,。,操作数在,SFR,、,内部,RAM,、,位地址,空间。,如:,MOV A,,,00H,MOV C,,,60H,MOV A,,,0F0H,10/3/2024,6,3.2.3,寄存器寻址,Register Addressing,对选定的工作寄存器,R0,R7,、,累加器,A,、,通用寄存器,B,、,地址寄存器,DPTR,中的数进行操作。,例:,MOV A,,,R0,;,将,R0,工作寄存器中的数据送到累加器,A,中去。,提一个问题:,我们知道,工作寄存器就是内存单元的一部分,,,如果我们选择工作寄存器组,0,,则,R0,就是,RAM,的,00H,单元,那么这样一来,,MOV A,,,00H,和,MOV A,,,R0,不就没什么区别了吗?,10/3/2024,7,的确,这两条指令执行的结果是完全相同的,都是将,00H,单元中的内容送到,A,中去,但是执行的过程不同,执行第一条指令需要,2,个机器周期,而第二条则只需要,1,个机器周期,第一条指令变成最终的目标码要两个字节(,E5H 00H,),,而第二条则只要一个字节(,E8,H,),就可以了。,10/3/2024,8,3.2.4,寄存器间接寻址,Register,Ind,irect,Addressing,把地址放在另外一个寄存器中,根据这个寄存器中的数值决定该到哪个单元中取数据。,R0,,,R1-,-8,位地址,,片内,低,128,字节或,片外,DPTR,-16,位,片外,64KB,MCS-51,如:,MOV A,,,R0,MOVX A,,,R0,MOVX A,,,DPTR,操作数在片内,RAM,中,操作数在片外,RAM,中,操作数在片外,RAM,中,10/3/2024,9,以,DPTR,或,PC,为基址寄存器,累加器,A,为变址寄存器。,把两者内容相加,结果作为操作数的地址。,常用于查表操作。,MCS-51,MOVC,A,,,A+DPTR,;,(A+DPTR) A,MOVC,A,,,A+PC,;,PC+1 PC,,,(A+PC)A,3.2.5,变址寻址,(,基址,+,变址,),Base-Register-plus-Index-Register-Indirect Addressing,操作数在程序存储器中,10/3/2024,10,E0,A,程序存储区,2040H 93,20E0H,47,2041H , ,DPH 20,DPL 00,ALU,如:,MOVC A,,,A+DPTR,设,DPTR=2000H,,,A=E0H,20E0H,47,指令代码,10/3/2024,11,3.2.6,相对寻址,将,PC,中的当前内容与指令,第二字节给出的数,相加,结,果作为跳转指令的转移地址(转移目的地址)。,PC,中的,当前,内容称为,基地址,(本指令后的字节地址),指令第二字节给出的数据称为,偏移量,,,1,字节带符号数,.,常用于跳转指令。,如,: JC 23H,若,C=0,,,不跳转;,C=1,,,跳转,.,Relative Addressing,改变,PC,10/3/2024,12,程序存储区,ALU,如:,JC 23,1025H,1000H 40,1025H,45,1001H,23, ,1024H 47,1002H,30,23H,1002H,指令代码,当前,PC,10/3/2024,13,对片内,RAM,的,位寻址区,和某些可,位寻址,的特殊功能寄存器进行位操作时的寻址方式。,如,: SETB 3DH;,将,27H.5,位置,1,CLR C,;,Cy,位清,0,3.2.7,位寻址,Bit Addressing,操作数在片内,RAM,位地址区或,SFR,某些位中,10/3/2024,14,寻址方式涉及的存储器空间,寻址方式,寻址空间(操作数存放空间),立即寻址,程序存储器,直接寻址,片内,RAM,低,128,字节、,SFR,寄存器寻址,工作寄存器,R0,R7,A,B,DPTR,寄存器间接寻址,片内,RAM:R0,R1,SP,片外,RAM:R0 ,R1,DPTR,变址寻址,程序存储器,:A+PC,A+DPTR,相对寻址,程序存储器,256,字节范围内,:PC+,偏移量,位寻址,片内,RAM,的位寻址区,(20H,2FH,字节地址,),某些可位寻址的,SFR,10/3/2024,15,3.3,数据传送类指令,(,29,条),Data Transfer Instruction,MCS-51,助记符:,助记符:,MOV,、,MOVX,、,MOVC,XCH,、,XCHD,、,SWAP,PUSH,、,POP,源操作数寻址方式(,5,种),:,立即寻址、直接寻址、寄存器寻址、,寄存器间接寻址、变址寻址。,目的操作数寻址方式(,3,种),:,直接寻址、寄存器寻址、寄存器间接寻址,除了目的操作数为,ACC,的指令影响奇偶标志,P,外,一般不影响,标志位。,10/3/2024,16,3.3.1,十六位数的传递指令,(,1,条),MOV DPTR,,,#,data16,8051,是一种,8,位机,这是唯一的一条,16,位,立即数传递指令。功能:将一个,16,位的立即数送入,DPTR,中去。其中高,8,位送入,DPH,,,低,8,位送入,DPL,。,例:,MOV DPTR,,,#1234H,执行完了之后,DPH,中的值为,12H,,,DPL,中的值为,34H,。,如果我们分别向,DPH,,,DPL,送数,则结果也一样。,如下面两条指令:,MOV DPH,,,#35H,MOV DPL,,,#12H,。,则就相当于执行了,MOV DPTR,,,#3512H,。,10/3/2024,17,3.3.2,累加器,A,与片外,RAM,之间的数据传递类指令,(4,条,),MOV,X,A,,,Ri,MOV,X,Ri,,,A,MOV,X,A,,,DPTR,MOV,X,DPTR,,,A,说明:,1.,在,51,中,与,外,部存储器,RAM,打交道的只可以是,A,累加器。所有,需要送入外部,RAM,的数据必需要通过,A,送去,而所有要读入的外部,RAM,中的数据也必需通过,A,读入。,在此我们可以看出内外部,RAM,的区别了,内部,RAM,间可以直接进行数据的传递,而外部则不行。,比如,要将外部,RAM,中某一单元(设为,0100H,单元的数据)送入另一个单元(设为,0200H,单元),,也必须先将,0100H,单元中的内容读入,A,,,然后再送到,0200H,单元中去,。,10/3/2024,18,2.,要读或写外部的,RAM,,,当然也必须要知道,RAM,的地址,在后两条指令中,地址是被直接放在,DPTR,中的。而前两条指令,由于,Ri,(即,R0,或,R1,),只是,8,位的寄存器,所以只提供低,8,位地址。高,8,位地址由,P2,口,来提供。,3.,使用时应先将要读或写的地址送入,DPTR,或,Ri,中,然后再用读写命令。,例,:将外部,RAM,中,100H,单元中的内容送入外部,RAM,中,200H,单元中。,MOV DPTR,,,#0100H,MOVX A,,,DPTR,MOV DPTR,,,#0200H,MOVX DPTR,,,A,10/3/2024,19,3.3.3,读,程序存储器指令,(,2,条),MOVC A,,,A+DPTR,MOVC A,,,A+PC,本组指令是将,ROM,中的数送入,A,中。本组指令也被称为,查表指令,,常用此指令来查一个已做好在,ROM,中的表格,说明,:查找到的结果被放在,A,中,因此,本条指令执行前后,,A,中的值不一定相同。,例:,有一个数在,R0,中,要求用查表的方法确定,它的平方值,(此,数的取值范围是,0-5,),MOV DPTR,,,#100H,MOV A,,,R0,MOVC A,,,A+DPTR,.,ORG 0100H,DB 0,1,4,9,16,25,如果,R0,中的值为,2,,则最终地址为,100H+2,为,102H,,,到,102H,单元中找到的是,4,。,10/3/2024,20,3.3.4,堆栈操作,(,2,条),PUSH direct,;,SP,SP+1,,,(SP),(direct),POP direct,;,(direct) ,(SP), SP,SP-1,第一条为,压入,指令,就是将,direct,中的内容送入,堆栈,中,第二条为,弹出,指令,就是将,堆栈,中的内容送回到,direct,中。,例,:,MOV SP,,,#5FH,MOV A,,,#100,MOV B,,,#20,PUSH ACC,PUSH B,则执行第一条,PUSH ACC,指令是这样的:将,SP,中的值加,1,,即变为,60H,,,然后将,A,中的值送到,60H,单元中,因此执行完本条指令后,内存,60H,单元的值就是,100,,同样,执行,PUSH B,时,是将,SP+1,,,即变为,61H,,,然后将,B,中的值送入到,61H,单元中,即执行完本条指令后,,61H,单元中的值变为,20,。,10/3/2024,21,1,.,给出每条指令执行后的结果,MOV 23H,#30H,MOV 12H,#34H,MOV R0,#23H,MOV R7,12H,MOV R1,#12H,MOV A,R0,MOV 34H,R1,MOV 45H,34H,MOV DPTR,#6712H,MOV 12H,DPH,MOV R0,DPL,MOV A,R0,;,(23H)=,30,H,;,(12H)=,34,H,;,R0=,23,H,XX,XX,XX,XX,XX,XX,XX,XX,XX,DPH,DPL,45H,34H,23H,12H,R7,R1,R0,XX,XX,XX,XX,30,34,XX,XX,23,XX,XX,XX,XX,30,34,34,12,23,67,12,34,34,30,34,34,12,23,67,12,34,34,30,67,34,12,12,;R7=,34,H,;R1=,12,H,;A=,30,H,;(34H)=,34,H,;(45H)=,34,H,;DPTR=,6712,H,;(12H)=,67,H,;R0=,12,H,;A=,67,H,内部,RAM,10/3/2024,22,3.4,算术运算类指令,(,24,条,),Arithmetic Operations,主要对,8,位无符号数;也可用于带符号数运算。,包括:加、减、乘、除、加,1,、减,1,运算指令,影响,PSW,有关位。,10/3/2024,23,3.4.1,加法指令,ADD A,,,#,data,;,A,data,A,ADD A,,,direct,;,A,(direct )A,ADD A,,,Rn,;,A,RnA,ADD A,,,Ri,;,A,(,Ri)A,用途:,将,A,中的值与源操作数所指内容相加,最终结果,存在,A,中。,1.,不带进位位的加法指令,(,4,条),10/3/2024,24,2.,带进位位的加法指令,(,4,条),ADDC A,,,Rn,;,A,Rn,CY,A,ADDC A,,,direct,;,A,(direct ),CYA,ADDC A,,,Ri,;,A,(,Ri,),CYA,ADDC A,,,#,data,;,A,data,CYA,用途:,将,A,中的值和其后面的值以及进位位,C,中的值相加,,最终结果存在,A,,常用于多字节数运算中。,说明:,由于,51,单片机是一种,8,位机,所以只能做,8,位的数学运算,但,8,位运算的范围只有,0,255,,这在实际工作中是不够的,因此就要进行扩展,一般是将,2,个,8,位,(,两字节,),的数学运算合起来,成为一个,16,位的运算,这样,可以表达的数的范围就可以达到,0,65535,。,10/3/2024,25,例:,先做,67H+A0H=107H,,,而,1,07H,显然超过了,0FF,H,,,因此最终保存在,A,中的是,07H,,而,1,则到了,PSW,中的,CY,位了。换言之,,CY,就相当于是,100H,。,然后再做,10H + 30H +,CY,,,结果是,41H,,,所以最终的结果是,4107H,。,1067H+30A0H,0001 0000 0110 0111,0011 0000 1010 0000,0100 000,1,0000 0111,1067H,30A0H,4107H,10/3/2024,26,设:,1067H,存在,R1R0,中,,30A0H,存在,R3R2,中,计算,R1R0+R3R2,,,结果存在,R5R4,中。,MOV A,R0,ADD A,R2,;,R0+R2,A,和,CY,MOV R4,A,MOV A,R1,ADDC A,R3,;,R1+R3+,CY,A,和,CY,MOV R5,A,10/3/2024,27,又例:,先做,67H+20H=87H,,没有超过,0FF,H,,,因此最终保存在,A,中的是,87H,,而,PSW,中的,CY=0,。,然后再做,10H + 30H +,CY,,,结果是,40H,,,所以最终的结果是,4087H,。,1067H+3020H,0001 0000 0110 0111,0011 0000 0010 0000,0100 000,0,1000 0111,1067H,3020H,4087H,10/3/2024,28,DA A,在进行,BCD,码加法运算时,跟在,ADD,和,ADDC,指令之后,用于对累加器,A,中刚进行的两个,BCD,码的加法的结果进行十进制调整。,例:,A=0001 0101BCD,(,代表十进制数,15,),ADD A,,,#8,3.,十进制调整指令,(,1,条),;,A=1DH,,,按二进制规律加,;,A=23H,,,按十进制规律加,DA A,10/3/2024,29,调整要完成的任务是:,(,1,)当累加器,A,中的,低,4,位数出现了非,BCD,码(,10101111,)或低,4,位产生进位(,AC=1,),则应在低,4,位加,6,调整,以产生低,4,位正确的,BCD,结果。,(,2,)当累加器,A,中的,高,4,位,数出现了非,BCD,码(,10101111,)或高,4,位产生进位(,CY=1,),则应在高,4,位加,6,调整,以产生高,4,位正确的,BCD,结果。,十进制调整指令执行后,,PSW,中的,CY,表示结果的百位值,。,10/3/2024,30,例 若(,A,),0101 0110B,,表示的,BCD,码为,56,,(,R3,),0110 0111B,,表示的,BCD,码为,67,,(,CY,),0,。执行以下指令:,ADD A,,,R2,DA A,由于(,A,),0010 0011B,,即,且(,CY,),1,,即,结果为,BCD,数,123,。,应该注意,,DA,指令不能对减法进行十进制调整。,10/3/2024,31,3.4.2,减法指令,(,8,条),SUBB A,,,Rn,;,A,Rn,CY,A,SUBB A,,,direct,;,A,(direct ),CYA,SUBB A,,,Ri,;,A,(,Ri,),CY,A,SUBB A,,,#,data,;,A,data,CYA,将,A,中的值减去源操作数所指内容以及进位位,C,中的,值,最终结果存在,A,中。,如:,SUBB A,,,R2,设:,A=C9H,,,R2=55H,,,CY=1,,,执行指令之后,,A,中的值为,73H,。,1.,带借位的减法指令,(,4,条),10/3/2024,32,说明,:,没有不带借位的减法指令,,如果需要做,不,带位的减法指令(在做第一次相减时),只要将,CY,清零,即可。,对带符号数,要注意,OV,标志。,OV=1,,,出错,。,10/3/2024,33,3.5,逻辑运算类指令,(,24,条),主要用于对,2,个操作数按,位进行逻辑,操作,结果送到,A,或直接寻址单元。,主要操作,与、或、异或、移位、取反、清零等。,对标志位的影响,除了目的操作数为,ACC,的指令影响奇偶标志,P,外,一般不影响标志位。,Logic Operations,10/3/2024,34,3.5.1,逻辑或指令,(,6,条),ORL A,,,Rn,;,ARnA,ORL A,,,direct,;,A(direct)A,ORL A,,,Ri,;,A(Ri)A,ORL A,,,#,data,;,AdataA,ORL direct,,,A,;,(direct)A(direct),ORL direct,,,#,data,;,(direct)data(direct),影响,P,标志,例:,71H,和,56H,相或:,01110001,(,71H,),),01010110,(,56H,),01110111,即,77H,后两条指令,若直接地址为,I/O,端口,则为“,读改写,”操作。,OR,L,ogic Instruction,10/3/2024,35,3.5.2,逻辑与指令,(,6,条),ANL A,,,Rn,;,ARnA,ANL A,,,direct,;,A(direct)A,ANL A,,,Ri,;,A(Ri)A,ANL A,,,#,data,;,AdataA,ANL direct,,,A,;,(direct)A(direct),ANL direct,,,#,data,;,(direct)data(direct),影响,P,标志,例:,71H,和,56H,相与:,01110001,(,71H,),),01010110,(,56H,),01010000,即,50H,后两条指令,,若直接地址为,I/O,端口,则为,“,读,改写,”,操作。,AN,d,L,ogic Instruction,10/3/2024,36,例:,71H,和,56H,相异或:,01110001,(,71H,),) 01010110,(,56H,),3.5.2,逻辑异或指令,(,6,条),XRL A,,,Rn,;,A,RnA,XRL A,,,direct,;,A (direct)A,XRL A,,,Ri,;,A (,Ri)A,XRL A,,,#,data,;,A dataA,XRL direct,,,A,;,(direct),A(direct),XRL direct,,,#,data,;,(direct) data(direct),影响,P,标志,00100111,即,27H,后两条指令,若直接地址为,I/O,端口,则为“,读改写,”操作。,e,X,clusive,-,o,R,L,ogic Instruction,10/3/2024,37,3.5.3,清,0,与,取反指令,(,2,条),取反:,CPL A,;,/AA,例:,若,A=5CH,,,执行,CPL A,结果:,A=A3H,清,0,:,CLR A,;,0A,C,om,P,lement,L,ogic Operation,10/3/2024,38,3.5.4,循环移位指令,(,4,条),RL A,RR A,RLC A,RRC A,A.7 A.0,A.7 A.0,A.7 A.0,CY,CY,A.7 A.0,后两条指令,影响,P,标志和,CY,。,R,otate,L,ogic instruction,10/3/2024,39,例:,若,A=5CH,,,CY=1,,,执行,RLC A,后,,对,RLC,、,RRC,指令,在,CY=0,时,RLC,相当于,乘,以,2,RRC,相当于,除,以,2,结果:,A=B9H,,,CY=0,,,P=1,0101 1100,1,1011 1001,0,10/3/2024,40,3.6,控制转移类指令,(,17,条,),Branching Instruction,共有控制程序转移类指令,(,不包括位操作类的转移指令,),。此类指令一般不影响,PSW,。,包括以下类型:,无条件转移和条件转移,相对转移和绝对转移,长转移和短转移,调用与返回指令,10/3/2024,41,3.6.1,无条件转移类指令,(,4,条),短转移类指令:,AJMP,addr11,长转移类指令:,LJMP,addr16,相对转移指令:,SJMP,rel,间接转移指令:,JMP,A+DPTR,(,1,),上面的前三条指令,统统理解成:,PC,值改变,即跳转到一个标号处。,那么他们的区别何在呢?,10/3/2024,42,跳转的范围不同。,短转移类指令:,AJMP,addr11,长转移类指令:,LJMP,addr16,相对转移指令:,SJMP,rel,转移范围,:,2KB,64KB,-128,+127,指令构成不同。,AJMP,、,LJMP,后跟的是,绝对地址,,,而,SJMP,后跟的是,相对地址,。,指令长度不同,原则上,所有用,SJMP,或,AJMP,的地方都可以用,LJMP,来替代。,10/3/2024,43,间接转移指令:,JMP,A+DPTR,这条指令的用途也是跳转,转到什么地方去呢?这可不能由标号简单地决定了。,转移地址由,A+DPTR,形成,并直接送入,PC,。,指令对,A,、,DPTR,和标志位均无影响,。,本指令可代替众多的判别跳转指令,又称为,散转指令,,多用于多分支程序结构中。,(,2,),第四条指令与前三条指令相比有所不同,10/3/2024,44,例,:,MOV DPTR,,,#TAB,;将,TAB,代表的地址送入,DPTR,JMP A+DPTR,;跳转,TAB: AJMP ROUT0,;跳转,ROUT0,开始的程序段,TAB+2:,AJMP ROUT1,;跳转,ROUT1,开始的程序段,TAB+4:,AJMP ROUT2,;跳转,ROUT2,开始的程序段,TAB+6:,AJMP ROUT3,;跳转,ROUT3,开始的程序段,.,ROUT0,:,.,ROUT1,:,.,ROUT2,:,.,ROUT3,:,执行该段程序后,程序将根据,A,中的内容转移到不同的程序段去执行,-,散转。,A=0,转,ROUT0,A=2,转,ROUT1,A=4,转,ROUT2,A=6,转,ROUT3,10/3/2024,45,3.6.2,条件转移指令,(,8,条),条件转移指令是指在满足一定,条件,时进行,相对转移,,否则程序继续执行,本指令的,下一条指令。,一、判,A,内容是否为,0,转移指令,(,2,条),JZ,rel,;如果,A=0,,,则转移,否则顺序执行。,JNZ,rel,;,如果,A0,,,就转移。,转移到相对于当前,PC,值的,8,位移量的地址去,。即:,新的,PC,值,=,当前,PC+,偏移量,rel,我们在编写汇编语言源程序时,可以直接写成:,JZ,标号,;即转移到标号处。,10/3/2024,46,例:,MOV A,,,R0,JZ L1,MOV R1,,,#00H,AJMP L2,L1,: MOV R1,,,#0FFH,L2,: SJMP L2,END,在执行上面这段程序前:如果,R0=0,,结果,R1=0FFH,。,而如果,R0,0,,则结果是,R1=00H,。,把上面的那个例子中的,JZ,改成,JNZ,,,看看程序执行的结果是什么,?,如果,R0=0,,结果,R1=00H,。,如果,R0,0,,结果是,R1,中的值为,0FFH,。,10/3/2024,47,二、比较不等转移指令,(,4,条),CJNE A,,,#,data,,,rel,CJNE A,,,direct,,,rel,CJNE,Rn,,,#,data,,,rel,CJNE,Ri,,,#,data,,,rel,此类指令的功能是将两个操作数比较,如果两者,相等,,就,顺序执行,,如果,不相等,,就,转移,。,同样地,使用时,我们可以将,rel,理解成标号,即:,CJNE A,,,#data,,,标号,CJNE A,,,direct,,,标号,CJNE,Rn,,,#data,,,标号,CJNE ,Ri,,,#data,,,标号,10/3/2024,48,利用这些指令,可以判断两数是否,相等,。,但有时还想得知两数比较之后,哪个大,,,哪个小,,本条指令也具有这样的功能:,如果两数不相等,则,CPU,还会用,CY,(,进位位)来反映哪个数大,哪个数小。,如果前面的数大,则,CY=0,,,否则,CY=1,。,因此在程序转移后再次利用,CY,就可判断出哪个数大,哪个数小了。,10/3/2024,49,举例:,MOV A,,,R0,CJNE A,,,#10H,,,L1,MOV R1,,,#0 ;,如,R0=10H,则不转移,R1=00H,;,AJMP L3,L1:JC L2,;如,CY=1,即,R010H,则转移,AJMP L3,L2:MOV R1,,,#0FFH,L3:SJMP L3,因此最终结果是:本程序执行前,,如果,R0=10H,,则,R1=00H,;,如果,R010H,,则,R1=0AAH,;,如果,R010H,,则,R1=0FFH,。,10/3/2024,50,三、减,1,不为,0,转移指令,(,2,条),DJNZ,Rn,,,rel,DJNZ direct,,,rel,DJNZ,指令的执行过程是这样的,:,它将第一个参数中的值,减,1,,然后看这个值是否等于,0,,如果,等于,0,,就往下执行,如果,不等于,0,,就转移,到第二个参数所指定的地方去。,例:,DJNZ 10H,,,LOOP,.,LOOP: .,10/3/2024,51,例,:,MOV 23H,#0AH,CLR A,LOOP: ADD A,23H,DJNZ 23H,LOOP,SJMP $,上述程序段的执行过程是:,将,23H,单元中的数连续相加,存至,A,中,每加一次,,23H,单元中的数,值,减,1,,直至减到,0,,共加(,23H,)次。,10/3/2024,52,3.6.3,调用与返回指令,(,4,条),一、,调用指令,(,2,条),LCALL,addr16,;,长调用指令,(,3,字节,),ACALL,addr11,;,短调用指令,(,2,字节,),上面两条指令都是在主程序中调用子程序,两者的区别,:,对短调用指令,被调用子程序入口地址必须与调用指令的下一条指令的第一字节在相同的,2KB,存储区之内。,使用时可以用:,LCALL,标号 ;标号表示子程序首地址,ACALL,标号,来调用子程序。,10/3/2024,53,指令的执行过程是:,当前,PC,压栈,,子程序首地址送,PC,,实现转移。,二、返回指令,(,2,条),子程序执行完后必须回到主程序,如何返回呢?只要执行一条返回指令就可以了。,RET,;,子程序返回指令,RETI,;,中断子程序返回指令,两者不能互换使用。,10/3/2024,54,3.6.4,空操作指令,(,1,条),NOP,空操作,就是什么事也不干,停一个周期,一般用作短时间的延时。,RET,指令的执行过程是:,堆栈栈顶内容(,2,字节,调用时保存的当前,PC,值)弹出给,PC,,实现返回。,RETI,指令除了具有,RET,指令的功能实现程序返回外,还有对中断优先级状态触发器的清零。,10/3/2024,55,3.7,位操作指令,(,17,条,),Boolean Operations,MCS-51,单片机的硬件结构中,有一个位处理器(又称布尔处理器),它有一套位变量处理的指令集,包括,位,变量,传送,、,逻辑,运算、控制程序,转移,等。,在,MCS-51,中,有一部份,RAM,和一部份,SFR,是具有位寻址功能的。,位操作区,:内部,RAM,的,20H-2FH,这,16,个字节单元,即,128,个位单元,(,位地址空间位,00,7FH),;,可以位寻址的特殊功能寄存器,:,8031,中有一,10/3/2024,56,些,SFR,是,可以进行位寻址,的,这些,SFR,的特点是其,字节地址均可被,8,整除,, 如,A,累加器,,B,寄存器、,PSW,、,IP,(,中断优先级控制寄存器)、,IE,(,中断允许控制寄存器)、,SCON,(,串行口控制寄存器)、,TCON,(,定时器,/,计数器控制寄存器)、,P0-P3,(,I/O,端口锁存器)。,在进行位处理时,,CY,用作,“,位,累加器,”,。,10/3/2024,57,以,PSW,中位,4,(,RS1,),为例,。,直接,(,位,),地址方式:,如,D4H,;,点操作符号方式,:如,PSW.4,,,D0H.4,;,位名称方式,:如,RS1,;,用户定义名方式,:如用伪指令,bit,SUB.REG,bit,RS1,定义后,可用,SUB.REG,代替,RS1,。,位地址表达方式,10/3/2024,58,3.7.1,位传送指令,(,2,条),MOV C,,,bit,;,bit,C,MOV,bit,,,C,;,C,bit,这组指令的功能是实现位累加器(,CY,),和其它位地址之间的数据传递。,例,:,MOV C,,,P1.0,;将,P1.0,的状态送给,C,。,MOV P1.0,,,C,;,将,C,中的状态送到,P1.0,;引脚上去。,10/3/2024,59,3.7.2,位清,0,和置位,(,4,条),位清,0,指令,CLR C,;,使,CY=0,CLR bit,;使指令的位地址等于,0,。,例,:,CLR P1.0,;即使,P1.0,变为,0,位置,1,指令,SETB C,;,使,CY=1,SETB bit,;使指定的位地址等于,1,。,例,:,SETB P1.0,;使,P.0,变为,1,10/3/2024,60,3.7.3,位逻辑运算指令,(,6,条),位与指令,ANL,C,,,bit,;,Cy,与指定位的值相与,结果送,C,y,ANL,C,,,/bit,;,先将指定的位地址中的值取出后取反,再和,C,y,相与,结果送回,C,y,。,但,注意,:,指定的位地址中的值本身并不发生变化。,例,:,ANL C,,,/P1.0,10/3/2024,61,位取反指令,CPL C,;使,Cy,值取反。,CPL bit,;使指定的位的值取反。,例,:,CPL P1.0,位或指令,ORL,C,,,bit,ORL,C,,,/bit,10/3/2024,62,3.7.4,位条件转移指令,(,5,条),判,Cy,转移指令,JC,rel,JNC,rel,第一条指令的功能是如果,Cy=1,就转移,否则就顺序执行。,第二条指令则和第一条指令相反,即如果,Cy=0,就转移,否则就顺序执行。,同样理解:,JNC,标号,10/3/2024,63,判位变量转移指令,JB,bit,,,rel,JNB,bit,,,rel,JBC,bit,,,rel,第一条指令,:,如果指定的(,bit,),=1,,则转移,否则顺序执行,第二条指令功能相反。,同样理解:,JB bit,,,标号,第三条指令是如果指定的,(,bit,),=1,,则转移,并把该位,清,0,,否则顺序执行。,10/3/2024,64,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!