我們都知道移位指令的功能是對(duì)數(shù)據(jù)進(jìn)行左、右移動(dòng)。有循環(huán)移位指令ROR,ROL,RCR和RCL,位移字移指令SFTR,SFTL,WSFR和WSFL,還有移位讀寫指令SFWR和SFEL。在編寫程序中,較為常用的就是POR,ROL,SFTR和SFTL這幾個(gè)了,對(duì)于這幾個(gè)指令我們就要掌握一下了。在這里,我們需要注意的一點(diǎn)是,在使用這些指令時(shí)最好是使用脈沖執(zhí)行型指令。因?yàn)槿绻褂眠B續(xù)執(zhí)行型指令的話,這樣每個(gè)掃描周期都要執(zhí)行一次了。
下面我們便舉幾個(gè)簡(jiǎn)單的例子來學(xué)習(xí)一下這幾個(gè)常用指令。
1、 要求Y0-Y2三盞燈輪流亮1s,然后一起亮1s,如此反復(fù)循環(huán)。
下面就分析一下以上的程序。對(duì)于Y2Y1Y0,依控制要求,每次其輸出應(yīng)為001,010,100,111,其對(duì)應(yīng)的十六進(jìn)制數(shù)為1247,先將此循環(huán)數(shù)據(jù)送到數(shù)據(jù)寄存器,再執(zhí)行循環(huán)移位,以1s的速度移位,每次移動(dòng)4位,最后將數(shù)據(jù)寄存器中的低四位送到K1Y0,這樣在Y3-Y0的輸出就會(huì)得到其控制要求的輸出。
該要求既可以用循環(huán)右移指令,也可以用循環(huán)左移指令,其實(shí)都是差不多的,只需要改動(dòng)一點(diǎn)點(diǎn)。只要了解了控制要求,理解了它是如何控制的,就萬變不離其宗了。下面便是用循環(huán)左移指令編寫的程序。
2、控制一組8個(gè)燈,當(dāng)啟動(dòng)時(shí),要求Y7-Y0這8個(gè)燈從右到左逐個(gè)點(diǎn)亮,全部燈點(diǎn)亮?xí)r,再?gòu)淖蟮接抑饌(gè)熄滅,全部燈熄滅后,再?gòu)淖蟮接抑饌(gè)點(diǎn)亮,全部燈點(diǎn)亮?xí)r,再?gòu)挠业阶笾饌(gè)熄滅,如此反復(fù)循環(huán)。
下面也分析一下以上的程序。定時(shí)器T0用于左移和右移的移位信號(hào),定時(shí)器T1用于對(duì)K1M0的加1計(jì)數(shù)控制,INCP K1M0則為加1計(jì)數(shù)器,計(jì)數(shù)值用K1M0表示,其中M1、M0的計(jì)數(shù)值用于左右移位的控制。當(dāng)M1=0,M0=1時(shí)為左移逐漸點(diǎn)亮;當(dāng)M1=1,M0=0時(shí)為右移逐漸熄滅;當(dāng)M0 =1,M1 =1時(shí)為右移逐漸點(diǎn)亮;當(dāng)M0 =0,M1= 0時(shí)為左移逐漸熄滅。
當(dāng)按下啟動(dòng)按鈕時(shí),T1常閉觸點(diǎn)閉合,執(zhí)行一次INCP K1M0指令,K1M0=0001,則M1=0,M0=1,M1常閉觸點(diǎn)閉合,執(zhí)行左移指令SFTL,T0每隔1s發(fā)一個(gè)脈沖,將M0的1依次左移到Y(jié)0-Y7中,依次點(diǎn)亮。T1每隔8s發(fā)一個(gè)脈沖,執(zhí)行一次INCP K1M0指令,K1M0=0010,則M1=1,M0=0,M1常開觸點(diǎn)閉合,執(zhí)行右移指令SFTR,T0每隔1s發(fā)一個(gè)脈沖,將M0的0依次右移到Y(jié)7-70中,依次熄滅。以此類推,在此就不贅述了。這樣,從而可以達(dá)到控制要求。