理论教育 循环移位指令详解

循环移位指令详解

时间:2023-07-02 理论教育 版权反馈
【摘要】:循环移位将移位数据存储单元的首尾相连,同时又与溢出标志SM1.1连接,SM1.1用来存放被移出的位。2)循环右移位指令:使能输入有效时,将IN端输入的无符号数循环右移N位后,将结果输出到OUT所指定的存储单元中,移出的最后一位的数值送溢出标志位SM1.1。

循环移位指令详解

1.指令格式及功能

循环移位指令包括循环左移和循环右移两种,循环移位位数的长度分别为字节、字和双字。循环移位将移位数据存储单元的首尾相连,同时又与溢出标志SM1.1连接,SM1.1用来存放被移出的位。指令格式及功能见表6-5。

表6-5 循环移位指令格式及功能

978-7-111-47551-4-Chapter06-9.jpg

2.指令说明

1)循环左移位指令:使能输入有效时,将输入IN端输入的无符号数(字节、字或双字)循环左移N位后,将结果输出到OUT所指定的存储单元中,移出的最后一位的数值送溢出标志位SM1.1。当需要移位的数值是0时,零标志位SM1.0为1。

2)循环右移位指令:使能输入有效时,将IN端输入的无符号数(字节、字或双字)循环右移N位后,将结果输出到OUT所指定的存储单元中,移出的最后一位的数值送溢出标志位SM1.1。当需要移位的数值是0时,零标志位SM1.0为1。

3)移位次数N≥输入端数据类型(B、W、D)时的移位位数的处理。

如果操作数是字节,当移位次数N≥8时,则在执行循环移位前,先对N进行模8操作(N除以8后取余数),其结果(0~7)为实际移动位数。

如果操作数是字,当移位次数N≥16时,则在执行循环移位前,先对N进行模16操作(N除以16后取余数),其结果(0~15)为实际移动位数。

如果操作数是双字,当移位次数N≥32时,则在执行循环移位前,先对N进行模32操作(N除以32后取余数),其结果(0~31)为实际移动位数。(www.daowen.com)

3.应用示例

【例6-5】循环移位指令应用示例。

AC0、VW200的数据如图6-5b所示,将AC0中的字循环右移2位,将VW200中的字左移3位。程序梯形图及运行结果如图6-5所示。

978-7-111-47551-4-Chapter06-10.jpg

图6-5 循环移位指令应用举例

a)梯形图 b)数据移位运行结果

【例6-6】用I0.0控制接在Q0.0~Q0.7上的8个彩灯循环移位,从左到右以0.5s的速度依次点亮,保持任意时刻只有一个指示灯亮,到达最右端后,再从左到右依次点亮。

分析:8个彩灯循环移位控制,可以用字节的循环移位指令。根据控制要求,首先应置彩灯的初始状态为QB0=1,即左边第一盏灯亮;接着灯从左到右以0.5s的速度依次点亮,即要求字节QB0中的“1”用循环左移位指令每0.5s移动一位,因此须在ROL-B指令的EN端接一个0.5s的移位脉冲(可用定时器指令实现),其梯形图如图6-6所示。

978-7-111-47551-4-Chapter06-11.jpg

图6-6 彩灯循环移位梯形图

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

我要反馈