首页 理论教育 移位指令与循环移位指令的仿真实验

移位指令与循环移位指令的仿真实验

时间:2023-07-01 理论教育 版权反馈
【摘要】:图4-29 循环右移图4-30 循环左移2.带进位的循环移位指令带进位的循环右移指令和带进位的循环左移指令的指令助记符分别为RCR和RCL。它们的目标操作数和移位位数n的取值范围与循环移位指令相同。图4-31右边的程序每秒将M10~M25组成的字左循环移动一位,用SET指令和RST指令将M18的二进制数传送到最低位M10,实现了8位循环移位。图4-34 位右移指令图4-35 位左移指令8.位移位指令的仿真实验打开GX Simulator,启动软元件监视视图,生成X窗口。

移位指令与循环移位指令的仿真实验

1.循环移位指令

循环右移指令ROR(FNC 30)和循环左移指令ROL(FNC 31)只有目标操作数

执行这两条指令时,各位的数据向右或向左循环移动n位(n为常数),16位指令和32位指令的n应分别小于等于16和32,每次移出来的那一位同时存入进位标志M8022(见图4-29和图4-30)。若在目标软元件中指定位软元件组的组数,只有K4(16位指令)和K8(32位指令)有效,例如K4Y10和K8M0。

978-7-111-40437-8-Chapter04-38.jpg

图4-29 循环右移

978-7-111-40437-8-Chapter04-39.jpg

图4-30 循环左移

2.带进位的循环移位指令

带进位的循环右移指令和带进位的循环左移指令的指令助记符分别为RCR(FNC 32)和RCL(FNC 33)。它们的目标操作数和移位位数n的取值范围与循环移位指令相同。

执行这两条指令时,各位的数据与进位位M8022一起(16位指令时一共17位)向右或向左)循环移动n位。在循环中移出的位送入进位标志M8022,后者又被送回到目标操作数的另一端。这两条指令很少使用。

3.16位彩灯循环移位控制程序

图4-31的左边是循环右移的16位彩灯控制程序,移位的时间间隔为1s(见随书光盘中的例程“移位指令”),首次扫描时M8002的常开触点闭合,用第2条MOV指令将彩灯的十六进制初始值HF0送给Y20~Y37,即点亮Y24~Y27对应的彩灯。

T0的常闭触点和它的线圈组成周期为1s的脉冲发生器,T0的常开触点每隔一秒接通一个扫描周期,ROR指令使16位彩灯每秒右移一位。

978-7-111-40437-8-Chapter04-40.jpg

图4-31 彩灯循环移位程序

4.8位彩灯循环移位控制程序

FX系列只有16位或32位的循环移位指令,要求用Y0~Y7来控制8位彩灯的循环左移,即从Y7移出的位要移入Y0。为了不影响未参加移位的Y10~Y17的正常运行,不能直接对Y0~Y17组成的K4Y0移位,而是对16位辅助继电器M10~M25移位。

实现8位辅助继电器M10~M17循环左移的关键是将从M17移到M18的二进制数传送到最低位M10(见图4-32)。

978-7-111-40437-8-Chapter04-41.jpg

图4-32 8位循环左移

首次扫描时M8002的常开触点闭合,图4-31左边第一条MOV指令使M11~M13变为ON,点亮连续的3个灯。图4-31右边的程序每秒将M10~M25组成的字左循环移动一位,用SET指令和RST指令将M18的二进制数传送到最低位M10,实现了8位循环移位。最后用MOV指令将M10~M17(K2M10)的值传送给Y0~Y7(K2Y0)。

5.彩灯控制程序的仿真实验

将程序下载到仿真PLC,打开软元件批量监视视图(见图4-33),设置从Y0开始监视,监视形式为“位&字”。单击“监视开始”按钮,可以看到3个连续的1在8位彩灯Y0~Y7中循环左移,4个连续的1在16位彩灯Y20~Y37中循环右移。也可以用“多点位”方式在一行中监视32位(Y0~Y37)。

978-7-111-40437-8-Chapter04-42.jpg

图4-33 软元件批量监视

6.编程练习

按下面各项的要求分别修改程序后,下载到仿真PLC,用软元件批量监视视图检查是否实现了要求的功能。

1)修改16位彩灯控制程序,开机时(M8002为ON)用X0~X17对应的小开关给Y0~Y17置初值。下载到仿真PLC后观察彩灯的初值是否与设定值相符。

改变初值设定开关X0~X17的状态,令PLC进入STOP模式,过一会再回到RUN模式,观察移位寄存器的初值是否符合新的设定值。初值不能设置为全0或全1。

2)用X0~X17改变彩灯的初值,在X21的上升沿用MOV指令将X0~X17的状态读入Y0~Y17,检查修改后的程序是否能达到预期的效果。

3)改变T0的设定值,观察移位的速度是否变化。

4)用X20的常开触点和常闭触点改变彩灯的移位方向。X20为ON时彩灯右移,为OFF时用左循环移位指令ROL使彩灯左移。检查修改后的程序是否能达到预期的效果。

5)根据8位彩灯循环移位的思路,编写和调试12位彩灯循环右移程序。

7.位移位指令

位右移指令SFTR(FNC 34)与位左移指令SFTL(FNC 35)使位软元件中的状态成组地向右或向左移动,用n1指定位软元件组的长度,n2指定移动的位数,常数n2≤n1≤1024。

源操作数可以取X、Y、M和S,目标操作数可以取Y、M和S,只有16位运算。(www.xing528.com)

图4-34下面圆括号中的数字是移位的先后顺序。图中的X0由OFF变为ON时,位右移指令(3位1组)按以下顺序移位:M2~M0中的数被移出,M5~M3→M2~M0,M8~M6→M5~M3,X3~X1→M8~M6。

图4-35中的X4由OFF变为ON时,位左移指令按图中所示的顺序移位。

978-7-111-40437-8-Chapter04-43.jpg

图4-34 位右移指令

978-7-111-40437-8-Chapter04-44.jpg

图4-35 位左移指令

8.位移位指令的仿真实验

打开GX Simulator,启动软元件监视视图,生成X窗口。将程序下载到仿真PLC,打开软元件批量监视视图(见图4-36),设置从M0开始监视,监视形式为“位&字”。在X窗口中先后设置X3、X2、X1为二进制数001、110和100,每次设置后两次双击X0,在它由OFF变为ON的上升沿,使M8~M0以3位为一组右移。移位后将X3~X1的值传送到M8~M6。图4-36是执行3次位右移指令后,M8~M0的值。

978-7-111-40437-8-Chapter04-45.jpg

图4-36 位右移指令的移位结果

读者可以用类似的方法测试位左移指令SFTL的功能。

9.字移位指令

字右移指令WSFR(FNC 36)和字左移指令WSFL(FNC 37)以字为单位,将n1个字成组地右移或左移n2个字(n2≤n1≤512)。这两条指令用得较少,只有16位运算。

图4-37和图4-38分别给出了字右移指令和字左移指令移位的顺序。

978-7-111-40437-8-Chapter04-46.jpg

图4-37 字右移指令

978-7-111-40437-8-Chapter04-47.jpg

图4-38 字左移指令

10.移位寄存器写入与读出指令

移位寄存器又称为FIFO(First in First out,先入先出)堆栈,先写入堆栈的数据先读出。堆栈的长度为2~512个字。

移位寄存器写入指令SFWR(FNC 38)只有16位运算,2≤n≤512。

图4-39中的目标软元件D1是FIFO堆栈的首地址,也是堆栈的指针,移位寄存器未装入数据时应将D1清零。在X10由OFF变为ON时,移位写入指令SFWR将指针的值加1后写入数据。第一次写入时,源操作数D0中的数据写入D2。如果X10再次由OFF变为ON,则D1中的数变为2,D0中新的数据写入D3。依此类推,源操作数D0中的数据依次写入堆栈。D1中的数等于n–1(n为堆栈的长度)时,堆栈写满,不再执行写入操作,且进位标志M8022变为ON。

移位寄存器读出指令SFRD(FNC 39)只有16位运算,2≤n≤512。图4-40中的X11由OFF变为ON时,SFRD指令将D2中的数据送到目标操作数D20,同时指针D1的值减1,D3到D9中的数据向右移一个字。数据总是从D2读出,指针D1为0时,FIFO堆栈被读空,不再执行上述处理,零标志M8020为ON。

978-7-111-40437-8-Chapter04-48.jpg

图4-39 移位寄存器写入指令

978-7-111-40437-8-Chapter04-49.jpg

图4-40 移位寄存器读出指令

下面的例程用移位寄存器写入、读出指令实现先入库的产品先出库。

LDP X14 //在入库按钮X14的上升沿

MOV K4X20 D256 //来自X20~X37的4位BCD码产品编号送到D256

SFWR D256 D257 K100 //D257作为指针,D258~D356存放99件产品的编号

LDP X15 //在出库按钮X15的上升沿

SFRD D257 D400 K100 //先进入的产品的编号送入D400

MOV D400 K4Y0 //取出的产品的4位BCD码编号送Y0~Y17显示

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈