2.11 子程序和中断程序指令[共11页]

合集下载

汇编语言-子程序

汇编语言-子程序

STRUC可以把不同类型的数据放在同一个结构里,方便处理。
结构类型说明格式为:
structure_name STRUC

;DB、DW、DD等伪操作
structure_name ENDS
注意:ENDS之前为结构名,注意与段结束相区别。
例如:下列语句说明了一个名STUDENT的结构类型:
STUDENT STRUC
STRLEN1 : CMP AL , [SI] JZ Sቤተ መጻሕፍቲ ባይዱRLEN2 INC SI JMP STRLEN1
STRLEN2: MOV AX , SI SUB AX , [BP + 4] POP SI
POP DS POP BP RET STRLEN ENDP
主程序调用这个子程序的代码片段如下: PUSH AX PUSH AX MOV LEN , AX 如果过程和调用程序在同一文件(同 中的变量。
XOR SI , SI ;CF也会被清0
MADD1:MOV AX , WORD PTR DATA1[SI]
ADC AX , WORD PTR DATA2[SI]
MOV WORD PTR DATA3[SI] , AX
INC SI
INC SI
POP SI
LOOP MADD1
POP CX
MOV AL , 0
递归子程序的设计要点:
1. 递推性:逐级调用; 2. 回归性:逐层回归; 3. 有穷性:终止条件;
这3点为所有语言递归程序设计具有的共性。
汇编语言设计递归程序时的个性在于:
1. 参数和中间结果一般存于堆栈中,但有时也可以存于寄存器中; 2. 递归的深度受堆栈空间的限制。
例:子程序FACT采用递归算法实现阶乘。

中断指令及其应用

中断指令及其应用

M8000
C255 K2,147,483,647
S1· S2· D·
FNC 53 DHSCS K100
C255
I010
FNC 06 FEND I010 中断程序 FNC 03 IRET
图8-16 高速计数器中断动作示意图
FNC04
计数器中断子程序实例2
M8059=OFF,允许中断
X10
EI
M8059
在主程序的开中断区, 当X001=OFF,则M8050 =OFF,标号为I001的中 断子程序允许执行,即 每当输入口X000接收到 一次上升沿中断请示信 号时,就执行该中断子 程序一次,使Y000=ON, 利用触点型秒脉冲特殊 继电器M8013驱动Y012 每秒接通一次,中断子 程序执行完后返回主程 序。
FNC 04 EI X010
M8050
FNC 05 DI FNC 04 EI X020
开中 断范围
关中 断范围 开中 断范围
循 环 扫 描 区
M8051
FNC 05 DI FNC 06 FEND I 001 FNC 03 IRET 中断 程序① M8050=0时,从 X000输入中断 中断 程序② FNC 03 IRET M8051=0时,从 X001输入中断
图8-14 定时器中断子程序
(3)计数器中断子程序 计数器中断是利用PLC内部的高速计数器对外 部脉冲计数,若当前计数值与设定值比较相等时, 执行中断子程序。 计数器中断子程序常用于利用高速计数器计数 进行优先控制的场合。计数器中断要与高速计数器 比较置位指令FNC 53 (HSCS)组合使用才能实现。 图8-16所示,当高速计数器C255的当前计数值 与K100比较相等时,产生中断响应,转去执行中断 指针指向的中断子程序,中断子程序执行完后,返 回原断点后的主程序。

第八章子程序与中断调用

第八章子程序与中断调用
• 使用子程序可以提高代码重用率、编程效 率、简化程序结构。
8.2 子程序的设计要求
• 适合于编制为子程序的功能模块:
• (1)字处理软件中:在字符串中查找某一个给定 的字符;比较两个字符串是否相等;合并两个字 符串;在字符串指定位置插入一个新的字符;删 除字符串指定位置的字符。
• (2)图形生成软件中:在屏幕指定位置显示一个 点;在屏幕指定位置显示一条直线;在屏幕指定 位置显示一个多边形。
堆栈传递方式
• ; 存放ASCII串首地址压栈
• LEA
AX, ASCBUF
• PUSH AX
• CALL BITASC ;调子程序
• MOV AX, BIN16
• PUSH AX
• MOV AX, 16
• PUSH AX
堆栈传递方式
• ; 置存放ASCII串首址 • LEA AX, ASCBUF+10H • PUSH AX • CALL BITASC • MOV AH, 4CH • INT 21H
A的返回点
8.3 子程序与主程序间的参数传递
• 结合一个实际例子说明三种参数传递方式
• 子程序功能:实现对8位或者16位二进制数 的ASCII转换,转换后得到的字符串存放在 主程序指定的位置。
8.3 子程序与主程序间的参数传递
• 入口参数: • 1)待转换的二进制数 • 2)转换位数 • 3)转换后字符串存放的首地址
• CALL指令在把程序流程转向目标地址 (子程序的首地址)之前,会把返回地址 首先压入堆栈保存,为子程序返回主程序 提供必要条件.
8.1.2 子程序的调用与返回
• CALL指令功能:保存返回地址到堆栈,把 程序流程转移到子程序的入口地址。

单片机中断程序

单片机中断程序

单⽚机中断程序1单⽚机外部中断应⽤#include "reg51.h"typedef unsigned int u8;#define led P2 //整个P2⼝都被定义为ledsbit k3=P3^2;sbit k4=P3^3;void yanshi(u8 z){while(z--);}void Int_Init()////外部中断配置{EA=1; //打开中断允许总控制位EX0=1; //外部中断0中断允许位IT0=1; //设置为脉冲触发,下降沿有效}void main() //主函数执⾏{led=0xff; //设置状态为全亮Int_Init();while(1); //while(1);是⼀条指令,它让单⽚机停在这个位置道//⼀般⽤来检测中断,只有cpu收到中断指令,才会跳出while(1)//进⼊中断服务⼦程序;}void int0 () interrupt 0 using 0//2.写此程序的时候要注意中断标准和中断号是否是对应的{ //这⾥为外部中断0的中断函数yanshi(1000);if(k3==0){led=~led; //这⾥将⼩灯的状态反转}}写外部中断时应该看清楚电路图 P32,P33⼝是外部中断0和1的位置2蜂鸣器#include "reg51.h"sbit fen=P1^5;sbit k2=P3^0;void dealy(int x){while(x--);}void main(){while(1){if(k1==0)//判断按键是否按下{dealy(100);if(k1==0)//判断按键是否按下{fen=~fen;//执⾏蜂鸣器状态的反转,如果按键⼀直按,那么⼀直延时反转,就会响dealy(10);}}}}按照开发板的图⽚来蜂鸣器接的⼝为p1.5;1.此时将外部中断与蜂鸣器连起来综合运⽤#include "reg51.h"typedef unsigned int u8;sbit fen=P1^5;sbit led=P2^0;sbit k3=P3^2;u8 z=0;void dealy(u8 x){while(x--);}void Int_Init(){EA=1; //打开中断允许总控制位EX0=1; //外部中断0中断允许位IT0=1; //设置为脉冲触发,下降沿有效}void main(){led=0;Int_Init(); //调⽤外部中断的函数while(1);}void int0 () interrupt 0{dealy(1000);if(k3==0){for(z=0;z<10000;z++){fen=~fen;dealy(10);}}}此时只需要按下k3将会有⼤约1s的蜂鸣器的叫声3.按下k3闪烁不按⾼四位亮的中断应⽤#include "reg51.h"typedef unsigned int u8;#define led P2 //定义整个2脚sbit key=P3^2;u8 z;yanshi(u8 x){while(x--);}void Int_Init(){EA=1;EX0=1;IT0=1;}void main(){led=0xf0;Int_Init();while(1);}void int0 () interrupt 0 using 0{yanshi(1000);if(key==0){for(z=0;z<8;z++){yanshi(5000);led=~led;yanshi(5000);}}}4.定时器的⼀些⽤法解析4.定时器中断的⼀些详解(带程序)#include "reg52.h"typedef unsigned char u8;typedef unsigned int u16;u8 wei[3];sbit LSA = P2^2;//138译码器端⼝定义sbit LSB = P2^3;sbit LSC = P2^4;u8 code smgduan[16]= {0x3f, 0x06, 0x5b, 0x4f,0x66, 0x6d, 0x7d, 0x07,0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71}; //0~F数码u8 ge,shi=0,bai=0,c,z=1;void delay(u8 x){while(x--);}void Timer0_Init() //初始化定时器{TMOD = 0x01; //定时器0⽅式1TH0 = 0;TL0 = 0; //定时器的计数起点为0TR0 = 1; //启动定时器0}void weishu()//各个位的位数显⽰{wei[0]=smgduan[ge];wei[1]=smgduan[shi];wei[2]=smgduan[bai];}void xs()//数字显⽰{u8 i;for(i=0;i<z;i++){switch(i){case 0:LSC = 0;LSB = 0;LSA = 0;break; //显⽰第1个数码管case 1:LSC = 0;LSB = 0;LSA = 1;break; //显⽰第2个数码管case 2:LSC = 0;LSB = 1;LSA = 0;break; //显⽰第3个数码管}P0=wei[i];//显⽰0-9的数值delay(10); //延时,造成视觉暂留现象P0 = 0x00; //数码管消隐}}void main(){Timer0_Init();while(1){if(TF0 == 1) //检测定时器0是否溢出,每到65535次{TF0=0;c++;if(c==14) //71ms乘以14为1s{c=0;ge++;if(ge==10){ge=0;shi++;z=2;}//3个判断分别包含开启3个数码管显⽰if(shi==10){shi=0;bai++;}if(bai>0){z=3;}}}weishu();//调⽤位数数字xs();//显⽰数字}}⼀个0-999的⼀秒加数器。

中断处理和子程序调用

中断处理和子程序调用

中断处理和子程序调用
中断处理和子程序调用是计算机系统中常见的两种程序控制方式。

中断处理是指当计算机执行某个程序时,发生了特定的事件或条件,导致程序被中断,转而去执行另一个程序,处理完后再返回原来的程序继续执行。

中断处理可以分为硬件中断和软件中断两种类型。

硬件中断是由外部设备触发,例如按键、鼠标等操作;而软件中断则是由程序内部触发,例如异常、系统调用等。

子程序调用是指程序在执行过程中,需要调用某个子程序来完成特定的任务,然后返回主程序继续执行。

子程序通常是独立的、可重复利用的程序模块,可以在不同的程序中多次调用。

在调用子程序时,程序需要将参数传递给子程序,子程序处理完后再返回结果给主程序。

子程序调用是程序设计中常用的一种模块化设计方式,可以提高程序的可读性和维护性。

中断处理和子程序调用都是程序控制的重要手段,但它们的应用场景和实现方式有所不同。

中断处理通常用于处理硬件事件、系统异常等需要及时响应的情况;而子程序调用则更适用于程序中需要复用的功能模块,例如排序算法、字符串处理等。

在程序设计时,需要根据具体情况选择合适的程序控制方式,以实现程序的高效和可靠运行。

- 1 -。

《汇编语言程序设计》第十三章中断及中断处理程序

《汇编语言程序设计》第十三章中断及中断处理程序

《汇编语言程序设计》第十三章中断及中断处理程序汇编语言程序设计第十三章中断及中断处理程序中断是计算机系统中的重要概念,它可以打断正在执行的程序,并在一段时间后恢复执行。

在汇编语言程序设计中,了解中断及中断处理程序的概念和实现方法十分重要。

本文将介绍《汇编语言程序设计》第十三章中断及中断处理程序的内容。

一、中断的概念及分类中断是计算机系统的一种基本机制,它可以让计算机在执行程序的过程中,暂时停下来去处理一些紧急事件。

根据中断的来源和性质,中断可以分为硬件中断和软件中断两种类型。

硬件中断是由硬件设备发出的信号,用于向处理器发出请求,以引起处理器对该事件进行处理。

典型的硬件中断包括时钟中断、外部设备中断等。

软件中断是由程序中的中断指令引起的中断。

软件中断可以通过INT指令来触发,程序员可以根据需要自行设置中断号。

二、中断向量表中断向量表是用于存储中断处理程序入口地址的一张表。

当某个中断发生时,处理器会根据中断号在中断向量表中查找对应的中断处理程序入口地址,并跳转到该地址去执行中断处理程序。

中断向量表一般位于内存的固定地址,不同中断号对应不同的中断处理程序入口地址。

由于中断向量表的地址是固定的,因此在编程时需要特别注意保护中断向量表。

三、中断的处理流程中断处理程序是用于响应中断事件并进行处理的程序。

中断的处理流程一般包括以下几个步骤:1. 保存中断现场:在处理中断之前,需要先保存当前程序的上下文,包括程序计数器、寄存器等内容。

这样在中断处理程序执行完毕后,可以恢复现场继续执行被中断的程序。

2. 中断服务例程:中断处理程序中的核心部分是中断服务例程,它实现了对中断事件的具体处理。

根据中断的类型和需求,中断服务例程可能包括对硬件设备的操作、数据处理等内容。

3. 恢复中断现场:在中断处理程序执行完毕后,需要恢复之前保存的中断现场。

这包括恢复程序计数器、寄存器等内容,以确保被中断的程序可以继续正常执行。

四、常见的中断类型及应用在汇编语言程序设计中,有一些常见的中断类型和应用。

《汇编语言程序设计》第十三章中断及中断处理程序

《汇编语言程序设计》第十三章中断及中断处理程序

《汇编语言程序设计》第十三章中断及中断处理程序中断是计算机在执行程序过程中,突然停止当前任务的一种机制。

当出现外部事件(如键盘输入、硬件故障或定时器到达)时,计算机会立即中断当前正在执行的程序,转而执行事先定义好的中断处理程序,以响应这些事件。

中断可以分为硬件中断和软件中断。

硬件中断是由外部设备触发的,比如,键盘输入、鼠标点击等。

而软件中断则是程序内部通过软件指令主动触发的。

中断处理程序是响应中断事件的程序,也被称为中断服务子程序(Interrupt Service Routine,ISR)。

当一个中断发生时,中断处理程序会被调用执行,处理特定的中断事件。

在汇编语言中,编写中断处理程序需要掌握以下几个方面:1.定义中断向量表:中断向量表是一个储存中断向量地址的表格。

每个中断向量是一个4字节的地址,指向相应的中断处理程序。

在开发中,我们需要根据硬件设备的不同,定义对应的中断向量表。

2.中断处理程序的编写:中断处理程序需要以特定的格式编写,称为中断门。

中断门包含了中断向量的地址、中断类型、特权级等信息。

在编写中断处理程序时,需要将程序中所有寄存器的值进行保存,以便在中断处理完后恢复原来的状态。

3.中断的使能与屏蔽:在进行中断处理时,需要将中断的使能标志设置为1,以允许中断的发生。

而在一些情况下,为了阻止中断的发生,我们还需要将中断的屏蔽标志设置为1中断处理程序在操作系统和嵌入式系统中起着重要的作用。

它可以实现多任务处理、设备驱动程序、异常处理等功能。

在操作系统中,中断处理程序负责处理硬件设备的中断请求、时钟中断等,以实现多任务切换和设备驱动等功能。

总结起来,中断处理程序是汇编语言程序设计中重要的内容之一、掌握中断处理程序的编写方法,能够使程序能够响应外部事件,提高程序的实时性和可靠性。

中断处理和子程序调用

中断处理和子程序调用

中断处理和子程序调用一、引言中断处理和子程序调用是计算机领域中常用的两种编程技术。

中断处理是指在程序执行过程中,遇到特定事件时,暂停当前任务,转而执行特定的中断处理程序。

而子程序调用是指将一个独立的程序段作为子程序,在需要的时候进行调用,执行完毕后返回到原程序继续执行。

本文将深入探讨中断处理和子程序调用的原理、应用场景及其优缺点。

二、中断处理中断处理是计算机系统中的一种重要机制,用于处理外部事件的发生。

当特定事件发生时,中断会打断当前程序的执行,转而执行中断处理程序。

中断可以分为硬件中断和软件中断两种类型。

2.1 硬件中断硬件中断是由硬件设备触发的中断,例如外部设备的输入输出、定时器的溢出等。

硬件中断需要通过硬件电路来实现,当硬件设备触发中断时,会向CPU发送中断请求信号,CPU则根据中断向量表找到对应的中断处理程序并执行。

2.2 软件中断软件中断是由软件指令触发的中断,也称为软中断或系统调用。

软件中断通常由程序员在程序中主动设置的中断指令触发,用于处理一些特定的操作,如操作系统的系统调用。

软件中断的触发和处理过程由CPU完成,通过改变程序计数器的值,使CPU跳转到中断处理程序的入口地址执行。

2.3 中断处理过程中断处理过程主要包括中断请求、中断响应和中断处理三个阶段。

1.中断请求:当硬件设备或软件触发中断时,会向CPU发送中断请求信号,请求CPU执行中断处理程序。

2.中断响应:CPU在接收到中断请求后,会根据中断类型和中断向量表找到对应的中断处理程序的入口地址,并将当前程序的状态保存起来,以便中断处理完成后能够恢复执行。

3.中断处理:CPU跳转到中断处理程序的入口地址开始执行中断处理代码。

中断处理程序会根据具体的中断类型进行相应的处理,处理完毕后会恢复之前保存的程序状态,并返回到原程序继续执行。

三、子程序调用子程序调用是一种将一个独立的程序段作为子程序,在需要的时候进行调用的编程技术。

子程序通常用于完成某个独立的功能,可以在不同的地方多次调用,提高代码的复用性和可维护性。

9.3子程序和中断程序指令[22页]

9.3子程序和中断程序指令[22页]

16个 8个
16个 8个
2、中断指令 使用中断指令调用中断程序,处理特殊的
内部事件。
名 称 中断连接 中断分离 开中断
关中断
指令
ATCH
DTCH ENI;DISI
STL ATCH INT,EVNT DTCH EVNT ENI;DISI
LAD
名称 指令 STL LAD
清除中断 CEVΒιβλιοθήκη TCEVNT EVNT在调用指令中应包含相应参数。 子程序中最多可带16个参数。 每个参数都包含: 局部变量L地址、 符号(变量名)、 变量类型、 数据类型。
局部变 变量名 变量类 数据类
注释
量地址



EN
IN BOOL 使能输入参数
LB0 INPUT1 IN BYTE 输入子程序参数
L0.1 INPUT2 IN BOOL 输入子程序参数
S7-200的最大中断数及溢出标志位见教材 表9.31。
S7-200的最大中断数及溢出标志位见下表。 中断队列种类 中断队列溢 CPU221、 CPU224
出标志位 CPU222、 XP、 CPU224 CPU226
通信中断列队 SM4.0
4个
8个
I/O中断列队 时基中断列队
SM4.1 SM4.2
功能:子程序用于需多次反复执行相同任务 的地方。使用子程序,在明确主程序所实现 功能的基础上,根据某些重复性的功能建立 相应的子程序,供主程序调用。
1、建立子程序
通过编程软件建立子程序。在编程软件的 “编辑”菜单中选择“插入”选项的“子程 序”,以建立或插入一个新的子程序。默认 的子程序名为SBR_n,n为编号,范围为0~63, 从0开始顺序递增,亦可通过重命名命令为子 程序更名。

三菱PLC编程:子程序和中断使用技巧

三菱PLC编程:子程序和中断使用技巧

三菱PLC编程:子程序和中断调用技巧可编程控制器PLC(Programmable Logic Controller),是一种广泛应用于工业生产线、设备自动控制、流程控制的专用器件,其内部由CPU、存储器、高速晶体管开关、寄存器等组成,主要支持开关型输入输出变量,如继电器、模拟开关等,相比单片机完成同等功能情况下,不需要编写C或汇编语言,只要简单的使用梯形图,或STL 语句就能完成。

在PLC实际应用中,最好用类似面向对象的思路来设计程序,一方面程序机构清晰,便于阅读和修改,另一方面,对于多人协作的开发项目,模块化的结构,有利于项目的协调,也有利于维护。

本文使用三菱PLC,实现不同的时长的信号输出为例,分别采用子程序调用和中断方法实现。

项目工程内容:有四个输入输出开关: X1, X2, X3,Y1。

当X1开启时,Y1输出时长5秒的高电平;当X2开启时,Y1输出时长10秒的高电平,当X3开启时,Y1输出时长20秒的高电平。

一、打开 GX WORKS 2(或者GX DEVELOPER)。

选择:新建工程,在新建工程窗口,选择:简单工程;CPU系列选择:FXCPU;PLC类型:FX1S; 程序语言选择:梯形图,点击确定。

见图二、点击窗口右侧菜单,选择“程序部件”“程序”“main”,进入梯形图编程。

三、梯形图程序如下:程序注释如下,主程序:0步:辅助继电器M8000,程序启动时动作;执行三条MOV指令,实现数据寄存器D1-D3赋值,K代表常数,赋值后D1、D2、D3的值分别为10,20,50。

16-32步:完成输入开关X1,X2,X3的三选一互锁和数据赋值。

例如当X001闭合(状态ON),X2和X3没有动作(状态OFF)时,其常闭点串联导通,执行16步指令后,传送指令(MOV)将寄存器D1的值传给D0,同理当X002被按下时,执行24步,寄存器D2的值传给D0,同理当X003被按下时,执行32步,寄存器D3的值传给D0,D0作为子程序计时器用。

《程序控制指令中断》PPT课件

《程序控制指令中断》PPT课件
操作: (IP) (IP) + 8位位移量
精选课件ppt
12
( 短转移)
因为短转移的是相对转移,因此,短转 移可以重定位。
如果代码段移动到新的位置,然而JMP 到标号的距离并没有改变,所以只需 移动代码段来进行重定位。
精选课件ppt
13
用JMP 指令(短,近)
例:
0000 33 BD
XOR BX, BX
精选课件ppt
2
5.2 调用过程 : Call 与 RET
5.3 中断服务 中断 中断向量表 INT 指令与执行 IRET 指令与执行
精选课件ppt
3
指令标号
JMP的操作数, Jnnn ( 条件转移), 和LOOP 指令 ,由另一条指令的标号决定。
例:
JMP P50

P50 :
INC CX
指令的标号是近属性, 在同一个代码段内, 标号在过程之中。
同一段内,距离可以超过32K ( 215) 或者在其 他段内 。段:偏移。
精选课件ppt
9
实模式下:
JMP SHORT address ;地址是8 位的 位移量
JMP NEAR PTR address ;地址是 16位的位移量
JMP address ; 地址是8 / 16位的位移量)
JMP FAR PTR ADDRESS
精选课件ppt
4
(指令标号)
可以在单独的一行写标号 P50: INC CX
两种情况下, P50的地址都与INC 指令 的第一个字节相关联。
精选课件ppt
5
无条件转移指令JMP
• JMP 指令是无条件的,在所有情况下都 会转移,允许程序转移到存储器的任何 地址执行下一条指令。

第六章子程序与21H中断

第六章子程序与21H中断
12
B、在子程序中保存将要使用的一些寄存器的内容 、 SUB2 PROC PUSH BX PUSH CX ...... ; 完成子程序功能指令序列 POP CX POP BX RET SUB2 ENDP 4、正确使用堆栈 、 由于堆栈中保存着主程序调用子程序时的断点地址。 由于堆栈中保存着主程序调用子程序时的断点地址。 若在子程序中也使用了堆栈, 若在子程序中也使用了堆栈,注意各个数据压栈和出栈 的顺序不能错, 的顺序不能错,否则将导致数据错误和子程序返回地址 错误。 错误。 13
14
§6.3 子程序设计举例
将两个给定的二进制数(8位和 位和16位 转换为 转换为ASCII 例 5.5.1 将两个给定的二进制数 位和 位)转换为 码字符串。 码字符串。 主程序框图
开始
主程序提供被转换的 数据和转换后的ASCII码字 数据和转换后的 码字 符串的存储区的首地址
取出待转换数据 给出存放结果首址 给出转换的位数 调用转换子程序 取出待转换数据 给出存放结果首址 给出转换的位数 调用转换子程序 结束
5、编制子程序文件 、 子程序文件应包括文字说明与子程序本身两个部 而文字说明一般包括: 分。而文字说明一般包括: •子程序名 子程序名 •子程序功能描述 子程序功能描述 •子程序的入口参数与出口参数 子程序的入口参数与出口参数 •使用哪些寄存器和存储单元 使用哪些寄存器和存储单元 •本子程序是否又调用其他子程序 本子程序是否又调用其他子程序 •子程序的调用形式、举例 子程序的调用形式、 子程序的调用形式
4
1、调用指令 、 指令格式: 指令格式: CALL 过程名
执行CALL指令时,先将断点压入堆栈中保存, 指令时,先将断点压入堆栈中保存, 执行 指令时 然后转移到目标单元。 然后转移到目标单元。 前述程序结构图中,AAA和BBB就是两条调用子 前述程序结构图中, 和 就是两条调用子 程序指令的断点。断点是调用子程序指令CALL的 程序指令的断点。断点是调用子程序指令 的 下一条指令的地址。 下一条指令的地址。 CALL指令的执行对各标志位无影响。 指令的执行对各标志位无影响。 指令的执行对各标志位无影响

子程序及中断使用

子程序及中断使用
8
3. 带参数的子程序调用
(1)子程序参数
变量名 变量类型 数据类型 (2)参数子程序调用的规则 (3)变量表使用 (4)程序实例
9
以上面指令为例,局部变量表分配如表1.1所示,程序段如图
1.3所示。 表1.1 局部变量表例
10
LD CA LL
I 0 .0
//装 入 常 开 触 点
4
1. 建立子程序
同时在指令树和编程窗口可以看到新建的子程序图标,
默认的程序名是SBR_n,编号n从0开始按递增顺序生 成,可以在图标上右键对子程序进行编辑。
5
2. 子程序调用
(1)子程序调用和返回指令

子程序调用 子程序条件返回 (2)注意事项 (3)应用实例
6
图1.1所示的程序实现用外部控制条件分别调用两个子程序。
科技连接你我,共创美好未来
应用指令
---
应用
1.1 子程序指令及应用
1.2
中断指令及应用
2
1.1 子程序
建立子程序 2. 子程序调用 3. 带参数的子程序调用
1.
3
1. 建立子程序
可用编程软件编辑(Edit)菜单中的插入(Insert)选项,选择子
程序(Subroutine),以建立或插入一个新的子程序
12
1.2 中断
1、中断源 2、中断调用 3、中断使用举例
13
1.2 中断
1. 中断源 (1)中断源及种类 中断源,即中断事件发出中断请求的来源。CTS7-200CPU具有
最多可达34个中断源,每个中断源都分配一个编号用以识别,称 为中断事件号。 这些中断源大致分为三大类: 通信中断 输入输出中断 时基中断。

中断调用和子程序的调用的异同

中断调用和子程序的调用的异同

中断调⽤和⼦程序的调⽤的异同1、两过程定义与作⽤⼦程序是微机基本程序结构中的1种,基本程序结构包括顺序(简单)、分⽀(判断)、循环、⼦程序和查表等5种。

⼦程序是⼀组可以公⽤的指令序列,只要给出⼦程序的⼊⼝地址就能从主程序转⼊⼦程序。

⼦程序在功能上具有相对的独⽴性,在执⾏主程序的过程中往往被多次调⽤,甚⾄被不同的程序所调⽤。

⼀般微机⾸先执⾏主程序,碰到调⽤指令就转去执⾏⼦程序,⼦程序执⾏完后,返回指令就返回主程序断点(即调⽤指令的下⼀条指令),继续执⾏没有处理完的主程序,这⼀过程叫做(主程序)调⽤⼦程序过程。

⼦程序结构可简化程序,防⽌重复书写错误,并可节省内存空间。

计算机中经常把常⽤的各种通⽤的程序段编成⼦程序,提供给⽤户使⽤。

⽤户在⾃⼰编写的程序中,只要会调⽤这些⼦程序,就可⼤⼤简化⽤户编程的困难。

中断是计算机中央处理单元CPU与外设I/O交换数据的⼀种⽅式,除此⽅式外,还有⽆条件、条件(查询)、存贮器直接存取DMA和I/O通道等四种⽅式。

由于⽆条件不可靠,条件效率低,DMA和I/O通道两⽅式硬件复杂,⽽中断⽅式CPU效率⾼,因此⼀般⼤多采⽤中断⽅式。

中断概念是当计算机正在执⾏某⼀(主)程序时,收到⼀中断请求,如果中断响应条件成⽴,计算机就把正在执⾏的程序暂停⼀下,去响应处理这⼀请求,执⾏中断服务程序,处理完服务程序后,中断返回指令使计算机返回原来还没有执⾏完的程序断点处继续执⾏,这⼀过程称为中断过程。

有了中断,计算机才能具有并⾏处理,实时处理和故障处理等重要功能。

2、两过程的联系与区别2.1联系中断与调⽤⼦程序两过程属于完全不同的概念,但它们也有不少相似之处。

两者都需要保护断点(即下⼀条指令地址)、跳⾄⼦程序或中断服务程序、保护现场、⼦程序或中断处理、恢复现场、恢复断点(即返回主程序)。

两者都可实现嵌套,即正在执⾏的⼦程序再调另⼀⼦程序或正在处理的中断程序⼜被另⼀新中断请求所中断,嵌套可为多级。

汇编语言中断指令

汇编语言中断指令

汇编语言中断指令汇编语言是一种低级别的计算机编程语言,它使用指令的助记符和操作码来直接控制计算机硬件。

在汇编语言中,中断指令是一种重要的操作指令,它可以使程序在执行过程中暂停并切换到指定的中断服务程序。

本文将介绍汇编语言中断指令的基本概念、使用方法和相关应用场景。

一、概述中断是计算机系统中常见的一种机制,它可以使程序在特定条件下暂停当前执行的任务,并转而执行一个中断服务程序。

中断指令是汇编语言中用于触发中断的一种特殊指令,它可以将系统控制权转移给中断服务程序,并在服务程序执行完毕后再返回到原来的程序继续执行。

二、中断指令的使用方法在汇编语言中,中断指令的使用方法如下:1. 设置中断向量表中断向量表是一个存储中断服务程序入口地址的表格,在程序执行过程中,当中断发生时,CPU会根据中断号去中断向量表中查找对应的中断服务程序的入口地址并跳转至该地址开始执行。

程序员需要在编写程序时,事先设置好中断向量表。

2. 触发中断在程序中,通过使用中断指令来触发中断操作。

一般来说,中断指令会附带一个中断号作为参数,告诉系统要执行哪个中断服务程序。

触发中断指令后,CPU会保存当前的程序状态,并将控制权转移到指定的中断服务程序。

3. 中断服务程序的执行当中断发生并切换到中断服务程序时,程序员可以在中断服务程序中编写相应的处理代码,来处理特定的中断事件。

中断服务程序执行完毕后,CPU会将控制权再次转回到原来的程序继续执行。

三、中断指令的应用场景中断指令在实际的计算机应用中有广泛的应用场景,下面列举几个典型的应用场景:1. 硬件设备的驱动程序计算机系统中的硬件设备通常会产生各种中断事件,例如键盘输入、鼠标点击、网络数据接收等。

通过编写相应的中断服务程序,可以及时响应这些中断事件,从而实现对硬件设备的驱动和控制。

2. 异常处理在程序执行过程中,可能会出现各种异常情况,例如除零异常、越界访问异常等。

通过设置相应的中断服务程序,可以在发生异常时及时捕获并处理异常,防止程序崩溃或数据损坏。

11.子程序指令

11.子程序指令
子程序含中断子程序,是为一些特 定的控制要求编制的相对独立的程序。 为了和主程序区别,S7-200编程手册中 规定子程序与中断子程序分区排列在主 程序的后边,且当子程序或中断子程序 数量多于1时,分序列编号加以区别。
2012-3-27
6
子程序指令
主程序
I0.1
SBR-1 EN
Network 1 LD SM0.1
2012-3-27Байду номын сангаас
10
谢谢观看
2012-3-27 8
子程序指令
2.因为累加器可在调用程序和被调 用子程序之间自由传递数据,所以累加 器的值在子程序调用开始时不需要另外 保存,在子程序调用结束时也不用恢复。 3.允许子程序嵌套调用,嵌套深度 最多为8重。
2012-3-27
9
子程序指令
4.S7-200不禁止子程序递归调用(自 己调用自己),但使用时要慎重。 5.用软件编程时,编程人员不用手 工输入RET指令,而是由软件自动加在 RET 每个子程序的结束处。
CALL 1
………
子程序 Network 12 Network 12
………
LD M0.0
M0.0
RET
条件返回
CRET
………
2012-3-27 7
子程序指令
子程序调用过程的特点: 1.在子程序(n)调用过程中,CPU 把程序控制权交给子程序(n),系统将 当前逻辑堆栈的数据自动保存,并将栈 顶置1,堆栈中的其它数据置0。当子程 序执行结束后,通过返回指令自动恢复 原来逻辑堆栈的数据,把程序控制权重 新交给原调用程序。
子程序指令
2012-3-27
1
子程序指令
在计算机的结构化程序设计时,常常 采用子程序设计技术。在PLC的程序设 计中也不例外,对那些学要经常执行的 程序段,设计成子程序的形式,并为每 个子程序赋以不同的编号,在程序执行 的过程中,可随时调用某个编号的子程 序。

PLC梯形图的子程序指令和子程序调用指令

PLC梯形图的子程序指令和子程序调用指令

PLC 梯形图的子程序指令和子程序调用指令摘要: 子程序将大量的控制任务分离成许多小块的控制任务,并可以重复执行一组指令,当主程序调用一个子程序时,控制就转到子程序,执行子程序中的指令。

当子程序执行完后,再返回主程序继续执行。

有些子程序可以通过中断或...子程序将大量的控制任务分离成许多小块的控制任务,并可以重复执行一组指令,当主程序调用一个子程序时,控制就转到子程序,执行子程序中的指令。

当子程序执行完后,再返回主程序继续执行。

有些子程序可以通过中断或MCR0(99)指令启动。

中断同子程序调用类似,在主程序运行的流程中,中断引起主程序运行停顿,执行中断子程序,子程序执行完毕后,再返回中断点继续执行主程序,中断可以由外部中断源(如中断输入单元的输入信号)引起,也可以由内部的中断源(定时中断)引起。

INT(89)用于控制从中断输入单元接收到的中断信号和控制中断的安排,INT(89)提供中断屏蔽(记忆中断但不响应)和中断清除功能。

宏指令是一个独立的子程序,该子程序可以改变操作数,从而相当于多个结构相同但数据不同的子程序。

子程序调用指令梯形图符号如下所示。

操作数数据区域N:子程序编号00~255子程序编号00~15 与中断一起使用,子程序编号99 用于定时中断。

说明:在主程序中将SBS(91)指令放在要执行的子程序处,当主程序执行到此处,子程序就被执行。

SBS( 91)中的子程序编号是要调用的子程序编号。

当SBS(91)指令的执行条件为“ON”时,plc 执行和SBS(91)指令中编号N 相同的SBN(92)指令和RET(93)之间的子程序;当执行到RET(93)指令时,程序从子程序返回主程序。

SBS(91)在程序中可被多次调用,而且SBS( 91)也可以用作子程序中形成子程序嵌套,嵌套的级数没有限制。

使用中注意子程序的执行时间不能超过10ms,否则会出现错误。

第16节子程序、中断

第16节子程序、中断

子程序和中断程序在我们西门子PLC S7-200里面有2种程序系统程序和用户程序系统程序是无法改变的,只能拿出来用用户程序分为:主程序子程序中断程序主程序系统程序和用户程序之间的接口,是时刻受到扫描的程序子程序分为不带参数的子程序带参数的子程序子程序有条件返回Micro/WIN会自动增加要求使用的从子程序无条件返回指令,且不在程序编辑器的"子程序POU"标记显示的程序逻辑中显示。

所以在子程序中可以省略不写。

有时候需要有条件强制返回的话,可用此指令!西门子PLC S7-200中子程序范围为0~~~63,一共64个子程序子程序中的程序必须通过子程序调用指令才会被执行。

子程序嵌套最大为8层意思为在0号子程序里面,不包含0号子程序本身,可以调用另外7个子程序。

不带参数的子程序,不需要进行变量声明。

带参数的子程序,必须进行变量声明。

变量声明表变量类型IN:参数输入(输入)IN_OUT:参数地址中的数据输入子程序,经处理后又返回参数地址中。

(输入输出)OUT:参数输出(输出)TEMP:临时存储器(类似M区的中间继电器,但只有在子程序中才生效)数据类型BOOL:位INT:整数BYTE:字节DINT:双整数WORD:字REAL:实数DWORD:双字STRING:字符串如果想增加变量类型可以单击右键插入在变量声明表中所声明的地址,只有在调用该子程序时,才会将实际的局部地址分配给该程序,将该程序执行完后,所有的局部地址会被全部释放掉,为下一个程序做准备。

中断:就是终止当前正在运行的程序,去执行为立即响应的信号而编制的中断服务程序,执行完毕再返回原先终止的程序并继续执行。

中断源:是指发出中断请求的事件,又叫中断事件。

S7-200系列可编程控制器有34个中断源,分为三大类:通信中断、输入/输出(I/O)中断、时基中断(中断优先级由高到低)中断程序1 中断程序不受扫描周期影响2 中断程序在用户程序中拥有最高的执行权3 中断程序只执行一个扫描周期4 中断程序会保持中断返回前的状态5 正在执行的中断程序有最高的执行权6 中断程序范围为0~127,一共128个中断7 不受扫描周期影响的,只需定义一次(激活一次)注意:子程序和中断在执行到末尾时自动返回,不必加返回指令RET和RETI是有条件的返回,也是说可以控制在子程序或者中断没有执行到末尾,强制性的返回到主程序。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

PLC 职业技能培训及视频精讲——西门子S7-200系列
266
图2.10.23 TBL_FIND 查表指令应用例(续)
2.11 子程序和中断程序指令
子程序和中断程序指令包括如下7种:
SBR_0(SBR0);
-(RET);
ATCH ;
DTCH ;
-(ENI);
-(DISI);
-(RETI)。

在S7-200 PLC 中,有4种程序:OS 系统程序、OB1主程序、SBR 子程序和INT 中断程序。

OB1主程序、SBR 子程序和INT 中断程序也称为用户程序。

当CPU 工作在STOP 状态,只运行OS 系统程序。

当CPU 工作在RUN 状态时,既运行OS 系统程序,也运行OB1主程序;当满足调用SBR 程序状态时,会暂停现在执行的用户程序进入执行SBR 子程序,执行完SBR 子程序后,再返回原来的地方继续执行原来的程序;当声明允许开中断,有中断源产生,会暂停执行现在的用户程序(包含OB1主程序、SBR 子程序和级别较低的中断程序),进入声明与该中断源有联系的INT 中断程序,中断程序执行完毕自动返回到原来的地方继续执行原来的程序。

OB1是自动循环执行的程序,没有OB1主程序的程序是不可能完成用户程序任务的。

中断连接和中断分离指令的样式如图2.11.1和图2.11.2所示。


2章 PLC
快速提高
267
图2.11.1 中断连接指令
图2.11.2 中断分离指令
1.子程序
可以从OB1主程序、另一个子程序或中断程序调用子程序,但不能从子程序本身调用子程序。

S7-200 CPU 中总共有64个子程序(0~63)【CPU 226XM 有128个子程序(0~127)】。

在主程序中可以嵌套子程序(在子程序中调用另一个子程序),最大嵌套深度为8,但在中断程序中不能嵌套子程序。

在图2.11.3~图2.11.5的程序中,当I0.0和I0.1都没有上升沿时,执行用户的程序流程是:主程序网络1
→主程序网络2
→主程序网络3→主程序网络4→主程序网络1。

图2.11.3 子程序0 图2.11.4 子程序1 当I0.0接通上升沿时会调用子程序0,在I0.0接通上升沿扫描周期执行用户的程序流程是:主程序网络1→子程序0网络1→子程序0网络2→主程序网络2→主程序网络3→主程序网络4。

当I0.1接通上升沿时会调用子程序1,在I0.1接通上升沿扫描周期执行用户的程序流程是:主程序网络1→主程序网络2→主程序网络3→子程序1网络1→子程序1网络2→主程。

相关文档
最新文档