AVR 外部中斷INT0的簡(jiǎn)單操作 作者: 時(shí)間:2016-11-22 來源:網(wǎng)絡(luò) 加入技術(shù)交流群 掃碼加入和技術(shù)大咖面對(duì)面交流海量資料庫(kù)查詢 收藏 #include <avr/io.h>#include #include interrupt.h> //調(diào)用WINAVR的中斷庫(kù)函數(shù)。volatile unsigned char count = 0; //定義循環(huán)變量,大家要注意我們這里要加上volatile. //因?yàn)閏ount函數(shù)在中斷函數(shù)中會(huì)變化。ISR(INT0_vect) //中斷函數(shù),注意我們寫中斷函數(shù)用的到ISR(中斷名){ _delay_ms(10); //按鍵延時(shí) if((PIND&(1 << PD0)) == 0) //重復(fù)檢測(cè)防抖動(dòng),只有按鍵按下時(shí)先執(zhí)行if里面的語(yǔ)句 { count++; PORTB = 0xff; if(count > 7) { count = 0; } } while(!(PIND&(1 << PD0))); //等持釋放按鍵 _delay_ms(10); //這里也是防抖動(dòng)}void Interrupt_Init(void) //中斷初始化函數(shù){ EICRA |= _BV(1); //INT0為下降沿產(chǎn)生異部中斷請(qǐng)求 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); }}
評(píng)論