现在有效!!
在裁剪要发布到此处的代码的过程中,似乎我删除了使我的引脚反弹的逻辑错误。我的坏...这里是您参考的代码: -
#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()中初始化)
答案 0 :(得分:0)
PORTD上的引脚6不应该再次变低,除非你在其他地方将其设置为低电平。
如果除了在main()
开头之外没有将其设置为低,则表示系统正在重置自身并再次运行main()
。没有处理程序的启用中断可能会导致此问题。检查以确保系统没有崩溃。