/***************************************
//取自周兴华的《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);
}
}