满足同样的需求,下面试着用循环指令编写梯级逻辑来实现。如图11-8所示的梯级逻辑,循环指令FOR的执行将调用初始化子例程Initialize,在FOR指令中设定初始量为0,终止量为19,步长为1,循环指令将连续调用20次才结束。
在初始化例程中编写的梯级逻辑如图11-9所示,一个梯级用FLL指令清除数组Array—Real1和Array_Dint1的元素,计数器数组Array_Counter元素ACC的清零在15次以后停止,计时器数组Array_Timer元素ACC的清零在20次以后完成,同时循环调用例程结束。
循环指令可以直接完成跳转指令往回跳转而实现的循环,它用调用子例程的起始量、终止量和步长来设定循环,灵活而机动。被操作的计时器数组和计数器数组的指针借用了循环的指针变化,无需额外编程修改指针和判定结束,因为这些工作循环指令都是自动完成的。
图11-8 循环调用初始化例程
图11-9 在初始化例程Initialize中编写的梯级逻辑
当没有达到设定的循环次数而需要中断操作,可以用运行在循环例程中的BRK指令来中断循环,BRK指令的梯级条件就是中断条件,当中断执行时,将退出循环操作。
现在,让我们回顾在第8章中关于日期时间的ASCII码处理,那样的操作执行只处理了一条日期时间记录,如果需要处理一批日期时间记录,就要借助于循环调用来实现了。如图11-10所示的梯级逻辑,编写在例程To_ASCII中,除了我们熟悉的数据处理过程,在最前面的一个梯级装入将要处理的日期时间,数组元素序号为间接寻址的循环偏移量Date-TimeIndex;在最后一个梯级将处理完毕的日期时间装入数组的单元,数组元素序号亦为间接寻址的循环偏移量DateTimeIndex。
(www.xing528.com)
图11-10 被调用的ASCⅡ码处理例程
图11-10 被调用的ASCⅡ码处理例程(续)
图11-10 被调用的ASCⅡ码处理例程(续)
图11-11 在主例程中编写循环指令调用TO_ASCⅡ
在主例程中编写循环调用指令,如图11-11所示,当梯级条件DateTime_To_ASCII成立,首先执行清除FOR指令偏移量DateTimeIndex,以便重新开始新的循环调用,然后FOR指令将调用To_ASCII子例程50次,完成日期时间数组50个元素的转换工作,ONS指令则确保指令只执行一次。FOR指令中的偏移量已作为被调用例程中数组的元素序号的指针。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。