回复:应用探讨——西门子指针编程使用探讨

Automann

  • 帖子

    6168
  • 精华

    138
  • 被关注

    308

论坛等级:至圣

注册时间:2004-12-23

普通 普通 如何晋级?

发布于 2011-12-01 13:30:03

43楼

quote:以下是引用n次看你的背影在2011-12-01 13:05:22的发言:
也想说说我使用指针的感受,二:(字节、字、双字间接寻址)
1、在使用指针对字节、字、双字间接寻址时,大多是处理数据类型有规律的场合;
2、需注意字节、字、双字寻址指针和地址偏移量的关系;字节寻址时,指针偏移一个字节;字寻址时,指针偏移2个字节,双字寻址时,指针偏移4个字节;
3、尽量使用一个地址寄存器寻址,避免同时使用2个地址寄存器进行寻址,尽量做到干净利落;
4、要充分利用临时存储区(L),结合循环把某些运算在临时存储区完成,提高指针寻址的执行效率;
下面举一个例子参考:(DB11、DB12结构相同,里面各自存放了200个REAL类型的数据,比较DB11、DB12两个数据块对应地址里面的值,如果相等写到相同结构的DB13相对应的地址里面存储。)

//╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
LAR1 P#0.0
L 200 //循环200次
NEXT: T LW 100
OPN DB 13 //打开数据快DB13
L 0.000000e+000
T DBD [AR1,P#0.0] //将DB13当前的地址清零

OPN DB 11 //打开数据快DB11
L DBD [AR1,P#0.0] //读取DB11当前的数据
T LD 102 //★暂存到临时存储器 LD102里面

OPN DB 12 //打开数据快DB12
L DBD [AR1,P#0.0] //读取DB12当前的数据
T LD 106 //★暂存到临时存储器 LD106里面

L LD 102 //★比较DB11、DB12对应的地址里面的数据
L LD 106
==R //是否相等
JCN M001
OPN DB 13
L LD 102
T DBD [AR1,P#0.0] //相同的数据写到DB13对应的地址里面
M001: +AR1 P#4.0 //地址寄存器1的地址向前推进4个字节
L LW 100
LOOP NEXT
//╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬

通过上面的例子,我们不难发现:合理、巧妙使用L区内存,可以只使用一个地址寄存器,提高指针寻址的执行效率!

A侠的程序有点小问题,保存到DB13中的数据是间断的,地址不是连续的。DB13中的数据要连续需要第二个指针。
此外可以用存储器间接寻址来取代AR1,AR1这样使用没有发挥出寄存器间接寻址偏移量和地址寄存器的值都可以改变的优势。
追求完美
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54616条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

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