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);
}
展开
 我来答
是知己读书人1910
2012-01-10
知道答主
回答量:8
采纳率:0%
帮助的人:9.3万
展开全部
会不会是给外部中断的信号存在抖动的情况 如果是这样可以在中断函数中先读取管脚是否为低电平
void ISR(void)
{
unsigned char i;
for(i=0;i<5;i++)
{
if(portd == 1)//为抖动
return;
}

...
...
}
深圳思驰科技有限公司_
2024-10-23 广告
深圳思驰科技是国内先进入芯片解密领域的公司,拥有数十年的丰富经验,成功帮助国内外企业、政府及知名科研机构攻克多个技术难题。在医疗电子、工控设备、军事航天、通信设备、广电设备、交通设备、汽车电子、家用电子等行业都成功推出了多款创新产品,熟悉这... 点击进入详情页
本回答由深圳思驰科技有限公司_提供
一剑出血
高粉答主

2012-01-10 · 醉心答题,欢迎关注
知道大有可为答主
回答量:5.7万
采纳率:78%
帮助的人:1.7亿
展开全部
没用过AVR,外部中断状态是否需要手动清除?
另外别在中断里面放这么长的延时,
而且你调用的延时子程序是不是与主程序公用的延时子程序???
追问
您好,延时子程序确实是和主程序公用的,这会有影响吗????
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式