供电电压2.1V--3.3V
使用内部RTC设置1分钟后唤醒,在进入掉电模式后的功耗在1.5uA--4.5uA一般在1分27秒左右会从掉电模式唤醒,此时功耗大概在3.7mA左右,但此时设置的IO口好像不能正常工作,比如不能通过高电平使能升压电路,如果断开供电后再重新供电,会进入Module_Start(),但从掉电唤醒后就不能进入Module_Start()
void main()
{
P_SW2|=0x80; //扩展寄存器(XFR)访问使能
P1M0 = 0xc0; P1M1 = 0x38; //p1.3p1.4p1.5高阻输入,p1.6p1.7推挽输出,其它准双向口
P3M0 = 0x00; P3M1 = 0xf0; //p3.4p3.5p3.6p3.7高阻,其它双向
P5M0 = 0Xff; P5M1 = 0X00; //设置P5口为准双向口
P1IE = 0xff; P3IE = 0xff; //开启P1和P3的数字输入
RTC_config(); //RTC初始化
/* 系统初始化设置 */
UartInit(); //串口初始化 波特率115200
ADC_Init();
EA = 1; //打开总中断
Module_Start();
while(1)
{
if(B_1m)
{
B_1m = 0;
Module_Start(); //给模组供电并开机,上传遥测数据
}
if(B_Alarm)
{
B_Alarm = 0;
Module_Start(); //给模组供电并开机,上传遥测数据
}
}
}
/****RTC初始化函数**/
void RTC_config(void)
{
INIYEAR = 25; //Y:2021
INIMONTH = 1; //M:12
INIDAY = 14; //D:31
INIHOUR = 23; //H:23
INIMIN = 59; //M:59
INISEC = 50; //S:50
INISSEC = 0; //S/128:0
ALAHOUR = 21; //闹钟小时
ALAMIN = 32; //闹钟分钟
ALASEC = 0; //闹钟秒
ALASSEC = 0; //闹钟1/128秒
IRC32KCR = 0x80; //启动内部32K晶振.
while (!(IRC32KCR & 0x01)); //等待时钟稳定
RTCCFG |= 0x02;
RTCIF = 0x00; //清中断标志
RTCIEN = 0x90; //中断使能, 0x80:闹钟中断, 0x40:日中断, 0x20:小时中断, 0x10:分钟中断, 0x08:秒中断, 0x04:1/2秒中断, 0x02:1/8秒中断, 0x01:1/32秒中断
RTCCR = 0x01; //RTC使能
while(RTCCFG & 0x01);
}
/******************** RTC中断函数 *********************/
void RTC_Isr() interrupt 36
{
if(RTCIF & 0x80) //闹钟中断
{
RTCIF &= ~0x80;
B_Alarm = 1;
}
if(RTCIF & 0x10) //分钟中断
{
RTCIF &= ~0x10;
B_1m = 1;
}
}