/***************************************
取自周興華《AVR單片機C語言高級程序設計》
進入INT1中斷的時候,再開啟全局中斷,
這時候INT0中斷觸發,可以形成中斷嵌套
***************************************/
#include<iom16v.h>
#include<macros.h>
#define uchar unsigned char
#define uint unsigned int
uint shu;
/***************************************
delay
****************************************/
void delay_ms(uint k)
{
uint i,j;
for(i=0;i<k;i++)
for(j=0;j<570;j++);
}
/****************************************
main
****************************************/
void main(void)
{
DDRB=0xff;
PORTB=0XFF;
PORTD=0XFF;
DDRD=0XF3; //將PD2,PD3設置為輸入 即INT0,INT1
MCUCR=0X0A; //INT1,INT0 設置為下降沿觸發
GICR=0XC0; //使能INT1,INT0 中斷
SREG=0X80; //使能總中斷
while(1)
{
PORTB=0X00;
delay_ms(100);
PORTB=0XFF;
delay_ms(100);
}
}
/*****************************************
INT0 ISR
*****************************************/
#pragma interrupt_handler int0_isr:2
void int0_isr(void)
{
for(shu=0;shu<5;shu++)
{
PORTB|= BIT(1);
delay_ms(60);
PORTB&=~BIT(1);
delay_ms(60);
}
}
/***************************************
INT1 ISR
***************************************/
#pragma interrupt_handler int1_isr:3
void int1_isr(void)
{
SREG=0X80; //使能全局中斷
for(shu=0;shu<10;shu++)
{
PORTD|=BIT(7);
delay_ms(100);
PORTD&=~BIT(7);
delay_ms(100);
}
}