首页 理论教育 移位与循环移位指令的应用与优化

移位与循环移位指令的应用与优化

时间:2023-06-30 理论教育 版权反馈
【摘要】:N为移位的位数,移位的结果保存在输出参数OUT指定的地址。表3-3是QB0循环移位前后的数据。因为QB0循环移位后的值又送回QB0,循环移位指令的前面必须使用P_TRIG指令,否则每个扫描循环周期都要执行一次循环移位指令,而不是每秒钟移位一次。

移位与循环移位指令的应用与优化

1.移位指令

“右移”指令SHR和“左移”指令SHL将输入参数IN指定的存储单元的整个内容逐位右移或左移若干位,移位的位数用输入参数N来定义,移位的结果保存在输出参数OUT指定的地址中。

无符号数移位和有符号数左移后空出来的位用0填充。有符号整数右移后空出来的位用符号位(原来的最高位)填充,正数的符号位为0,负数的符号位为1。

移位位数N为0时不会移位,但是IN指定的输入值被复制给OUT指定的地址。

将指令列表中的移位指令拖放到梯形图后,单击方框内指令名称下面的问号,用下拉式列表设置变量的数据类型。

如果移位后的数据要送回原地址,应将图3-49中I0.5的常开触点改为I0.5的扫描操作数信号上升沿指令(P触点),否则在I0.5为1状态的每个扫描周期都要移位一次。

右移n位相当于除以2n,将十进制数-200对应的二进制数2#1111 1111 0011 1000右移2位(见图3-49和图3-50),相当于除以4,右移后的数为-50。

978-7-111-58719-4-Chapter03-71.jpg

图3-49 移位指令

978-7-111-58719-4-Chapter03-72.jpg

图3-50 数据的右移

左移n位相当于乘以2n,将16#20左移2位,相当于乘以4,左移后得到的十六进制数为16#80(见图3-49)。(www.xing528.com)

2.循环移位指令

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

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

在图3-51的8位循环移位彩灯控制程序中,QB0是否移位用I0.6来控制,移位的方向用I0.7来控制。为了获得移位用的时钟脉冲和首次扫描脉冲,在组态CPU的属性时,设置系统存储器字节和时钟存储器字节的地址分别为默认的MB1和MB0(见图1-28),时钟存储器位M0.5的频率为1Hz。PLC首次扫描时M1.0的常开触点接通,MOVE指令给QB0(Q0.0~Q0.7)置初始值7,其低3位被置为1。

978-7-111-58719-4-Chapter03-73.jpg

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

输入、下载和运行彩灯控制程序,通过观察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位。表3-3是QB0循环移位前后的数据。因为QB0循环移位后的值又送回QB0,循环移位指令的前面必须使用P_TRIG指令,否则每个扫描循环周期都要执行一次循环移位指令,而不是每秒钟移位一次。

3-3 QB0循环移位前后的数据

978-7-111-58719-4-Chapter03-74.jpg

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

我要反馈