1. 匯編語言子程序是如何定義的
這樣定義的:
子程序名 PROC NEAR|FAR
拆則 .
.
RET
子程序名 ENDP
子程序名相當於標號,表示本過程的符號地址。過程有NEAR和FAR兩種類型,FAR型的扮螞過程可供段間調用,NEAR型過程僅供段內調用。
在一個過程中,至少要有一條返回指令RET,它可以書寫在過程中的任何位置,但是過程執行的的最後一條指令一定是RET。
注意事項
一、子程序調用指令
格式:CALL [NEAR PTR] 子程序旅缺棚名
CALL指令的兩個作用,1.將斷點地址(CALL指令的下一條指令地址)壓棧保存,2.轉去子程序執行。
[NEAR PTR]可以省略。
二、返回指令
格式:RET [N]
指令作用:實現子程序執行完後返回主程序的指令。從堆棧棧頂彈出一個字數據(段內調用)送入IP作為返回地址。N是立即數,執行完RET之後,再將SP增加N,也叫「平棧」。
2. 三菱PLC編程中,跳轉指令CJ、子程序調用CALL和中斷指令有什麼區別
子程序幫助您對程序進行分塊。主程序中使用的指令決定具體子程序的執行狀況。當主程序調用子程序並執行時,子程序執行全部指令直至結束。然後,系統將控制返回至調用子程序網路中的主程序。
子程序用於為程序分段和分塊,使其成為較小的、更易管理的塊。在程序中調試和維護時,您可以利用這項優勢。通過使用較小的程序塊,對這些區域和整個程序簡單地進行調試和排除故障。只在需要時才調用程序塊,可以更有效地使用PLC,因為所有的程序塊可能無須執行每次掃描。
最後,如果子程序僅引用參數和局部內存,則可移動子程序。為了移動子程序,應避免使用任何全局變數/符號(I、Q、M、SM、AI、AQ、V、T、C、S、AC內存中的絕對地址)。如果子程序無調用參數(IN、OUT或IN_OUT)或僅在L內存中使用局部變數,您就可以導出子程序並將其導入另一個項目。
欲在程序中使用子程序,必須執行下列三項任務:
?建立子程序
?在子程序局部變數表中定義參數(如果有)
?從適當的POU(從主程序或另一個子程序)調用子程序
當子程序被調用時,整個邏輯堆棧被保存,堆棧頂端被設為一,所有其他堆棧位置被設為零,控制被傳送至調用子程序。當該子程序完成時,堆棧恢復為在調用點時保留的數值,控制返回調用例行程序。
子程序和調用例行程序共用累加器。由於子程序的使用,對累加器不執行保存或恢復操作。
用參數調用子程序
子程序可能包含交接的參數。參數在子程序的局部變數表中定義。參數必須有一個符號名(最多為23個字元)、一個變數類型和一個數據類型。可向子程序交接16個參數或從子程序交接16個參數。
局部變數表中的變數類型域定義參數是否交接至子程序(IN)、交接至或交接出子程序(IN_OUT)或交接出子程序(OUT)。下表說明子程序的參數類型。欲增加參數條目,將游標放在您希望增加的類型的變數類型域上(IN、
IN_OUT或OUT)。單極滑鼠右鍵,獲得選項菜單。選擇"插入"選項,然後選擇"下一行"選項。在當前條目的下方會顯示所選類型的另一個參數條目。
跳轉至標簽(JMP)指令對程序中的指定標簽(n)執行分支操作。跳轉接受時,堆棧頂值始終為邏輯1。標簽(LBL)指令標記跳轉目的地(n)的位置。您可以在主程序、子程序或中斷例行程序中使用"跳轉"指令。"跳轉"及其對應的"標簽"指令必須始終位於相同的代碼段中(主程序、子程序或中斷例行程序)。您不能從主程序跳轉至子程序或中斷例行程序中的標簽,與此相似,您也不能從子程序或中斷例行程序跳轉至該子程序或中斷例行程序之外的標簽。您可以在SCR段中使用"跳轉"指令,但對應的"標簽"指令必須位於相同的SCR段內。
中斷允許(ENI)指令全局性啟用所有附加中斷事件進程。中斷禁止(DISI)指令全局性禁止所有中斷事件進程。轉換至RUN(運行)模式時,中斷開始時被禁止。一旦進入RUN(運行)模式,您可以通過執行全局中斷允許指令,啟用所有中斷進程。執行中斷禁止指令會禁止處理中斷;但是現用中斷事件將繼續入隊等候