首先解释一下SFTL命令。
SFTL X1 M10 K2 K1
X1是输入信号,M10是存储信号的diyi位,K2是指存储信号区域的大小,这里K2代表2个位,也就是M10,M11,Z后的K1代表每次移动的位数。
当X0按下时,X1的状态送入M10,当X0再次按下时,X1的状态送入M10,原先M10的状态送入M11。
再来看看M20那段,于是一样的道理,只不过因为是K3,所以存储区域是M20,M21,M22组成。后面的M30那段也类似。
现在讲讲工作过程:(假设X1在X0diyi次按下前为On,其余时间段为Off。)
X0diyi次按下,X1的状态送入M10,M20,M30,由于M10被触发,所以Y1输出了。
X0第二次按下,X1的状态再次分别送入M10,M20,M30,原先上述寄存器的数据被分别送入M11,M21,M31,那么M11,M21,M31都为On,但是只有Y2输出了。
同理,第三次按下后,M11,M21,M31的数据分别丢弃,M22,M32,Y3输出了。
如果画个二进制图,会很容易理解
diyi次
M10,M11 : 1 0
M20,M21,M22: 1 0 0
M30,M31,M32,M33: 1 0 0 0
第二次
M10,M11 : 0 1
M20,M21,M22: 0 1 0
M30,M31,M32,M33: 0 1 0 0
第三次
M10,M11 : 0 0
M20,M21,M22: 0 0 1
M30,M31,M32,M33: 0 0 1 0
第四次
M10,M11 : 0 0
M20,M21,M22: 0 0 0
M30,M31,M32,M33: 0 0 0 1
第五次
M10,M11 : 0 0
M20,M21,M22: 0 0 0
M30,M31,M32,M33: 0 0 0 0
因此,这个程序能够正常完成旋转工作台的前提是:X1只能在X10diyi次按下前为On,且5次后能够再次为On,如果不是这种情况,将出现运行时的混乱。