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);
} 展开
深圳思驰科技有限公司_
2024-10-23 广告
2024-10-23 广告
深圳思驰科技是国内先进入芯片解密领域的公司,拥有数十年的丰富经验,成功帮助国内外企业、政府及知名科研机构攻克多个技术难题。在医疗电子、工控设备、军事航天、通信设备、广电设备、交通设备、汽车电子、家用电子等行业都成功推出了多款创新产品,熟悉这...
点击进入详情页
本回答由深圳思驰科技有限公司_提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询