[DemoCode下载] M051中断唤醒程序

[复制链接]
666|1
 楼主| ideafor 发表于 2016-1-13 20:50 | 显示全部楼层 |阅读模式
  1. #include "SmartM_M0.h"
  2. #define __KEYISR    EINT1_IRQHandler
  3. #define DEBUGMSG       printf
  4. /****************************************
  5. *函数名称:KeyIntInit
  6. *输    入:无
  7. *输    出:无
  8. *功    能:按键中断初始化
  9. ******************************************/
  10. VOID KeyIntInit(VOID)
  11. {
  12. P3_MFP = (P3_MFP & (~P33_EINT1_MCLK)) | EINT1;  //P3.2引脚设置为外部中断
  13.   
  14. DBNCECON &= ~ICLK_ON;
  15. DBNCECON &= DBCLK_HCLK;
  16. DBNCECON |= SMP_256CK;        //设置防反弹采样周期选择
  17.             
  18. P3_DBEN |= DBEN3;         //使能P3.2防反弹功能
  19.   
  20. P3_IMD &= IMD3_EDG;   
  21. P3_IEN |= IF_EN3;         //设置外部中断1为下降沿触发
  22. NVIC_ISER |= EXT_INT1;
  23. }
  24. /****************************************
  25. *函数名称:McuSleepDeep
  26. *输    入:无
  27. *输    出:无
  28. *功    能:MCU进入睡眠模式
  29. ******************************************/
  30. VOID McuSleepDeep(VOID)
  31. {
  32. Delayms(20);
  33. PROTECT_REG
  34. (
  35.   /* 进入睡眠模式 */
  36.   SCR |= SLEEPDEEP;
  37.   /* 禁止掉电模式下唤醒的中断中断使能 */
  38.   PWRCON &= ~PD_WU_IE;
  39.   PWRCON &= ~PD_WAIT_CPU;
  40.   PWRCON |= PWR_DOWN_EN;  
  41. )
  42. Delayms(20);
  43. }
 楼主| ideafor 发表于 2016-1-13 20:51 | 显示全部楼层
  1. /****************************************
  2. *函数名称:main
  3. *输    入:无
  4. *输    出:无
  5. *功    能:函数主体
  6. ******************************************/
  7. INT32 main(VOID)
  8. {                  
  9.   PROTECT_REG           //ISP下载时保护FLASH存储器
  10.   (
  11.    PWRCON |= XTL12M_EN;        //默认时钟源为外部晶振
  12.    while((CLKSTATUS & XTL12M_STB) == 0);     //等待12MHz时钟稳定
  13.    CLKSEL0 = (CLKSEL0 & (~HCLK)) | HCLK_12M; //设置外部晶振为系统时钟
  14.    P2_PMD = 0x5555;
  15.   )
  16.   KeyIntInit();         //按键中断初始化
  17.   while(1)
  18.   {
  19.    P2_DOUT = 0x00;
  20.    Delayms(500);
  21.    P2_DOUT = 0xFF;
  22.    Delayms(500);     
  23.     McuSleepDeep();       //MCU进入睡眠模式     
  24.   }
  25. }
  26. /****************************************
  27. *函数名称:__KEYISR
  28. *输    入:无
  29. *输    出:无
  30. *功    能:按键中断服务函数
  31. ******************************************/
  32. VOID __KEYISR(VOID)
  33. {
  34.      Delayms(100);
  35.   P3_ISRC = P3_ISRC;  //写1清空
  36. }
您需要登录后才可以回帖 登录 | 注册

本版积分规则

30

主题

149

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部