我們都知道移位指令的功能是對數據進行左、右移動。有循環移位指令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中,依次熄滅。以此類推,在此就不贅述了。這樣,從而可以達到控制要求。