ATMEGA16单片机外部中断问题!!!大家看一下
利用atmega16单片机的外部中断INT0,设置中断管脚为输入带上拉,下降沿触发,当给中断管脚一个低电平时,就会触发中断,执行中断程序,在中断程序中是PB5口由低变高,...
利用atmega16单片机的外部中断INT0,设置中断管脚为输入带上拉,下降沿触发,当给中断管脚一个低电平时,就会触发中断,执行中断程序,在中断程序中是PB5口由低变高,持续2s,但现在当给INT0一个下降沿时,PB5口会又低变高,持续4s,也就是变为原来两倍了,我加了一个延时函数观察了一下,是中断程序执行了两遍,我用示波器测得,INT0只触发了一次,低电平时间大约是120ms左右,这种情况有是有,有时候没有,将程序代码贴出来大家看一下
/*******************************************
函数名称: Init_kb
参 数: 无
返回值 : 无
/********************************************/
void Init_kb(void)
{
MCUCR =2; //设置INT0为下降沿触发中断
DDRD&=~BIT(2); //配置中断管脚为输入
PORTD|=BIT(2); //使能中断管脚的上拉
GICR|=BIT(EXTINT0);
}
/*********************************
函数名称:Int0
参数: 无
返回值:无
/***********************************/
void Int0()
{SREG&=~BIT(7);
GICR&=~BIT(6);
PORTB|=BIT(5);
delay_ms(2000);
PORTB&=~BIT(5);
GICR|=BIT(6);
SREG|=BIT(7);
} 展开
/*******************************************
函数名称: Init_kb
参 数: 无
返回值 : 无
/********************************************/
void Init_kb(void)
{
MCUCR =2; //设置INT0为下降沿触发中断
DDRD&=~BIT(2); //配置中断管脚为输入
PORTD|=BIT(2); //使能中断管脚的上拉
GICR|=BIT(EXTINT0);
}
/*********************************
函数名称:Int0
参数: 无
返回值:无
/***********************************/
void Int0()
{SREG&=~BIT(7);
GICR&=~BIT(6);
PORTB|=BIT(5);
delay_ms(2000);
PORTB&=~BIT(5);
GICR|=BIT(6);
SREG|=BIT(7);
} 展开
2个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询