AVR系列的外部中断通过引脚INT7:0 触发。只要使能了中断,即使引脚INT7:0 配置为输出,只要电
平发生了合适的变化,中断也会触发。这个特点可以用来产生软件中断。通过设置外部中
断控制寄存器– EICRA (INT3:0) 和EICRB (INT7:4),中断可以由下降沿、上升沿,或者
是低电平触发。当外部中断使能并且配置为电平触发,只要引脚电平为低,中断就会产
生。
/*============================================================
外部中断0-3点亮发光二极管
必须注意的是:假如使用的是下降沿触发,就必须保证在未按下键盘的情况下,相
应的外部中断的管脚必须是高电平,按下键盘时产生下降沿,触发外部中断。其他
的情况以此类推。
=============================================================*/
#include <iom128v.h>
#include <macros.h>
volatile unsigned char cnt=255;
void initialize(void);
#pragma interrupt_handler outinterrupt0:2//外部中断0
void outinterrupt0()
{
cnt=cnt-1;
if(cnt==0)
cnt=255;
}
#pragma interrupt_handler outinterrupt1:3//外部中断1
void outinterrupt1()
{
cnt=cnt-1;
if(cnt==0)
cnt=255;
}
#pragma interrupt_handler outinterrupt2:4//外部中断2
void outinterrupt2()
{
cnt=cnt-1;
if(cnt==0)
cnt=255;
}
#pragma interrupt_handler outinterrupt3:5//外部中断3
void outinterrupt3()
{
cnt=cnt-1;
if(cnt==0)
cnt=255;
}
void main(void)
{
initialize();
DDRD=0xf0;//将INT0-INT3设置为输入
while(1)
{
PORTA=cnt;
}
}
void initialize(void)
{
EIMSK=0x0f; // 使用外部中断0-3
EICRA=0xaa; // 下降沿中断请求(异步)
SEI(); // SREG的最高位置1
DDRE |= BIT(PE2); //发光二极管片选
PORTE |= BIT(PE2);
DDRA=0XFF;
}
编译环境:ICCAVR
用户377235 2015-1-31 23:22
用户377235 2013-11-30 11:08
我单片机的按键是连在PE口的!PE口是中断4,5,6,7。我用 EICRA=0xaa;和 EICRB=0xaa;的结果为什么是一样的啊?