- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
项目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
您可能关注的文档
- 鞋带的N种系法(让你的鞋鞋在细节上胜出).doc
- 鞋带的个性系法(图解).doc
- 鞋带的十三种系法.doc
- 鞋带的十五种系法.docx
- 鞋带领带的N种系法.docx
- 鞋带的各种个性系法.doc
- 鞋柜组装图(简易).doc
- 韦恩2013复习.doc
- 韦文军自尊摧残的创业修炼.doc
- 音乐-彩灯控制器.doc
- 中国行业标准 GM/T 0126-2023HTML密码应用置标语法.pdf
- 《JJF 2121-2024恒转速源校准规范》.pdf
- 餐饮服务中20条处理要点.docx
- 《GM/T 0011-2023可信计算 可信密码支撑平台功能与接口规范》.pdf
- 《JJF 2134-2024旋转流变仪校准规范》.pdf
- JJF 2121-2024恒转速源校准规范.pdf
- 计量规程规范 JJF 2121-2024恒转速源校准规范.pdf
- 《JJF 2118-2024压力式六氟化硫气体密度控制器校验仪校准规范》.pdf
- JJF 2134-2024旋转流变仪校准规范.pdf
- 计量规程规范 JJF 2134-2024旋转流变仪校准规范.pdf
文档评论(0)