gpt4 book ai didi

c - AVR 外部中断反弹

转载 作者:行者123 更新时间:2023-11-30 20:39:38 25 4
gpt4 key购买 nike

现在可以了!!

在裁剪代码以发布到此处的过程中,似乎我删除了导致我的 pin 弹回的逻辑错误。我的错...这是供您引用的代码:-

#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;
}

}

之前的问题如下,感谢大家的耐心帮助。

我在 Atmel ATMEGA8 中使用外部中断 INT1 时遇到问题。当 INT1 为低电平时,中断被设置。调用中断应该打开引脚 PD6。

现在的问题是,如果我将 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(比较和溢出)和 ADC(转换完成)​​的其他中断,它们工作正常。我使用 PWM 中断在数字输出端口上运行 PWM。

发生的情况可以总结如下:-

INT1 PD6

低开

接地高

开低电平(如果在 main() 中初始化)

最佳答案

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

如果除了 main() 开始处之外的任何地方都没有将其设置为低,则表明系统正在重置自身并再次运行 main()。启用没有处理程序的中断可能会导致这种情况。检查以确保系统没有崩溃。

关于c - AVR 外部中断反弹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26399208/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com