AVR單片機(jī)中斷
#pragma interrupt_handler int0_isr:2
void int0_isr(void)
{
//external interupt on INT0
i++; //在中斷里進(jìn)行操作
}
#pragma interrupt_handler int1_isr:3
void int1_isr(void)
{
//external interupt on INT1
PORTA = 0x01; //在中斷里進(jìn)行操作
}
//call this routine to initialize all peripherals
void init_devices(void)
{
//stop errant interrupts until set up
CLI(); //disable all interrupts
port_init();
MCUCR = 0x08; //INT1 的下降沿產(chǎn)生異步中斷請(qǐng)求,INT0上升延
GICR = 0xC0; //INT0和INT1使能
TIMSK = 0x00; //timer interrupt sources
SEI(); //re-enable interrupts
//all peripherals are now initialized
}
void main(void)
{
init_devices();
while(1) //死循環(huán)等待中斷
;
}
相關(guān)解釋
#pragma interrupt_handler int0_isr:2
中斷的約定表示方法:int0_isr有一個(gè)與之對(duì)應(yīng)的應(yīng)用程序void int0_isr(void),2為中斷向量,值越小,優(yōu)先級(jí)越高,INT0的優(yōu)先級(jí)僅次于復(fù)位。
MCU 控制寄存器- MCUCR MCU 控制寄存器包含中斷觸發(fā)控制位與通用MCU 功能
通用中斷控制寄存器- GICR 使能或禁用外部中斷請(qǐng)求
使用過程中:為了降低干擾,中斷引腳請(qǐng)加上一個(gè)4.7K的上拉電阻,還可以根據(jù)實(shí)際需要,加上電容濾波,防抖動(dòng)。
評(píng)論