您当前的位置:五五电子网电子知识单片机-工控设备PIC单片机PIC17CXX器件的C语言中断保存/恢复语句 正文
PIC17CXX器件的C语言中断保存/恢复语句

PIC17CXX器件的C语言中断保存/恢复语句

点击数:7812 次   录入时间:03-04 11:48:27   整理:http://www.55dianzi.com   PIC单片机
// File name: int17cxx.h 

/* Interrupt context save and restore for PIC17C42 

PIC17C42A, PIC17C43, PIC17C44, PIC17C752, PIC17C756 

__Wimage变量可能并不需要保存,该变量出现在所提供的延时程序中,用于计算指针/阵列地址。 

FSR0寄存器也用于计算指针/阵列RAM的地址。 

这些变量是否需要保存取决于代码的复杂程度。根据代码要求,可修改这些指令。 

*/ 

#pragma option -l 

#asm 

MACRO PUSH 

MOV FP ALUSTA, ALUSTA ;save flags 

MOV fp __WImage,WImage 

MOV pf WREG,WREG 

MOV pf BSR,BSR 

MOV pf FSR0,FSR0 

ENDM 

#endasm 

#define save_context #asm ( PUSH) 

#asm 

MACRO POP 

MOV fp FSR0,FSR0 

MOV fp BSR,BSR 

MOV fp WREG,WREG 

MOV fp WImage,__WImage 

MOV fp ALUSTA,ALUSTA ;restore flags 

ENDM 

#endasm 

#define restore_context #asm ( POP) 

#pragma option +l 

标题: PIC16CXX 4K字器件的C语言中断保存/恢复语句 



解答: 

// File name: int16c4k.h 

/* PIC16C642, PIC16C662, PIC16C63, PIC16C65, PIC16C65A, PIC16C73, PIC16C73A, PIC16C74, PIC16C74A, PIC16C923, PIC16C924, PIC14000, PIC16C66, PIC16C67, PIC16C76, PIC16C77器件的中断保存和恢复语句。 

这些例程主要用于PIC14架构中程序存储器为4k或8k的器件中。 

__Wimage变量可能并不需要保存,该变量出现在所提供的延时程序中,用于计算指针/阵列地址。 

FSR0寄存器也用于计算指针/阵列RAM的地址。 

这些变量是否需要保存取决于代码的复杂程度。根据代码要求,可修改这些指令。 

*/ 

#pragma option -l 

#asm 

MACRO PUSH 

MOV wf WREG ;save copy w register 

MOV f STATUS,w 

bcf STATUS,RP0 ;set bank to 0 

bcf STATUS,RP1 ; 

MOV wf STATUS ;save status 

MOV f FSR,w ; 

MOV wf FSR ;save copy of FSR 

MOV f PCLATH,w ; 

MOV wf PCLATH ;save copy of PCLATH 

MOV f __WImage,w ; 

MOV wf WImage ;save copy of __WImage 

ENDM 

#endasm 

#define save_context #asm ( PUSH) 

#asm 

MACRO POP 

bcf STATUS,RP0 ;ensure bank is set to 0 

bcf STATUS,RP1 ; 

MOV f WImage,w ; 

MOV wf __WImage ;restore __WImage 

MOV f PCLATH,w ; 

MOV wf PCLATH ;restore PCLATH 

MOV f FSR,w ; 

MOV wf FSR ;restore FSR 

MOV f STATUS,w 

MOV wf STATUS ;restore status and bank information 

swapf WREG,f ; 

swapf WREG,w ;restore working register 

ENDM 

#endasm 

#define restore_context #asm ( POP) 

#pragma option +l 

标题: PIC16CXX 2K字器件的C语言中断保存/恢复语句 

关于 中断 发表日期: 10/25/1997 

解答: 

// File Name: int16C2k.h 

/* PIC16C558, PIC16C622, PIC16C61, PIC16C62, PIC16C62A, PIC16C64, PIC16C64A, PIC16C710, PIC16C71, PIC16C711, PIC16C72, PIC16F83, PIC16F84器件的中断保存和恢复语句。 

这些例程主要用于PIC14架构中程序存储器为2k或更小的器件中。 

__Wimage变量可能并不需要保存,该变量出现在所提供的延时程序中,用于计算指针/阵列地址。 

FSR0寄存器也用于计算指针/阵列RAM的地址。 

这些变量是否需要保存取决于代码的复杂程度。根据代码要求,可修改这些指令。 

*/ 

#pragma option -l 

#asm 

MACRO PUSH 

MOV wf WREG ;save copy w register 

MOV f STATUS,w 

bcf STATUS,RP0 ;set bank to 0 

MOV wf STATUS ;save status 

MOV f FSR,w ; 

MOV wf FSR ;save copy of FSR 

MOV f __WImage,w ; 

MOV wf WImage ;save copy of __WImage 

ENDM 

#endasm 

#define save_context #asm ( PUSH) 

#asm 

MACRO POP 

bcf STATUS,RP0 ;ensure bank is set to 0 

MOV f WImage,w ; 

MOV wf __WImage ;restore __WImage 

MOV f FSR,w ; 

MOV wf FSR ;restore FSR 

MOV f STATUS,w 

MOV wf STATUS ;restore status and bank information 

swapf WREG,f ; 

swapf WREG,w ;restore working register 

ENDM 

#endasm 

#define restore_context #asm ( POP) 

#pragma option +l 


本文关键字:C语言  PIC单片机单片机-工控设备 - PIC单片机