程序控制指令

合集下载

第六章2程序流控制指令

第六章2程序流控制指令

计数器比较置位指令)而中断执行中断程序的场合。
计数器中断指针为I0□0(□=1~6,计数器中断6点,不可 重复使用)。计数器中断与HSCS(高速计数器比较置位)指 令配合使用,根据高速计数器的计数当前值与计数设定值的 关系来确定是否执行相应的中断服务程序。
图中,执行第3步,将K1000与C255的当前值比较,当C255的当 前值由999变到1000时,驱动计数器中断器I010(梯形图表示
子程序调用举例
程序功能是:X1、X2、X3分 别接通时,将相应的数据传送到 D0、D10,然后调用子程序;在 子程序中,将D0、D10存储的数 据相加,运算结果存储在D20, 用D20存储数据控制输出字元件 K1Y0。
四、中断指令
中断返回 IRET (Interruption Return) 开中断 EI (Interruption Enable) 关中断 DI (Interruption Disable) 均无操作数 I100
如图, • X000为ON时,程序跳到指针P8处。 • X000为OFF时,不执行跳转,程序按原顺序执行。 • 如果用M8000的常开触点驱动CJ指令,相当于无条件跳转指令,因为 运行时特殊辅助寄存器M8000总是ON。
用跳转指令实现选择运行程序段 应用跳转指令的程序结构如
图所示。X3是手动/自动选择
警戒定时器指令的应用
3. (1)WDT指令是在控制程序中刷新警戒定时器的指令。如果执行 程序的扫描周期时间(从0步到END或FEND指令之间)达200ms,则 PLC将停止运行。这时应将WDT指令插到合适的程序步中刷新警 戒时钟,以便程序得以继续运行直到END。例如将一个扫描周期 为240ms的程序分为2个120ms程序。如图所示,在这两个程序之 间插入WDT (2)如果希望每次扫描周期时间超过200ms,则可用移动指令MOV 把限制值写入特殊数据寄存器D8000

FX系列PLC的程序流向控制指令

FX系列PLC的程序流向控制指令

FNC12 MOV K150
D8000
WDT指令还可用于下列目的:当与CJ指令对应的标号的步序低于CJ指令步 序号时,在标号后编入WDT指令。可编入FOR—NEXT循环之中。
循环指令用于某种操作需反复进行的场合。二条指令总是成对
出现 , 相距最近的FOR指1令.和6 NE循XT环指令指是令一对 ,循环指令最多
(3)标号一般设在相关的跳转指令之后,也可以出现在跳转指令之前 但要注意从程序执行顺序来看,如果由于标号在前造成该程序的执行时间
超过了警戒时钟设定值,则程序就会出错。
(4)使用CJ(P)指令时,跳转只执行一个扫描周期 用辅助继电器M8000作为跳转指令的工作条件,跳转就成为无条件跳转。
(5)跳转可用来执行程序初始化工作。
注意 : (1)一个中断指针(I***)占一步,最多可设置9个中断点。 (3)其中2个中断点可产生多层中断。 (4)中断信号的脉宽必须超过200μs。 (5)多个中断信号顺序产生时,最先产生的中断信号有优先权。若2个 或2个以上的中断信号同时产生时,中断指针号较低的有优先权。 (6)如果中断信号产生于禁止中断区间(DI到EI范围),这中断信号 被存贮,并在EI指令之后被执行(除非相应的M805△为ON )。
X5
RST
T246
其是否具有掉电保持功能,由于
X7
元件
跳RS转T 前触C0点状态
跳转后触相点关状程态 序停止跳执转后行线,圈它状们态的现实
P8 P9
X6
Y、M、X1S0
X11
1ms定时 10m器s,X0
100mX1s2 定时X器13
XT214、6 XK21、00X0 3
XC05 OFOKFF2,0F X6
100ms 定时器

3.3.5 程序控制类指令

3.3.5  程序控制类指令

1. 无条件转移指令(1)jmp段内直接短程转移Jmp short标号jmp short loop1next:下一条指令………loop1:……….(loop1也可能在跳转指令前)跳转距离范围是-128-127(2) 段内直接近程转移Jmp near ptr标号跳转距离范围是-32768-32767(3)段内直接转移Jmp bx ; IP<—bxJmp word ptr [1000h] ;IP<—word ptr[1000h](4)段间直接转移Jmp far ptr标号(5)段间间接转移Jmp dword ptr [1000h] ;IP<—word ptr[1000h],CS<—word ptr[1002h] 2. 过程调用指令call(1)段内直接调用Call near ptr过程名<=> Call过程名可以暂把过程名理解为标号先把下条指令的有效地址入栈(为了能够以后恢复),然后跳转到新地址Push ip; ip为该跳转指令的下一条指令的有效地址Ip<—ip+loop loop表示跳转距离(2)段内间接调用Call word ptr [1000h]被调用过程的有效地址保存在内存ds:[1000h]处Push ipIp<—word ptr [1000h](3)段间直接调用Call far ptr过程名Push cs ;先入csPush ip ;再入ipIp<—过程入口地址的偏移量Cs<—过程入口地址的段基址(4)段间间接调用Call dword ptr [1000h]Push cs ;先入csPush ip ;再入ipIp<—word ptr [1000h]Cs<—word ptr [1002h]3. 过程返回指令ret,类似C语言中的return;段内返回, 格式:ret作用相当于pop ip,回到调用过程时保存的地址继续执行下条指令段间返回,格式:ret相当于pop ipPop cs回到调用过程时保存的地址继续执行下条指令带立即数返回,格式:ret n除返回原来的ip和cs外,还做sp=sp+n适用于过程带参数的情况,计算机调用函数或过程时,先把参数的值入栈,再把返回地址(下条指令地址)入栈。

程序控制指令

程序控制指令
JNS 目标标号
2020/8/15
符号标志位为1转移
JS 目标标号4
类别
循环控制 (CX/ZF)
中断
2020/8/15
续表(4)
指令名称
指令格式
循环
LOOP 目标标号
等于/结果为0循环 LOOPE/LOOPZ目标 标号
不等于/结果不为0循 LOOPNE/LOOPNZ目

标标号
CX内容为0转移
JCXZ目标标号
例1:JMP SI ; 近距离
若(SI)=1200H,则指令执行后 ,(IP)=1200H,于是转向代码段的偏移地址 1200H处开始执行。
注意:目标地址以段内偏移的形式给出 ,而不是相对于IP的位移量,所以它是一个 16位的操作数。
2020/8/15
10
无条件段内转移
• 间接转移:

JMP BX
例中的DWORD PTR表示转移地址是一个 双字。
例:JMP FAR PTR far_label ;远距离 其中的far_label为远类型的标号。
2020/8/15
13
无条件段间转移
• 直接转移:
JMP FAR PTR Lable
IP
远地址标号
CS

JMP

XXH

XXH
段 1
XXH
XXH
2020/8/15


CS : IP= Label



高于/不低于也不等于转移 JA/JNBE 目标标号 高于或等于/不低于转移 JAE/JNB 目标标号 低于/不高于也不等于转移 JB/JNAE 目标标号 低于或等于/不高于转移 JBE/JNA 目标标号

ABB机器人标准指令详解

ABB机器人标准指令详解

ABB机器人标准指令详解一、 RAPID程序控制指令1、1程序开始/结束控制指令1) PROGRAM START/END1、指令格式: PROGRAM <程序名> <属性> ;2、描述:此指令标识一个机器人程序的开始或结束。

在这里,<程序名>是你给程序取的名字,<属性>是可选的,表示程序的属性(如:INTERLOCK, NO_INTERLOCK, NOPROGRAM等)。

2) JOB START/END1、指令格式: JOB <作业名> <属性> ;2、描述:此指令标识一个作业的开始或结束。

在这里,<作业名>是你给作业取的名字,<属性>是可选的,表示作业的属性(如:INTERLOCK, NO_INTERLOCK, NOPROGRAM等)。

1、2程序转移指令1) GOTO1、指令格式: GOTO <行号>;2、描述:此指令将程序执行转移到指定的行号。

2) GOSUB1、指令格式: GOSUB <行号>;2、描述:此指令将程序执行转移到指定的行号,并在返回时继续执行当前行。

3) RETURN1、指令格式: RETURN;2、描述:此指令将程序执行从 GOSUB转移到父程序,并从 GOTO转移到原程序行。

1、3条件判断指令1) IF/THEN/ELSE/ENDIF;1、指令格式: IF <条件> THEN <表达式> ELSE <表达式> ENDIF;2、描述:如果满足条件<条件>,则执行 THEN后面的表达式;否则执行 ELSE后面的表达式。

2) CASE/ESAC/ENDCASE;1、指令格式: CASE <变量> IN <表达式1> / <表达式2> /... / ENDCASE;2、描述:此指令根据变量<变量>的值选择要执行的表达式。

5.2 程序控制指令(新修改)

5.2 程序控制指令(新修改)

NEXT
4) 循环指令可以进行嵌套编程,最多可嵌套8层,单个循 环指令之间不能交叉。图所示为2层嵌套使用。
5.2.4
子程序
子程序是结构化编程的有效工具,它可以把功能独 立的,且需要多次使用的部分程序单独编写,供主程序 调用。子程序能够使程序结构清晰、功能明确,并且简 单易读。要使用子程序,首先要建立子程序,然后才能 调用子程序。 1. 建立子程序 可以选择编程软件“编辑”菜单中的“插入”子菜 单下的“子程序”命令来建立一个新的子程序。默认的 子程序名为SBR_N,编号N的范围为0~63,从0开始按顺 序递增,也可以通过重命名命令为子程序改名。
2. 子程序调用:CALL、CRET指令 1) 指令梯形图与指令表格式
名 指令
称 CALL
子程序调用 CALL SBR_N
SBR_N EN
子程序结束 CRET CRET
指令表格式 梯形图格式
RET
2) 指令功能 CALL 子程序调用指令,当EN端口执行条件存在时, 将主程序转到子程序入口开始执行子程序。SBR_N是子 程序名,标志子程序入口地址。 CRET 有条件子程序返回指令,在其逻辑条件成立时, 结束子程序执行,返回主程序中的子程序调用处继续向 下执行。
5.2.3
循环指令FOR和NEXT
1) 指令格式及操作数
FOR、NEXT指令的基本格式 名 称 循环开始 循环结束 NEXT NEXT
指令 指令表格式
FOR
FOR INDX,INIT,FINAL
FOR EN ENO
梯形图格式
INDX INIT FINAL
NEXT
2) 指令功能 FOR 标记循环程序的开始。 NEXT 标记循环程序的结束,无操作数。

程序控制类指令的功能

程序控制类指令的功能

程序控制类指令的功能
程序控制类指令是用于控制程序的执行流程和逻辑的指令。

它们决定了程序中各个部分的执行顺序和条件。

以下是几种常见的程序控制类指令及其功能:
1. 条件控制指令:条件控制指令用于根据特定条件决定程序执行的路径。

最常见的条件控制指令是if语句,它根据一个条件的真假来决定程序中的某段代码是否执行。

如果条件为真,那么if语句块中的代码将被执行;否则,程序将继续执行下一个语句。

2. 循环控制指令:循环控制指令用于重复执行一段代码,直到满足特定条件为止。

常见的循环控制指令包括for循环、while循环和do-while循环。

for循环在执行前会定义一个计数器,然后在每次循环迭代中对其进行更新;while循环会在每次循环迭代前检查一个条件;do-while循环会先执行一次循环体,然后再检查条件。

3. 跳转指令:跳转指令用于改变程序执行的顺序,将控制传递到程序的其他部分。

最常见的跳转指令是goto语句,它可以将控制无条件地转移到程序的另一个标记位置。

然而,使用goto语句可能导致程序变得难以理解和维护,因此在现代编程中很少使用。

4. 函数调用指令:函数调用指令用于调用和执行程序中定义的函数。

函数是一段独立的代码,可以接受输入参数并返回一个值。

使用函数调用指令可以将程序的执行流程转移到函数中执行,并在执行完毕后返回到调用点继续执行。

这些程序控制类指令在编程中起到了至关重要的作用,帮助程序员实现复杂的逻辑和控制程序的行为。

通过合理使用这些指令,我们可以编写出结构清晰、逻辑严谨的程序。

11程序控制指令

11程序控制指令
S7-200的程序控制指令
1.条件结束指令
有条件结束(END)指令根据前一个逻辑 条件终止用户用户程序; 只能用在主程序中使用,不能在子程序或 中断程序中使用。 当I0.2=0时,I0.0接通, Q0.0和Q0.1都会接通; 当I0.2=1时,I0.0接通, Q0.0接通,Q0.1不会接通。

2.停止指令
停止指令将CPU从run状பைடு நூலகம்转换为stop模式 终止程序执行。 如果在中断程序中执行stop指令,中断指令 立即终止,并忽略全部待执行的中断,转 到扫描循环中的剩余程序,包括执行主用 户程序和子程序,在当前扫描结束时从run 转换至stop模式。

3.FOR-NEXT循环指令

1. 建立子程序

可用编程软件Edit菜单中的Insert选项,选 择Subroutine,以建立或插入一个新的子程 序,同时在指令树窗口可以看到新建的子 程序图标,默认的程序名是SBR_n,编号n 从0开始按递增顺序生成,可以在图标上直 接更改子程序的程序名。在指令树窗口双 击子程序的图标就可对它进行编辑。
FOR指令是控制执行FOR和NEXT之间的指令 次数的操作; 使用FOR指令必须指点当前循环计数(INDX)、 起始值(INIT)和结束值(FINAL)。NEXT指 令是FOR循环结束标记,并将堆栈顶值设为1。 FOR指令和NEXT指令必须成对使用; 嵌套深度可达八级;
每次启用FOR指令时,它将 初始值复制至循环计数(INDX); 假定初始值(INIT)等于1,结束值(FINAL) 等于10,FOR与NEXT之间的指令被执行10 次。INDX值递增“1”:1、2、3…10。如果 起始值大于结束值,则不执行循环。每次执 行FOR和NEXT指令之后,INDX值递增“1”, 并将结果与结束值比较,如果循环计数 (indx)大于结束值,循环则终止。

程序控制指令

程序控制指令
(0A3256H)=1688H JMP SI ;(IP)←(SI)=0256H JMP TABLE[BX] ;(IP)← (0A3256H)=1688H EA=[16D× (DS)+(BX)+TABLE =(0A0000H+0056H+3200H)=(0A3256H)=1688H
3.2.4程序控制指令
3.2.4程序控制指令
4. 子程序调用时,系统将自动保护返回地址,以便调用结束后返
(1) 格式Ⅰ: CALL 操作Ⅰ:(SP)← (SP)-2,[(SP+1),(SP)]← (IP),(IP)←DISP)← (SP)-2,[(SP+1),(SP)]← (IP),(IP)← (REG) 或(IP)← (MEM 〖BFQ〗 说明:DISP16为16位偏移量,REG为寄存器,MEM为存储单 元,段内间接调用子程序入口地址存放在REG或MEM中。段 内调用是将IP指向子程序入口地址,从而进入子程序。
3.2.4程序控制指令
(3) 格式: RET 操作:(IP)← [(SP+1),(SP (SP)← (SP)+2
3.2.4程序控制指令
(4) 格式: RET 操作:(IP)← [(SP+1),(SP)],(SP)←
(SP)+2 (CS)← [(SP+1),(SP)],(SP)← (SP)+2
说明:子程序结束之前必须要有一条RET指令,才能保证 调用程序正确返回调用处。段内返回,系统自动从堆栈顶部弹 出一个字的内容,送到IP寄存器,使子程序返回到主程序中 CALL指令的下一条指令。段间返回时系统自动地从堆栈顶部 弹两个字的内容,分别送到IP和CS寄存器中。
JMP SHORT LAB1

第五章 3 程序控制指令

第五章 3 程序控制指令

N:子程序的编号,取值范围:000—049 子程序的编号,取值范围:000 049
功能: 一起使用, 定义子程序N 功能: SBN和RET一起使用,用SBN定义子程序 和 一起使用 定义子程序 开始, 开始, RET(93)用于每段子程序的结尾,表示子 ( )用于每段子程序的结尾, 程序结束。 程序结束。
(2) 软件复位
只要25200 ON,高速计数器复位。 只要 ,高速计数器复位。 另外, 断电再上电时高速计数器自动复位。 另外,当PLC断电再上电时高速计数器自动复位。 断电再上电时高速计数器自动复位
19
3.使用高速计数器时的设定 .
使用高速计数器前必须进行必要的设定, 使用高速计数器前必须进行必要的设定 , 否则 使用无效。 使用无效。 系列PLC,设定值写入 对CPM1A系列 系列 ,设定值写入DM6642中。 中 用设定值确定高速计数器功能是否使用、 用设定值确定高速计数器功能是否使用 、 复位 方式、计数模式等。 方式、计数模式等。
7
00100 25313 25502 22007 25314 25502 00100 25313
主 程 序
子 程 序
二、宏指令及其功能
宏指令也是调用子程序的指令, 宏指令也是调用子程序的指令,但与前述子程序有 所不同。宏指令子程序的操作数I1是子程序中第一个 所不同。宏指令子程序的操作数 是子程序中第一个 输入字参数,操作数O1是子程序中第一个输出字参 输入字参数,操作数 是子程序中第一个输出字参 每次调用时, 的数据可以不同, 数,每次调用时, I1 和O1的数据可以不同,由于宏 的数据可以不同 调用的子程序其输入/输出的数据可以变换 输出的数据可以变换, 调用的子程序其输入 输出的数据可以变换,因此提 高了子程序存在的价值。 高了子程序存在的价值。

PLC程序控制指令

PLC程序控制指令

4 网络写指令 梯形图: 梯形图: NETW 语句表: 语句表:NETW TBL,PORT EN EN NETR:指令助记符 指令助记符 TBL TBL写出表 写出表:VB,MB,*VD,*AC,*LD 写出表 * * * PORT PORT通信口:0,1 通信口: 通信口 说明:最多向远程站写16字节数据 说明:最多向远程站写 字节数据 网络读写指令数据表
SM1.2 / I0.0 ﹕ ﹕ I0.0 4 (JMP) M0.0 ( ) 4 LBL Q0.0 ( )
n
LBL LDN SM0.2 JMP 4 LD I0.0 = M0.0 ﹕ ﹕ LBL 4 LD I0.0 = Q0.0
子程序( 四 子程序(p174) ) 1.概述 概述 S7—200PLC程序类型:三大类: 程序类型: 程序类型 三大类: 主程序OB1,子程序 子程序SBR-n,中断程序 中断程序INT-n 主程序 子程序 中断程序 子程序形式:子程序标号开始 子程序标号开始,子程序返回指令结束 子程序形式 子程序标号开始 子程序返回指令结束 2.子程序建立 子程序建立 编辑菜单→插入子程序 编辑菜单 插入子程序 3.子程序参数定义 子程序参数定义 用局部变量表定义参数 4.子程序调用与返回 子程序调用与返回
通信操作指令(P223) 三.通信操作指令 通信操作指令 1. 通信协议控制 通信口0的通信控制: 通信口 的通信控制:SMB30 的通信控制 通信口1的通信控制: 通信口 的通信控制:SMB130 的通信控制 控制字格式 (SMB30/SMB130) p p d b b b m m : pp:奇偶选择 d: 字符数据位 mm: 协议选择 : : 00 PPI从站模式 从站模式 0 0 无 奇偶 1 8位⁄字符 位 字符 01 自由口协议 0 1 偶奇偶 0 7位⁄字符 位 字符 10 PPI主站模式 主站模式 1 0 无奇偶 11 保留 1 1 奇奇偶

程序控制类应用指令

程序控制类应用指令

第六单元程序控制类应用指令任务一跳转程序一、任务提出为了提高设备的可靠性,在工业控制中许多设备要建立自动及手动两种工作方式。

这就要在程序中编排两段程序,一段用于手动,一段用于自动。

然后设立一个手动/自动切换开关对程序段进行选择。

梯形图一般采用图6-1所示的典型结构。

X10是自动/手动切换开关,当它为ON时将跳过自动程序,执行手动程序,为OFF时将跳过手动程序,执行自动程序。

公用程序用于自动程序和手动程序相互切换的处理,自动程序和手动程序都需要完成的任务也可以用公用程序来处理。

图6-1 自动/手动程序切换二、原理分析跳转指令CJ可用来选择执行一定的程序段,跳过暂且不执行的程序段,缩短了扫描周期。

如图6-2所示,若X0接通,则跳到标号为P8的程序处执行。

X0断开时,不执行跳转指令,顺序往下执行。

图6-2 跳转程序表6-1给出了图6-2中跳转发生前后相关器件状态发生变化对程序执行结果的影响。

表6-1跳转对元器件状态的影响1.被跳过的程序段中的输出继电器Y、辅助继电器M、状态继电器S由于该段程序不再执行,即使梯形图中涉及的工作条件发生变化,它们的工作状态将保持跳转发生前的状态不变。

2.被跳过的程序段中的定时器及计数器,无论其是否具有掉电保持功能,由于相关程序停止执行,它们的当前值寄存器被锁定,跳转发生后其定时值、计数值保持不变,在跳转中止,程序接续执行时,定时计数将继续进行。

另外,定时、计数器的复位指令具有优先权,即使复位指令位于被跳过的程序段中,执行条件满足时,复位工作也将执行。

三、知识链接1.编程元件——跳转指针PFX2N的指针P有128点(P0~P127),用于分支和跳转程序。

指针P使用时要注意:⑴在梯形图中,指针放在左侧母线的左边,一个指针只能出现一次,如出现两次或两次以上,就会出错。

⑵多条跳转指令可以使用相同的指针。

⑶P63是END所在的步序,在程序中不需要设置P63。

⑷指针可以出现在相应跳转指令之前,但是如果反复跳转的时间超过监控定时器的设定时间,会引起监控定时器出错。

项目14-程序控制指令(2011-7-16)

项目14-程序控制指令(2011-7-16)

项目14 程序控制指令1.条件结束条件结束指令(END)根据前面的逻辑关系终止当前扫描周期。

可以在主程序中使用条件结束指令,但不能在子程序或中断服务程序中使用该命令。

2.停止停止指令(STOP)导致CPU从RUN到STOP模式从而可以立即终止程序的执行。

如果STOP 指令在中断程序中执行,那么该中断立即终止,并且忽略所有挂起的中断,继续扫描程序的剩余部分。

完成当前周期的剩余动作,包括主用户程序的执行,并在当前扫描的最后,完成从RUN到STOP模式的转变。

3.看门狗复位看门狗复位指令(WDR)允许S7--200 CPU的系统看门狗定时器被重新触发,这样可以在不引起看门狗错误的情况下,增加此扫描所允许的时间。

使用WDR指令时要小心,因为如果您用循环指令去阻止扫描完成或过度的延迟扫描完成的时间,那么在终止本次扫描之前,下列操作过程将被禁止:①通讯(自由端口方式除外)② I/O更新(立即I/O除外)③强制更新④ SM位更新(SM0,SM5~SM29不能被更新)⑤运行时间诊断⑥由于扫描时间超过25秒,10ms和100ms定时器将不会正确累计时间。

⑦在中断程序中的STOP指令⑧带数字量输出的扩展模块也包含一个看门狗定时器,如果模块没有被S7--200写,则此看门狗定时器将关断输出。

在扩展的扫描时间内,对每个带数字量输出的扩展模块进行立即写操作,以保持正确的输出。

请参考这段描述之后的实例。

图1提示:如果希望程序的扫描周期超过500ms,或者在中断事件发生时有可能使程序的扫描周期超过500ms时,您应该使用看门狗复位指令来重新触发看门狗定时器。

每次使用看门狗复位指令,您应该对每个扩展模块的某一个输出字节使用一个立即写指令来复位每个扩展模块的看门狗。

如果您使用了看门狗复位指令允许程序的执行有一个很长的扫描时间,此时将S7--200的模式开关切换到STOP位置,则在1.4秒内,CPU转到STOP方式。

图2:停止、结束和看门狗复位指令程序举例4.For--Next循环指令FOR和NEXT指令可以描述需重复进行一定次数的循环体。

程序控制类指令

程序控制类指令

程序控制类指令
1 段内直接短转移
格式:JMP SHORT OPR 功能:SHORT表明程序转移的目标地 址与JMP指令在同一个代码段内,操作数 可以是目标地址的标号或指定一个8位的 偏移量,转 移 范 围 为 - 128 ~ 127 字 节。 SHORT可省略。
指令执行后,CS的内容不变,IP的值 (即JMP指令的下一条指令)与8位偏移量 之和被赋予当前的IP。
2 段内直接近转移
程序控制类指令
格式:JMP NEAR PTR OPR 功能:NEAR PTR表明程序转移的目标地址与JMP指令在同一个代码段内,操作数可以是目标地址的 标号或指定一个16位的偏移量,转移范围为-32768~32767字节。NEAR PTR可省略。
指令执行后,CS的内容不变,IP的值(即JMP指令的下一条指令)与16位偏移量之和被赋予当前的IP。
在执行子程序调用指令时
首先要将CALL指令的下一条指令 的地址压入堆栈保护起来,作为子
3 段内间接转移
格式:JMP WORD PTR OPR 功能:程序转移的目标地址与JMP指令在同一个代码段内,指令中的操作数是16位寄存器或存储器单 元,段内转移的偏移地址存放在16位寄存器或存储器中连续两个字节的存储单元中。使用寄存器作为操作 数时,WORD PTR省略,如JMP BX。
指令执行后,CS的内容不变,寄存器中的内容或存储器中指定地址开始的连续两个字节单元的内容被 赋予当前的IP。
条件转移指令
单个标志位的状态作 为转移条件的转移指

两个无符号数的比较 结果作为转移条件的
转移指令
两个带符号数的比较 结果作为转移条件的
转移指令
程序控制类指令
条件转移指令
程序控制类指令

第8章程序控制指令

第8章程序控制指令
合条件为真时,执行子程序
只有当一个或多个输入逻辑 组合条件为真时,仅在一次
扫描过程中执行子程序
例题8.3
设一个生产系统的PLC程序在检测到15个 错误条件的任一个,都将锁定一个位,从 而停止生产系统。
要求设计一个报警系统,当错误发生时 红色指示灯亮2秒,暗1秒。若60秒内没有 人按下复位按钮,则再加入蜂鸣器报警。 因15个位置中任一个检测到错误都要调用 报警逻辑,所以需要将报警逻辑编写成子 程序形式,以便于调用。
目的
提供子程序和程序扫描相关的不同程序控制指 令的整体概述
介绍SLC和Logix系统的程序控制指令 说明程序控制指令如何应用于自动化系统的
PLC程序中
目标
解释程序控制指令功能 描述子程序的操作 解释立即输入和输出指令的功能 描述清除指令的操作 画出并描述使用程序控制指令表达的应用梯形图 使用SLC及Logix系统的程序控制指令,开发梯形
8.3.2 跳转和标记区域控制指令
跳转(JMP)输出指令和输入标记(LBL) 指令一起使用,标记指令确定跳转指令的目 的梯级。
SLC系列PLC中的标记为Q2:(0~255),而 Logix系列使用不大于40个字符的文本标记
使用跳转指令注意事项:
编程使用跳转指令应特别小心,不要因跳转返回 指令使程序滞留在循环内太长时间而触发看门狗
确认LBL指令是梯级中的第一个输入指令 千万不要将跳转指令编写到MCR区域中
程序梯形图梯级 扫描
跳转
没有 扫描 的程 序段
跳转目的
跳转和标记指令的标准梯形图
SLC系列 向前跳转 被跳转指令跳过的梯形图梯级
Logix系列 向前跳转
被跳转指令跳过的梯形图梯级
向后跳转 因为跳转指令而重复的梯形图梯级 标记多跳转指令对应单一标记
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2020/4/22
3
续表(3)
类别
指令名称
指令格式
条件转移
小于或等于/不大于转
(有符号数 OF/SF/ZF)

溢出转移
JLE/JNG 目标标号 JO 目标标号
不溢出转移
JNO 目标标号
条件转移 (OF/PF/SF)
奇偶位为0/奇偶性为 奇转移
奇偶位为1/奇偶性为 偶转移
符号标志位为0转移
JNP/JPO 目标标号 JP/JPE 目标标号
(3)LOOPNZ (LOOPNE) 类比 串前缀REPNZ/NE
格式:LOOPNZ label 操作:(CX)-1→CX;
若(CX)≠0∧ZF=0,则转至label处执行; 否则退出循环,执行LOOP后面的指令。
2020/456个内存单元均减去1, 若发现某个单元减为0则立即退出循环,其后的 单元不再减1。程序段如下:(逻辑地址为 1A00:0H)
高于/不低于也不等于转移 JA/JNBE 目标标号 高于或等于/不低于转移 JAE/JNB 目标标号 低于/不高于也不等于转移 JB/JNAE 目标标号 低于或等于/不高于转移 JBE/JNA 目标标号
2020/4/22
2
类别
条件转移 (CF/ZF)
条件转移 (有符号数) (OF/SF/ZF)
续表(2)
;小于或等于则转移(dist≤src)
转移条件为: (SF⊕OF=1)∨ZF=1
2020/4/22
21
③根据CX内容来决定是否转移的转移指令 JCXZ label 若(CX)=0,则转移到label处开始执行。
2020/4/22
22
条件转移指令举例:以十六进制数形式显示BX中的内容。
MOV BX, 1234H MOV CH, 4 ROT: MOV CL, 4 ROL BX, CL MOV AL, BL AND AL, 0FH ADD AL, 30H CMP AL, 39H JBE DISP ADD AL, 7 DISP: MOV DL, AL MOV AH, 2 INT 21H DEC CH JNZ ROT MOV DL, 48H MOV AH, 2 INT 2020/4/22 21H
在汇编语言中,段内间接寻址通常写成: JMP WORD PTR[BX+DI]
表示所取得的目标地址是一个字。
2020/4/22
12
③段间直接转移 在指令中直接给出要转移到的目的段地
址和偏移地址。 例:JMP 2000H:1000H ;远距离
执行时,(IP)←1000H,(CS)←2000H
注意:直接地址为符号地址时,段间直接转 移指令中的符号地址前应加操作符FAR PTR。
指令名称
指令格式
进位位为1转移
JC 目标标号
进位位为0转移
JNC 目标标号
等于/结果为0转移
JE/JZ 目标标号
不等于/结果不为0转移 JNE/JNZ 目标标号
大于/不小于也不等于转移 JG/JNLE 目标标号
大于或等于/不小于转移 JGE/JNL 目标标号
小于/不大于也不等于转移 JL/JNGE 目标标号
① 段内直接转移: JMP disp
指令中给出的8/16位的位移量加到IP, CS保持不变。
② 段内间接转移: JMP reg / mem
reg/mem中的16位偏移地址送IP, CS保持不变。
③ 段间直接转移 JMP segment : offset
指令中给出的16位的段和16位的偏移地址送到CS和IP。
JMP BX




JMP WORD PTR[BX] CS : IP 指令码
2020/4/22
IP BX=1200

XXH

XXH



11
例2:JMP [BX+DI] 设指令执行前: (DS)=3000H,(BX)=1300H, (DI)=1200H,(32500H)=2350H; 则指令执行后:(IP)=2350H
; 最后显示’H’
23
2.循环控制指令
• 用在循环程序中以确定是否要继续循环。 • 循环次数通常置于CX中。 • 转移的目标应在距离本指令-128~+127的
范围之内(短跳转)。 • 循环控制指令不影响标志位。
2020/4/22
24
(1) LOOP
格式:LOOP label 类比 串前缀REP 操作:(CX)-1→CX;
3.3.5 程序控制指令
控制转移指令分为: –转移指令 –循环控制指令 –调用和返回指令 –中断指令
2020/4/22
1
表4-6 控制转移类指令
类别
指令名称
指令格式
无条件转移
无条件转移
JMP目标标号
调用/返回
过程调用
CALL 过程名
调用/返回
过程返回
RET 弹出值
条件转移 (无符号数)
(CF/ZF)
2020/4/22
20
判断有符号数的大小
JG
;大于则转移(dist>src)
转移条件为: (SF⊕OF=0)∧ZF=0
JGE
;大于或等于则转移(dist≥src)
转移条件为: (SF⊕OF=0)∨ZF=1
JL
;小于则转移(dist<src)
转移条件为: (SF⊕OF=1)∧ZF=0
JLE
4000 DS
+) 1212 SI
41212
41212 41213 41214 41215
11111111 11101100
00 10 00 4A
DS:[SI]
1000 IP 4A00 CS
段间间接转移操作示意图
2020/4/22
17
(2)条件转移指令 - JXX
• 条件转移指令可实现程序的条件分支。 • 条件转移指令根据标志位的状态来决定是
MOV AX, 1A00H
MOV DS, AX
; 1A00H段
MOV DI, -1
MOV CX, 256
GOON: INC DI
DEC BYTE PTR[DI]
LOOPNZ GOON
HLT
2020/4/22
27
例2:在8000H开始的长度为1000字节的字符串中查找 ’S’,若找到,把其偏移地址记录在ADDR中,否则 ADDR单元置为0FFFFH。
中断 溢出时中断
INT 中断类型 INTO
中断返回
IRET 5
1.转移指令
➢转移指令的实质: 改变IP(或者CS和IP)的内容。
➢对标志位flags的影响: 所有转移指令不会影响标志位flags。
➢分类: 分为无条件转移和条件转移两种。
2020/4/22
6
(1) 无条件转移指令 - JMP
本指令无条件转移到指定的目标地址, 以执行 从该地址开始的程序段。根据设置CS、IP的方法 ,JMP指令可实现短\近\远距离跳转, 指令分成4 种情况。
; CH做循环计数器 ; CL做移位计数器 ; 将最高4位移到低4位
; 取出低4位 ; 转换为ASCII码 ; 与 ’9’ 比较 ; 若(AL)≤‘9’, 则转显示 ; 若(AL)>’9’, 再加7转为‘A’-‘F’ ; (DL)←字符
; 显示输出 ; 4个十六进制数显示完否? ; 没有, 循环
; ‘H’
例:JMP FAR PTR far_label ;远距离 其中的far_label为远类型的标号。
2020/4/22
13
无条件段间转移
• 直接转移:
JMP FAR PTR Lable
IP
远地址标号
CS

JMP

XXH

XXH
段 1
XXH
XXH
2020/4/22


CS : IP= Label



2
14
④段间间接转移
转移的目的地址(段和偏移)在两个相 邻的字存储单元中。例如:
JMP DWORD PTR[SI] ; 远距离 设指令执行前:(DS)=4000H,(SI)=1212H,
(41212H)=1000H,(41214H)=4A00H 则指令执行后:(IP)=1000H,(CS)=4A00H 于是转到4B000H处开始执行指令。
否进行分支转移。 • 格式:JXX label;xx为条件名称缩写 • 指令的转移范围为-128~+127字节(短跳转)。 • 主要的条件转移指令参见p142表3-7。
2020/4/22
18
① 根据单个标志位设置的条件转移指令
JB/JC
;低于,或CF=1,
则转移
JNB/JNC/JAE ;不低于,或CF=0,高于或等于, 则转移
若(CX)≠0,则转至label处执行; 否则退出循环,执行LOOP后面的指令。
注:LOOP指令与下面的指令段等价:
DEC CX JNZ label
2020/4/22
25
(2)LOOPZ (LOOPE) 类比 串前缀REPZ/E
格式:LOOPZ label 操作:(CX)-1→CX;
若(CX)≠0∧ZF=1,则转至label处执行; 否则退出循环,执行LOOP后面的指令。
JP/JPE JNP/JPO
;奇偶标志PF=1(偶), ;奇偶标志PF=0(奇),
则转移 则转移
JZ/JE JNZ/JNE
;结果为零(ZF=1), ;结果不为零(ZF=0),
则转移 则转移
JS
;SF=1,
JNS
;SF=0,
则转移 则转移
相关文档
最新文档