/*************************************** 取自周興華《AVR單片機(jī)C語言高級(jí)程序設(shè)計(jì)》 進(jìn)入INT1中斷的時(shí)候,再開啟全局中斷, 這時(shí)候INT0中斷觸發(fā),可以形成中斷嵌套***************************************/ #includeiom16v.h> #includemacros.h> #define uchar unsigned char #define uint unsigned int uint shu; /*************************************** delay ****************************************/ void delay_ms(uint k) { uint i,j; for(i=0;ik;i++) for(j=0;j570;j++); } /**************************************** main ****************************************/ void main(void) { DDRB=0xff; PORTB=0XFF; PORTD=0XFF; DDRD=0XF3; //將PD2,PD3設(shè)置為輸入 即INT0,INT1 MCUCR=0X0A; //INT1,INT0 設(shè)置為下降沿觸發(fā) 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;shu5;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;shu10;shu++) { PORTD|=BIT(7); delay_ms(100); PORTD=~BIT(7); delay_ms(100); } }
評(píng)論