自动控制网—学习自动控制技术电气自动化技术从这里开始!
当前位置: 自动控制网 > 自动化 > 单片机 >

单片机控制转移指令

时间:2015-09-22 10:32来源:www.eadianqi.com 编辑:自动控制网
一般情况下指令是顺序执行的逐条执行的,但实际上程序不可能全部顺序执行而经常需要改变程序的执行流程,常用的控制转移指令有: 1.无条件转移指令 这组指令执行完后,程序就会无条件转移到指令所指向的地址上去。长转移指令访问的程序存储器空间为16地址64

一般情况下指令是顺序执行的逐条执行的,但实际上程序不可能全部顺序执行而经常需要改变程序的执行流程,常用的控制转移指令有: 本文来自www.eadianqi.com

1. 无条件转移指令

本文来自www.eadianqi.com

这组指令执行完后,程序就会无条件转移到指令所指向的地址上去。长转移指令访问的程序存储器空间为16地址64kB,绝对转移指令访问的程序存储器空间为11位地址2kB空间。 本文来自www.eadianqi.com

LJMP  addr16   ; addr16→(PC) 本文来自www.eadianqi.com

AJMP  addr11  ;(PC)+2→(PC),addr11→(PC10-0)

本文来自www.eadianqi.com

SJMP  rel     ;(PC)+ 2 + rel→(PC) 自动控制网www.eadianqi.com版权所有

JMP  @A+DPTR  ;(A)+(DPTR)→(PC) 自动控制网www.eadianqi.com版权所有

2. 条件转移指令

本文来自www.eadianqi.com

条件转移指令是依某种特定条件转移的指令。条件满足时转移(相当于一条相对转移指令),条件不满足时则顺序执行下面的指令。目的地址在下一条指令的起始地址为中心的256个字节范围中(-128~+127)。当条件满足时,先把PC指向指向下一条指令的第一个字节地址,再把有符号的相对偏移量加到PC上,计算出转向地址。

自动控制网www.eadianqi.com版权所有

JZ  rel       ; A=0,(PC)+ 2 + rel→(PC) 自动控制网www.eadianqi.com版权所有

JNZ  rel   ; A≠0,(PC)+ 2 + rel→(PC) 本文来自www.eadianqi.com

3. 比较不相等转移指令 本文来自www.eadianqi.com

这组指令的功能是比较前面两个操作数的大小。如果它们的值不相等则转移。在PC指向下一条指令的起始地址后,通过把指令最后一个字节的有符号的相对偏移量加到PC上,并计算出转向地址。操作数有寄存器寻址、直接寻址,寄存器间接寻址和立即寻址等方式。

本文来自www.eadianqi.com

CJNE  A, direct, rel   ; A≠(direct),(PC)+ 3 + rel→(PC)

自动控制网www.eadianqi.com版权所有

CJNE  A, #data, rel  ; A≠data,(PC)+ 3 + rel→(PC) 自动控制网www.eadianqi.com版权所有

CJNE  Ri, #data, rel   ; A≠data,(PC)+ 3 + rel→(PC)

本文来自www.eadianqi.com

CJNE  @Rj, #data, rel  ; A≠data,(PC)+ 3 + rel→(PC)

本文来自www.eadianqi.com

4. 减1不为0转移指令 自动控制网www.eadianqi.com版权所有

这组指令把源操作数减1,结果回送到源操作数中去,如果结果不为0则转移,跳到标号rel处执行,等于0就执行下一条指令。源操作数有寄存器寻址和直接寻址方式。该指令通常用于实现循环计数。

本文来自www.eadianqi.com

 DJNZ  Ri, rel      ;(Ri)-1→(Ri),(Ri)≠0,(PC)+ 2 + rel→(PC)

本文来自www.eadianqi.com

DJNZ direct, rel    ;(direct)-1→(direct),(direct)≠0,(PC)+ 2 + rel→(PC) 自动控制网www.eadianqi.com版权所有

5. 子程序返回指令 自动控制网www.eadianqi.com版权所有

编程时一般都把需要反复执行的一些程序编写成子程序,当需要用它们时,就用一个调用命令使程序按调用的地址去执行,这就需要子程序的调用指令和返回指令。 自动控制网www.eadianqi.com版权所有

LCALL  addr16 ;长调用指令,可在64kB空间调用子程序。此时(PC)+ 3→(PC),(SP)+ 1→(SP),(PC7-0)→(SP),(SP)+ 1→(SP),(PC15-8)→(SP),addr16→(PC),即分别从堆栈中弹出调用子程序时压入的返回地址。 自动控制网www.eadianqi.com版权所有

ACALL  addr11  ;绝对调用指令,可在2kB空间调用子程序,此时(PC)+ 2→(PC),(SP)+ 1→(SP),(PC7-0)→(SP),(SP)+ 1→(SP),(PC15-8)→(SP),addr11→(PC10-0)。

自动控制网www.eadianqi.com版权所有

RET    ; 子程序返回指令。此时(SP)→(PC15-8),(SP)- 1→(SP),(SP)→(PC7-0),(SP)- 1→(SP)RET指令通常安排在子程序的末尾,使程序能从子程序返回到主程序。

本文来自www.eadianqi.com

RETI   ; 中断返回指令,除具有RET功能外,还具有恢复中断逻辑的功能,需注意的是,RETI指令不能用RET代替 。   

本文来自www.eadianqi.com

空操作也是CPU控制指令,它没有使程序转移的功能,一般用于软件延时。指令为:NOP。

本文来自www.eadianqi.com

本文已影响