#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();