PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   MPASM (http://www.picvietnam.com/forum/forumdisplay.php?f=34)
-   -   Học PIC trong 1 ngày (Upd. 02/11/2005) (http://www.picvietnam.com/forum/showthread.php?t=183)

dinhquanghiep 26-07-2012 05:51 PM

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 ạ


Múi giờ GMT. Hiện tại là 07:49 PM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam