Đoạn code phục vụ ngắt bạn thử làm như sau:
Code:
BTFSS PIR1,TMR1IF
GOTO exit_int
BCF PIR1,TMR1IF
CLRF TMR1L
CLRF TMR1H
MOVLW 0XC3
MOVWF TMR1H
MOVLW 0X50
MOVWF TMR1L
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
Cũng không chắc sửa như thế đã chạy được, nhưng cách viết này nó "chính thống" hơn cách viết của bạn. Việc bạn xoá rồi lại đặt bít TMR1ON trong ngắt không có ý nghĩa gì cả. Vào ngắt bạn phải xoá cờ TMR1IF ngay. Ngoài ra, bạn có thể sử dụng MPLAB Simulator để mô phỏng và tìm lỗi.