发表于:2006-05-13 20:29:00
82楼
回复“古代人”网友:
接着上回的再谈:
4,在一般情况下,“SFTR”命令的参数要求常数n1应当大于常数n2这样才使得“移位寄存器”有意义。如果象你那样n1=K4,n2=K4,那么,这个“移位寄存器”就体现不出“移位”的效果。
如果仅把你那个程序的原第二行中的“LD”语句删除,得到:
LD M4
SFTR M0 M15 K4 K4
END
那么,虽然这样的程序是可以通过的,但是,它的实际效果就和用“MOV”指令来“刷新M15至M18中的内容”这一结果是相同的。而看不出“移位”的效果。
比如:
LD M4
MOV K1M0 K1M15
END
象这样与其用“SFTR”命令,还不如用“MOV”命令!
为什么这样说呢?是因为16位的“SFTR”命令占程序的9步,而用16位的“MOV”命令则只占5步!从而可使程序的周期更短!
5、我们通常都是用脉冲来使“移位寄存器” 实现“移位”功能的。这样才能让我们感觉“移位”在一步一步地进行。
比如:
LD M4
PLS M100
LD M100
SFTR M0 M15 K16 K4
END
或:
LDP M4
SFTR M0 M15 K16 K4
END
不过,这两种方法占的步数都较多。所以建议你用下述的程序:
LD M4
SFTRP M0 M15 K16 K4
END
以上3个程序中的“移位寄存器”命令中的常数n1都等于“K16”,常数n2都等于“K4”。这样,这个“移位寄存器”就可划分为四个“节”。当“执行条件”的逻辑值从“0”跃迁为“1”时,“位右移:‘SFTR’命令”被执行:“M0至M3”中的内容就被复制到“M27至M30”(第1节)中去,而“M27至M30”中的原有内容向右移入“M23至M26”(第2节),而“M23至M26”中的原有内容向右移入“M19至M22”(第3节),而“M19至M22” 中的原有内容向右移入“M15至M18”(第4节),而“M15至M18” 中的原有内容则被“挤出”(或称为“溢出”)。