5.1.3-移位指令及应用举例

5.1.3 移位指令及应用举例

移位指令分为左、右移位和循环左、右移位及寄存器移位指令三大类。前两类移位指令按移位数据的长度又分字节型、字型、双字型3种。

1. 左、右移位指令

左、右移位数据存储单元与SM1.1(溢出)端相连,移出位被放到特殊标志存储器SM1.1位。移位数据存储单元的另一端补0。移位指令格式见表5-5。

(1)左移位指令(SHL)

使能输入有效时,将输入IN的无符号数字节、字或双字中的各位向左移N位后(右端补0),将结果输出到OUT所指定的存储单元中,如果移位次数大于0,最后一次移出位保存在“溢出”存储器位SM1.1。如果移位结果为0,零标志位SM1.0置1。

(2)右移位指令

使能输入有效时,将输入IN的无符号数字节、字或双字中的各位向右移N位后,将结果输出到OUT所指定的存储单元中,移出位补0,最后一移出位保存在SM1.1。如果移位结果为0,零标志位SM1.0置1。

(3)使ENO = 0的错误条件:0006(间接寻址错误),SM4.3(运行时间)

移位指令格式及功能

移位指令格式及功能

移位指令格式及功能

操作数及数据类型

IN:VB, IB, QB, MB, SB, SMB, LB, AC, 常量。

OUT:VB, IB, QB, MB, SB, SMB, LB, AC。

数据类型:字节

IN:VW, IW, QW, MW, SW, SMW, LW, T, C, AIW, AC, 常量。

OUT:VW, IW, QW, MW, SW, SMW, LW, T, C, AC。

数据类型:字

IN:VD, ID, QD, MD, SD, SMD, LD, AC, HC, 常量。

OUT:VD, ID, QD, MD, SD, SMD, LD, AC。

数据类型:双字

N:VB, IB, QB, MB, SB, SMB, LB, AC, 常量;数据类型:字节;数据范围:N≤数据类型(B、W、D)对应的位数

功能

SHL:字节、字、双字左移N位;SHR:字节、字、双字右移N位

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

说明:在STL指令中,若IN和OUT指定的存储器不同,则须首先使用数据传送指令MOV将IN中的数据送入OUT所指定的存储单元。如:

MOVB IN,OUT

2. 循环左、右移位指令

循环移位将移位数据存储单元的首尾相连,同时又与溢出标志SM1.1连接,SM1.1用来存放被移出的位。指令格式见表5-6。

(1)循环左移位指令(ROL)

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

(2)循环右移位指令(ROR)

使能输入有效时,将IN输入无符号数(字节、字或双字)循环右移N位后,将结果输出到OUT所指定的存储单元中,移出的最后一位的数值送溢出标志位SM1.1。当需要移位的数值是零时,零标志位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为实际移动位数。

(4)使ENO = 0的错误条件:0006(间接寻址错误),SM4.3(运行时间)。

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

循环左、右移位指令格式及功能

循环左、右移位指令格式及功能

循环左、右移位指令格式及功能

操作数及数据类型

IN:VB, IB, QB, MB, SB, SMB, LB, AC, 常量。

OUT:VB, IB, QB, MB, SB, SMB, LB, AC。

数据类型:字节

IN:VW, IW, QW, MW, SW, SMW, LW, T, C, AIW, AC, 常量。

OUT:VW, IW, QW, MW, SW, SMW, LW, T, C, AC。

数据类型:字

IN:VD, ID, QD, MD, SD, SMD, LD, AC, HC, 常量。

OUT:VD, ID, QD, MD, SD, SMD, LD, AC。

数据类型:双字

N:VB, IB, QB, MB, SB, SMB, LB, AC, 常量;数据类型:字节。

功能

ROL:字节、字、双字循环左移N位;ROR:字节、字、双字循环右移N位。

说明:在STL指令中,若IN和OUT指定的存储器不同,则须首先使用数据传送指令MOV将IN中的数据送入OUT所指定的存储单元。如:MOVB IN,OUT

【例5-4】程序应用举例,将AC0中的字循环右移2位,将VW200中的字左移3位。程序及运行结果如图5-4所示。

图5-4 例5-4题图

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

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

图5-5 例5-5题图

令实现)。梯形图程序和语句表程序如图5-5所示。

LD SM0.1 //首次扫描时

MOVB 1, QB0 //置8位彩灯初态

LD I0.0 //T37产生周期为

AN T37 0.5s的移位脉冲

LD T37 //每来一个脉冲

RLB QB0, 1 彩灯循环左移1位

3. 移位寄存器指令(SHRB)

移位寄存器指令是可以指定移位寄存器的长度和移位方向的移位指令。其指令格式如图5-6所示。

说明:(1)移位寄存器指令SHRB将DATA数值移入移位寄存器。梯形图中,EN为使能输入端,连接移位脉冲信号,每次使能有效时,整个移位寄存器移动1位。DATA为数据输入端,连接移入移位寄存器的二进制数值,执行指令时将该位的值移入寄存器。S_BIT指定移位寄存器的最低位。N指定移位寄存器的长度和移位方向,移位寄存器的最大长度为64位,N为正值表示左移位,输入数据(DATA)移入移位寄存器的最低位(S_BIT),并移出移位寄存器的最高位。移出的数据被放置在溢出内存位(SM1.1)中。N为负值表示右移位,输入数据移入移位寄存器的最高位中,并移出最低位(S_BIT)。移出的数据被放置在溢出内存位(SM1.1)中。

(2)DATA和S-BIT的操作数为I, Q, M, SM, T, C, V, S, L 。数据类型为:BOOL变量。N的操作数为VB, IB, QB, MB, SB, SMB, LB, AC, 常量。数据类型为:字节。

(3)使ENO = 0的错误条件:0006(间接地址),0091(操作数超出范围),0092(计数区错误)。

(4)移位指令影响特殊内部标志位:SM1.1(为移出的位值设置溢出位)。

【例5-6】移位寄存器应用举例。程序及运行结果如图5-7所示。

溢出位(SM1.1)

溢出位(SM1.1)

溢出位(SM1.1)

溢出位

第一次移位

第一次移位后

第二次移位后

第一次移位前

时序图

梯形图、语句表、时序图及运行结果

图5-7 例5-6梯形图、语句表、时序图及运行结果

【例5-7】用PLC构成喷泉的控制。用灯L1~L12分别代表喷泉的12个喷水注。

(1)控制要求按下起动按钮后,隔灯闪烁,L1亮0.5秒后灭,接着L2亮0.5秒后灭,接着L3亮0.5秒后灭,接着L4亮0.5秒后灭,接着L5、L9亮0.5秒后灭,接着L6、L10亮0.5秒后灭,接着L7、L11亮0.5秒后灭,接着L8、L12亮0.5秒后灭,L1亮0.5秒后灭,如此循环下去,直至按下停止按钮。如图5-8所示。

图5-8 喷泉控制示意图

(2)I/O分配

输入 输出

(常开)起动按钮:I0.0 L1:Q0.0 L5、L9:Q0.4

(常闭)停止按钮:I0.1 L2:Q0.1 L6、L10:Q0.5

L3:Q0.2 L7、L11:Q0.6

L4:Q0.3 L8、L12:Q0.7

(3)喷泉控制梯形图

梯形图程序如图5-10所示。

分析:应用移位寄存器控制,根据喷泉模拟控制的8位输出(Q0.0~Q0.7),须指定一个8位的移位寄存器(M10.1~M11.0),移位寄存器的S-BIT位为M10.1,并且移位寄存器的每一位对应一个输出。如图5-9所示。

喷泉控制示意图

图5-9 移位寄存器的位与输出对应关系图

在移位寄存器指令中,EN连接移位脉冲,每来一个脉冲的上升沿,移位寄存器移动一位。移位寄存器应0.5s移一位,因此需要设计一个0.5s产生一个脉冲的脉冲发生器(由T38构成)。

M10.0为数据输入端DATA ,根据控制要求,每次只有一个输出,因此只需要在第一个移位脉冲到来时由M10.0送入移位寄存器S-BIT位(M10.1)一个“1”,第二个脉冲至第八

移位寄存器的位与输出对应关系图

T38构成0.5s产生一个机器扫描周期脉冲的脉冲发生器

8位的移位寄存器

移位寄存器的每一位

对应一个输出

喷泉模拟控制梯形图

图5-10 例5-7喷泉模拟控制梯形图

个脉冲到来时由M10.0送入M10.1的值均为“0”,这在程序中由定时器T37延时0.5s导通一个扫描周期实现,第八个脉冲到来时M11.0置位为1,同时通过与T37并联的M11.0常开触点使M10.0置位为1,在第九个脉冲到来时由M10.0送入M10.1的值又为1,如此循环下去,直至按下停止按钮。按下常闭停止按钮(I0.1),其对应的常闭触点接通,触发复位指令,使M10.1~M11.0的8位全部复位。

本文原创来源:电气TV网,欢迎收藏本网址,收藏不迷路哦!

相关阅读