新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > AVR 外部中斷INT0的簡(jiǎn)單操作

AVR 外部中斷INT0的簡(jiǎn)單操作

作者: 時(shí)間:2016-11-22 來源:網(wǎng)絡(luò) 收藏
#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);
}
}


關(guān)鍵詞: AVR外部中斷INT

評(píng)論


技術(shù)專區(qū)

關(guān)閉