PIC單片機的中斷問答
與51或者其他系列的單片機相比,PIC單片機的中斷機制有其特殊之處,針對我們一些初學者存在的一些問題和疑惑,我在此做一個個人總結(jié),不當?shù)牡胤剑堈居褌冎刚?/P>
先摘引三個對PIC中斷理解的回帖,然后我再對中斷活動的過程、應該注意的事項、及一個疑惑進行較詳細的總結(jié)和解釋。
---------------
johnfrank:關于pic中斷有些不明白的地方
借用大蝦的程序;
;********************中斷服務代碼
btfssINTCON,T0IE;判斷是否為T0中斷
gotoother_int
btfssINTCON,T0IF;it’sthetimeofT0int
gotoother_int
bcfINTCON,T0IF;是T0中斷,清除中斷標志
movlw0x10;微秒的高位字節(jié)加上定時時間256x16分頻=4096=0x1000的高位(0x10)
addwfus+1
gotoend_int
other_int;可添加其他中斷服務代碼
nop;otherisrcodecanbeadded
;**********************************
end_int;恢復現(xiàn)場
=================
假如又有新的中斷正好在這段程序中間產(chǎn)生
btfssINTCON,T0IF
gotoother_int
bcfINTCON,T0IF
程序豈不是要出錯跑飛了
johnfrank:
謝謝你的關注。
我講一下自己的理解,權(quán)做回答,不當之處,還請站友們指點。
pic中檔單片機系列沒有“硬件中斷優(yōu)先級別”(請允許我這樣說),含義是指:當內(nèi)核正在處理當前的中斷服務A時,在這個期間里,其他任何中斷的產(chǎn)生,只能使其標志位xxIF置1,不能剝奪當前中斷服務對CPU的占用權(quán)(反應在PC指針不能被新的中斷改變指向),必須等到當前中斷服務處理A完畢,然后,根據(jù)gotoother_int語句的轉(zhuǎn)向,依次判斷。若新發(fā)生的中斷處理代碼在中斷服務A之后(前、后指代碼在ROM中地址順序,越大越后),則進行新發(fā)生的中斷處理;若恰好新發(fā)生的中斷服務代碼在剛被處理完畢的中斷服務A代碼之前,則將不予理會,(即程序指針PC不會在中斷處理代碼空間中又返回到0004H的入口),等到執(zhí)行到retfie后返回主程序,然后再次進入中斷入口0004H...
之所以說其無“硬件中斷優(yōu)先級別”是與“軟件中斷優(yōu)先級別”對應的,通過中斷服務代碼對中斷標志和IE的檢測的先后,可設立優(yōu)先級。
評論