PIC17CXX器件的C语言中断保存/恢复语句
扫描二维码
随时随地手机看文章
//Filename:int17cxx.h
/*InterruptcontextsaveandrestoreforPIC17C42
PIC17C42A,PIC17C43,PIC17C44,PIC17C752,PIC17C756
__Wimage变量可能并不需要保存,该变量出现在所提供的延时程序中,用于计算指针/阵列地址。
FSR0寄存器也用于计算指针/阵列RAM的地址。
这些变量是否需要保存取决于代码的复杂程度。根据代码要求,可修改这些指令。
*/
#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变量可能并不需要保存,该变量出现在所提供的延时程序中,用于计算指针/阵列地址。
FSR0寄存器也用于计算指针/阵列RAM的地址。
这些变量是否需要保存取决于代码的复杂程度。根据代码要求,可修改这些指令。
*/
#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语言中断保存/恢复语句
关于中断发表日期:10/25/1997
解答:
//FileName:int16C2k.h
/*PIC16C558,PIC16C622,PIC16C61,PIC16C62,PIC16C62A,PIC16C64,PIC16C64A,PIC16C710,PIC16C71,PIC16C711,PIC16C72,PIC16F83,PIC16F84器件的中断保存和恢复语句。
这些例程主要用于PIC14架构中程序存储器为2k或更小的器件中。
__Wimage变量可能并不需要保存,该变量出现在所提供的延时程序中,用于计算指针/阵列地址。
FSR0寄存器也用于计算指针/阵列RAM的地址。
这些变量是否需要保存取决于代码的复杂程度。根据代码要求,可修改这些指令。
*/
#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