1.移位指令概述
移位指令将累加器1的低字或累加器1的全部内容左移或右移若干位(见表3-12)。
无符号数(字或双字)移位后空出来的位填以0,有符号数(整数或双整数)右移后空出来的位填以符号位对应的二进制数,正数的符号位为0,负数的符号位为1。最后移出的位被装入状态字的CC1位。
表3-12 移位指令
2.有符号数右移指令
图3-83中的SHR_I指令将有符号16位整数右移4位。打开PLCSIM,将程序下载到仿真PLC,将仿真PLC切换到RUN-P模式。在PLCSIM中将-8000输入MW40,在变量表中设置MW40和MW42的显示格式为BIN(二进制),可以看到右移4位的效果(见图3-84)。右移4位相当于除以24,移位后的数为-500。右移后空出来的位用符号位1填充。
令MW38分别为0和20(移位位数大于16),观察移位的结果。移位位数大于16时,原有的数据被全部移出去了,MW42的各位均为符号位1,其值为16#FFFF。
图3-83 有符号数右移指令
图3-84 变量表
下面是用STEP 7转换图3-83中的程序得到的语句表程序。
3.无符号数移位指令
图3-85是无符号字左移4位的移位指令,在PLCSIM中将50输入MW44。在变量表中设置MW44和MW46的显示格式为BIN(二进制),可以看到左移4位的效果(见图3-86)。左移4位相当于乘以24,移位后的数为800,左移后空出来的位添0。
将移位次数分别修改为2、8和16,观察移位的结果。(www.xing528.com)
将图3-85中的OUT的实参MW46改为MW44,观察程序运行的结果并解释原因。在I0.4的触点右边添加一个上升沿检测线圈,用I0.4的上升沿启动移位,观察程序运行的结果。
图3-85 无符号数左移指令
图3-86 变量表
4.循环移位指令
循环移位指令(见图3-87)将累加器1的整个内容逐位循环左移或循环右移若干位(见表3-13),即移出来的位又送回累加器1另一端空出来的位,最后移出的位装入状态字的CC1位。N为移位的位数,移位的结果保存在输出参数OUT指定的地址。
表3-13 循环移位指令
在PLCSIM中输入MD50和MW48的十六进制数值,在变量表中设置MD50和MD54的显示格式为BIN(二进制),图3-87和图3-88给出了双字循环左移8位的例子。
图3-87 循环左移指令
图3-88 变量表
将移位次数分别修改为0、4、16和20,观察移位的结果。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。