間接尋址方式是指通過使用指針來存取存儲(chu) 器中的數據的一種尋址方式。S7-200 CPU允許使用指針對I、Q、V、M、S、T(僅(jin) 當前值)和C(僅(jin) 當前值)存儲(chu) 區域進行間接尋址,但不能對獨立的位或模擬量進行間接尋址。使用間接尋址方式存取數據的過程如下。
(1)建立指針
使用間接尋址之前應創建一個(ge) 指向該位置的指針。由於(yu) 存儲(chu) 器的物理地址為(wei) 32位,所以指針的長度應當為(wei) 雙字,隻能用變量存儲(chu) 器V、局部存儲(chu) 器L或累加器AC1、AC2和AC3作指針。
為(wei) 了生成指針,必須用雙字傳(chuan) 送指令( MOVD)將要間接尋址的某存儲(chu) 器的地址裝入用來作為(wei) 指針的編程元件中,裝入的是地址而不是數據本身。例如,
MOVD &VB200, AC1 //VB200的地址送入AC1,建立指針
MOVD &C3, VD6 //C3的地址送入VD6,建立指針
MOVD &MB4, LD8 //MB4的地址送入LD6,建立指針
指令的輸入操作數開始處使用“&”符號,表示所尋址的操作數是要進行間接尋址的存儲(chu) 器的地址;指令的輸出操作數是指針所指向的存儲(chu) 器地址,其數據長度為(wei) 雙字。
(2)用指針來存取數據
用指針來存取數據時,操作數前加“*”號,表示該操作數為(wei) 一個(ge) 指針。圖2-17中的“*AC1”表示AC1是一個(ge) 指針,*AC1是MOVW指令確定的一個(ge) 字長的數據。此例中,存於(yu) VB101和VB102的數據被傳(chuan) 送到累加器ACO的低16位。
圖2-17 指針間接尋址方式
(3)修改指針
連續存取指針所指的數據時,因為(wei) 指針是32位的數據,應使用雙字指令來修改指針值,如雙字加法(ADDD)或雙字加1(INCD)指令。修改時需要根據所存取的數據長度來正確調整指針。當存取字節數據時,指針調整單位為(wei) 1,即可執行1次INCD指令;當存取字時,指針調整單位為(wei) 2;當存取雙字時,指針調整單位為(wei) 4,如圖2-18所示。
圖2-18 改變指針尋址方式