**用指针访问数据表的例子程序**
本例中用 VD14 作为指向配方表的指针;
配方表定义在数据块中,起始单元为 VB100,每条配方的数据长度为5字节,共4条配方;
VW1008 用来存储某条配方在表中的配方号,用这个配方号乘以5 可以得到这条配方起始地址的偏移量,用VD14指针加上此偏移量,就可以访问表中的每一条配方;
最后将此配方数据复制到从VB1500 开始的相应区域中。
梯形图如下:
BLKMOV这里是传送指令和普通的MOV_DW指令相比,它的区别在于MOV指令只能传送一个变量,但是BLK可以批量传送多个寄存器的值。最多传255个。
如上图是BLKMOV_B指令。他有3个管脚。左边IN管脚的寄存器传给OUT管脚的寄存器,N管脚是数量,以IN和OUT为首寄存器开始的N个寄存器。
STL语句如下:
TITLE=**用指针访问数据表的例子程序**
// 本例中用 VD14 作为指向配方表的指针;
// 配方表定义在数据块中,起始单元为 VB100,每条配方的数据长度为5字节,共4条配方;
// VW1008 用来存储某条配方在表中的配方号,用这个配方号乘以5 可以得到这条配方起始地址的偏移量,用VD14指针加上此偏移量,就可以访问表中的每一条配方;
// 最后将此配方数据复制到从VB1500 开始的相应区域中。
Network 1 // 网络标题
// 创建一个指向配方表起始地址的指针
LD SM0.0
MOVD &VB100, VD14
Network 2
// 将配方号转换成双整型,只有转换成双整型才可以和指针数据进行运算
LD SM0.0
ITD VW1008, VD18
Network 3
// 根据配方号计算偏移量,因为每条配方长度为5字节,所以用这个配方号乘以5 可以得到这条配方起始地址的偏移量
LD SM0.0
MOVD +5, VD22
*D VD18, VD22
Network 4
// 指针加上此偏移量即可得到指向指定配方的指针
LD SM0.0
+D VD22, VD14
Network 5
// 将该配方传送到VB1500-VB1504
LD SM0.0
BMB *VD14, VB1500, 5