1.4.2 变址寻址
1.变址寻址、变址寄存器和变址操作数
变址寻址是一种最复杂的寻址方式,变址就是把操作数的地址进行了修改,要到修改后的地址(变址)去寻找操作数,而这个功能是由变址寄存器和变址操作数完成的。
三菱FX系列有两个特别的数据寄存器V、Z,它们主要用作运算操作数地址的修改。它们的编址为V0~V7和Z0~Z7,共16个,其中V0和Z0也可写成V、Z。利用V0~V7和Z0~Z7进行地址修改的寻址方式叫变址寻址。
变址寄存器V、Z在使用上没有差别,可以任意使用,不存在优先级,变址的功能也可完全一样。但是在进行32位变址操作时,也必须由V、Z组成的32位数作为变址操作数的组合。这时对V、Z组成32位数就有了规定,当V、Z组成32位数时,必须由相同编址的V、Z组成,V为高位,Z为低位。这样,总共只有V0Z0、V1Z1…V7Z7 8组32位数,其他任意组合都是非法的,例如V1V0、Z3Z2、V125等。
变址操作数由两个编程元件组合而成,前一个编程元件为可以进行变址操作的软元件,后一个编程元件为变址寄存器V、Z中的一个,如图1-43所示。
图1-43 变址操作数
对FX系列来说,可以进行变址操作的编程软元件有:X,Y,M,S,KnX,KnY,KnM,KnS,T,C,D,R,P及常数K,H。因此,下列组合都是合法的变址操作数。
X0V2 D10Z3 K2X10V0 K15Z5 T5Z1 C10V4
变址操作数是如何进行变址的呢?变址寻址的方式规定如下。
(1)变址后的操作编程软元件性质不变。
(2)变址后的操作数地址为变址操作编程软元件的编号加上变址寄存器的数值。
关于操作数地址将在下面做详细说明。
变址寻址主要用在功能指令中,在功能指令的操作数中,也不是所有操作数都可以进行变址操作的。在下文的指令讲解中,凡是可进行变址操作的操作数均在其右侧加点表示,如图1-44所示。
图1-44 功能指令中变址操作表示
FX3系列的基本指令中的LD,LDI,AND,ANI,OR,ORI,OUT,SET,RST,PLS,PLF等指令使用的软元件X,Y,M(特殊辅助M除外),T,C(0~199)均可使用变址操作数进行变址寻址。
2.指令的变址寻址及应用
1)位元件X,Y,M,S
【例6】请说明变址操作数的X0V2地址,设(V2)=K10。
X0V2,变址操作后的地址编号为K0+K10=K10,但输入口X是八进制编址的,偏移10个后,不是X10,而应为X12,即变址操作后的地址为X12。这一点在使用时务必注意。
【例7】某些功能指令在使用时受到使用次数的限制。例如,脉宽指令PWM,如果想要在程序中使用多次则可应用变址操作,其效果和同一指令在程序中使用多次效果一样。图1-45表示了输出脉宽指令PWM可以分别在Y0或Y1口输出的梯形图程序。
X010=ON时,Z0=0,Y000Z0=Y000(即PWM指令的脉冲从Y000口输出);当X010=OFF时,Z0=1,发生地址偏移,Y000Z0=Y001(即PWM指令的脉冲从Y001口输出)。这样,利用变址操作等于两次使用了PWM指令。
图1-45 例7程序梯形图
【例8】请说明变址操作数的M3V0地址,设(V0)=K10。
M3V0,变址地址编号为K3+K10=K13,即变址后操作地址为M13,与十进制编址的状态继电器S类似。
【例9】请对图1-46所示的梯形图执行过程进行说明。
CMP为比较输出指令。当X000=ON时,偏移量为0,则比较输出M0~M2;当X000=OFF时,偏移量为K10,则比较输出M10~M12。利用变址操作,可以得到两组不同的输出继电器M。
图1-46 例8程序梯形图
2)组合位元件KnX,KnY,KnM,KnS
【例10】请说明变址操作数的K2X0V4地址,设(V4)=K5。
K2X0V4,同样,X为八进制编制的,变址后的组合位元件应为K2X5,即由X5,X6,X7,X10,X11,X12,X13,X14,8个位元件组合成的组合位元件,使用起来很不方便。因此,建议当使用组合位元件KnX,KnY时,位元件首址最好为X0,X10等,变址寄存器的值最好为K0,K8,K16等,这样变址后地址为KnX0,KnX10,KnX20等。组合位元件的组数n不能变址操作,不能出现K3V0X0这样的变址操作数。
【例11】请对图1-47所示的梯形图执行过程进行说明。
图1-47 例11程序梯形图
当X000=ON时,M7~M0的状态控制输出为Y7~Y0;当X000=OFF时,M17~M10的状态控制输出为Y7~Y0。
3)数据寄存器D
【例12】请说明变址操作数的D0Z6地址,设(Z6)=K10。
数据寄存器D是最常用的变址操作编程元件,为十进制编制,所以,变址后的地址编号为K0+K10=K10,即D10。
【例13】如图1-48所示,如果(D0)=H0032,(V2)=H0010,(D10)=H000F,(D16)=H0020,指令执行后,对应的几个输出口Y置“1”。
图1-48 例13程序梯形图
分析:(V2)=H0010=K16,D0V2=D0+16=D16,即使用D16的内容对输出口Y0~Y7进行控制,对应关系如下:
可见,仅Y5输出置“1”。
在控制程序中,经常用到数据求和。如果要设计一个累加程序,不用间接寻址的话,那就要每两个数用一次加法指令ADD,直到所有被加数累加完才得到结果,程序非常冗长,占用很多存储空间,而且指令执行时间也加长。如果使用变址寻址,则程序设计变得非常简单。
【例14】把D11~D20的内容进行累加,结果送D21。应用变址寻址程序设计如图1-49所示。
图1-49 变址寻址累加程序
第一次执行,V0=0,(D21)+(D11)→(D21),D21的值为D11;
第二次执行,V0=1,(D21)+(D12)→(D21),D21的值为(D11)+(D12)。
以后每执行一次V0加1,D11+V0为新的被加数地址,依次类推,直到V0等于9为止。最后就是(D11)+(D12)+(D13)+…+(D20)→(D21)。
4)定时器T、计数器C
【例15】请说明变址操作数的T0Z2地址,设(Z2)=K8。
变址操作数的地址编号为K0+K8=K8,即变址后的操作为T 8。
【例16】利用定时器变址操作编写的显示定时器T0~T9当前值的程序,如图1-50所示。计数器的变址操作和定时器类似,不再赘述。
图1-50 例16程序梯形图
5)指针P
指针P也可进行变址操作,这时,表示转移的地址发生了偏移。一般在程序中用的较少。
6)常数K、H
常数K、H也可进行变址操作,但操作结果不是偏移的地址,而是一个数。
【例17】请说明下面常数变址操作数的结果。
(V0)=K10 K20V0=K30
(V1)=H12 K20V1=K38
(Z0)=H25 H02Z0=H27=K39
(Z4)=K103 H123Z4=H18A=K394
3.32位指令变址寻址应用
当指令于32位应用时,也可以进行变址操作,其变址操作仍然为两个编程元件的组合,例如,D0Z0。其中,D0表示32位可以进行变址操作的编程元件(D1,D0),Z0表示32位的变址寄存器(V0,Z0)。三菱FX系列规定,变址寄存器组成32位寄存器时,必须(V,Z)配对组成,其中V为高16位,Z为低16位。配对时必须编号相同,只能配对为(V0,Z0),(V1,Z1),(V2,Z2),…,(V7,Z7)。编号不同不能配对,变址操作数由各自的低8位组合而成,这样,变址操作数的变址寄存器只能是Z。
应用32位变址寻址时,应特别注意,不能随意用MOV将变址值送入Z,一定要用DMOV将变址值送入(V,Z)。
【例18】下面为一个32位指令变址寻址应用程序,如图1-51所示,请给予说明。说明见梯形图。
图1-51 例18程序梯形图