大家好,又见面了,我是你们的朋友全栈君。
我们都知道移位指令的功能是对数据进行左、右移动。有循环移位指令ROR,ROL,RCR和RCL,位移字移指令SFTR,SFTL,WSFR和WSFL,还有移位读写指令SFWR和SFEL。在编写程序中,较为常用的就是POR,ROL,SFTR和SFTL这几个了,对于这几个指令我们就要掌握一下了。在这里,我们需要注意的一点是,在使用这些指令时最好是使用脉冲执行型指令。因为如果使用连续执行型指令的话,这样每个扫描周期都要执行一次了。
下面我们便举几个简单的例子来学习一下这几个常用指令。
1、 要求Y0-Y2三盏灯轮流亮1s,然后一起亮1s,如此反复循环。
下面就分析一下以上的程序。对于Y2Y1Y0,依控制要求,每次其输出应为001,010,100,111,其对应的十六进制数为1247,先将此循环数据送到数据寄存器,再执行循环移位,以1s的速度移位,每次移动4位,最后将数据寄存器中的低四位送到K1Y0,这样在Y3-Y0的输出就会得到其控制要求的输出。
该要求既可以用循环右移指令,也可以用循环左移指令,其实都是差不多的,只需要改动一点点。只要了解了控制要求,理解了它是如何控制的,就万变不离其宗了。下面便是用循环左移指令编写的程序。
2、控制一组8个灯,当启动时,要求Y7-Y0这8个灯从右到左逐个点亮,全部灯点亮时,再从左到右逐个熄灭,全部灯熄灭后,再从左到右逐个点亮,全部灯点亮时,再从右到左逐个熄灭,如此反复循环。
下面也分析一下以上的程序。定时器T0用于左移和右移的移位信号,定时器T1用于对K1M0的加1计数控制,INCP K1M0则为加1计数器,计数值用K1M0表示,其中M1、M0的计数值用于左右移位的控制。当M1=0,M0=1时为左移逐渐点亮;当M1=1,M0=0时为右移逐渐熄灭;当M0 =1,M1 =1时为右移逐渐点亮;当M0 =0,M1= 0时为左移逐渐熄灭。
当按下启动按钮时,T1常闭触点闭合,执行一次INCP K1M0指令,K1M0=0001,则M1=0,M0=1,M1常闭触点闭合,执行左移指令SFTL,T0每隔1s发一个脉冲,将M0的1依次左移到Y0-Y7中,依次点亮。T1每隔8s发一个脉冲,执行一次INCP K1M0指令,K1M0=0010,则M1=1,M0=0,M1常开触点闭合,执行右移指令SFTR,T0每隔1s发一个脉冲,将M0的0依次右移到Y7-70中,依次熄灭。以此类推,在此就不赘述了。这样,从而可以达到控制要求。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/131900.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...