27
2025
12

S7-300寻址方式---间接寻址

寻址方式有直接寻址和间接寻址。

直接寻址有绝对地址和符号寻址。

间接寻址分为存储器间接寻址和寄存器间接寻址。间接寻址的指针分为16位指针和32位指针,而32位指针又分为内部区域寻址和交叉区域寻址。

1.存储器间接寻址

1.1 16位指针:16位指针用于定时器、计数器、程序库(DB、FC、FB)的寻址,16位指针被看作一个无符号整数(0-65535),它表示定时器(T)、计数器(C)、数据库(DB、DI)或程序块(FB、FC)的号。

寻址格式表示为:区域标识符[16位地址指针]

    //用于定时器

L 1

T MW0  //将1传送到MW0

A I0.0//如果I0.0 = True

L S5T#10S

SD T[MW0] //T1开始计时

// 上述指令可等同于:

A I0.0

L S5T#10S

SD T1

//用于打开DB块

L 20

T LW20

OPN DB[LW20] //打开DB20

//程序调用

L 2

T LW20

UC FC[LW20] //调用FC2

L 41

T DBW30

UC FB[DBW30] //调用FB41

 

1.2 32位指针:32位地址指针用于I、Q、M、L、数据块DB等存储器中位、字节、字及双字的寻址,32位指针可以使用一个双字表示,第0位-第2位作为寻址操作的位地址,第3位-第18为作为寻址操作的字节地址,第19位-第31为没有定义。

寻址格式为:地址存储器标识符[32位地址指针]

例如写入一个M的双字表示为:

T MD[LD0]  ‘MD为区域标识符及访问宽度,而LD0为一个32位指针’。

32位内部区域指针也可用常数标识,表示为P#字节.位。

P#10.3 为指向第10个字节第3位的指针常数

以下语句表的功能是间接寻址 将DB1.DBW20的数据传送到MW8

L     20       //装载常数20

      T     MD     4  //传送到MD4

      L     MD     4  //装载MD4的值

      SLD   3         //左移3位

      T     MD     4  //又传送到MD4

      OPN   DB     1  //打开数据块DB1

      L     DBW [MD 4] //装载DB1.DBW20

      T     MW     8   //传送到MW8

2.寄存器间接寻址

    通过CPU的地址寄存器AR1和AR2寻址方式称为寄存器间接寻址,分为内部区域间接寻址和交叉区域寻址。

指令,地址标识符,地址寄存器标识符,偏移量

AR1,AR2均为32位寄存器,寄存器间接寻址只使用32位指针。、

指令有以下: LAR1,LAR2,TAR1,TAR2,+AR1,+AR2,LAR1 AR2,CAR等。

2.1内部区域寄存器间接寻址

格式为:存储器标识符[ARx,地址偏移量]

第0位-第2位为寻址操作的为位地址,第3位-第18位为寻址操作的字节地址。第19位-第31为没有定义。

//DB块寄存器内部寻址

OPN    DB    1    //打开DB1

LAR1   P#10.0    //将指针P#10.0装载到地址寄存器1中

L      DBW   [AR1, P#12.0]    //将DBW22装载到累加器1中

LAR1   MD    20

L      DBW   [AR1, P#0.0]    //原来DBW偏移MD20装载到累加器1中

+I

LAR2 P#40.0     //将指针P#40.0装载到地址寄存器2中

T     DBW    [AR2, P#0.0]    //运算结果传送到DBW40中

2.2交叉区域寄存器间接寻址

包含有存储器区域信息的指针,称为交叉区域指针。

同样,交叉区域指针为32位,寄存器间接寻址要使用地址寄存器AR1或AR2.

32位交叉区域指针,左起0-18位格式与32位内部区域指针相同,19-23位,27-30位未定义,31位为交叉区域指针标识符。

24-26位是存储区域地址标识,8种组合表示8种存储器区域:

001 表示输入地址区I,例如P#I12.0;

    010 表示输出地址区Q,例如P#Q12.0;

    011 表示标志位地址区M,例如P#M12.0;

    100 表示数据块(DB)中的数据,例如P#DB

    101 表示数据块(DI)中的数据,例如P#DI1.DIX12.0

       110 表示区域地址区L,例如P#L12.0

       111 表示调用程序块的区域地址区V,例如P#V12.0

交叉区域指针常数表达为:P#存储器字节.位

交叉区域寻址表示为:访问宽度[ARx,偏移量]

    //M存储区

    L P#M20.0

    LAR1

    L 1234

    T W[AR1, P#2.0]

    //I存储区

    L P#I0.0

    LAR2

    L W[AR2, P#0.0 ]

    T MW0

 

 下载地址:http://pan.baidu.com/s/1zMmAW


« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。