尝试通过以下行在 ATmega328P 上启用外部中断:
LDI R16, (1 << ISC00) | (1 << ISC01)
LDI R17, (1 << INT0)
STS EICRA, R16
STS EIMSK, R17
SEI
在我的重置子程序期间。
这个想法是让 INT0 在上升沿(即按下按钮)触发外部中断。相应的JMP
指令已放置在中断向量表中0x0002
。
在使用模拟器在 Atmel Studio 6 中进行调试期间,当我切换 INT0 引脚时,不仅没有中断运行,而且在手动执行指令时,我发现EIMSK
寄存器没有被更新,并且STS EIMSK, R17
尽管 R17 指令似乎完全没有做任何事情在执行该指令之前被设置为 0x01。
在 AVR 组装方面相当菜鸟,这是我的代码问题还是 atmel 工作室的问题。