AVR 外部中断INT0的简单操作 作者: 时间:2016-11-22 来源:网络 加入技术交流群 扫码加入和技术大咖面对面交流海量资料库查询 收藏 #include <avr/io.h>#include #include interrupt.h> //调用WINAVR的中断库函数。volatile unsigned char count = 0; //定义循环变量,大家要注意我们这里要加上volatile. //因为count函数在中断函数中会变化。ISR(INT0_vect) //中断函数,注意我们写中断函数用的到ISR(中断名){ _delay_ms(10); //按键延时 if((PIND&(1 << PD0)) == 0) //重复检测防抖动,只有按键按下时先执行if里面的语句 { count++; PORTB = 0xff; if(count > 7) { count = 0; } } while(!(PIND&(1 << PD0))); //等持释放按键 _delay_ms(10); //这里也是防抖动}void Interrupt_Init(void) //中断初始化函数{ EICRA |= _BV(1); //INT0为下降沿产生异部中断请求 EIMSK |= _BV(INT0); //始能外部中断0 sei(); //置位全局中断位}int main(void){ DDRB = 0xff; //PB口为输出模式 PORTB = 0xff; //初始化为1 DDRD = 0x00; //PD口为输入模式 PORTD = 0xff; //有上拉 Interrupt_Init(); while(1) { PORTB |= _BV(count); _delay_ms(500); PORTB &= ~_BV(count); _delay_ms(500); }}
评论