发布于 2013-08-07 15:02:54
7楼
楼主似乎是学计算机出身,对循环的理解基本是高级语言的形式。
CASE ,FOR,GOTO等SCL语句与LOOP这样的STL是有区别的。
一定要类比的话,LOOP更接近与FOR吧。
楼主先仔细的读一下LOOP指令的说明吧:
使用循环控制指令(累加器 1 低字中的值减“1 ”,当累加器 1 低字中的值不等于“0 ”时跳转),可以简化循环控制编程。
从本质上说,LOOP就是一个条件跳转指令,FOR何尝不是呢?
只不过高级语言里FOR语句在循环体前,条件判断是在进入前判断了,执行完回到FOR语句;而STL的LOOP必须在循环体后,判断是否跳转到循环体前。
楼主纠结的所谓“1个扫描周期”还是“100个扫描周期的问题”,其实就是看是否跳转回循环体前。
不往回跳转就要靠ob1来循环,那就是100个周期;往回跳转就能在1个周期内完成。
举个简单的例子:一个200步的程序,第50步到100步是循环体。
1、在50步的地方做判断是否执行循环体,不考虑往回跳的。这样的情况下执行就是1-200步。200步做完,一个扫描周期结束,要从头开始就要靠OB1自循环了,这样要循环100次就要100个扫描周期。
2、在100步的地方判断是否跳回50步,那么执行就是1-00步,然后N次50-100步,最后100-200步,这样在扫描到200步时,一个周期内已经执行了N次循环了。
P.S.
0侠给出的程序确实是有误的,LOOP指令本身带自减功能,只要将循环数放进累加器1就能循环了。
用LOOP在循环体内再去自加,结果要么是不执行循环,要么就是死循环。
0侠的例子里使用JC就能实现循环,不能用LOOP。
用LOOP的话,这样就能循环100次了,是不是像手册上说的,可以简化编程呢?
L 100
A00:T MW100
CALL FC1
L MW100
LOOP A00