回复:详解西门子间接寻址

醉心

  • 帖子

    139
  • 精华

    0
  • 被关注

    5

论坛等级:新手

注册时间:2008-03-26

普通 普通 如何晋级?

发布于 2008-07-20 21:20:06

0楼

【P#指针】
  P#中的P是Pointer,是个32位的直接指针。所谓的直接,是指P#中的#后面所跟的数值或者存储单元,是P直接给定的。这样P#XXX这种指针,就可以被用来在指令寻址中,作为一个“常数”来对待,这个“常数”可以包含或不包含存储区域。例如:
  ● L P#Q1.0 //把Q1.0这个指针存入ACC1,此时ACC1的内容=82000008(hex)=Q1.0
  ★ L P#1.0 //把1.0这个指针存入ACC1,此时ACC1的内容=00000008(hex)=1.0
  ● L P#MB100 //错误!必须按照byte.bit结构给定指针。
  ● L P#M100.0 //把M100.0这个指针存入ACC1,此时ACC1的内容=83000320(hex)=M100.0
  ● L P#DB100.DBX26.4 //错误!DBX已经提供了存储区域,不能重复指定。
  ● L P#DBX26.4 //把DBX26.4这个指针存入ACC1,此时ACC1的内容=840000D4(hex)=DBX26.4
  我们发现,当对P#只是指定数值时,累加器中的值和区域内寻址指针规定的格式相同(也和存储器间接寻址双字指针格式相同);而当对P#指定带有存储区域时,累加器中的内容和区域间寻址指针内容完全相同。事实上,把什么样的值传给AR,就决定了是以什么样的方式来进行寄存器间接寻址。在实际应用中,我们正是利用P#的这种特点,根据不同的需要,指定P#指针,然后,再传递给AR,以确定最终的寻址方式。
  在寄存器寻址中,P#XXX作为寄存器AR指针的偏移量,用来和AR指针进行相加运算,运算的结果,才是指令真正要操作的确切地址数值单元!
  无论是区域内还是区域间寻址,地址所在的存储区域都有了指定,因此,这里的P#XXX只能指定纯粹的数值,如上面例子中的★。
为全国钢铁同行交流提供平台群22295046
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54715条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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