Добавлено: Чт окт 08, 2009 07:35:03
В прерывании достаточно сохранить и потом восстановить контекст: помимо W, status сохрани FSR и PCLATH.
Один в один как в даташите.
А прерывания нужны для удобства. Был у меня один знакомый который их тоже непризнавал... Но он программы не пишет.
Код: Выделить всё
; вход по прерыванию
org 4
PUSH MOVWF W_TEMP ; Copy W to TEMP register,
SWAPF STATUS, W ; Swap status to be saved into W
MOVWF STATUS_TEMP ; Save status to STATUS_TEMP register
MOVF PCLATH, W
MOVWF PCLATH_TEMP
MOVF FSR, W
MOVWF FSR_TEMP
; --------------------------------
banksel 0
clrf pclath
;
.................
POP:
MOVF FSR_TEMP, W
MOVWF FSR
MOVF PCLATH_TEMP, W
MOVWF PCLATH
SWAPF STATUS_TEMP, W ; Swap nibbles in STATUS_TEMP register
; and place result into W
MOVWF STATUS ; Move W into STATUS register
; (sets bank to original state)
SWAPF W_TEMP, F ; Swap nibbles in W_TEMP and place result in W_TEMP
SWAPF W_TEMP, W ; Swap nibbles in W_TEMP and place result into W
retfie ; GIE должен тут установиться.
;
А прерывания нужны для удобства. Был у меня один знакомый который их тоже непризнавал... Но он программы не пишет.