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

Automann

  • 帖子

    6168
  • 精华

    138
  • 被关注

    308

论坛等级:至圣

注册时间:2004-12-23

普通 普通 如何晋级?

发布于 2011-11-30 18:33:28

24楼

戏说寄存器间接寻址
在执行循环程序时,除了需要修改地址以外,可能还需要设置存储区的起始地址。是否能用一条指令同时做这两件事呢?寄存器间接寻址就能解决这一问题。
寄存器间接寻址的地址为地址偏移量和地址寄存器中的地址指针值之和。
例如宾馆的服务员要给客人送餐时,可以直接按房间号来送,相当于存储器间接寻址。也可以指定一个起始的房间号(地址偏移量,例如房间号200),此外再给出要送餐的房间号与起始房间号的差值(例如1,3,6,地址寄存器中的地址值)。实际的房间号是起始房间号加上房间号的差值,例如200+3。改变地址偏移量,可以对另一楼层的房间送餐。
间接寻址因为可以分别改变地址偏移量或地址寄存器中的地址值,使用起来非常灵活方便,使用得当可以显著地简化程序。
1.区域内间接寻址
下面是区域内间接寻址的例子:
L P#5.0 //将间接寻址的指针装入累加器1
LAR1 //将累加器1的内容送AR1
L MW[AR1, P#3.0] //将MW8装入累加器1
方括号内为操作数的地址,它等于AR1中的地址值P#5.0加上逗号后面的地址偏移量, P#5.0+P#3.0=P#8.0,即操作数为MW8。
2.区域之间的间接寻址
下面是区域间的间接寻址的例子:
L P#M 6.0 //将M6.0的双字地址装入累加器1
LAR1 //将累加器1的内容送到AR1
L W [AR1, P#20.0] //将MW26的内容传送到累加器1
因为地址指针P#M6.0已经包含有区域信息(M区),第3条指令“L W[AR1, P#20.0]”没有必要再使用地址标识符M。
追求完美
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54617条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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