欢迎光临MCUWAY! 本站网名:单片机之路  永久域名:www.mcuway.com

设为首页

加入收藏

电子基础 初学MCU 单片机类型 MCU程序 MCU应用 设计软件 测控电路 技术论坛
 您现在的位置: 单片机之路 >> 单片机类型 >> AVR系列 >> 文章正文

AVR电源管理——睡眠模式范例


//管脚定义
#define LED 0 //PB0 驱动LED,低电平有效
#define KEY_INT2 0 //PB3 按键, 低电平有效
void delay_10ms(unsigned int t)
{
/*
由于内部函数_delay_ms() 最高延时较短
262.144mS@1MHz / 32.768ms@8MHz / 16.384ms@16MHz
故编写了这条函数,实现更长的延时,并能令程序能适应各种时钟频率
*/
while(t--)
_delay_ms(10);
}
int main(void)
{
unsigned char i;
//上电默认DDRx=0x00,PORTx=0x00 输入,无上拉电阻
PORTA=0xFF; //不用的管脚使能内部上拉电阻。
PORTC=0xFF;
PORTD=0xFF;
PORTB=0xFF;
DDRB =(1<<LED); //PB0设为输出高电平,灯灭
/*
端口引脚
进入休眠模式时,所有的端口引脚都应该配置为只消耗最小的功耗。
最重要的是避免驱动电阻性负载。
在休眠模式下I/O 时钟clkI/O 和ADC 时钟clkADC 都被停止了,输入缓冲器也禁止了,从而保证输入电路不会消耗电流。
在某些情况下输入逻辑是使能的,用来检测唤醒条件。用于此功能的具体引脚请参见“ 数字输入使能和休眠模式” 。
如果输入缓冲器是使能的,此时输入不能悬空,信号电平也不应该接近VCC/2,否则输入缓冲器会消耗额外的电流。
IO作输出(DDR=1)时,维持状态不变
*/
/*
看门狗定时器(上电默认是关闭的)
如果系统无需利用看门狗,这个模块也可以关闭。
若使能,则在任何休眠模式下都持续工作,从而消耗电流。
在深层次的睡眠模式下,这个电流将占总电流的很大比重。
假设看门狗定时器使能了,关闭程式如下
1. 在同一个指令内对WDTOE 和WDE 写"1“,即使WDE 已经为"1“
2. 在紧接的4 个时钟周期之内对WDE 写"0”
*/
WDTCR=(1<<WDTOE)|(1<<WDE);
WDTCR=(0<<WDE);
//或使用wdt.h里面的wdt_disable()函数
/*
模数转换器(上电默认是关闭的)
使能时, ADC在睡眠模式下继续工作。
为了降低功耗,在进入睡眠模式之前需要禁止ADC。
重新启动后的第一次转换为扩展的转换。
假设模数转换器使能了,关闭程式如下
*/
ADCSRA=(0<<ADEN);
/*
模拟比较器(上电默认是打开的,需要手工关闭)
在空闲模式时,如果没有使用模拟比较器,可以将其关闭。在ADC 噪声抑制模式下也是如此。
在其他睡眠模式模拟比较器是自动关闭的。
如果模拟比较器使用了内部电压基准源,则不论在什么睡眠模式下都需要关闭它。否则内部电压基准源将一直使能。
关闭程式如下
*/
ACSR=(1<<ACD);
/*
掉电检测BOD (由熔丝位BODEN控制)
如果系统没有利用掉电检测器BOD,这个模块也可以关闭。
如果熔丝位BODEN 被编程,从而使能了BOD 功能,它将在各种休眠模式下继续工作。
在深层次的休眠模式下,这个电流将占总电流的很大比重。
设置熔丝位BODEN=1 关断BOD功能
*/
/*
片内基准电压
使用BOD、模拟比较器和ADC 时可能需要内部电压基准源。
若这些模块都禁止了,则基准源也可以禁止。
重新使能后用户必须等待基准源稳定之后才可以使用它。
如果基准源在休眠过程中是使能的,其输出立即可以使用。
当BOD、模拟比较器和ADC都禁止了,则基准源也自动禁止了。
*/
/*
JTAG 接口与片上调试系统
如果通过熔丝位OCDEN使能了片上调试系统,当芯片进入掉电或省电模式时主时钟保持运行。
在休眠模式中这个电流占总电流的很大比重。
下面有三种替代方法:
1 不编程OCDEN
2 不编程JTAGEN
3 置位MCUCSR 的JTD
当JTAG 接口使能而JTAG TAP 控制器没有进行数据交换时,引脚TDO 将悬空。
如果与TDO 引脚连接的硬件电路没有上拉电阻,功耗将增加。
器件的引脚TDI 包含一个上拉电阻,因此在扫描链中无需为下一个芯片的TDO 引脚设置上拉电阻。
通过置位MCUCSR寄存器的JTD 或不对JTAG 熔丝位编程可以禁止JTAG 接口。
JTD: 禁止JTAG 接口(MCU控制与状态寄存器MCUCSR Bit7)
此位为0 时,如果JTAGEN熔丝位被编程则JTAG 接口使能。
如果这位为1, JTAG接口禁止。
为了避免无意的禁止或使能JTAG接口,必须通过一个时间序列来改变JTD 位。
应用软件必须在四个时钟周期内将期望的数值两次写入JTD。
如果JTAG 接口没有与其他JTAG电路连接, JTD应该置位。这样做的原因是为了避免JTAG接口TDO引脚的静态电流。

上一页  [1] [2] [3] 下一页

普通文章28课:单片机音乐汇编程序设计
普通文章27课:单片机的一些基本概念
普通文章26课:单片机矩阵式键盘接口技术
普通文章非常详细的51单片机引脚介绍
普通文章图解使用Keil C51软件的九个步骤
普通文章哈佛(Harvard)结构的单片机的原理图
普通文章单片机引脚及功能说明
普通文章c51单片机c语言教程介绍
普通文章第一课 建立你的第一个KeilC51项目
普通文章第二课 HEX文件的生成和MCU最小系统
普通文章第三课 C51语言的数据类型
普通文章第四课 C51常量
普通文章第五课 C51变量
普通文章第六课 C51运算符和表达式
普通文章第七课 运算符和表达式(关系运算符)
普通文章第八课 运算符和表达式(位运算符)
普通文章第九课 C51运算符和表达式(指针和地址
普通文章第十课 C51表达式语句及仿真器
普通文章第十一课 C51复合语句和条件语句
普通文章第十二课 C51开关分支语句
普通文章第十三课 C51循环语句
普通文章第十四课 C51函数
普通文章第十五课 C51数组的使用
普通文章第十六课 C51指针的使用
普通文章第十七课 C51结构、联合和枚举的使用

  • 上一篇文章:
  • 下一篇文章:
  • 更多精彩内容>>>

    普通文章电流单位
    普通文章功率单位
    普通文章什么是达林顿管?
    普通文章晶闸管的作用与原理

    学习单片机的必经之路——单片机之路,永久域名:www.mcuway.com