專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計實例 >> 瀏覽文章

新唐M051中斷喚醒(睡眠)演示程序

作者:huqin   來源:本站原創(chuàng)   點擊數(shù):  更新時間:2014年09月01日   【字體:

 給大家發(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清空
}
 
關(guān)閉窗口