首页 理论教育 移位与循环移位指令:原理与应用

移位与循环移位指令:原理与应用

时间:2023-06-21 理论教育 版权反馈
【摘要】:移位位数N可以大于被移位存储单元的位数,执行指令后,ENO总是为1状态。图4-52 使用循环移位指令的彩灯控制器3.使用循环移位指令的彩灯控制器在图4-52的8位循环移位彩灯控制程序中,QB0是否移位用I0.6来控制,移位的方向用I0.7来控制。如果I0.7为0状态,执行一次ROL指令,QB0的值循环左移1位。表4-4是QB0循环移位前后的数据。

移位与循环移位指令:原理与应用

1.移位指令

移位指令SHR和SHL将输入参数IN指定的存储单元的整个內容逐位右移或左移若干位,移位的位数用输入参数N来定义,移位的结果保存在输出参数OUT指定的地址。无符号数移位和有符号数左移后空出来的位用0填充。有符号数右移后空出来的位用符号位(原来的最高位)填充,正数的符号位为0,负数的符号位为1。

移位位数N为0时不会移位,但是IN指定的输入值被复制给OUT指定的地址。如果N大于被移位存储单元的位数,所有原来的位都被移出后,全部被0或符号位取代。移位操作的ENO总是为1状态。将指令列表中的移位指令拖放到梯形图后,单击方框内指令名称下面的问号,用下拉式列表设置变量的数据类型。如果移位后的数据要送回原地址,应将图4-50中I0.5的常开触点改为I0.5的上升沿检测触点(P触点),否则在I0.5为1的每个扫描周期都要移位一次。

978-7-111-47789-1-Chapter04-55.jpg

图4-50 移位与循环指令

978-7-111-47789-1-Chapter04-56.jpg

图4-51 数据的左移

右移N位相当于除以2N,例如将十进制数-200对应的二进制数2#1111111100111000右移2位(见图4-50和图4-51),相当于除以4,右移后得到的二进制数2#111111111 1001110对应于十进制数-50。左移N位相当于乘以2N,例如将16#20左移2位,相当于乘以4,左移后得到的十六进制数为16#80。

2.循环移位指令

循环移位指令ROR和ROL将输入参数IN指定的存储单元的整个内容逐位循环右移或循环左移若干位,即移出来的位又送回存储单元另一端空出来的位,原始的位不会丢失。N为移位的位数,移位的结果保存在输出参数OUT指定的地址。N为0时不会移位,但是IN指定的输入值复制给OUT指定的地址。移位位数N可以大于被移位存储单元的位数,执行指令后,ENO总是为1状态。(www.xing528.com)

978-7-111-47789-1-Chapter04-57.jpg

图4-52 使用循环移位指令的彩灯控制器

3.使用循环移位指令的彩灯控制器

在图4-52的8位循环移位彩灯控制程序中,QB0是否移位用I0.6来控制,移位的方向用I0.7来控制。为了获得移位用的时钟脉冲和首次扫描脉冲,在组态CPU的属性时,设置系统存储器字节地址和时钟脉冲地址分别是默认的MB1和MB0,如3-23所示,时钟脉冲位M0.5的频率为1Hz。

PLC首次扫描时M1.0的常开触点接通,MOVE指令给QB0(Q0.0~Q0.7)置初值7,其低3位被置为1。输入、下载和运行彩灯控制程序,通过观察CPU模块上与Q0.0~Q0.7对应的LED(发光二极管),观察彩灯的运行效果。I0.6为1状态时,在时钟脉冲位M0.5的上升沿,指令P_TRIG输出一个扫描周期的脉冲。

如果此时I0.7为1状态,执行一次ROR指令,QB0的值循环右移1位。如果I0.7为0状态,执行一次ROL指令,QB0的值循环左移1位。表4-4是QB0循环移位前后的数据。因为QB0循环移位后的值又送回QB0,循环移位指令的前面必须使用P_TRIG指令,否则每个扫描循环周期都要执行一次循环移位指令,而不是每秒钟移位一次。

表4-4 QB0循环移位前后的数据

978-7-111-47789-1-Chapter04-58.jpg

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

我要反馈