- 7
- 0
- 约9.31千字
- 约 7页
- 2016-10-06 发布于贵州
- 举报
项目22-子程和局部变量表(2011-7-16)
项目22 子程序指令和局部表变量表
1.子程序调用指令(CALL)
子程序调用指令(CALL)将程序控制权交给子程序SBR_N。调用子程序时可以带参数也可以不带参数。子程序执行完成后,控制权返回到调用子程序的指令的下一条指令。子程序条件返回指令(CRET)根据它前面的逻辑决定是否终止子程序。要添加一个子程序可以在命令菜单中选择:Edit Insert Subroutine。
在主程序中,可以嵌套调用子程序(在子程序中调用子程序),最多嵌套8层。在中断服务程序中,不能嵌套调用子程序。在被中断服务程序调用的子程序中不能再出现子程序调用。不禁止递归调用(子程序调用自己),但是当使用带子程序的递归调用时应慎重。
图1:子程序指令的有效操作数
1 必须偏移1个或1个以上的单位
2 必须偏移30个或30个以上的单位
提示:STEP 7--Micro/WIN为每个子程序自动加入返回指令。
当有一个子程序被调用时,系统会保存当前的逻辑堆栈,置栈顶值为1,堆栈的其他值为零,把控制交给被调用的子程序。当子程序完成之后,恢复逻辑堆栈,把控制权交还给调用程序。因为累加器可在主程序和子程序之间自由传递,所以在子程序调用时,累加器的值既不保存也不恢复。
当子程序在同一个周期内被多次调用时,不能使用上升沿、下降沿、定时器和计数器指令。
2.带参数调用子程序
子程序可以包含要传递的参数。参数在子程序的局部变量表中定义。参数必须有变量名(最多23个字符)、变量类型和数据类型。一个子程序最多可以传递16个参数。
局部变量表中的变量类型区定义变量是传入子程序(IN)、传入和传出子程序(IN_OUT)或者传出子程序(OUT)。表6-79中描述了一个子程序中的参数类型。要加入一个参数,把光标放到要加入的变量类型区(IN、IN_OUT、OUT)。点击鼠标右键可以得到一个菜单选择。选择插入选项,然后选择下一行选项。这样就出现了另一个所选类型的参数项。
图2:子程序的参数类型
如图2中所示,局部变量表中的数据类型区定义了参数的大小和格式。参数类型如下所示:
1.布尔:该数据类型用于单独位的输入和输出。下例中的IN3是布尔输入。
2.字节、字和双字:这些数据类型分别指明一个1、2或者4个字节的无符号输入或输出参数。
3.整数、双整数:这些数据类型分别指明1、2或者4个字节的有符号输入或输出参数。
4.实数:该数据类型指明一个(4字节)IEEE浮点值。
5.STRING:该数据类型用作一个指向字符串的四字节指针。
6.能流:布尔能流仅允许对位输入操作。该变量声明告诉STEP 7--Micro/WIN 32此输入参数是位逻辑指令组合的能流结果。在局部变量表中布尔能流输入必须出现在其它类型的前面。只有输入参数可以这样使用。下例中的使能输入(EN)和IN1输入使用布尔逻辑。
图3:子程序调用示例
地址参数(如IN4处的VB100)以一个双字(无符号)的值传送到子程序。在带常数调用程序时必须指明常数类型。例如,把值为12345的无符号双字作为参数进行传递,常数参数必须用DW#12345指明。如果参数中缺少了常数描述符,常数可能被当作不同的类型。输入或输出参数上没有自动数据类型转换功能。例如,如果局部变量表明一个参数具有实型,而在调用时使用一个双字,子程序中的值就是双字。
当给子程序传递值时,它们放在子程序的局部存储器中。局部变量表的最左列是每个被传递参数的局部存储器地址。当子程序调用时,输入参数值被拷贝到子程序的局部存储器。当子程序完成时,从局部存储器区拷贝输出参数值到指定的输出参数地址。数据单元的大小和类型用参数的代码表示。在子程序中局部存储器的参数值的分配如下所示:
1.按照子程序指令的调用顺序,参数值分别给局部存储器,起始地址是L0。
2.1到8连续位参数值分配一个字节,从Lx.0到Lx.7。
3.字节、字和双字值按照所需字节分配在局部存储器中(LBx、LWx或LDx)。
在带参数调用子程序指令中,参数必须按照一定顺序排列,输入参数在最前面,其次是输入/输出参数,然后是输出参数。
如果用语句表编程,CALL指令的格式是:CALL子程序号,参数1,参数2,…,参数
图4:子程序和子程序返回指令
图5:带字符串的子程序调用
举例1:
设计求圆周长得子程序,输入量为直径(小于32768的整数),输出量为圆周长(双字整数)。在I0.0 的上升沿调用该子程序,直径为10000mm,运算结果存放在VD10中,设计出程序。
主程序:
子程序:
举例2:
设计求V存储区连续的若干个字的累加和的子程序,在主程序中调用它,在I0.0的上升沿,求VW100开始的10个数据字的和,并将运算结果存放在VD10
您可能关注的文档
- 青岛版小学六年科学上册全套教案.doc
- 青岛版20132014八年级下册数学第一次段考试题.doc
- 青岛版七年级上末检测题.doc
- 青岛赛德公司淘网平台营销方案分析与设计.doc
- 青岛长城外语培学校简介.docx
- 青年人跳槽有利个人职业发展相关资料.doc
- 青年创业指南第3章-确立品牌的计划.doc
- 青年创业指南第章-一个成功的企业要满足消费者需求.doc
- 青年创新项目申书(七一三研究所).doc
- 青年旅行舍 市分析.doc
- 《GB/T 21561.1-2025轨道交通 机车车辆 受电弓特性和试验 第1部分:机车车辆受电弓》.pdf
- 《GB/T 6346.2301-2025电子设备用固定电容器 第23-1部分:空白详细规范表面安装金属化聚萘二甲酸乙二醇酯膜介质直流固定电容器 评定水平EZ》.pdf
- 2026年中国城市建设史复习题200道含答案(基础题).docx
- 2026年注册会计师(CPA)考试题库200道及1套参考答案.docx
- 60103交通事故案卷文书 标准 ga 40-2018.pdf.pdf
- 小升初衔接第一讲:基础词汇与句型综合梳理与运用(基于Starters 14).docx
- 四级公路设计关键要素教学课件.pptx
- Unit7SectionA2a-2e课件鲁教版英语六年级下册.pptx
- 初中地理八年级:探秘台湾省环境与经济协同发展.docx
- Unit2Success单元重点单词单句写作练习课件-北师大版高中英语选择性(1).pptx
最近下载
- 建筑工程图集 新12J06楼梯.pdf VIP
- 新高考数学二轮复习导数培优专题14 利用导数研究函数零点问题(含解析).doc VIP
- 新高考数学一轮复习考点过关练习 利用导数解决函数单调性的应用问题(含解析).doc VIP
- 驯养篮球犬(最新整理版).docx VIP
- 巴黎铁塔埃菲尔竹签DIY制作全过程.docx VIP
- NB 35074-2015 水电工程劳动安全与工业卫生设计规范.docx VIP
- 通用欠条模板(个人现金借款版).pdf
- 2025年中考数学真题《因式分解》专项汇编含答案.pdf VIP
- APS-737-23-001B737NG更换ISFD.docx VIP
- 人工流产护理试题及答案.docx VIP
原创力文档

文档评论(0)