會員登陸
網站導航
最新下載
- Microchip 程式... (Tue, 17-Apr-2018)
- Microchip 程式... (Mon, 09-Apr-2018)
- Microchip2018微... (Fri, 19-Jan-2018)
- Microchip 2018 ... (Tue, 19-Dec-2017)
- 2017 精英年會特... (Wed, 11-Oct-2017)
- 2017 秋 研討會... (Wed, 11-Oct-2017)
- 2017 暑期微控制... (Fri, 07-Jul-2017)
- ATM6 講義與實作... (Tue, 27-Jun-2017)
- ATM5 講義與實作... (Tue, 27-Jun-2017)
- ATM4 講義與實作... (Tue, 27-Jun-2017)
訪問統計 (自2012/5/3)
|
正在流覽:
1 名訪客
|
PIC16F819 中斷問題 |
|
新會員 
註冊日期: 2017/02/13 16:39
所屬群組:
註冊會員
文章: 3
等級: 1; EXP: 10 HP : 0 / 2 MP : 1 / 9
|
您好! 就選取 PIC16F819 作特性測試,發現如下問題。希望同業先進不吝賜教有助解決困難,謝謝。
*不能從中斷後返回主程式,我使用 TIMER 溢位作中斷試驗,但中 斷後只跳往 ORG 4 位置不能 RETFIE 。 * 使用 MPLAB IDE : V7.30 PROGRAMMER: PICSTART PLUS
測試中斷程式如下:
INT_VAR UDATA_SHR 0x70 w_temp RES 1 ; variable used for context saving status_temp RES 1 ; variable used for context saving TMR EQU H'1' STATUS EQU H'3' RA EQU H'5' RB EQU H'6' OPTI EQU H'81' TRISA EQU H'85' TRISB EQU H'86' INTCON EQU H'0B' ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DELAY_A EQU H'21' DELAY_B EQU H'22' DELAY_C EQU H'23' ;********************************************************************** RESET_VECTOR CODE 0x000 ; processor reset vector goto main ; go to beginning of program INT_VECTOR CODE 0x004 ; interrupt vector location movwf w_temp ; save off current W register contents movf STATUS,w ; move status register into W register movwf status_temp ; save off contents of STATUS register BCF INTCON,7 ;DISABLE GIE BSF RB,0 ; isr code can go here or be located as a call subroutine elsewhere movf status_temp,w ; retrieve copy of STATUS register movwf STATUS ; restore pre-isr STATUS register contents swapf w_temp,f swapf w_temp,w ; restore pre-isr W register contents retfie ; return from interrupt ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; main ; remaining code goes here CLRF STATUS CLRF INTCON BSF STATUS,5 MOVLW B'00000111' ;SET OPTION_REG MOVWF OPTI MOVLW B'00000000' MOVWF TRISB CLRF STATUS BSF INTCON,5 ;ENABLE TMR0IE CLRF RB CLRF TMR BSF INTCON,7 ;ENABLE GIE TE BTFSS RB,0 GOTO TE CALL DELAY BCF RB,0 SH GOTO SH ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; initialize eeprom locations EE CODE 0x2100 DE 0x00, 0x01, 0x02, 0x03 DELAY MOVLW B'10000111' MOVWF DELAY_C DDDD MOVLW B'11111111' MOVWF DELAY_B CCC MOVLW B'11111111' MOVWF DELAY_A A DECFSZ DELAY_A,1 GOTO A DECFSZ DELAY_B,1 GOTO CCC DECFSZ DELAY_C,1 GOTO DDDD RETURN END ; directive 'end of program'
2017/02/15 01:35
|
|
|
Re: PIC16F819 中斷問題 |
|
資深會員 
註冊日期: 2009/04/07 13:30
所屬群組:
註冊會員
文章: 161
等級: 11; EXP: 74 HP : 0 / 268 MP : 53 / 7099
|
哦 ~ ~ ~ !
這跟它本身所設計的中斷流程控制有關,
因為只有一個中斷入口,
所以當發生中斷時,
進入 0004 中斷程序時, 已經控制令 GIE = 0 了,
避免在執行中斷程序時, 出現了又要再中斷的情形,
而且在中斷尾端執行 RETFIE 要離開返回時,
會重新令 GIE = 1, 好讓中斷功能可以有效。
所以, 雖然你的想法應該是沒錯的, 但是跟它的設計沖突了.
你可以先把中斷裡 GIE = 0 改為 TMR0IE = 0 試試。
2017/02/15 09:14
|
|
|
Re: PIC16F819 中斷問題 |
|
新會員 
註冊日期: 2017/02/13 16:39
所屬群組:
註冊會員
文章: 3
等級: 1; EXP: 10 HP : 0 / 2 MP : 1 / 9
|
HI, OUO. 多謝提供意見,但該程式設計只希望測試16F819進出中斷之特性, 所以只是一次性的進出,OFF GIE 是必要設定,如果一切正常。RETFIE 後RB,0在數秒後輸出是 0。
2017/02/15 11:43
|
|
|
Re: PIC16F819 中斷問題 |
|
資深會員 
註冊日期: 2004/08/16 13:52
來自 台灣台南
所屬群組:
註冊會員
文章: 772
等級: 25; EXP: 7 HP : 0 / 601 MP : 257 / 24068
|
進中斷之後必須把中斷旗標清楚,不然會一直進中斷. PIC 不會幫你清旗標,你要自己做.
TMR0IF = 0;
2017/02/16 10:50
|
|
|
Re: PIC16F819 中斷問題 |
|
新會員 
註冊日期: 2017/02/13 16:39
所屬群組:
註冊會員
文章: 3
等級: 1; EXP: 10 HP : 0 / 2 MP : 1 / 9
|
HI,YIMING
多謝提供意見,但當進入中斷後 GIE 早設定為 0 ,絕不可能再發生二次中斷。 16-2-17
2017/02/16 12:26
|
|
|
Re: PIC16F819 中斷問題 |
|
資深會員 
註冊日期: 2004/08/16 13:52
來自 台灣台南
所屬群組:
註冊會員
文章: 772
等級: 25; EXP: 7 HP : 0 / 601 MP : 257 / 24068
|
旗標沒清除,離開中斷,會立刻又中斷.
2017/02/16 20:40
|
|
您無法在此發表文章
您可以在此觀看文章
您無法回覆文章
您無法編輯自己的文章
您無法刪除自己的文章
您無法發起投票調查
您無法在此投票
您無法上傳附加檔案
您無法不經審核直接發表文章
|
搜尋
Microchip連結
網頁捷徑
2018 Winter Elite 報名
教育訓練
其它網站連結
|