您的位置:首页 > 编程语言

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: