單片機(jī)匯編指令中RETI和RET的區(qū)別
通常情況下,在普通的匯編子程序中用RET做返回,在中斷服務(wù)子程序中用RETI起中斷返回作用。兩條指令都能從堆棧中彈出斷點(diǎn)地址并裝入PC中,使CPU回到原來主程序的斷點(diǎn)處繼續(xù)運(yùn)行。
然而,RET和RETI有本質(zhì)的區(qū)別:當(dāng)某一中斷源響應(yīng)后,單片機(jī)中的標(biāo)志寄存器flag H和flag L其中的一個(gè)將會(huì)自動(dòng)置位,用于阻止比它低級(jí)或同級(jí)的中斷觸發(fā)。RETI可以清除“優(yōu)先級(jí)激活觸發(fā)器”(即flag寄存器),以保證后續(xù)中斷源的及時(shí)響應(yīng)。
所以,當(dāng)把RETI替換為RET后,該程序在第一次運(yùn)行時(shí)可能不會(huì)出錯(cuò),但在第二次運(yùn)行時(shí)就會(huì)出錯(cuò)了!