51單片機(jī)中斷響應(yīng)的條件
講到這兒,我們依然對(duì)于計(jì)算機(jī)響應(yīng)中斷感到神奇,我們?nèi)丝梢皂憫?yīng)外界的事件,是因?yàn)槲覀冇卸喾N“傳感器“――眼、耳可以接受不同的信息,計(jì)算機(jī)是如何做到這點(diǎn)的呢?其實(shí)說(shuō)穿了,一點(diǎn)都不希奇,MCS51工作時(shí),在每個(gè)機(jī)器周期中都會(huì)去查詢一下各個(gè)中斷標(biāo)記,看他們是否是“1“,如果是1,就說(shuō)明有中斷請(qǐng)求了,所以所謂中斷,其實(shí)也是查詢,不過(guò)是每個(gè)周期都查一下而已。這要換成人來(lái)說(shuō),就相當(dāng)于你在看書的時(shí)候,每一秒鐘都會(huì)抬起頭來(lái)看一看,查問(wèn)一下,是不是有人按門鈴,是否有電話。。。。很蠢,不是嗎?可計(jì)算機(jī)本來(lái)就是這樣,它根本沒人聰明。
了解了上述中斷的過(guò)程,就不難解中斷響應(yīng)的條件了。在下列三種情況之一時(shí),CPU將封鎖對(duì)中斷的響應(yīng):
1、CPU正在處理一個(gè)同級(jí)或更高級(jí)別的中斷請(qǐng)求。
2、現(xiàn)行的機(jī)器周期不是當(dāng)前正執(zhí)行指令的最后一個(gè)周期。我們知道,單片機(jī)有單周期、雙周期、三周期指令,當(dāng)前執(zhí)行指令是單字節(jié)沒有關(guān)系,如果是雙字節(jié)或四字節(jié)的,就要等整條指令都執(zhí)行完了,才能響應(yīng)中斷(因?yàn)橹袛嗖樵兪窃诿總€(gè)機(jī)器周期都可能查到的)。
3、當(dāng)前正執(zhí)行的指令是返回批令(RETI)或訪問(wèn)IP、IE寄存器的指令,則CPU至少再執(zhí)行一條指令才應(yīng)中斷。這些都是與中斷有關(guān)的,如果正訪問(wèn)IP、IE則可能會(huì)開、關(guān)中斷或改變中斷的優(yōu)先級(jí),而中斷返回指令則說(shuō)明本次中斷還沒有處理完,所以都要等本指令處理結(jié)束,再執(zhí)行一條指令才可以響應(yīng)中斷。