#include "N76E003.h"
#include "Common.h"
#include "Delay.h"
#include "SFR_Macro.h"
#include "Function_define.h"
#define uint unsigned int
#define uchar unsigned char
uint WKTCount=0;
bit WKTFlag=0;
sbit LED=P0^4;
sbit TS1=P0^3;
void main (void)
{
Set_All_GPIO_Quasi_Mode;
WKCON=0x03;//预分频64
RWK =255-153;//定时1s
// WKCON =0x07; //预分频配置2048
// RWK =255-244;//设置为50s定时——72个为一小时
set_EWKT; //使能定时唤醒中断
set_WKTR; //运行定时唤醒功能
EA = 1; //开启总中断
while(1)
{
if(WKTFlag)//判定是否溢出
{
WKTCount++;
WKTFlag=0;
if(WKTCount>=60)//每分钟亮一次灯
{
LED=0;
Timer1_Delay10ms(100);
LED=1;//灯闪烁
WKTCount=0;
}
ADCCON1 = 0X00;//关闭ADC
clr_BODEN;//关闭欠压检测
set_PD;// 进入掉电模式
}
}
}
//---------定时唤醒中断服务程序--------------
void WakeUp_Timer_ISR (void) interrupt 17
{
WKTFlag=1;
clr_WKTF;//清除WKT溢出标志位
}
最后通过测量串联在VCC上的10欧电阻,得到的电压值,转换为电流大约是60μA,我的万用表精度只有这么多了,再低也无法测量了。据说论坛的大神能做到5μA,关闭各类时钟我也尝试过,区别不大,所以在程序里就没写入。我从最开始的230μA到60μA,已经尽力了,但还是希望各位同学分享更厉害的低功耗配置。
|