技术论坛

 怎么间接寻址到具体位,或者说怎么通过一个变量定义我的起始位

返回主题列表
作者 主题
成翔
游民

经验值:89
发帖数:3
精华帖:0
楼主    2020-08-24 11:07:39
主题:怎么间接寻址到具体位,或者说怎么通过一个变量定义我的起始位

用指令SHRB做一个移位程序,但是我的起始位是一个变量,是通过上面程序算出VW0等于1就是M10.1开始移位,VW0等于2从M10.2开始移位,以此类推,怎么实现这个功能

芳季
至圣

经验值:66564
发帖数:14742
精华帖:100
1楼    2020-08-24 11:35:32
精华帖  主题:回复:怎么间接寻址到具体位,或者说怎么通过一个变量定义我的起始位

我有smart的库程序,我用导出功能,你可以用导入功能导到你的200里面。



SUBROUTINE_BLOCK 间接寻位:SBR1

TITLE=程序目的:

// 本程序通过输入区号、字节号、位号,可以对输入I、输出Q、内部M、顺序S、部分系统SM、部分数据V等区域提取位的状。每个扫描周期都执行一次产生一个结果。目的在于根据输入参数,在可变的情况下把某个点信号输出到指定位置。

// 

//  使用范围:

//  可以无条件调用,可以有条件调用,可以在中断中使用。可以多次调用。

// 

// 程序接口:

//  区 地址的区域编码。I=0;Q=1;M=2;S=3;SM=4;V=8。请不要输入其他数值。

//  字节 该区域中的字节偏移量。

// 位 该字节中的位号。

//  以上数值请不要输入超过寻址范围的值,会发生间接寻址错的报警。

//  执行过程:

//  原理上把输入的区参数、字节参数填入间接寻址指针中。先找到该字节。然后移位指令把目标位移到0位,然后0位进行输出。

//  补充说明:

//  程序不能对全部区全部字节进行寻址。

// 程序因调试条件局限,可能不能适应你的程序使用,请在使用前自行检查程序后再使用。

//  程序密码:

//  作者:芳季2019-8-18

VAR_INPUT

区:BYTE; // I 0;Q 1;M 2;S 3;SM 4

字节:BYTE;

位:BYTE;

END_VAR

VAR_OUTPUT

Q:BOOL;

END_VAR

VAR

tempD:DWORD;

END_VAR

BEGIN

Network 1 

//  建立IB0的指针在tempD。

//  把字节编号注入到指针。

//  用新的指针进行间接寻址,右移字节到临时字节。

//  取得临时字节的最低位,就是意图中寻址的输入点。

LD     SM0.0

MOVB   LB0, LB4

MOVW   0, LW5

MOVB   LB1, LB7

MOVB   *LD4, LB8

SRB    LB8, LB2

A      L8.0

=      L3.0

END_SUBROUTINE_BLOCK


希望这个是你需要的。

您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。