移位寄存器位的用法(一个不易理解的指令)
一、移位寄存器位指令说明
200 Smart有个移位寄存器位指令SHRB,从名称上看它有个位字,它是处理一个位状态的指令,它是把一个指定的位的状态值移到一个指定长度的移位寄存器内。
特点:
1、 N的长度是l到64位,不论N是多大16或32,是不用操心数据类型的一个指令,都用SHRB指令。
2、 N可正可负,它决定了移位方向,数据类型都是BYTE。
3、 它定义的寄存器长度是可任意定义,长度范围是l到64位。
4、 每来一个扫描驱动EN,是将整个寄存器移动一位。方向由N正负决定,(正向移位 = N,反向移位 = -N)。
因此,根据指令以上特点,我们可以根据的每移动位状态,来顺序控制一些动作,达到顺序控制的目的。
二、参数详解
EN——使能端,必须沿脉冲触发
DATA——数据类型-位-BOOL,是源状态位,就是把它指定的位状态移入寄存器。操作数可指定(I、Q、V、M、SM、S、T、C、L)
S_BIT——指定移位寄存器的最低位(即首位)。数据类型-位-BOOL,操作数可指定(I、Q、V、M、SM、S、T、C、L)
N——指定的寄存器长度和移位方向。(正向移位 = N,反向移位 = -N)。
举例:S_BIT——M12.3,N=8,DATA M0.5则寄存器排列如下
N=8时,每来一个脉冲,程序首先把---整个寄存器先左移一位,然后把DATA M0.5的位状态移植到最低位M12.3
N=-8时,每来一个脉冲,程序首先把---整个寄存器先右移一位,然后把DATA M0.5的位状态移植到最高位M13.2
最后位的确定方法:
最后字节= {起始字节 (N 起始字节位号-1)/8}-----余数是最后的位号
如上例:{12 (8 3-1)/8}=13----余数2,因此最后是M13.2
三、 编程案例
要求有5个工序,运行时,每间隔5秒执行一个工序,循环执行,要求一启动,就从一工序开始工作,程序如下:
,
免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com