中斷系統(tǒng)(PROM)
HT48R05A-1單片機(jī)提供一個(gè)外部中斷和內(nèi)部定時(shí)/計(jì)數(shù)器中斷。中斷的控制寄存器(INTC:0BH)包含了中斷控制位,用來(lái)設(shè)置中斷允許/禁止及中斷請(qǐng)求標(biāo)志。
一 旦有中斷子程序被服務(wù),所有其它中斷將被禁止(通過(guò)清除EMI位),這種機(jī)制能防止中斷嵌套,這時(shí)如有其它中斷請(qǐng)求發(fā)生,這個(gè)中斷請(qǐng)求的標(biāo)志會(huì)被記錄下 來(lái),如果一個(gè)中斷服務(wù)中有另一個(gè)中斷需要服務(wù)的話,程序員可以設(shè)置EMI位及INTC所對(duì)應(yīng)的位來(lái)允許中斷嵌套服務(wù)。如果堆棧已滿,該中斷請(qǐng)求將不會(huì)被響 應(yīng),即使相關(guān)的中斷被允許,也要到堆棧指針發(fā)生遞減時(shí)才會(huì)響應(yīng)。如果需要立即得到中斷服務(wù),則必須避免讓堆棧飽和。
所有的中斷均 具有喚醒功能,當(dāng)一個(gè)中斷被服務(wù),會(huì)產(chǎn)生一個(gè)控制傳送,通過(guò)將程序計(jì)數(shù)器(PC)壓入堆棧,然后轉(zhuǎn)移到中斷服務(wù)程序的入口,只有程序計(jì)數(shù)器(PC)的內(nèi)容 能壓入堆棧。如果寄存器和狀態(tài)寄存器的內(nèi)容被中斷服務(wù)程序改變,從而破壞主程序的預(yù)定控制,那么程序員必須事先將這些數(shù)據(jù)備份起來(lái)。
| HT48R05A-1中斷控制寄存器 | |||
| 寄存器 | 位 | 符號(hào) | 功能 |
| INTC (0BH) |
0 | EMI | 主中斷控制位,允許=1,禁止=0。 |
| 1 | EEI | 外部中斷控制位,允許=1,禁止=0。 | |
| 2 | ETI | 定時(shí)/計(jì)數(shù)器中斷控制位,允許=1,禁止=0。 | |
| 3 | - | 未定義,讀出為“0”。 | |
| 4 | EIF | 外部中斷請(qǐng)求標(biāo)志位,有效=1,無(wú)效=0。 | |
| 5 | TF | 定時(shí)/計(jì)數(shù)器中斷請(qǐng)求位,有效=1,無(wú)效=0。 | |
| 6 | - | 未定義,讀出為0。 | |
| 7 | 7 | 未定義,讀出為0。 | |
外部中斷是由INTC引腳上的電平由高到低的變化觸發(fā)的,相關(guān)的中斷請(qǐng)求位(EIF、INTC的第4位)被置位,當(dāng)中斷允許,堆棧未滿,一個(gè)外部中斷觸發(fā)時(shí),將會(huì)產(chǎn)生地址04H的子程序調(diào)用。中斷請(qǐng)求標(biāo)志(EIF)位和EMI位將會(huì)被清除來(lái)禁止中斷嵌套。
內(nèi) 部定時(shí)/計(jì)數(shù)器中斷發(fā)生時(shí),會(huì)設(shè)置定時(shí)/計(jì)數(shù)器中斷請(qǐng)求標(biāo)志位(TF、INTC的第5位),中斷請(qǐng)求是由內(nèi)部定時(shí)器溢出產(chǎn)生的。當(dāng)中斷允許,堆棧未滿,并 且TF已被置位,就會(huì)產(chǎn)生地址08H的子程序調(diào)用,該中斷請(qǐng)求標(biāo)志位(TF)被復(fù)位并且EMI位被清除。以便禁止中斷嵌套。
單片 機(jī)在執(zhí)行中斷子程序期間,其它的中斷響應(yīng)會(huì)被暫停,直到RETI指令被執(zhí)行或是EMI和相關(guān)的中斷控制位被置位(堆棧未滿時(shí))。若要從中斷子程序返回時(shí), 只要執(zhí)行RET或RETI指令即可,RETI指令將會(huì)自動(dòng)置位EMI位來(lái)允許中斷服務(wù),而RET則不能自動(dòng)置位EMI。
若中斷在兩個(gè)連續(xù)的T2脈沖的上升沿間發(fā)生,同時(shí)中斷響應(yīng)被允許的話,那么在兩個(gè)T2脈沖后,該中斷會(huì)被服務(wù),如果同時(shí)發(fā)生中斷服務(wù)請(qǐng)求,那么下列表中列出了中斷服務(wù)優(yōu)先等級(jí),這種優(yōu)先等級(jí)也可以通過(guò)EMI位的復(fù)位來(lái)屏蔽。
| HT48R05A-1中斷優(yōu)先級(jí) | |||
| NO | 中斷源 | 優(yōu)先級(jí) | 中斷 |
| A | 外部中斷 | 1 | 04H |
| B | 定時(shí)/計(jì)數(shù)器溢出 | 2 | 08H |
中斷控制寄存器(INTC)其RAM地址是0BH,由定時(shí)/計(jì)數(shù)器中斷請(qǐng)求標(biāo)志位(TF)、外中斷請(qǐng)求標(biāo)志位 (EIF)、定時(shí)/計(jì)數(shù)器允許位(ETI)、外部中斷允許位(EEI)和主中斷允許位(EMI)組成。EMI、EEI和ETI是用來(lái)控制中斷的允許/禁止 的狀態(tài)的,這些位防止正在進(jìn)行中斷服務(wù)中的中斷請(qǐng)求。一旦中斷請(qǐng)求標(biāo)志位(EEI、ETI)被置位,它們將在INTC中被保留下來(lái),直到相關(guān)中斷被服務(wù)或 由軟件指令清除。
建議不要在中斷子程序中使用“CALL”指令調(diào)用子程序,因?yàn)樗赡軙?huì)破壞原來(lái)的控制序列,而中斷經(jīng)常隨機(jī)發(fā)生 或某一個(gè)確定的應(yīng)用程序可能要求立即服務(wù),基于上述情況,如果只剩下一個(gè)堆棧,若此時(shí)中斷不能很好的被控制,而且在這個(gè)中斷服務(wù)程序中又執(zhí)行了CALL子 程序調(diào)用,則會(huì)造成堆棧溢出而破壞原先的控制序列。





