项目22-子程序和局部变量表(2011-7-16).docVIP

项目22-子程序和局部变量表(2011-7-16).doc

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 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

文档评论(0)

peain + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档