//Filename:int17cxx.h
/*InterruptcontextsaveandrestoreforPIC17C42
PIC17C42A,PIC17C43,PIC17C44,PIC17C752,PIC17C756
__Wimage變量可能并不需要保存,該變量出現(xiàn)在所提供的延時程序中,用于計算指針/陣列地址。
FSR0寄存器也用于計算指針/陣列RAM的地址。
這些變量是否需要保存取決于代碼的復雜程度。根據(jù)代碼要求,可修改這些指令。
*/
#pragmaoption-l
#asm
MACROPUSH
MOVFPALUSTA,ALUSTA;saveflags
MOV fp__WImage,WImage
MOV pfWREG,WREG
MOV pfBSR,BSR
MOV pfFSR0,FSR0
ENDM
#endasm
#definesave_context#asm(PUSH)
#asm
MACROPOP
MOV fpFSR0,FSR0
MOV fpBSR,BSR
MOV fpWREG,WREG
MOV fpWImage,__WImage
MOV fpALUSTA,ALUSTA;restoreflags
ENDM
#endasm
#definerestore_context#asm(POP)
#pragmaoption+l
標題:PIC16CXX4K字器件的C語言中斷保存/恢復語句
解答:
//Filename:int16c4k.h
/*PIC16C642,PIC16C662,PIC16C63,PIC16C65,PIC16C65A,PIC16C73,PIC16C73A,PIC16C74,PIC16C74A,PIC16C923,PIC16C924,PIC14000,PIC16C66,PIC16C67,PIC16C76,PIC16C77器件的中斷保存和恢復語句。
這些例程主要用于PIC14架構中程序存儲器為4k或8k的器件中。
__Wimage變量可能并不需要保存,該變量出現(xiàn)在所提供的延時程序中,用于計算指針/陣列地址。
FSR0寄存器也用于計算指針/陣列RAM的地址。
這些變量是否需要保存取決于代碼的復雜程度。根據(jù)代碼要求,可修改這些指令。
*/
#pragmaoption-l
#asm
MACROPUSH
MOV wfWREG;savecopywregister
MOV fSTATUS,w
bcfSTATUS,RP0;setbankto0
bcfSTATUS,RP1;
MOV wfSTATUS;savestatus
MOV fFSR,w;
MOV wfFSR;savecopyofFSR
MOV fPCLATH,w;
MOV wfPCLATH;savecopyofPCLATH
MOV f__WImage,w;
MOV wfWImage;savecopyof__WImage
ENDM
#endasm
#definesave_context#asm(PUSH)
#asm
MACROPOP
bcfSTATUS,RP0;ensurebankissetto0
bcfSTATUS,RP1;
MOV fWImage,w;
MOV wf__WImage;restore__WImage
MOV fPCLATH,w;
MOV wfPCLATH;restorePCLATH
MOV fFSR,w;
MOV wfFSR;restoreFSR
MOV fSTATUS,w
MOV wfSTATUS;restorestatusandbankinformation
swapfWREG,f;
swapfWREG,w;restoreworkingregister
ENDM
#endasm
#definerestore_context#asm(POP)
#pragmaoption+l
標題:PIC16CXX2K字器件的C語言中斷保存/恢復語句
關于中斷發(fā)表日期:10/25/1997
解答:
//FileName:int16C2k.h
/*PIC16C558,PIC16C622,PIC16C61,PIC16C62,PIC16C62A,PIC16C64,PIC16C64A,PIC16C710,PIC16C71,PIC16C711,PIC16C72,PIC16F83,PIC16F84器件的中斷保存和恢復語句。
這些例程主要用于PIC14架構中程序存儲器為2k或更小的器件中。
__Wimage變量可能并不需要保存,該變量出現(xiàn)在所提供的延時程序中,用于計算指針/陣列地址。
FSR0寄存器也用于計算指針/陣列RAM的地址。
這些變量是否需要保存取決于代碼的復雜程度。根據(jù)代碼要求,可修改這些指令。
*/
#pragmaoption-l
#asm
MACROPUSH
MOV wfWREG;savecopywregister
MOV fSTATUS,w
bcfSTATUS,RP0;setbankto0
MOV wfSTATUS;savestatus
MOV fFSR,w;
MOV wfFSR;savecopyofFSR
MOV f__WImage,w;
MOV wfWImage;savecopyof__WImage
ENDM
#endasm
#definesave_context#asm(PUSH)
#asm
MACROPOP
bcfSTATUS,RP0;ensurebankissetto0
MOV fWImage,w;
MOV wf__WImage;restore__WImage
MOV fFSR,w;
MOV wfFSR;restoreFSR
MOV fSTATUS,w
MOV wfSTATUS;restorestatusandbankinformation
swapfWREG,f;
swapfWREG,w;restoreworkingregister
ENDM
#endasm
#definerestore_context#asm(POP)
#pragmaoption+l