标题:
MCU仿真可以进入休眠,烧录到板子上反倒不可以了,这是为什么?
[打印本页]
作者:
Nupo
时间:
2023-6-27 16:22
标题:
MCU仿真可以进入休眠,烧录到板子上反倒不可以了,这是为什么?
昨天搞了个流水灯,跑仿真的时候,进入休眠是正常的,每次都会进去,只有按键中断唤醒。可烧到板子上的时候,休眠状态下,静态电流居然400ua,很明显是没有进去,找了很久都找不到问题,有没有大佬帮帮我啊!!跪了orz
单片机MCU源程序如下:
这是按键的
void Key_Scan(void)
{
if(S1 == 0)
{
if(Key_Flag)
{
Old_flag = S1;
gKeyCnt++;
if(gKeyCnt > 0&&gKeyCnt < 20)
{
if(gKeyValue < 10)
{
gKeyValue++;
Key_Flag = 0;
}
else
{
gKeyValue = 1;
Key_Flag = 0;
}
//--------处理键值-------------------------
switch(gKeyValue)
{
case 0:
break;
case 1:
{
Red = 0;
break;
}
case 2:
{
Green = 0;
break;
}
case 3:
{
Red = 1;
break;
}
case 4:
{
Blue = 0;
break;
}
case 5:
{
Green = 1;
break;
}
case 6:
{
Red = 0;
break;
}
case 7:
{
Green = 0;
break;
}
case 8:
{
Auto_Flag = 1;
Green = 1;
Blue = 1;
break;
}
case 9:
{
Auto_Flag = 0;
Breath_Flag = 1;
break;
}
case 10:
{
Breath_Flag = 0;
Sleep_Flag = 0;
break;
}
}
}
else
{
gKeyCnt = 0;
}
}
Delay_Off();
}
else
{
gKeyCnt = 0;
Key_Flag = 1;
}
}
这是主函数:
while (1)
{
Key_Scan();
if(Auto_Flag)
{
Auto_Color();
}
else if(Breath_Flag)
{
Breath();
}
//-----------------睡眠------------------
if(Sleep_Flag == 0)
{
Sleep_Flag=1;
GIE = 0;
P1KBCR = 0x20; //使能键盘中断位
KBIE = 1;
Nop();
Nop();
Stop(); //睡眠
Nop();
Nop();
P1KBCR = 0x00;
KBIE = 0;
GIE = 1;
}
}
中断里什么都没加,只为了唤醒,其他都是灯的闪烁功能了。
复制代码
作者:
wulin
时间:
2023-6-28 07:34
单片机休眠,自身耗电是uA级的,但不代表外围电路不耗电。这取决于你的电路设计和编程。单片机休眠之前把当前状态保存,关闭外设,进入休眠。唤醒后恢复之前保存的状态。以下是一键开关机的掉电模式函数,供参考。
void Shutdown()//掉电模式函数
{
if(allow)
{
P1=0xff; //关闭LED显示
//关闭所有在用硬件,减小能耗
EX0 = 1; //打开中断
PCON = 0x02;//MCU进入掉电模式
_nop_(); //掉电模式被唤醒后,首先执行此语句,然后再进入中断服务程序
_nop_(); //中断服务程序执行完再接着此句继续执行
EX0 = 0; //关闭中断
while(!key);//等待按键松手,防止按键扫描程序误读
//打开所有在用硬件,恢复正常运行
P1=~Temp; //恢复LED显示
allow=0; //清0
}
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1