Tại sao khi viết chương trình ngắt trong MPLAB (7.31) mặc dù đã theo đúng khung chương trình ngắt do bác falleaf giới thiệu nhưng chưong trình vẫn bị Faile(Lỗi).
Cụ thể là viết chương trình như sau :
Code:
PROCESSOR PIC16F877
INCLUDE <P16F877.INC>
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _LVP_OFF & _CPD_OFF
DATAOUT EQU 0x20
W_save EQU 0x21
PCLATH_SAVE EQU 0X22
STATUS_SAVE EQU 0X23
FSR_SAVE EQU 0X24
ORG 0x0000
GOTO batdau
ORG 0x004 ;<<=======================(thay bởi 0x005 thì thành công)
GOTO ISR_NGAT
ISR_NGAT
MOVWF W_save
MOVWF STATUS_SAVE
MOVF PCLATH,W
CLRF PCLATH
MOVF FSR,W
MOVWF FSR_SAVE
BTFSS PIR1,PSPIF
GOTO thoat
BCF PIR1,PSPIF
BSF STATUS,RP0
BTFSC TRISE,OBF
GOTO thoat
BCF STATUS,RP0
MOVF DATAOUT,0
MOVWF PORTD
thoat
BCF STATUS,RP0
MOVF FSR_SAVE
MOVWF FSR
MOVF PCLATH_SAVE
MOVWF PCLATH
SWAPF STATUS_SAVE,W
MOVWF STATUS
SWAPF W_save,1
SWAPF W_save,0
RETFIE
ORG 0x000
CLRF STATUS
CLRF PCLATH
GOTO batdau
ORG 0x050
batdau
BCF STATUS,RP1
BCF STATUS,RP0
CLRF PORTD
BSF STATUS,RP0
MOVLW B'00010111'
MOVWF TRISE
MOVLW 0x006
MOVWF ADCON1
BSF PIE1,PSPIE
BCF STATUS,RP0
BSF INTCON,GIE
BSF INTCON,PEIE
MOVLW b'01010101'
MOVWF DATAOUT
MOVF PORTD
GOTO $
END
Nếu dòng ORG 0x004 (ở đầu chương trình ngắt) ta thay 0x004 bởi 0x005 thì trình dịch báo sucess.
Phiền các bạn giải thích hộ ?
Thanks !