×
单片机 > 单片机程序设计 > 详情

AVR单片机电源管理及睡眠模式

发布时间:2020-08-26 发布时间:
|

简介:睡眠模式可以使应用程序关闭 MCU 中没有使用的模块,从而降低功耗。AVR 具有不同 的睡眠模式,允许用户根据自己的应用要求实施剪裁。


/*


状态寄存器SREG


bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0


I T H S V N Z C


I:全局中断使能位。


在I置位后,单独的中断使能由不同的中断寄存器控制。若I为0,则禁止中断。


MCU控制寄存器MCUCR


bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0


SM2 SE SM1 SM0 ISC11 ISC10 ISC01 ISC00


SE:MCU休眠使能位

为了使 MCU 在执行 SLEEP 指令后进入休眠模式, SE 必须置位。为了确保进入休眠模

式是程序员的有意行为,建议仅在 SLEEP 指令的前一条指令置位 SE。MCU 一旦唤醒立

即清除 SE。


SM1~SM0:MCU休眠模式选择


SM2 SM1 SM0 休眠模式


0 0 0 空闲


0 0 1 ADC 噪声抑制模式


0 1 0 掉电模式


0 1 1 省电模式


1 0 0 保留


1 0 1 保留


1 1 0 Standby(1) 模式


1 1 1 扩展Standby(1) 模式




空闲模式 当 SM2..0 为 000 时,SLEEP 指令将使 MCU 进入空闲模式。在此模式下, CPU 停止运

行,而 LCD 控制器、 SPI、 USART、模拟比较器、ADC、 USI、定时器 / 计数器、看门

狗和中断系统继续工作。这个休眠模式只停止了clkCPU 和clkFLASH ,其他时钟则继续工作。


象定时器溢出与 USART 传输完成等内外部中断都可以唤醒 MCU。如果不需要从模拟比

较器中断唤醒 MCU ,为了减少功耗,可以切断比较器的电源。方法是置位模拟比较器控

制和状态寄存器 ACSR 的 ACD。如果 ADC 使能,进入此模式后将自动启动一次转换。


ADC 噪声抑制模式 当 SM2..0 为 001 时,SLEEP 指令将使 MCU 进入噪声抑制模式。在此模式下, CPU 停

止运行,而 ADC、外部中断、两线接口地址配置、定时器 / 计数器 0 和看门狗继续工作。

这个睡眠模式只停止了 clkI/O、 clkCPU 和 clkFLASH ,其他时钟则继续工作。


此模式提高了 ADC 的噪声环境,使得转换精度更高。 ADC 使能的时候,进入此模式将

自动启动一次AD 转换。ADC 转换结束中断、外部复位、看门狗复位、 BOD 复位、两线

接口地址匹配中断、定时器 / 计数器 2 中断、SPM/EEPROM 准备好中断、外部中断 INT0

或 INT1 ,或外部中断INT2 可以将 MCU 从 ADC 噪声抑制模式唤醒。


掉电模式 当 SM2..0 为 010 时, SLEEP 指令将使 MCU 进入掉电模式。在此模式下,外部晶体停

振,而外部中断、两线接口地址匹配及看门狗 (如果使能的话)继续工作。只有外部复

位、看门狗复位、 BOD 复位、两线接口地址匹配中断、外部电平中断 INT0 或 INT1 ,或

外部中断 INT2 可以使 MCU 脱离掉电模式。这个睡眠模式停止了所有的时钟,只有异步

模块可以继续工作。


当使用外部电平中断方式将 MCU 从掉电模式唤醒时,必须保持外部电平一定的时间。具

体请参见 P65“ 外部中断 ” 。


从施加掉电唤醒条件到真正唤醒有一个延迟时间,此时间用于时钟重新启动并稳定下来。

唤醒周期与由熔丝位 CKSEL 定义的复位周期是一样的,如 P23“ 时钟源 ” 所示。


省电模式 当 SM2..0 为 011 时, SLEEP 指令将使 MCU 进入省电模式。这一模式与掉电模式只有

一点不同:


如果定时器 / 计数器 2 为异步驱动,即寄存器 ASSR 的 AS2 置位,则定时器 / 计数器 2 在

睡眠时继续运行。除了掉电模式的唤醒方式,定时器 / 计数器 2 的溢出中断和比较匹配中

断也可以将 MCU 从休眠方式唤醒,只要 TIMSK 使能了这些中断,而且 SREG 的全局中

断使能位 I 置位。


如果异步定时器不是异步驱动的,建议使用掉电模式,而不是省电模式。因为在省电模式

下,若 AS2 为 0 ,则MCU 唤醒后异步定时器的寄存器数值是没有定义的。


这个睡眠模式停止了除 clkASY 以外所有的时钟,只有异步模块可以继续工作。


Standby 模式 当 SM2..0 为 110 时, SLEEP 指令将使 MCU 进入 Standby 模式。这一模式与掉电模式

唯一的不同之处在于振荡器继续工作。其唤醒时间只需要 6 个时钟周期。


扩展 Standby 模式 当 SM2..0 为 111 时, SLEEP 指令将使 MCU 进入扩展的 Standby 模式。这一模式与省

掉电模式唯一的不同之处在于振荡器继续工作。其唤醒时间只需要 6 个时钟周期。 .



*/

#include

#include

void Sleep_init(unsigned char mode)

{

switch(mode)

{

case 0: MCUCR&=~((1<

case 1: MCUCR&=~((1<

case 2: MCUCR&=~((1<

case 3: MCUCR&=~(1<

case 6: MCUCR|=1<

case 7: MCUCR|=(1<

default: MCUCR&=~((1<

}


}

void SLEEP_ON(void)

{MCUCR|=1<

asm("SLEEP");

}

void SLEEP_OFF(void)

{

MCUCR&=~(1<

}

关键字:AVR单片机  电源管理  睡眠模式


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
ARM 汇编的必知必会