跟电师傅学单片机(17):单片机控制转移指令图文讲解2
上节介绍了单片机无条件转移指令 (4条),本节继续讲解单片机控制转移类指令。
下面介绍有条件转移指令 (8条):指令先判断后转移
有条件转移指令,也称为条件转移指令:是指令要满足一定条件才转移。满足条件时,程序转移到程序计数器PC当前值和指令给出的相对地址 rel偏移量相加后得到新的PC地址处执行;当条件不满足时,程序就顺序执行下一条指令。
条件转移指令共同特点:都是单片机相对转移指令,都有偏移量rel,都是相对转移 ,转移范围较小。
注意:
rel偏移量范围:-128~+127字节内,即范围是256个单元。
因此条件转移指令的转移范围较小,如果要实现64K范围内的转移,可以用前面学习的长转移指令:LJMP addr16来实现。
指令判断转移示意图
一:累加器A判0转移指令(2条)
累加器A判0转移指令表
PC:是单片机程序计数器,程序从哪里执行,完全由程序计数器PC里的内容决定,始终是指定下一条将要执行指令的地址(是16位地址),单片机系统上电或复位时,PC的初始值为0000H。
PC⇐PC+rel;程序计数器PC中下一条指令的地址加1个偏移量(rel)构成一个新的地址再送到PC(新的PC地址),程序正常情况是接着执行下一条指令,但在这里因为改变了PC值,执行完这条指令后就转移到新的PC地址处执行 。
凡是转移指令,都是通过改变程序计数器PC值来实现指令转移功能。
JZ rel;
指令功能:累加器A=0 PC⇐PC+rel ;累加器A中的内容全为0,则程序转移到程序计数器PC当前值和指令给出的rel偏移量相加后得到新的PC地址处执行。
累加器A≠0 或 累加器A=1;程序顺序执行。
JNZ rel;
指令功能:累加器A≠0或累加器A=1 PC⇐PC+rel ;累加器A中的内容不全为0,则程序转移到PC当前值和指令给出的rel偏移量相加后得到新的PC地址处执行。
累加器A=0;程序顺序执行。
上面两条指令产生的转移条件分别是累加器A的内容为0和不为0 。
注意:
在程序执行过程中,不改变累加器A中的内容 ,不影响单片机标志寄存器PSW中任何标志位。
二:减1非0转移指令(2条)
减1非0转移指令表
DJNZ Rn,rel;
指令功能:将寄存器Rn中的内容减1后,如果单片机寄存器Rn≠0,则程序转移到程序计数器PC当前值和指令给出的rel偏移量相加后得到新的PC地址处执行。
DJNZ direct,rel;
指令功能:将直接地址direct中的内容减1后,如果direct≠0,则程序转移到程序计数器PC当前值和指令给出的rel偏移量相加后得到新的PC地址处执行。
三:比较转移指令(4条)
比较转移指令表
CJNE A,#data,rel;
指令功能:将单片机累加器A中的内容与立即数data比较,如果不相等:A ≠ #data,则程序转移到程序计数器PC当前值和指令给出的rel偏移量相加后得到新的PC地址处执行。
CJNE Rn,#data,rel;
指令功能:将单片机寄存器Rn中的内容与立即数data比较,如果不相等:Rn ≠ #data,则程序转移到程序计数器PC当前值和指令给出的rel偏移量相加后得到新的PC地址处执行。
CJNE @Ri,#data,rel; Ri=R0 R1
指令功能:找到单片机寄存器Ri中存放的地址,根据这个地址找到里面的内容与立即数data比较,如果不相等:(Ri)≠#data,则程序转移到程序计数器PC当前值和指令给出的rel偏移量相加后得到新的PC地址处执行。
CJNE A,direct,rel;
指令功能:将单片机累加器A中的内容与直接地址direct里面的内容比较,如果不相等:A≠(direct),则程序转移到程序计数器PC当前值和指令给出的rel偏移量相加后得到新的PC地址处执行。
跟电师傅学单片机(19):单片机控制转移指令图文讲解3
一:绝对调用指令
绝对调用指令表
在实际单片机程序编程中,有时需要在主程序里面引用另外一段程序,引用的程序一般称为子程序,子程序可以多次反复调用,用起来很方便,还减少了编程程序的长度。
比如,要用到一个延时程序。怎么用呢?就是要把延时程序存放到程序存储器ROM单元中,只要知道存放的地址,用这个指令ALL addr11就可转去运行这个延时程序,运行完后还能返回。
addr11:调用程序的范围:2的11次方=2K
ALL addr11绝对调用指令最大的特点:调用了还能回来。
前面讲的有条件和无条件指令是:转走了就不用回来了。
但是它们类似的地方: 都是转移指令。
ALL addr11指令功能:
子程序短调用指令。是主程序调用子程序,调用子程序的范围是2KB。
PC:是单片机程序计数器,程序从哪里执行,完全由PC里的内容决定,始终是指定下一条将要执行指令的地址(是16位地址),单片机系统上电或复位时,PC的初始值为0000H。
SP:是51单片机堆栈指针,是一个专用的8位寄存器,系统复位后,SP初始化为07H,使得堆栈指针实际上是由08H单元开始。堆栈用于存储子程序调用、中断程序调用时程序返回的地址,或者用来临时保存某一寄存器的值。
二:长调用指令
长调用指令表
addr16:调用程序的范围:2的16次方=64K
ALL addr16指令功能:
子程序长调用指令,也称为远程调用指令。是主程序调用子程序,调用子程序的范围是64KB。
三:返回指(2条)
返回指令表
RET指令功能:
是子程序返回指令。是使子程序返回主程序。RET返回指令要与调用指令成对出现,缺一不可,否则会出现错误。
RET返回指令使用时应放在子程序的末尾,该指令可从堆栈中取出断点地址,送回是单片机程序计数器PC,并从断点处开始继续执行程序,即是单片机程序计数器PC指向主程序调用该子程序指令的下一个地址。
RETI指令功能:
中断子程序返回指令,使中断子程序返回主程序。
RET指令和RETI指令共同点:
基本功能是相同的,都是使子程序返回主程序,使单片机程序计数器PC指向下一个地址的指令。
RET指令和RETI指令区别:
在执行RETI指令时,还将清除中断响应时所置位的优先级状态触发器,开放中断逻辑,使得已申请的较低级的中断源可以响应。
四:空操作指令
空操作指令表
NOP指令功能:
空操作指令,它不作任何操作,但要消耗一个机器周期的时间,一般用于单片机程序延时或等待。
到此为止,17条单片机控制转移类指令讲解完毕,谢谢阅读!欢迎留言讨论,共同提高!
相关问答
单片机 汇编语言指令中, 条件转移指令 JBC与JC的区别是什么?JC是判断C进位标志是否为1,为1则跳转到指定位置。JBC是判断可位寻址区域内指定位是否为1,为1则跳转到指定位置,并同时清除该位(置0)。JC是判断C进位标志是否...
ljmp什么程序?ljmp长转移指令的功能是:把指令码中的目标地址addr16装入程序计数器PC,使机器执行下一条指令时无条件转移到addr16处执行程序,不影响任何标志。51单片机指令...
单片机 填空求助1.MCS-51系列单片机为()位单片机.2.8051单片...[最佳回答]1.MCS-51系列单片机为(8)位单片机.2.8051单片机有两种复位方式,既上电复位和手动复位.复位后SP=(07H),PC=(0000H),PSW=(00H),P0=(F...
rl 单片机 含义?单片机RL指令,是左移指令(参加左移的是8个位,也就是一个字节)。是属于单片机的位移指令。RR指令:是右移指令(参加左移的是8个位,也就是一个字节)。相对...
求 单片机指令 DJNZ的用法?[回答]DJNZ指令有两种格式:DJNZRn,rel和DJNZdirect,rel,前者为双字节指令,其中第二个人字节存储rel的相对地址,范围是-128~+127,所以转移范围很窄,所以...
求 单片机指令 DJNZ的用法?DJNZ指令有两种格式:DJNZRn,rel和DJNZdirect,rel,前者为双字节指令,其中第二个人字节存储rel的相对地址,范围是-128~+127,所以转移范围很窄,所以...
单片机 里DJNZ代表什么啊?cjne的意思是CompareJumpNotEqual比较不相等转移指令。参与比较的两个数,若不相等,则转移,若相等则程序顺序执行;利用这条指令,就可以判断两数是否相等...
单片机 问题 指令 JNBACC.7,POST的功能是()。 指令 JNBACC.7,PO...[最佳回答]指令JNBACC.7,POST的功能是(A)。A.ACC.7为0转POST执行程序,为1时顺序程序执行
51 单片机 跳转 指令 需要占用几个存储单元?51单片机的跳转指令需要占用2个存储单元。在51单片机中,每个存储单元的大小为8位,即一个字节。跳转指令通常使用相对地址进行跳转,相对地址占用1个字节,用于...
请问 单片机 jz 指令 是不是只能用于,累加器a?是的,JZ是累加器A判零条件转移指令.JZrel;若A=0,则PC+2+rel--->PC;;否则,PC+2--->PC还有是:JNZrel;若A!=0,则PC...是的,JZ...