Chào mọi người!
Em có đoạn khai báo ngắt timer1 như sau trong chương trình đồ án của mình:
Code:
CLRF T1CON
CLRF INTCON
CLRF TMR1H
CLRF TMR1L
BSF STATUS,RP0
CLRF PIE1
BSF PIE1,TMR1IE
BCF STATUS,RP0
CLRF PIR1
MOVLW 0X00
MOVWF T1CON
MOVLW 0XC3
MOVWF TMR1H
MOVLW 0X50
MOVWF TMR1L
BSF T1CON,TMR1ON
BSF INTCON,TMR1IE
BSF INTCON,PEIE
BSF INTCON,GIE
Trong chương trình phục vụ ngắt ở 0004h. Em có viết đoạn chương trình sau :
Code:
BTFSS PIR1,TMR1IF
GOTO exit_int
BCF T1CON,TMR1ON
CLRF TMR1L
CLRF TMR1H
MOVLW 0XC3
MOVWF TMR1H
MOVLW 0X50
MOVWF TMR1L
BSF T1CON,TMR1ON
BCF PIR1,TMR1IF
DECFSZ demtimer1,1
GOTO tiep1
GOTO tiep2
tiep1:
MOVLW B'10100110'
MOVWF PORTB
MOVLW D'20'
MOVWF demtimer1
GOTO exit_int
tiep2:
MOVLW B'11000110'
MOVWF PORTB
exit_int
MOVF FSR_save,W
MOVWF FSR
MOVF PCLATH_save
MOVWF PCLATH
SWAPF STATUS_save,W
MOVWF STATUS
SWAPF W_save,1
SWAPF W_save,0
RETFIE
Đoạn chương trình trên em viết hơi "loằng ngoằng", chỉ để chứng tỏ một điều rằng : ngắt timer1 ở trên chỉ xảy ra có một lần, nghĩa là đoạn kích timer1 chạy lại trong chương trình phục vụ ngắt không hoạt động.
Cũng chương trình trên, em copy ra thành một chương trình riêng biệt thì chạy tốt.
Em không biết có những yếu tố nào làm cho việc kích khởi timer1 hoạt động lại trong chương trình phục vụ ngắt "không bao giờ" hoạt động được.
Rất mong được sự hướng dẫn as soon as possible của mọi người.
Chân thành cảm ơn.
D.
À quên, biến demtimer1 em đã khai báo trước bằng 20