AVR 电源管理_睡眠模式范例.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
AVR 电源管理_睡眠模式范例

/*********************************************** ****??????AVR??电源管理_睡眠模式范例?????????*** ***********************************************/ /* 本程序简单的示范了如何令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?? 熔丝位状态显示框,显示芯片的各个熔丝位的详细状况,AVR的熔丝位打勾表示0,表示启用该选项;取消表示1,表示不启用该选项。 */ #include?avr/io.h #include?avr/signal.h #include?avr/interrupt.h #include?avr/delay.h //时钟定为内部RC?1MHz,F_CPU=1000000?也可以采用其他时钟 #include?avr/sleep.h /* 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模式 函数 void?set_sleep_mode?(uint8_t?mode); 设定睡眠模式 void?sleep_mode?(void); 进入睡眠状态 */ //管脚定义 #define?LED 0???//PB0?驱动LED,低电平有效 #define?KEY_INT0 0???//按键,???低电平有效 #define?KEY_INT1 0???//按键,???低电平有效 #define?KEY_INT2 0???//按键,???低电平有效 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; //不用的管脚使能内部上拉电阻。 ????PORTB=0xFF; ????PORTC=0xFF; ????PORTD=0xFF; ????DDRB|=(1LED); //PB0设为输出高电平,灯灭??? ????/* ????端口引脚 ????进入休眠模式时,所有的端口引脚都应该配置为只消耗最小的功耗。 ????最重要的是避免驱动电阻性负载。 ????在休眠模式下I/O?时钟clkI/O?和ADC?时钟clkADC?都被停止了,输入缓冲器也禁止了,从而保证输入电路不会消耗电流。 ????在某些情况下输入逻辑是使能的,用来检测唤醒条件。用于此功能的具体引脚请参见“?数字输入使能和休眠模式”?。 ?????如果输入缓冲器是使能的,此时输入不能悬空,信号电平也不应该接近VCC

文档评论(0)

caohua0308 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档