反弹AVR外部中断

时间:2014-10-16 08:03:51

标签: c interrupt avr

现在有效!!

在裁剪要发布到此处的代码的过程中,似乎我删除了使我的引脚反弹的逻辑错误。我的坏...这里是您参考的代码: -

#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define F_CPU 1000000UL

ISR (INT1_vect)
{

ext_int1();
}

int ext_int1(void)
{

PORTD|=(1<<PD5);
}


int main(void) {

DDRD=0xF0;
PORTD=0xFF;
PORTD&=~(1<<PD5);
uint16_t a=0;

GICR|=(1<<INT1); // enable external interrupt INT1

sei();

while(1){

a=1;
a=2;
}

}

上一个问题如下,感谢大家的耐心等待。帮助

使用外部中断INT1时,Atmel ATMEGA8出现问题。当INT1为低电平时,中断被设置为。调用中断应该将引脚PD6置ON。

现在的问题是,如果我将PD6声明为低电平,则在中断条件被移除时,引脚将恢复为低电平状态。但是如果我没有声明PD6,那么程序运行正常。

代码如下: -

ISR INT1_vect()
{
PORTD|=(1<<PD6);
}

int main (void)

{

DDRD=0xF0;
PORTD|=(1<<PD3); // enabling pull up resistor for INT1


PORTD&=~(1<<PD6); // initialise PD6 to LOW
GICR|=(1<<INT1);
sei();

.
.
.

我已经将其他中断用于PWM(比较和过流)&amp; ADC(转换完成)​​,它们工作正常。我使用PWM中断在数字输出端口上运行PWM。

可以总结如下: -

INT1 PD6

打开LOW

GND HIGH

打开LOW(如果在main()中初始化)

1 个答案:

答案 0 :(得分:0)

PORTD上的引脚6不应该再次变低,除非你在其他地方将其设置为低电平。

如果除了在main()开头之外没有将其设置为低,则表示系统正在重置自身并再次运行main()。没有处理程序的启用中断可能会导致此问题。检查以确保系统没有崩溃。