avr单片机的进入各种睡眠模式,并使用INT2唤醒代码
2008-10-22 17:44
302 查看
#include <avr/io.h>
#include <avr/sleep.h>
#include <avr/interrupt.h>
#include <util/delay.h>
/* 外部INT2处理函数 */
/* 该函数可以使用调试器调试,改变PORTB的PINB2的值从而触发中断 */
SIGNAL(SIG_INTERRUPT2)
{
PORTB ^= (1 << 1); /*PB1电平取反*/
}
/*主函数*/
int main(void)
{
DDRA = 0x00; /*方向输入*/
PORTA = 0xFF; /*打开上拉*/
DDRB = 0xFF; /*方向输出*/
PORTB = 0x00; /*电平设置*/
MCUCSR = (0<<ISC2); /* 外部INT2的下降沿激活中断 */
GICR |= (1<<INT2); /* 外部INT2中断使能 */
sei(); /*中断使能*/
/* 进入空闲模式,等待INT2唤醒 */
set_sleep_mode(SLEEP_MODE_IDLE);
sleep_enable();
sleep_cpu();
sleep_disable();
/* 进入ADC 噪声抑制模式,等待INT2唤醒 */
set_sleep_mode(SLEEP_MODE_ADC);
sleep_enable();
sleep_cpu();
sleep_disable();
/* 进入掉电模式,等待INT2唤醒 */
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
sleep_enable();
sleep_cpu();
sleep_disable();
/* 进入省电模式,等待INT2唤醒 */
set_sleep_mode(SLEEP_MODE_PWR_SAVE);
sleep_enable();
sleep_cpu();
sleep_disable();
/* 进入STANDBY模式,等待INT2唤醒 */
set_sleep_mode(SLEEP_MODE_STANDBY);
sleep_enable();
sleep_cpu();
sleep_disable();
/* 进入扩展STANDBY模式,等待INT2唤醒 */
set_sleep_mode(SLEEP_MODE_EXT_STANDBY);
sleep_enable();
sleep_cpu();
sleep_disable();
_delay_ms(200);
return 0;
}
#include <avr/sleep.h>
#include <avr/interrupt.h>
#include <util/delay.h>
/* 外部INT2处理函数 */
/* 该函数可以使用调试器调试,改变PORTB的PINB2的值从而触发中断 */
SIGNAL(SIG_INTERRUPT2)
{
PORTB ^= (1 << 1); /*PB1电平取反*/
}
/*主函数*/
int main(void)
{
DDRA = 0x00; /*方向输入*/
PORTA = 0xFF; /*打开上拉*/
DDRB = 0xFF; /*方向输出*/
PORTB = 0x00; /*电平设置*/
MCUCSR = (0<<ISC2); /* 外部INT2的下降沿激活中断 */
GICR |= (1<<INT2); /* 外部INT2中断使能 */
sei(); /*中断使能*/
/* 进入空闲模式,等待INT2唤醒 */
set_sleep_mode(SLEEP_MODE_IDLE);
sleep_enable();
sleep_cpu();
sleep_disable();
/* 进入ADC 噪声抑制模式,等待INT2唤醒 */
set_sleep_mode(SLEEP_MODE_ADC);
sleep_enable();
sleep_cpu();
sleep_disable();
/* 进入掉电模式,等待INT2唤醒 */
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
sleep_enable();
sleep_cpu();
sleep_disable();
/* 进入省电模式,等待INT2唤醒 */
set_sleep_mode(SLEEP_MODE_PWR_SAVE);
sleep_enable();
sleep_cpu();
sleep_disable();
/* 进入STANDBY模式,等待INT2唤醒 */
set_sleep_mode(SLEEP_MODE_STANDBY);
sleep_enable();
sleep_cpu();
sleep_disable();
/* 进入扩展STANDBY模式,等待INT2唤醒 */
set_sleep_mode(SLEEP_MODE_EXT_STANDBY);
sleep_enable();
sleep_cpu();
sleep_disable();
_delay_ms(200);
return 0;
}
相关文章推荐
- win7系统长时间无操作进入睡眠模式后禁止鼠标和键盘唤醒
- Android 使用代码进入Recovery模式自动升级指定固件包
- 使用stm32L151C8T6芯片,用rtc唤醒低功耗,三种模式详细介绍,并付代码。
- zk中各种图形使用的代码
- MVP模式是否适合我们使用? 代码说话
- 新手编程入门二:使用“模板模式”减少重复代码
- 组合模式(未完成)(未看代码,只填了使用场景)
- 策略模式在java中的简单使用的代码
- php中使用接口实现工厂设计模式的代码
- 笔记本上CentOS7合盖后黑屏但不进入睡眠模式
- (十五)Core Java Eclipse的使用(快捷配置,模板代码.静态导入,自动拆装箱,享元设计模式) (112)
- 找找 Spring Event 源码中各种设计模式的使用
- 【代码优化】当许多构造函数的参数,请考虑使用builder模式
- Android中使用代码截图的各种方法总结
- Android中使用代码截图的各种方法总结
- stm32进入停止模式,中断 唤醒
- 对PopupWindow常用API的简单封装,几行代码就搞定PopupWindow弹窗,使用Builder模式,链式调用,像使用AlertDialog 一样
- PHP各种设计模式代码示例
- Android中使用代码截图的各种方法总结
- 使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]