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寄存器
这两个寄存器决定触发信号的种类,是电平触发,还是边沿触发
由上图可以看出这两个寄存器结构一致,只不过其控制的中断源不同,具体控制方式如下:
3.EIMSK寄存器
控制不同中断源的使能,将相应位置高则使能相应中断。
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();
}
jiantoushi
发布了4 篇原创文章 · 获赞 2 · 访问量 3971
私信
关注