Re: p16f877, 關TMR1中斷使用問題
|
||||
---|---|---|---|---|
高級會員
|
ORG 0x000 ; processor reset vector
clrf PCLATH ; 保證頁位元被清除 goto main ; 到程式開始位址 ;************************************** ;*** INTERRUPT SERVICE ROUTINE *** ;*** PROGRAM BY LEE-CHIN-WEI *** ;*** INITIAL DATE : 2003-06-09 *** ;************************************** ORG 0x004 ; 中斷向量位址 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 BTFSS INTCON,T0IF ; TIMER INT 0 FLAG == 1 ? GOTO END_INT ; NO THEN RETURN BCF INTCON,T0IF ; YES THEN CLEAR T0IF FLAG BSF F_TMAIN ; SET THE MAIN LOOP FLAG=1 MOVLW .6 MOVWF TMR0 ; isr code can go here or be located as a call subroutine elsewhere END_INT: 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 SERVICE ROUTINE ;*** INITIAL DATE 2003-06-09 ;********************************************* main CALL INIT_IO ; initial all IO port CALL CLEAR_ALL_MEMORY ; clear all memory CALL SYSTEM_INITIAL ; the system initial service routine LOOP: CALL KEY_SCAN ; KEY SCAN CALL KEY_DEBOUNCE_PROC ; KEY DEBOUNCE PROCESS CALL CHECK_SYSTEM_TIME ; CHECK THE SYSTEM TIME CALL FUN_PROC LOOP1: BTFSS F_TMAIN ; GOTO LOOP1 ; BCF F_TMAIN ; NOP ; GOTO LOOP ; ;************************************** ;*** SYSTEM INITIAL SERVICE ROUTINE *** ;*** INITIAL DATE : 2003-06-09 *** ;*** PROGRAM BY LEE-CHIN-WEI *** ;************************************** SYSTEM_INITIAL: BANKSEL OPTION_REG ;OPTION_REG IN RAM BANK 1這一點要特別注意 MOVLW B'00000011' ; 1:16 FOR TIMER MOVWF OPTION_REG BSF INTCON,GIE BSF INTCON,T0IE BANKSEL TMR0 MOVLW .6 MOVWF TMR0 RETLW 0 我想你可能忘了切BANK 我在systems_initial第一行註解你可以看一下
發表於: 2005/1/11 13:34
|
|||
|
Re: p16f877, 關TMR1中斷使用問題
|
||||
---|---|---|---|---|
高級會員
|
把程式貼上
這樣很難替你診斷
發表於: 2005/1/11 13:28
|
|||
|
p16f877, 關TMR1中斷使用問題
|
||||
---|---|---|---|---|
新會員
|
小弟最近才接觸PIC16F877。
那位先進有空時請不吝指導下列問題: 在設定Timer1 interrupt時遇到下列問題: 當Timer1 overflow時程式會直接回到 reset vector而不是到 interrupt vector。 小弟有再三確認已設定: movlw 0x00 movwf T1CON INTCON GIE, PEIE, 設為1 PIE1 TMR1IE 設為1 最後 t1con TMR1ON, 設為1。 以上。不知問題是發生在那裡。
發表於: 2005/1/11 12:35
|
|||
|