我正在使用ATmega88PA查找两个管脚上的管脚更改。我想使用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,则触发管脚时不会发生任何事情。以下是ATmega88PADatasheet的数据表链接
最佳答案
我认为这个问题可能主要是由于各种寄存器标志的名称稍微有点混乱。如果你盯着数据表看够久,你会发现PCIE2和PCMSK2并不控制PCINT2。他们实际上控制着PCINT16到PCINT23。
PCINT0-PCINT7(包括您想要的PCINT2)由PCICR(您已经设置)中的PCIE0和PCMSK0(而不是您在上一条评论中提到的PCMSK2)控制
所以,要解决问题,您只需将最后一行更改为:
PCMSK0 |=(1<|免责声明:我还没有机会在真正的硬件上测试这个。请仔细检查数据表。
希望这有帮助。
关于c - 如何启用多个中断AVR,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18258583/