/*************************************** //取自周興華的《AVR單片機C語言高級程序設(shè)計》 程序現(xiàn)象:PB口上的8個燈一直同時閃爍。 當(dāng)按下接在PD7的一個按鍵時, 接在PD3的一個小燈開始閃爍 PD3對應(yīng)于INT1. 閃了十次之后,PB上的燈繼續(xù)閃 本例子應(yīng)用了中斷。 ***************************************/ #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; DDRD=0XF7; //INT1設(shè)為輸入 PORTD=0XFF; MCUCR=0X08; //INT1設(shè)置為下降沿觸發(fā) GICR=0X80; //使能INT1中斷 SREG=0X80; //使能總中斷 while(1) { PORTB=0X00; delay_ms(100); PORTB=0XFF; delay_ms(100); } } /*************************************** ISR ***************************************/ #pragma interrupt_handler int1_isr:3 void int1_isr(void) { for(shu=0;shu<10;shu++) { PORTD|=BIT(7); delay_ms(100); PORTD&=~BIT(7); delay_ms(100); } }