2.6 移位与循环指令
移位与循环指令主要有三大类,分别为移位指令、循环移位指令和移位寄存器指令。其中前两类根据移位数据长度的不同,可分为字节型、字型和双字型三种。
移位与循环指令在程序中可方便地实现某些运算,也可以用于取出数据中的有效位数字。移位寄存器指令多用于顺序控制程序的编制。
2.6.1 移位指令
(1)工作原理
移位指令分为两种,分别为左移位指令和右移位指令。该指令是指在满足使能条件的情况下,将IN中的数据向左或向右移N位后,把结果送到OUT的指定地址。移位指令对移出位自动补0,如果移动位数N大于允许值(字节操作为8,字操作为16,双字操作为32)时,实际移动的位数为最大允许值。移位数据存储单元的移位端与溢出位SM1.1相连,若移位次数大于0时,最后移出位的数值将保存在溢出位SM1.1中;若移位结果为0,零标志位SM1.0将被置1,具体情况如图2-68所示。
图2-68 移位指令工作原理
(2)指令格式
移位指令的指令格式,如表2-21所示。
表2-21 移位指令的指令格式
(3)应用举例
小车自动往返控制。
① 控制要求 设小车初始状态停止在最左端,当按下启动按钮时小车按图2-69所示的轨迹运动;当再次按下启动按钮时,小车又开始了新的一轮运动。
图2-69 小车运动的示意图
② 程序设计 小车自动往返控制顺序功能图与梯形图如图2-70所示。
图2-70 小车自动往返控制顺序功能图与梯形图
a.绘制顺序功能图。
b.将顺序功能图转化为梯形图。
2.6.2 循环移位指令
(1)工作原理
循环移位指令分为两种,分别为循环左移位指令和循环右移位指令。该指令是指在满足使能条件的情况下,将IN中的数据向左或向右移N位后,把结果输出到OUT得指定地址。循环移位是一个环形,即被移出来的位将返回另一端空出的位置。若移动的位数N大于允许值(字节操作为8,字操作为16,双字操作为32)时,执行循环移位之前先对N进行取模操作,例如字节移位,将N除以8后取余数,从而得到一个有效的移位次数。取模的结果对于字节操作是0~7,对于字操作是0~15,对于双字操作是0~31,若取模操作为0,则不能进行循环移位操作。
若执行循环移位操作,移位的最后一位的数值存放在溢出位SM1.1中;若实际移位次数为0,零标志位SM1.0被置1;字节操作是无符号的,对于有符号的双字移位时,符号位也被移位,具体如图2-71所示。
图2-71 移位循环指令工作原理
(2)指令格式
位移循环指令的指令格式如表2-22所示。
表2-22 移位循环指令的指令格式
(3)应用举例
彩灯移位循环控制。
① 控制要求 按下启动按钮I0.0且选择开关处于1位置(I0.2常闭处于闭合状态),小灯左移循环;搬动选择开关处于2位置(I0.2常开处于闭合状态),小灯右移循环,试设计程序。
② 程序设计 彩灯移位循环控制程序如图2-72所示。
图2-72 彩灯移位循环控制程序
2.6.3 移位寄存器指令
移位寄存器指令是移位长度和移位方向可调的移位指令。在顺序控制、物流及数据流控制等场合应用广泛。
(1)指令格式
移位寄存器指令格式如图2-73所示。
图2-73 移位寄存器指令格式
(2)工作过程
当使能输入端EN有效时,位数据DATA实现装入移位寄存器的最低位S_BIT,此后每当有1个脉冲输入使能端时,移位寄存器都会移动1位。需要说明移位长度和方向与N有关,移位长度范围为1~64;移位方向取决于N的符号,当N>0时,移位方向向左,输入数据DATA移入移位寄存器的最低位S_BIT,并移出移位寄存器的最高位;当N<0时,移位方向向右,输入数据移入移位寄存器的最高位,并移出最低位S_BIT,移出的数据被放置在溢出位SM1.1中,具体如图2-74所示。
图2-74 移位寄存器指令工作过程
(3)应用举例
喷泉控制。
重点提示
移位寄存器中的N是移位总的长度,即一共移动了多少位;左右移位(循环)指令中的N是每次移位的长度。
① 控制要求 某喷泉由L1~L10十根水柱构成,喷泉水柱布局及喷水花样如图2-75所示。按下启动按钮,喷泉按图2-75所示花样喷水;按下停止按钮,喷水全部停止。
图2-75 喷泉水柱布局及喷水花样
② 程序设计
a.I/O分配 喷泉控制I/O分配如表2-23所示。
表2-23 喷泉控制I/O分配表
b.梯形图 喷泉控制程序如图2-76所示。
图2-76 喷泉控制程序
重点提示
① 将输入数据DATA置1,可以采用启保停电路置1,也可采用传送指令。
② 构造脉冲发生器,用脉冲控制移位寄存器的移位。
③ 通过输出的第一位确定S_BIT,有时还可能需要中间编程元件。
④ 通过输出个数确定移位长度。