AVR_Interrupt
https://blog.csdn.net/dandri/article/details/54799300
/**
*作者:Dandri
*时间:2017/01/31
*MCU:ATMega16
*频率:8MHz
*功能:按下两次按键,LED灯亮一次
*/
#include <avr/io.h>
#include <avr/interrupt.h>
unsigned char count = 0;//用于计数按下按键的次数
unsigned char flag = 0; //用于启动点灯的标志
//中断向量地址里的程序
#pragma interrupt_handler int0_isr:2 //首先使用#pragma interrupt_handler int0_isr:2声明中断,2表示中断向量号
void int0_isr(void)
{
count++;
if (count >= 2)
{
flag = 1;
count = 0; //计数器清0
}
}
//外部中断相关的寄存器初始化,因为接的是PD2,使用的是INT0
void int0_init()
{
GIFR = 0x40; //INTF0 标志位清零
MCUCR = 0X02; //INT0下降沿触发
GICR = 0X40; //INT0触发允许
}
//引脚初始化
void port_init()
{
DDRC = 0X01;
PORTC = 0X00;
}
//亮灯程序
void led()
{
if (flag == 1)
{
PORTC = 0X01;
flag = 0;
}
else
PORTC = 0X00;
}
int main()
{
port_init();
int0_init();
asm("sei"); //启用全局中断
while(1)
{
led();
}
return 0;
}