標(biāo)題:
MCU仿真可以進(jìn)入休眠,燒錄到板子上反倒不可以了,這是為什么?
[打印本頁]
作者:
Nupo
時(shí)間:
2023-6-27 16:22
標(biāo)題:
MCU仿真可以進(jìn)入休眠,燒錄到板子上反倒不可以了,這是為什么?
昨天搞了個(gè)流水燈,跑仿真的時(shí)候,進(jìn)入休眠是正常的,每次都會進(jìn)去,只有按鍵中斷喚醒。可燒到板子上的時(shí)候,休眠狀態(tài)下,靜態(tài)電流居然400ua,很明顯是沒有進(jìn)去,找了很久都找不到問題,有沒有大佬幫幫我。。」蛄薿rz
單片機(jī)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;
}
}
這是主函數(shù):
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;
}
}
中斷里什么都沒加,只為了喚醒,其他都是燈的閃爍功能了。
復(fù)制代碼
作者:
wulin
時(shí)間:
2023-6-28 07:34
單片機(jī)休眠,自身耗電是uA級的,但不代表外圍電路不耗電。這取決于你的電路設(shè)計(jì)和編程。單片機(jī)休眠之前把當(dāng)前狀態(tài)保存,關(guān)閉外設(shè),進(jìn)入休眠。喚醒后恢復(fù)之前保存的狀態(tài)。以下是一鍵開關(guān)機(jī)的掉電模式函數(shù),供參考。
void Shutdown()//掉電模式函數(shù)
{
if(allow)
{
P1=0xff; //關(guān)閉LED顯示
//關(guān)閉所有在用硬件,減小能耗
EX0 = 1; //打開中斷
PCON = 0x02;//MCU進(jìn)入掉電模式
_nop_(); //掉電模式被喚醒后,首先執(zhí)行此語句,然后再進(jìn)入中斷服務(wù)程序
_nop_(); //中斷服務(wù)程序執(zhí)行完再接著此句繼續(xù)執(zhí)行
EX0 = 0; //關(guān)閉中斷
while(!key);//等待按鍵松手,防止按鍵掃描程序誤讀
//打開所有在用硬件,恢復(fù)正常運(yùn)行
P1=~Temp; //恢復(fù)LED顯示
allow=0; //清0
}
}
復(fù)制代碼
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1