gpt4 book ai didi

c - 如何启用多个中断 AVR

转载 作者:太空宇宙 更新时间:2023-11-04 04:48:42 25 4
gpt4 key购买 nike

我正在使用 ATmega88PA 来查找 2 个引脚上的引脚变化。我想使用 PCINT0 和 PCINT2,尽管如果我需要使用不同的引脚,我还有很多其他引脚打开。我一直在搞乱事情并且能够让 PCINT0 正常工作,当我试图让 PCINT2 工作时我的问题来了。

如果我定义和设置 PCINT2 的方式与让 PCINT0 工作的方式相同,则什么也不会发生。我什至在一个新程序中也尝试过这个,只是为了看看是否有其他东西以某种方式进行干扰,但这并没有解决任何问题。我什至完全摆脱了 PCINT0,看看是否能让 PCINT2 独立工作,但我仍然做不到。

这是我的 PCINT0 代码

DDRC = 0x20; // PORTC,5 is now output
sbi(PORTC,5);
USART_Init(51);
lcd_init(LCD_DISP_ON);
lcd_clrscr();

PCICR |= (1 << PCIE0);
PCMSK0 |= (1 << PCINT0);

如果我将所有内容都更改为 PCMSK2 和 PCINT2,那么当我触发 pin 时什么也不会发生。这是 ATmega88PA 数据表的链接 Datasheet

最佳答案

我认为这个问题可能主要是由于各种寄存器标志的名称有点困惑。如果您盯着数据表看的时间足够长,您会注意到 PCIE2 和 PCMSK2 不控制 PCINT2。他们实际上控制了 PCINT16 到 PCINT23。

PCINT0-PCINT7(包括您想要的 PCINT2)由 PCICR 中的 PCIE0(您已经设置)和 PCMSK0(不是您在上一条评论中提到的 PCMSK2)控制。

因此,要解决您的问题,您只需将最后一行更改为:

PCMSK0 |=(1 << PCINT0) | (1 << PCINT2)

免责声明:我还没有机会在真实硬件上进行测试。请仔细检查数据表。

希望这对您有所帮助。

关于c - 如何启用多个中断 AVR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18258583/

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