PIC16F87X單片機(jī)中斷系統(tǒng)應(yīng)用須關(guān)注的問(wèn)題
目前在世界一些著名的單片機(jī)產(chǎn)品系列中,PIC16F87X系列單片機(jī)是芯片內(nèi)部包含有外圍設(shè)備模塊數(shù)量最多的單片機(jī)品種之一。PIC16F874和PIC16F877單片機(jī)的芯片內(nèi)部集成了15個(gè)外圍設(shè)備模塊;PIC16F873和PIC16F876單片機(jī)的芯片內(nèi)部集成了12個(gè)外圍設(shè)備模塊。在最近推出的該系列的新型號(hào)中, PIC16F870單片機(jī)的芯片內(nèi)部集成了10個(gè)外圍設(shè)備模塊;PIC16F871單片機(jī)的芯片內(nèi)部集成了13個(gè)外圍設(shè)備模塊;PIC16F872單片機(jī)的芯片內(nèi)部也集成了10個(gè)外圍設(shè)備模塊(比PIC16F870多了1個(gè)USART模塊,少了1個(gè)SSP模塊)。
本文引用地址:http://2s4d.com/article/171664.htm這些外圍設(shè)備模塊在啟用時(shí)以及在工作過(guò)程中,都或多或少地需要CPU參與控制、協(xié)調(diào)或交換數(shù)據(jù)等各種服務(wù)工作。由于CPU的運(yùn)行速度非常高,而各個(gè)外圍設(shè)備模塊的工作速度卻非常低,況且這些外圍設(shè)備模塊也不是頻繁地要求CPU對(duì)其服務(wù)。因此,通常采取一種讓眾多外圍設(shè)備模塊共享1個(gè)CPU,并且能夠及時(shí)得到CPU服務(wù)的調(diào)度方法 ——中斷。
PIC系列單片機(jī)是當(dāng)今世界上很有影響力的精簡(jiǎn)指令集(RISC)微控制器,具有豐富的中斷功能。其中功能強(qiáng)大的中、高擋型號(hào)的中斷源有18種之多。在PIC單片機(jī)家族中,排位屬于中上水平的PIC16F87X子系列單片機(jī)具備的中斷源多達(dá)14種。其中,單片機(jī)的型號(hào)不同,中斷源的種類(lèi)、個(gè)數(shù)也不同,如表1所列。其不足之處是:中斷矢量只有1個(gè),并且各個(gè)中斷源之間也沒(méi)有優(yōu)先級(jí)別之分,不具備非屏蔽中斷。
從表1中可以看出,各中斷源基本上都是與各個(gè)外圍設(shè)備模塊相對(duì)應(yīng)的。其中,多數(shù)外圍設(shè)備模塊對(duì)應(yīng)著1個(gè)中斷源(比如定時(shí)器/計(jì)數(shù)器TMR0模塊),有的外圍設(shè)備模塊對(duì)應(yīng)著2個(gè)中斷源(比如通用同步/接收/發(fā)送器SCI模塊),也有的外圍設(shè)備模塊沒(méi)有中斷源與之對(duì)應(yīng)(比如輸入/輸出端口RA和RC模塊),還有的中斷源沒(méi)有外圍設(shè)備模塊與之對(duì)應(yīng)(比如外部觸發(fā)中斷源INT)。
二、 PIC16F87X的中斷硬件邏輯
在PIC16F87X的子系列中,具體型號(hào)不同,中斷邏輯電路也存在著差異,中斷源的種類(lèi)和個(gè)數(shù)也不同:最多的具備 14種中斷源;最少的具備10種中斷源(詳見(jiàn)表1)。其中并行端口模塊和并行端口中斷源,只有40腳封裝的型號(hào)(PIC16F871、PIC16F874 和PIC16F877)才會(huì)具備;而對(duì)于28腳封裝的型號(hào)(PIC16F870、PIC16F872、PIC16F873和PIC16F876)則不具備。
PIC16F87X系列單片機(jī)中斷系統(tǒng)的邏輯電路如圖1所示。每一種中斷源對(duì)應(yīng)著1個(gè)中斷標(biāo)志位(記為XXXF,F(xiàn)是Flag的第1 個(gè)英文字母)和1個(gè)中斷屏蔽位或者叫中斷使能位(記為XXXE,E是Enable的第1個(gè)英文字母)。中斷源產(chǎn)生的中斷標(biāo)志信號(hào)是否得以向前傳遞,將受控于對(duì)應(yīng)的中斷屏蔽位。每一個(gè)中斷標(biāo)志位都對(duì)應(yīng)著1個(gè)觸發(fā)器。當(dāng)中斷源申請(qǐng)CPU中斷時(shí),與之對(duì)應(yīng)的觸發(fā)器就由硬件自動(dòng)置位,而該觸發(fā)器的清零是由用戶安排程序來(lái)實(shí)現(xiàn)的;每一個(gè)中斷屏蔽位也對(duì)應(yīng)著1個(gè)觸發(fā)器。該觸發(fā)器的置位和清零均是由用戶程序完成的。
圖1描繪的邏輯電路是1個(gè)由簡(jiǎn)單的門(mén)電路構(gòu)成的組合邏輯電路。將全部14個(gè)中斷源按2個(gè)梯隊(duì)并列排開(kāi),第1梯隊(duì)中只安排了3個(gè)中斷源,其余的中斷源全部安排到第2梯隊(duì)中。這樣做是為了與早期的 PIC系列單片機(jī)型號(hào)相兼容(前些年研制出的單片機(jī)型號(hào)片內(nèi)配置的外圍設(shè)備模塊數(shù)量較少,相應(yīng)的中斷源的數(shù)量自然也就少,比如PIC16C61只有第1梯隊(duì)中的3個(gè)中斷源)。近期研制的一些PIC單片機(jī)新型號(hào)是在原有的單片機(jī)芯片基礎(chǔ)之上進(jìn)行一些功能擴(kuò)展而得來(lái)的。
所有的中斷源都受全局中斷屏蔽位(也可以稱為總屏蔽位)GIE的控制。第1梯隊(duì)的中斷源不僅受全局中斷屏蔽位的控制,還要受各自中斷屏蔽位的控制;第2梯隊(duì)的中斷源不僅受到全局中斷屏蔽位和各自中斷屏蔽位的控制,還要額外受到1個(gè)外設(shè)中斷屏蔽位PEIE的控制。
評(píng)論