Re: 中斷服務程式執行到一半,若外部的中斷再發生一次. ??
|
||||
---|---|---|---|---|
版主
|
本網站就是需要像 Beee 的高手來支援,個人力量及所學畢竟有限。透過經驗交流相互解決問題是本網站的基本精神。
謝謝Beee的支持。
發表於: 2007/5/6 15:23
|
|||
|
Re: 中斷服務程式執行到一半,若外部的中斷再發生一次. ??
|
||||
---|---|---|---|---|
資深會員
|
謝謝 版大 1. 的說明 我從沒想到這一層面
鄭重聲明一點 我是特地抓版大的 BUG 的 這是因為 版大的影響力太大 如稍有錯誤 將會影響很多人的學習經驗 更何況又能從中挖到一些寶藏 對不起了 ! 版大..... 又加重您的壓力了
發表於: 2007/5/5 13:04
|
|||
|
Re: 中斷服務程式執行到一半,若外部的中斷再發生一次. ??
|
||||
---|---|---|---|---|
資深會員
|
版主 您錯了 ! 如下列程式....
所以 ISR 基本上要盡快處理 免得錯過 第2 , 3 , 4.....次的旗標設立 ; nothing todo but TMR0 RE_ENTER ; File name : RE_ISR.ASM list p=16f684 #include <p16F684.INC> __CONFIG _CP_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT & _PWRTE_ON & _MCLRE_OFF CBLOCK 0X70 TT1 , TT2 , F1 , X1 , X2 , XX ENDC #DEFINE FF TT1 , 0 ;=================================================== ORG 0X00 START: NOP GOTO MAIN ORG 0X04 ISR: BTFSC FF ; 只有第一次進入會托時間 GOTO END_ISR ISR_1: DECFSZ TT1 , F ; 托時間 GOTO ISR_1 ; DECFSZ TT2 , F ; GOTO ISR_1 ; BSF FF END_ISR: INCF XX , F BCF INTCON , T0IF RETFIE MAIN: BANKSEL TMR0 ; BANK 0 CLRF TT1 CLRF TT2 CLRF X1 CLRF XX MOVLW 0X01 MOVWF X2 CLRF TMR0 BANKSEL OPTION_REG ; BANK 1 MOVLW 0X00 ; TMR0 PRESCALE 1:2 MOVWF OPTION_REG ; MOVLW 0XA0 ; ENABLE TMR0 MOVWF INTCON BANKSEL TMR0 ; BANK 0 M1: DECFSZ X1 , F ; GOTO M1 ; 256 * 3 = 768 DECFSZ X2 , F ; GOTO M1 ; 第一次中斷後 再二百多 CYCLE 才結束迴圈 CLRF INTCON ; DISABLE INT ; XX 旗標只被 設定 一次 NOP ; NOP GOTO $ ; DEAD LOOP END
發表於: 2007/5/5 7:09
|
|||
|
Re: 中斷服務程式執行到一半,若外部的中斷再發生一次. ??
|
||||
---|---|---|---|---|
版主
|
如果再中斷程式裡又有一個中斷發生,如果沒有特別的設定動作則第二個會被保留直到目前的中斷完成以 RETFIE 返回後,程式會立即跳到中斷去來處理第二次的中斷。基本上發生了幾次中斷都會被處理,但是處理方式是一個接一個的處理。
發表於: 2007/5/2 13:54
|
|||
|
Re: 中斷服務程式執行到一半,若外部的中斷再發生一次. ??
|
||||
---|---|---|---|---|
資深會員
|
視旗標而定...
如先清除旗標 , 再發生第二次中斷 , 則跳出ISR 後 , 會立刻再進入 ISR 如發生第二次中斷 再清除旗標 則會被忽略 重點為 FLAG & RETFIE 如未 RETFIE 則被認定尚在 ISR , 無法重新進入 ISR 跳出 ISR 後 , 如有 FLAG 未清除 , 則立即進入 ISR
發表於: 2007/5/2 7:22
|
|||
|
中斷服務程式執行到一半,若外部的中斷再發生一次. ??
|
||||
---|---|---|---|---|
新會員
|
中斷服務程式執行到一半時 此時如果外部的中斷再發生一次 (同一個中斷source) 這時候會發生什麼事情? 此時第2個中斷會被忽略嗎?? 還是仍然會被執行呢?
發表於: 2007/5/2 0:41
|
|||
|