第一,怎么确定,就算现在找出这个解决办法,因为问题不是必现的,你怎么确定你解决了。所以我说的程序上这部分加上日志,你还得弄
第二,可以外边挂上一个电路,主要作用是一段时间能没有和这个电路通信,就把你这个产品重启供电。
第三,给你看一下我的低功耗操作逻辑
- //低功耗进入
- if (myADCDat.ad_Vref>1218 && PIN_KEY_Get()==0) //若电压低于4V,并且按键检测到0
- {
- //关闭耗电设备
- P35 = 1; //关闭红灯
- P36 = 1; //关闭绿灯
- P33 = 0; //取消阀动作
- P54 = 0; //不短路5.1K电阻
-
- RecordAdd(RECORD_TYPE_POWER_DOWN); //掉电记录
-
- EXT0_MODE_RiseFall(); //设置外部中断边沿触发
- EXT0_ENABLE(); //使能外部中断
-
- //将所有端口置为高阻状态
- P1M1=0xFF; P1M0=0;
- P3M1=0xFF; P3M0=0;
- P5M1=0xFF; P5M0=0;
- //将一些引脚的数字输入功能给关闭
- P1IE=0x00; P3IE=0x04;
-
- ADC_CONTR &= ~0x80; //关闭ADC电源
- CMPCR1 &= ~0x80; //关闭比较器
-
- while (1) //避免被非唤醒目标唤醒
- {
- SYSTEM_PD(); //进入掉电模式
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- FeedDog();
- }
- }
复制代码
- void X0_ISR() interrupt INTERRUPT_X0
- {
- RTC_TimeGet(&rtc);
- Flash_WritesU8(MCU_STORAGE_RTC,(u8 *)&rtc,sizeof(rtc));
- SYSTEM_RESET_ISP();
- }
复制代码
|