Atmega2560基础教程(4)——I/O口输入中断

Atmega2560基础教程(4)——I/O口输入中断

Atmega2560一共有8个中断输入,配置I/O口输入中断时需要开总中断,同时将相应I/O口配置为输入,打开对应中断寄存器,因此配置时除了上一篇教程当中配置I/O口为输入需要的2个寄存器外,还需要3个寄存器EICRA,EICRB,EIMSK。

1.中断源及其对应引脚

中断源 I/O口
INT0 PD0
INT1 PD1
INT2 PD2
INT3 PD3
INT4 PE4
INT5 PE5
INT6 PE6
INT7 PE7

2.EICRA/EICRB寄存器

这两个寄存器决定触发信号的种类,是电平触发,还是边沿触发

Atmega2560基础教程(4)——I/O口输入中断Atmega2560基础教程(4)——I/O口输入中断

由上图可以看出这两个寄存器结构一致,只不过其控制的中断源不同,具体控制方式如下:

Atmega2560基础教程(4)——I/O口输入中断

3.EIMSK寄存器

控制不同中断源的使能,将相应位置高则使能相应中断。

Atmega2560基础教程(4)——I/O口输入中断

4.具体例子

/*
	外部中断0,PD0输入,当中断触发时PA0电平翻转
 */ 

#define F_CPU 16000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <avr/sfr_defs.h>
#include <avr/interrupt.h>
int main(void)
{
	cli();
	DDRD&=~_BV(DDD0);
	PORTD|=_BV(PD0);
	DDRA|=_BV(DDA0);
	PORTA|=_BV(PA0);
	EIMSK |=_BV(INT0);     //使能外部中断0
	EICRA |=_BV(ISC01);    //设置外部中断0为下降沿触发
	sei();
	while (1)
	{
	}
}
ISR(INT0_vect){
	cli();
    PORTA^= (1 << PA0);  
	sei();
}

Atmega2560基础教程(4)——I/O口输入中断Atmega2560基础教程(4)——I/O口输入中断 jiantoushi 发布了4 篇原创文章 · 获赞 2 · 访问量 3971 私信 关注
上一篇:【吐血整理,建议收藏】B站上有哪些值得反复观看的Java视频教程?


下一篇:【友晶科技Terasic】为啥安装Quartus 软件的时候要安装器件库? 器件库有什么内容?