产品概述

散转移单片机 跟电师傅学单片机(18):单片机控制转移指令编程案例讲解

小编 2024-10-05 产品概述 23 0

跟电师傅学单片机(18):单片机控制转移指令编程案例讲解

单片机程序案例:

要求把06H~09H,20个数据按顺序放入内部数据存储器RAM:10H~23H单元中。

案例要求示意图

一:程序编程

▶MOV R0,#10H;将单片机内部RAM单元的首地址10H送到工作寄存器 R0中。

▶MOV R1,#14H;将十进制数20(20个数放入20个单元中)转成16进制数14H送到工作寄存器R1中。

▶MOV A,#06H;;将第1个数06H送到单片机累加器A中。

▶LOOP:MOV @R0,A;把单片机累加器A中的内容送到工作寄存器R0里面的内容所确定的地址单元中。

是间接寻址方式。LOOP:是标号,表示程序要循环的意思,指令需要重复执行时,可以使用标号LOOP循环来实现。

▶INC A;加1指令,数据加1,累加器A中的内容加1。例如:刚才是06H,现在加1就是07H。

▶INC R0;加1指令,地址加1,工作寄存器R0里面的内容加1。例如:地址单元10H,现在加1就是11H。

▶DJNZ R1,LOOP;减1非零转移指令,将工作寄存器R1里面的内容减1,判断为零吗,不为零程序就跳到标号LOOP处执行。共要判断19次,直到为零时程序才结束,此时20个数也放入要求的20个地址单元中了。

指令判断转移示意图

▶SJMP $;让单片机程序停在此处,也就是程序原地踏步。

二:十进制数转十六进制数

将十进制数20数转成16进制数,采用除16取余法,余数要除到小于16。

就是将十进制数20直接除以16,余数除到小于16。从最后1个余数倒着读到第1个就是16进制数了。

十进制数转十六进制数示意图

跟电师傅学单片机(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地址处执行。

相关问答

【一些 单片机 的选择题()1.MCS51指令:MOVA,#40H;表示将立即数...

[最佳回答]1.Y2.Y3.N4.N5.Y6.Y7.N8.Y仅供参考!

ljmp什么程序?

ljmp长转移指令的功能是:把指令码中的目标地址addr16装入程序计数器PC,使机器执行下一条指令时无条件转移到addr16处执行程序,不影响任何标志。51单片机指令...

单片机 汇编语言指令中,条件 转移 指令JBC与JC的区别是什么?

JC是判断C进位标志是否为1,为1则跳转到指定位置。JBC是判断可位寻址区域内指定位是否为1,为1则跳转到指定位置,并同时清除该位(置0)。JC是判断C进位标志是否...

单片机 和DSP的区别是什么?

单片机:以TI的MSP430系列的单片机为例,网上有很多基于此单片机的开发板。开发板有数码管显示、按键、串口、PS/2鼠标等接口。这些资源都是与单片机相连接。也...

DSP与 单片机 的区别?

1、存储器结构不同单片机使用冯.诺依曼存储器结构。这种结构中,只有一个存储器空间通过一组总线(一个地址总线和一个数据总线)连接到处理器核。大多数DSP采...

单片机 与DSP的区别?

1、存储器结构不同单片机使用冯.诺依曼存储器结构。这种结构中,只有一个存储器空间通过一组总线(一个地址总线和一个数据总线)连接到处理器核。大多数DSP采...

单片机 pc值怎么计算?

用于存放和指示下一条要执行的指令的地址。寻址范围达64KB。PC有自动加1功能,以实现程序的顺序执行。PC没有地址,是不可寻址的,无法用指令对它进行读写。但在...

【一周】Linux 28周年 | 方舟编译器开源 | Goodbye Python 2 ...

允许开发人员在单片机上创建流畅的用户界面,基于Qt的应用程序现在可以部署在传统操作系统以及基于ARMCortexM7的单片机上。Python2.x即将终止支持,是时...

单片机 中指令周期、机器周期、状态周期、振荡时钟周期(时...

[最佳回答]时钟周期:时钟周期也称为振荡周期,定义为时钟脉冲的倒数(可以这样来理解,时钟周期就是单片机外接晶振的倒数,例如12M的晶振,它的时间周期就是1/12u...

请问 单片机 pc是什么意思_其他问答_系统粉

PC是一个16位的计数器。用于存放和指示下一条要执行的指令的地址。寻址范围达64KB。PC有自动加1功能,以实现程序的顺序执行。PC没有地址,是不可寻址...

猜你喜欢