/*************************************** 取自周兴华《AVR单片机C语言高级程序设计》 进入INT1中断的时候,再开启全局中断, 这时候INT0中断触发,可以形成中断嵌套***************************************/ #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设置为输入 即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;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); } }
评论