1

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

如果我以与使 PCINT0 工作相同的方式定义和设置 PCINT2,则不会发生任何事情。我什至在一个新程序中也试过这个,只是为了看看是否有其他东西以某种方式干扰,但这并没有解决任何问题。我什至一起摆脱了 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,则触发该引脚时不会发生任何事情。这是 ATmega88PA数据表的数据表链接

4

1 回答 1

0

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

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

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

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

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

希望这可以帮助。

于 2013-10-18T23:02:22.097 回答