給大家發(fā)一個測試成功的新唐M051單片機(jī)中斷喚醒(睡眠)的演示程序:
#include "SmartM_M0.h"
#define __KEYISR EINT1_IRQHandler
#define DEBUGMSG printf
/****************************************
*函數(shù)名稱:KeyIntInit
*輸 入:無
*輸 出:無
*功 能:按鍵中斷初始化
******************************************/
VOID KeyIntInit(VOID)
{
P3_MFP = (P3_MFP & (~P33_EINT1_MCLK)) | EINT1; //P3.2引腳設(shè)置為外部中斷
DBNCECON &= ~ICLK_ON;
DBNCECON &= DBCLK_HCLK;
DBNCECON |= SMP_256CK; //設(shè)置防反彈采樣周期選擇
P3_DBEN |= DBEN3; //使能P3.2防反彈功能
P3_IMD &= IMD3_EDG;
P3_IEN |= IF_EN3; //設(shè)置外部中斷1為下降沿觸發(fā)
NVIC_ISER |= EXT_INT1;
}
/****************************************
*函數(shù)名稱:McuSleepDeep
*輸 入:無
*輸 出:無
*功 能:MCU進(jìn)入睡眠模式
******************************************/
VOID McuSleepDeep(VOID)
{
Delayms(20);
PROTECT_REG
(
/* 進(jìn)入睡眠模式 */
SCR |= SLEEPDEEP;
/* 禁止掉電模式下喚醒的中斷中斷使能 */
PWRCON &= ~PD_WU_IE;
PWRCON &= ~PD_WAIT_CPU;
PWRCON |= PWR_DOWN_EN;
)
Delayms(20);
}
/****************************************
*函數(shù)名稱:main
*輸 入:無
*輸 出:無
*功 能:函數(shù)主體
******************************************/
INT32 main(VOID)
{
PROTECT_REG //ISP下載時保護(hù)FLASH存儲器
(
PWRCON |= XTL12M_EN; //默認(rèn)時鐘源為外部晶振
while((CLKSTATUS & XTL12M_STB) == 0); //等待12MHz時鐘穩(wěn)定
CLKSEL0 = (CLKSEL0 & (~HCLK)) | HCLK_12M; //設(shè)置外部晶振為系統(tǒng)時鐘
P2_PMD = 0x5555;
)
KeyIntInit(); //按鍵中斷初始化
while(1)
{
P2_DOUT = 0x00;
Delayms(500);
P2_DOUT = 0xFF;
Delayms(500);
McuSleepDeep(); //MCU進(jìn)入睡眠模式
}
}
/****************************************
*函數(shù)名稱:__KEYISR
*輸 入:無
*輸 出:無
*功 能:按鍵中斷服務(wù)函數(shù)
******************************************/
VOID __KEYISR(VOID)
{
Delayms(100);
P3_ISRC = P3_ISRC; //寫1清空
}