/***********************************************

****      AVR电源管理及睡眠模式范例程序            ***

****                                        ***

**** 作者:  HJJourAVR                        ***

**** 编译器:WINAVR20050214                   ***

***********************************************/

/*

本程序简单的示范了如何令AVR ATMEGA16进入睡眠状态及唤醒

  电源管理及睡眠模式的介绍

  进入最低耗电的掉电模式

  关闭各种模块

  外部中断唤醒

 M16掉电模式的耗电情况(看门狗关闭),时钟为内部RC 1MHz

     0.9uA@Vcc=5.0V  [手册的图表约为1.1uA]

     0.3uA@Vcc=3.3V  [手册的图表约为0.4uA]

     //测量的数字万用表是FLUKE 15B,分辨率0.1uA

这个程序需要MCU进入休眠状态,为实现最低功耗,JTAG接口会被关闭,只能通过LED的变化来观察程序的运行。

这个实验里面,用STK500(AVRISP) ISP下载线来烧录更方便。

熔丝位设置

1 关断BOD功能 BODEN=1

2 如果用ISP方式烧录,就可以完全关闭JTAG口了  OCEEN=1,JTAGEN=1 

*/

#include

#include

#include

#include

//时钟定为内部RC 1MHz,F_CPU=1000000 也可以采用其他时钟

#include

/*

sleep.h里面定义的常数,对应各种睡眠模式

#define SLEEP_MODE_IDLE         0

空闲模式

#define SLEEP_MODE_ADC          _BV(SM0)

ADC 噪声抑制模式

#define SLEEP_MODE_PWR_DOWN     _BV(SM1)

掉电模式

#define SLEEP_MODE_PWR_SAVE     (_BV(SM0) | _BV(SM1))

省电模式

#define SLEEP_MODE_STANDBY      (_BV(SM1) | _BV(SM2))

Standby 模式

#define SLEEP_MODE_EXT_STANDBY  (_BV(SM0) | _BV(SM1) | _BV(SM2))

扩展Standby模式