[DemoCode下载]

新唐M051中断唤醒(睡眠)演示程序

[复制链接]
953|8
手机看帖
扫描二维码
随时随地手机跟帖
Messi1999|  楼主 | 2015-9-29 16:14 | 显示全部楼层 |阅读模式
#include "SmartM_M0.h"
#define __KEYISR    EINT1_IRQHandler
#define DEBUGMSG       printf
/****************************************
*函数名称:KeyIntInit
*输    入:无
*输    出:无
*功    能:按键中断初始化
******************************************/
VOID KeyIntInit(VOID)
{
P3_MFP = (P3_MFP & (~P33_EINT1_MCLK)) | EINT1;  //P3.2引脚设置为外部中断
  
DBNCECON &= ~ICLK_ON;
DBNCECON &= DBCLK_HCLK;
DBNCECON |= SMP_256CK;        //设置防反弹采样周期选择
            
P3_DBEN |= DBEN3;         //使能P3.2防反弹功能
  
P3_IMD &= IMD3_EDG;   
P3_IEN |= IF_EN3;         //设置外部中断1为下降沿触发
NVIC_ISER |= EXT_INT1;
}
/****************************************
*函数名称:McuSleepDeep
*输    入:无
*输    出:无
*功    能:MCU进入睡眠模式
******************************************/
VOID McuSleepDeep(VOID)
{
Delayms(20);
PROTECT_REG
(
  /* 进入睡眠模式 */
  SCR |= SLEEPDEEP;
  /* 禁止掉电模式下唤醒的中断中断使能 */
  PWRCON &= ~PD_WU_IE;
  PWRCON &= ~PD_WAIT_CPU;
  PWRCON |= PWR_DOWN_EN;  
)
Delayms(20);
}
/****************************************
*函数名称:main
*输    入:无
*输    出:无
*功    能:函数主体
******************************************/
INT32 main(VOID)
{                  
  PROTECT_REG           //ISP下载时保护FLASH存储器
  (
   PWRCON |= XTL12M_EN;        //默认时钟源为外部晶振
   while((CLKSTATUS & XTL12M_STB) == 0);     //等待12MHz时钟稳定
   CLKSEL0 = (CLKSEL0 & (~HCLK)) | HCLK_12M; //设置外部晶振为系统时钟
   P2_PMD = 0x5555;
  )
  KeyIntInit();         //按键中断初始化
  while(1)
  {
   P2_DOUT = 0x00;
   Delayms(500);
   P2_DOUT = 0xFF;
   Delayms(500);     
    McuSleepDeep();       //MCU进入睡眠模式     
  }
}
/****************************************
*函数名称:__KEYISR
*输    入:无
*输    出:无
*功    能:按键中断服务函数
******************************************/
VOID __KEYISR(VOID)
{
     Delayms(100);
  P3_ISRC = P3_ISRC;  //写1清空
}


734774645| | 2015-10-4 12:33 | 显示全部楼层
子函数看起来好复杂啊,功能多了,学起来就是费劲

使用特权

评论回复
598330983| | 2015-10-6 13:01 | 显示全部楼层
PROTECT_REG
(
  /* 进入睡眠模式 */
  SCR |= SLEEPDEEP;
  /* 禁止掉电模式下唤醒的中断中断使能 */
  PWRCON &= ~PD_WU_IE;
  PWRCON &= ~PD_WAIT_CPU;
  PWRCON |= PWR_DOWN_EN;  
)
怎么小括号呢,难以理解。

使用特权

评论回复
mintspring| | 2015-10-7 12:15 | 显示全部楼层
小括号一般应该是子函数的参数传递,但是没有分号结尾,所以我也是第一次见。

使用特权

评论回复
_寒寒_| | 2015-10-8 13:34 | 显示全部楼层
mintspring 发表于 2015-10-7 12:15
小括号一般应该是子函数的参数传递,但是没有分号结尾,所以我也是第一次见。 ...

那就是个宏定义而已

使用特权

评论回复
mintspring| | 2015-10-8 21:14 | 显示全部楼层
噢,宏定义最好都弄个分号结尾比较好,要不看着以为写错了呢。

使用特权

评论回复
奥德赛| | 2015-10-9 08:18 | 显示全部楼层
这个也是低功耗用的吧

使用特权

评论回复
643757107| | 2015-10-9 11:23 | 显示全部楼层
这个可以用于低功耗应用,比如那些环境温度采集,一般变化比较慢,可以一分钟开启一次,或者多少秒开启一次,检测后发送出去,然后进入休眠。

使用特权

评论回复
小猫爱吃鱼| | 2015-10-9 21:42 | 显示全部楼层
新唐单片机在低功耗方面不知道稳定吗

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

36

主题

363

帖子

1

粉丝