CanhChimMa
04-06-2010, 03:19 AM
Đoạn vào ngắt và ra ngắt này em copy của anh falleaf dungf cho P16F628A, nhưng luôn báo lỗi =.=. Các anh xem giùm xem cần chỉnh sửa chỗ nào. Mỗi lệnh ấy có ý nghĩa gì vậy ạ?
;Doan ma bat buoc de vao ngat
;-------------------------------------------
Interrupt
MOVWF W_SAVE ;W_SAVE(bank unknown!) = W [Báo lỗi]
SWAPF STATUS, W
CLRF STATUS ; force bank 0 for remainder of handler [Báo lỗi]
MOVWF STAT_SV ; STAT_SV = swap_nibbles( STATUS ) [Báo lỗi]
; STATUS = 0
MOVF PCLATH, W ;[Báo lỗi]
MOVWF PCH_SV ; PCH_SV = PCLATH [Báo lỗi]
CLRF PCLATH ; PCLATH = 0
MOVF FSR, W ;[Báo lỗi]
MOVWF FSR_SV ; FSR_SV = FSR [Báo lỗi]
; 10 cycles from interrupt to here!
;-----------------------------------
;Doan chuong trinh ngat
;-----------------------------------
; cac ban se viet chuong trinh ngat o day
;--------------------------------------------------
;Doan ma bat buoc de ket thuc ngat
;--------------------------------------------------
MOVF FSR_SV, W ;[Báo lỗi]
MOVWF FSR ; FSR = FSR_SV
MOVF PCH_SV, W ;[Báo lỗi]
MOVWF PCLATH ; PCLATH = PCH_SV
SWAPF STAT_SV, W ;[Báo lỗi]
MOVWF STATUS ; STATUS = swap_nibbles( STAT_SV ) [Báo lỗi]
SWAPF W_SAVE, F ;[Báo lỗi]
SWAPF W_SAVE, W ; W = swap(swap( W_SAVE )) (no change Z bit)[Báo lỗi]
BSF INTCON, GIE
RETFIE
Thanks rất nhiều.
;Doan ma bat buoc de vao ngat
;-------------------------------------------
Interrupt
MOVWF W_SAVE ;W_SAVE(bank unknown!) = W [Báo lỗi]
SWAPF STATUS, W
CLRF STATUS ; force bank 0 for remainder of handler [Báo lỗi]
MOVWF STAT_SV ; STAT_SV = swap_nibbles( STATUS ) [Báo lỗi]
; STATUS = 0
MOVF PCLATH, W ;[Báo lỗi]
MOVWF PCH_SV ; PCH_SV = PCLATH [Báo lỗi]
CLRF PCLATH ; PCLATH = 0
MOVF FSR, W ;[Báo lỗi]
MOVWF FSR_SV ; FSR_SV = FSR [Báo lỗi]
; 10 cycles from interrupt to here!
;-----------------------------------
;Doan chuong trinh ngat
;-----------------------------------
; cac ban se viet chuong trinh ngat o day
;--------------------------------------------------
;Doan ma bat buoc de ket thuc ngat
;--------------------------------------------------
MOVF FSR_SV, W ;[Báo lỗi]
MOVWF FSR ; FSR = FSR_SV
MOVF PCH_SV, W ;[Báo lỗi]
MOVWF PCLATH ; PCLATH = PCH_SV
SWAPF STAT_SV, W ;[Báo lỗi]
MOVWF STATUS ; STATUS = swap_nibbles( STAT_SV ) [Báo lỗi]
SWAPF W_SAVE, F ;[Báo lỗi]
SWAPF W_SAVE, W ; W = swap(swap( W_SAVE )) (no change Z bit)[Báo lỗi]
BSF INTCON, GIE
RETFIE
Thanks rất nhiều.