View Single Post
Old 26-07-2012, 05:51 PM   #22
dinhquanghiep
Nhập môn đệ tử
 
Tham gia ngày: Nov 2011
Bài gửi: 1
:
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
;====================================================================================================
em có thắc mắc ở chương trình trên, em không hiểu dòng này:

MOVWF W_SAVE ;W_SAVE(bank unknown!) = W

giả sử các biến W_SAVE,STAT_SV,PCH_SV được khai báo ở bank0 (địa chỉ từ 0X20 đến 0x7F), khi chương trình chính đang làm việc ở bank 2 thì xảy ra ngắt vậy thì câu lệnh trên không thực hiện đúng do biến W_SAVE được lưu ở bank0, các anh giải thik giúp em chỗ này với ạ
dinhquanghiep vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn