ATmega16具有休眠模式控制,可以使应用程序关闭MCU中没有使用的模块,从而降低功耗。对于使用电池供电的系统,这一特性为用户提供了控制功耗的绝佳途径。
AVR系列MCU提供了多种休眠模式,允许用户根据实际应用的需求选定合适的省电休眠模式。
ATmega16具有6种休眠模式,分别是空闲模式(idie)、ADC抑制模式(ADC noise reduction)、掉电模式(power-down)、省电模式(power-save)、等待模式(standby)和扩展等待模式(extendedstandby).
若要使ATmega16进入休眠模式,程序中应置位MCUCR寄存器(见表1)中的SE位,然后执行SLEEP指令。当前MCUCR寄存器中的SM2,SM1和SM0的设置决定了执行SLEEP指令后,MCU将进入哪一种休眠模式,见表2。休眠中的MCU可以被相应的中断唤醒,详情见表3。
2.条件是A寄存器中的AS2位为1ATmega16执行SLEEP指令,进入休眠模式,程序即停在此处,不再往下执行指令。直至ATmega16被唤醒,才继续执行SLEEP下面的指令。
休眠唤醒的过程是,中断产生后,首先有一段启动时间,然后等待4个时钟以使时钟振荡稳定,之后执行中断服务程序,返回到SLEEP的下一条指令。
休眠模式简介1.空闲模式:在此模式下,CPU停止运行,SPI、USART、模拟比较器、ADC,TWI、T/C2、看门狗与中断系统仍然正常工作。这个模式只是停止了Clkcpu和clkFLAsH,其他时钟则继续工作。
2.ADC噪声抑制模式:在此模式下,CPU停止运行,而ADC、外部中断,TWI地址匹配单元,T/C2和看门狗正常工作。此模式停止了clkI/O、clkcPu和clkFLASH,其他时钟继续工作。
此模式改善了ADC的噪声环境,使得ADC的转换精度更高。如果ADC使能,则进入此种休眠模式将自动启动一次AD转换,AD转换完成中断将唤醒MCU。
3.掉电模式:在此模式下,CPU停止运行,外部晶体停止振荡,只有外部中断,TWI地址匹配单元和看门狗(如果被使能)继续工作。这个休眠模式停止了所有的时钟,只有异步模块可以继续工作。
4.省电模式:此模式与掉电模式只有一点不同,如果T/C2为异步驱动,即寄存器ASSR的AS2位为1,则T/C2在省电模式中继续运行。除了掉电模式的唤醒方式,T/C2的溢出中断和比较匹配中断也可以将MCU从省电模式中唤醒。如果T/C2不是异步驱动方式,则建议使用掉电模式而非省电模式。
5.等待模式:此模式与掉电模式的唯一区别在于继续工作。
6.扩展等待模式:此模式与省电模式的唯一区别在于振荡器继续工作。
实例本篇实例可在之前的硬件基础上完成,无需添加新硬件。利用ATmega16进入休眠模式后CPU停止运行的特点,在SLEEP指令后加上点亮的指令进行验证。程序执行到SLEEP进入休眠,LED是熄灭的;通过外部中断唤醒MCU,程序继续执行,LED被点亮。
表1 MCUCR寄存器
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 | 等待模式 |
1 | 1 | 1 | 扩展等待模式 |
