西門子S7-200SMART PLC來(lái)說(shuō),尋址可分為直接尋址和間接尋址,直接尋址就是直接對(duì)數(shù)據(jù)進(jìn)行賦值,那么間接尋址主要是用于什么地方?直接尋址與間接尋址它們之間有何區(qū)別?下面就帶大家來(lái)學(xué)習(xí)間接尋址使用。
一、直接尋址與間接尋址區(qū)別
直接尋址就是直接對(duì)數(shù)據(jù)進(jìn)行賦值,間接尋址主要用于需要在程序中修改地址的場(chǎng)合,特別是處理數(shù)據(jù)內(nèi)容比較多的情況,使用間接尋址編程靈活,節(jié)省程序空間。
方式不同:
1、直接尋址:在指令格式的地址的字段中直接指出操作數(shù)在內(nèi)存的地址。
2、間接尋址:指令地址字段的形式地址D不是操作數(shù)的真正地址,而是操作數(shù)地址的指示器,或者說(shuō)是D單元的內(nèi)容才是操作數(shù)的有效地址。
特點(diǎn)不同:
1、直接尋址:操作數(shù)的地址直接給出而不需要經(jīng)過(guò)某種變換,在指令中直接給出參與運(yùn)算的操作數(shù)及運(yùn)算結(jié)果所存放的主存地址,即在指令中直接給出有效地址。
2、間接尋址:需要以寄存器符號(hào)的形式來(lái)表示,且在寄存器名稱前面加上間接尋址符號(hào)“*”。
二、間接尋址說(shuō)明
(1)間接尋址使用指針訪問(wèn)存儲(chǔ)器中的數(shù)據(jù),
(2)指針是包含另一個(gè)存儲(chǔ)單元地址的雙字存儲(chǔ)單元。只能將V存儲(chǔ)單元、L存儲(chǔ)
單元或累加器寄存器(AC1、AC2、AC3)用作指針。
(3)要?jiǎng)?chuàng)建指針,必須使用“移動(dòng)雙字”指令,將間接尋址的存儲(chǔ)單元地址移至指針位置。指針只能對(duì)以下存儲(chǔ)區(qū)進(jìn)行間接訪問(wèn):I、Q、V、M、S、AI、AQ、SM、T(僅限當(dāng)前值)和C(僅限當(dāng)前值)﹔不能對(duì)單個(gè)的位地址、HC、L存儲(chǔ)區(qū)和累加器進(jìn)行間接尋址。
三、間接尋址使用方法
使用間接尋址的方式存取數(shù)據(jù)主要分為以下三個(gè)步驟來(lái)實(shí)現(xiàn):
(1)建立指針
使用間接尋址之前,應(yīng)創(chuàng)建一個(gè)指針。指針以雙字的形式存儲(chǔ)要訪問(wèn)的存儲(chǔ)器的地址,只能用V存儲(chǔ)器、L存儲(chǔ)器或者累加器AC作為指針。建立指針時(shí),用雙字傳送指令MOVD將需要間接尋址的存儲(chǔ)器起始地址送到指針中。指針的輸入數(shù)應(yīng)該以“&”符號(hào)開(kāi)頭來(lái)表明存儲(chǔ)區(qū)的地址,注意不是其內(nèi)容將移動(dòng)到指令的輸出操作數(shù)中。
(2)指針偏移
通過(guò)加減乘除運(yùn)算指令使指針偏移,比如將VD100加上4,則此時(shí)VD100指向VB4。
(3)讀取指針
操作數(shù)前加“*”號(hào),表示指令中的操作數(shù)是一個(gè)指針。
將指針指向的地址存儲(chǔ)的數(shù)據(jù)調(diào)取處出來(lái),通過(guò)*VD100提取數(shù)據(jù)(*是取值符),見(jiàn)下圖,就是把VB4的值傳送給VB200。
四、取值符說(shuō)明
“*+指針”使用在字節(jié)的位置,訪問(wèn)的是指針指向地址開(kāi)始的字節(jié)變量。
“*+指針”使用在字的位置,訪問(wèn)的是指針指向地址開(kāi)始的字變量。
“*+指針”使用在雙字的位置,訪問(wèn)的是指針指向地址開(kāi)始的雙字變量。
五、間接尋址案例
案例:通過(guò)指針的方式,當(dāng)按下I0.1按鈕時(shí):
把VB4的值復(fù)制到VB200。
把VW10的值復(fù)制到VW300。
把VD20的值復(fù)制到VD400。
(1)建立指針
(2)將指針通過(guò)ADD_DI(加整數(shù)指令)進(jìn)行加4,從而指針指向VB4,后再將VB4通過(guò)MOV_B(字節(jié)傳送指令)把VB4傳送給VB200。
(3)將指針通過(guò)ADD_DI(加整數(shù)指令)進(jìn)行加6,從而指針指向VB10,后再將VW10通過(guò)MOV_W(字節(jié)傳送指令)把VW10傳送給VW300。
(4)將指針通過(guò)ADD_DI(加整數(shù)指令)進(jìn)行加10,從而指針指向VB20,后再將VD20通過(guò)MOV_DW(字節(jié)傳送指令)把VD20傳送給VD400。
六、演示效果
通過(guò)狀態(tài)圖表分別把VB4、VW10、VD20寫(xiě)入數(shù)值
按下I0.1按鈕,通過(guò)狀態(tài)圖表監(jiān)控VB200、VW300、VD400的值是否是VB4、VW10、VD20傳送過(guò)去的值。
七、間接尋址使用注意事項(xiàng)
(1)間接尋址指針表示大小為:32位=雙字
(2)建立指針偏移時(shí),是按照偏移數(shù)量進(jìn)行累計(jì),而不是和指針指向的起始地址進(jìn)行累計(jì)。