低功耗异常,找不出问题
STC8G1K08A进入掉电模式异常,当我烧写一个什么都没有的空程序进去测得功耗8ma,
然后自己的程序写入代码按条件掉电仍然还有8ma电流,
把芯片吹下来,只测板子电流是60ua,装上芯片就是8ma,
不管开没开睡眠,找不出原因,请教各位工程师们,
第一次使用这个芯片不太了解
用AIAPP-ISP软件上例程测下:
#include "reg51.h"
#include "intrins.h"
#define IDL 0x01 //PCON.0
#define PD 0x02 //PCON.1
sbit P34 = P3^4;
sbit P35 = P3^5;
sfr P0M1 = 0x93;
sfr P0M0 = 0x94;
sfr P1M1 = 0x91;
sfr P1M0 = 0x92;
sfr P2M1 = 0x95;
sfr P2M0 = 0x96;
sfr P3M1 = 0xb1;
sfr P3M0 = 0xb2;
sfr P4M1 = 0xb3;
sfr P4M0 = 0xb4;
sfr P5M1 = 0xc9;
sfr P5M0 = 0xca;
void INT0_Isr() interrupt 0
{
P34 = ~P34; //测试端口
}
void main()
{
P0M0 = 0x00;
P0M1 = 0x00;
P1M0 = 0x00;
P1M1 = 0x00;
P2M0 = 0x00;
P2M1 = 0x00;
P3M0 = 0x00;
P3M1 = 0x00;
P4M0 = 0x00;
P4M1 = 0x00;
P5M0 = 0x00;
P5M1 = 0x00;
EX0 = 1; //使能INT0中断,用于唤醒MCU
EA = 1;
_nop_();
_nop_();
_nop_();
_nop_();
// PCON = IDL; //MCU进入IDLE模式
PCON = PD; //MCU进入掉电模式
_nop_();
_nop_();
_nop_();
_nop_();
P35 = 0;
while (1);
}
ercircle 发表于 2025-6-18 13:12
用AIAPP-ISP软件上例程测下:
这个程序我试过,虽然还有200多ua电流,但感觉应该是进去掉电模式,自己的代码里面不知道为什么进不去,感觉掉电模式就PCON=0x02;这个简单指令啊,为什么会进不去想不明白 xiao_H 发表于 2025-6-18 13:52
这个程序我试过,虽然还有200多ua电流,但感觉应该是进去掉电模式,自己的代码里面不知道为什么进不去, ...
把阻挡进入掉电模式的判断条件逐个改成1看是哪个影响的。
进去后加个翻转IO观察下
是不是外部一直在唤醒
【新提醒】省电模式,I/O口如何设置才省电,进入主时钟停振/省电模式前 - 电源/复位/省电模式/外部晶振/内部时钟/对外时钟输出/PLL-144MHz时钟 国芯技术交流网站 - AI32位8051交流社区
中断唤醒,检查一下外部输入的信号是否有抖动,接按键的话需要检测按下消抖检测释放再消抖后然后进入省电模式 用擎天柱测试可能有一堆电阻在漏电流,换最小系统板就干净了,1uA:
813
#include "Ai8051U.h"
#include "intrins.h"
void Delay100ms(void) //@24.000MHz
{
unsigned long edata i;
_nop_();
_nop_();
i = 599998UL;
while (i) i--;
}
void INT0_Isr() interrupt 0{
}
void main()
{
P_SW2=0x80;WTST = 0;CKCON = 0;
P0M0 = 0x00; P0M1 = 0xff;P0IE = 0x00;
P1M0 = 0x00; P1M1 = 0xff;P1IE = 0x00;
P2M0 = 0x00; P2M1 = 0xff;P2IE = 0x00;
P3M0 = 0x00; P3M1 = 0xff;P3IE = 0x00;
P4M0 = 0x00; P4M1 = 0xff;P4IE = 0x00;
P5M0 = 0x00; P5M1 = 0xff;P5IE = 0x00;
P6M0 = 0x00; P6M1 = 0xff;P6IE = 0x00;
P7M0 = 0x00; P7M1 = 0xff;P7IE = 0x00;
IRCDB = 0x10;
P3M0 = 0x00; P3M1 = 0xf3; P3IE = 0x0c; //P32 P33准双向,打开数字输入
P2M0 = 0x00; P2M1 = 0x00; //P2准双向
IT0 = 1;
EX0 = 1; //使能INT0中断,用于唤醒MCU
EA = 1;
P2 = 0x0F;
while (1){
if(!P33){
Delay100ms();
if(!P33){
P2 = 0XFF;
//P20 = 1;
_nop_();
_nop_();
_nop_();
_nop_();
// PCON = IDL; //MCU进入IDLE模式
//PCON = PD; //MCU进入掉电模式
PD = 1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
P20 = 0;
}
}
};
}
DebugLab 发表于 2025-6-18 15:05
中断唤醒,检查一下外部输入的信号是否有抖动,接按键的话需要检测按下消抖检测释放再消抖后然后进入省电模 ...
是进行消抖过的,我用的定时器扫描按键,判断按键按下设置标志位,睡眠标志位=0时;执行相应配置然后进入掉电 xiao_H 发表于 2025-6-18 15:32
是进行消抖过的,我用的定时器扫描按键,判断按键按下设置标志位,睡眠标志位=0时;执行相应配置然后进入 ...
松开时也会抖动,由于此时是外部中断硬件唤醒,无法软件消抖 所以必须松开再消抖,之后再进入省电模式
页:
[1]
2