发布于 2005-04-13 09:00:58
0楼
试着回一下:) 新建一个数据块
1:DBB0—DBB34(我现在改成用字节存储了,呵呵)内存放了这35个灯泡执行的顺序; 在数据块中建立一个二维数组DATA:ARRAY[0..34][0..CONST] OF WORD,其中CONST为可定义的常量,代表在一个循环内这35个灯泡之中的一个可能被点亮次数的最大值,这里我假设CONST=2,即在一个循环中灯泡最多可能被点亮3次。DATA[0][0]表示一号灯泡在一个循环中第一次被点亮的时间,DATA[0][1]表示一号灯泡第二次被点亮的时间,DATA[0][2]表示一号灯泡第三次被点亮的时间;若DATA[0][0]为零则表示一号灯泡在该次循环中不会被点亮,其他灯泡的数据依次类推。接下来也还是用间接寻址的方式,先读出要被点亮的灯泡号码,再从二维数组读出它要被点亮的时间,直到DATA[X][Y]为零则表示该X号灯泡已经执行完毕。
2:利用JL和JU指令配合. 每一次读出当前要执行的事件的编号,再调用.假设这35个事件用FC1--FC35来表示,则
装载当前要执行事件的编号
JL C35
JU C1
JU C2
........
JU C34
C1: CALL FC1
JU END
C2: CALL FC2
JU END
...........
C35: CALL FC35
END: NOP 0
3:可以利用分时调用(相当于一个分频器),这里我假设分二次调用. 新建两个FC:FC40,FC41. 然后把FC1---FC17放在FC40中调用,FC17--FC35放在FC41中调用. 接下来在OB1中有
AN M0.0
= M0.0
A M0.0
CC FC40
AN M0.0
CC FC41
当然如果这样觉得扫描周期还长的话,则可以用四分频,八分频,甚至更多.
我的思路就是这些,当然这还只是纸上谈兵而已,要想完全写出一个完善的程序出来还是得花些功夫的,请同行门指正,谢谢!
I can do it