㈠ 子程序的末尾有什麼指令
子程序的末尾一定要有RETI指令,子程序的調用是LCALL和ACALL。
RETI是中斷返回指令,這條指令的功能和RET指令相似,2條指令的不同之處是:本指令清除了中斷響應時,被置1的MCS-51內部不可定址的 「優先順序生效」觸發器清零。
執行這條指令後,CPU將會把堆棧中保存著的地址取出,送回PC,那麼程序就會從主程序的中斷處繼續往下執行了。中斷指令「RETI」作為中斷跳出指令,除了將堆棧中保存著的地址取出,送回PC,使程序從主程序的中斷處繼凳培續往下執行的作橡搏用外,還有將「優先順序梁粗祥生效」觸發器清零的功能。
(1)如何判別是否為子程序單片機擴展閱讀
單片機匯編指令中RETI和RET的區別
通常情況下,在普通的匯編子程序中用RET做返回,在中斷服務子程序中用RETI起中斷返回作用。兩條指令都能從堆棧中彈出斷點地址並裝入PC中,使CPU回到原來主程序的斷點處繼續運行。
然而,RET和RETI有本質的區別:當某一中斷源響應後,單片機中的標志寄存器flag H和flag L其中的一個將會自動置位,用於阻止比它低級或同級的中斷觸發。RETI可以清除「優先順序激活觸發器」(即flag寄存器),以保證後續中斷源的及時響應。
所以,當把RETI替換為RET後,該程序在第一次運行時可能不會出錯,但在第二次運行時就會出錯了。
㈡ 單片機的循環程序和子程序有什麼區別與聯系
呵呵 俺來幫你分析吧
單片機的循環程序和子程序有什麼區別與聯系
1 區別:
循環程序就是一段要反復執行的代碼 只能在該處執行一次
即(執行一次要循環多次這一段代碼)
子程序是一個相對獨立的代碼 單片機可以多次使用它 只要需要 就可以多次調用它
調用子程序要用到堆棧
每次運行只執行一次該段代碼 但可以多次執行(沒有次數上的限制)。
2 聯系:
二者都是單片機的一種程序形式,一個子程序內部可以包含一個循環程序(如延時子程序)。
呵呵 滿意就給加分嘍