单片机交流
直播中

王燕

8年用户 1794经验值
私信 关注
[问答]

AVR单片机电源管理是如何进入睡眠模式的

AVR单片机电源管理是如何进入睡眠模式的?又是如何被唤醒的呢?

回帖(1)

段朝思

2021-11-2 10:40:47
  先看芯片手册吧
  这对电源及睡眠模式的一个简述,并介绍了进入模式时和唤醒之后的处理(第二段一定好好吸收哦)。
  这是控制寄存器的设定进入不同模式的设定,根据需要进入不同的模式。
  看到这里,也算了解了。
  下面发段代码:
  **********************************************************/
  #include《iom8v.h》
  #include《macros.h》
  #include“xiaofeng_delay.h”
  /*******************************************
  函数 名称: Port_Init
  功 能: IO初始化
  参 数: 无
  返 回 值 : 无
  /********************************************/
  void Port_Init(void)
  {
  PORTB = 0xFF;
  DDRB = 0xFF;
  DDRD=0X00;
  PORTD=0XFF;
  }
  /*******************************************
  函数 名称: Port_Init
  功 能: IO初始化
  参 数: 无
  返 回 值 : 无
  /********************************************/
  void Power_Init(void)
  {
  MCUCR |= 0X20;//掉电模式,外部中断0低电平触发
  GICR |= 0X40; //外部中断0使能
  SREG |= 0X80;//使能总中断
  }
  /*******************************************
  函数 名称: Device_Init
  功 能: 器件初始化
  参 数: 无
  返 回 值 : 无
  /********************************************/
  void Device_Init(void)
  {
  Port_Init(); //IO端口初始化
  Power_Init(); //外部中断,省电模式,初始化
  }
  /*******************************************
  函数 名称: main
  功 能: 主函数
  参 数: 无
  返 回 值 : 无
  /********************************************/
  void main(void)
  {
  unsigned char i;
  Device_Init();
  while(1)
  {
  for (i=0;i《10;i++)
  {
  PORTB &= ~BIT(1);
  delay_nms(300);
  PORTB |= BIT(1);
  delay_nms(300);
  }
  MCUCR |= 0x80; //使能休眠
  asm(“sleep”);
  for (i=0;i《10;i++)
  {
  PORTB &= ~BIT(2);
  delay_nms(300);
  PORTB |= BIT(2);
  delay_nms(300);
  }
  }
  }
  /*******************************************
  函数名称: void int0_isr(void)
  功 能: 外部中断0的服务函数
  参 数: 无
  返 回 值: 无
  /********************************************/
  #pragma interrupt_handler int0_isr:2
  void int0_isr(void)
  {
  unsigned char i;
  for (i=0;i《10;i++)
  {
  PORTB &= ~BIT(0);
  delay_nms(300);
  PORTB |= BIT(0);
  delay_nms(300);
  }
  }
  进入程序首先执行第二个灯闪烁,
  闪烁停止,说明进入睡眠模式,
  摁下按键,第一个灯开始闪烁,说明单片机被唤醒,进入外部中断服务函数,
  第三个灯开始闪烁,说明中断服务函数执行完毕,执行SLEEP指令后面的程序。
  有很多不足,也为有兴趣的朋友,做个例子吧,一起学习一下吧。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分