View Single Post
Old 20-06-2005, 02:27 AM   #14
zero2one
Đệ tử 1 túi
 
Tham gia ngày: Jun 2005
Bài gửi: 19
:
Code:
;============================================================================================
INTERRUPT

;-------------------------------------------
;Doan ma bat buoc de vao ngat
;-------------------------------------------

			MOVWF	W_SAVE          	;W_SAVE(bank unknown!) = W
         			SWAPF   	STATUS,	W
         			CLRF    	STATUS  		; force bank 0 for remainder of handler
         			MOVWF 	STAT_SV		; STAT_SV = swap_nibbles( STATUS )
                                 					; STATUS = 0
         			MOVF	PCLATH,	W
         			MOVWF	PCH_SV    	; PCH_SV = PCLATH
		         	CLRF    	PCLATH  	; PCLATH = 0
         			MOVF   	FSR,	W
         			MOVWF	FSR_SV		; FSR_SV = FSR
        						; 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
	      	   	MOVWF 	FSR		; FSR = FSR_SV
         			MOVF    	PCH_SV,	W
		         	MOVWF	PCLATH		; PCLATH = PCH_SV
         			SWAPF	STAT_SV,	W
		         	MOVWF  STATUS  		; STATUS = swap_nibbles( STAT_SV )
         			SWAPF   	W_SAVE,	F
   		      	SWAPF  	W_SAVE,	W	; W = swap(swap( W_SAVE )) (no change Z bit)

		         	BSF	INTCON,	GIE
			RETFIE
;====================================================================================================
theo em biết thì khi vào chương trình ngắt ta phải lưu lại giá trị của hai thanh ghi : STATUS và W để sau khi thực hiện trình phục vụ ngắt sẽ khôi phục lại. Còn PC thì được tự động lưu vào STACK. Vậy, các tác động vào PCLATH... trên đoạn CODE của bác là nhằm mục đích gì vậy ?

còn nữa : CLRF STATUS
thì chưa chắc STATUS = 0 ! vì trong STATUS có một số bit không chịu tác động - giá trị của chúng không đổi ?

em mới học, mong bác chỉ rõ hơn.
zero2one vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn