📄 pin_wakeup.c
字号:
/***********************************************************
* Tilte: *
* Description: Pin wake up function *
*
* Company: Elan microelectronics (sz) ltd. *
* Author: HongXi.Tang *
* Date: 19/05/2005 *
* Version: v1.0 *
***********************************************************/
#include "EM78x156xx.h"
#define INT_VECTOR 0
#define NEXT_NOP 1
#define WAKE_UP_OPERATION NEXT_NOP
#define EWDT 1
#define DWDT 0
#define WDT_STATUS DWDT
#define WDT_Prescaler 0x8e
#define CONTW(Prescaler) _asm{mov a,@Prescaler}\
_asm{contw}
#define WDTC() _asm{wdtc}
#define ENI() _asm{eni}
#define DISI() _asm{disi}
#define SLEP() _asm{slep}
#define NOP() _asm{nop}
void Pin_Wakeup(void)
{
CONTW(WDT_Prescaler);
WDTC();
WDTCR&=0x7f; //disable WDT
PORT6=PORT6;
IMR|=0x02; //enable pin change interrupt
#if(WAKE_UP_OPERATION==NEXT_NOP)
DISI();
#else
ENI();
#endif
SLEP();
NOP();
#if(WDT_STATUS==DWDT)
{
WDTCR&=0x7f;
}
#endif
}
void main()
{
Pin_Wakeup();
while(1)
{
WDTC();
}
}
void _intcall interrupt_l(void) @ 0x08:low_int 0
{
_asm
{
//save A --> 0x1F ; R3 --> 0x3E (ram bank 1); R4 --> 0x3F (ram bank 1)
MOV 0X1F,A ;backup A to 0x1F
SWAPA 0X04 ;backup R4 to 0x3F at bank 3
MOV 0X3F,A ;backup R4 to 0x3F at bank 3
SWAPA 0X03
MOV 0X3E,A ;backup R3 to 0x3E at bank 3
}
}
void _intcall interrupt(void) @ int 0
{
//backup C system
/* _asm
{
MOV A,0X10 // USE 1 BYTE C TYPE,C SYSTEM BACKUP
MOV 0X3C+1,A
MOV A,0X14
MOV 0X3B+1,A
MOV A,0X18
MOV 0X3A+1,A
MOV A,0X1B
MOV 0X39+1,A
MOV A,0X1C
MOV 0X38+1,A
}
*/
// Write your code (inline assembly or C) here
ISR=0;
//restore C system
/* _asm
{
MOV A,0X3C+1 // USE 1 BYTE C TYPE,C SYSTEM RESTORE
MOV 0X10,A
MOV A,0X3B+1
MOV 0X14,A
MOV A,0X3A+1
MOV 0X18,A
MOV A,0X39+1
MOV 0X1B,A
MOV A,0X38+1
MOV 0X1C,A
}
*/
//restore ACC,R3,R4
_asm
{
SWAPA 0X3E ;restore R3
MOV 0X03,A
SWAPA 0X3F ;restore R4
MOV 0X04,A
SWAP 0X1F ;restore A
SWAPA 0X1F
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -