/*************************************** //取自周兴华的《AVR单片机C语言高级程序设计》 程序现象:PB口上的8个灯一直同时闪烁。 当按下接在PD7的一个按键时, 接在PD3的一个小灯开始闪烁 PD3对应于INT1. 闪了十次之后,PB上的灯继续闪 本例子应用了中断。 ***************************************/ #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设为输入 PORTD=0XFF; MCUCR=0X08; //INT1设置为下降沿触发 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); } }