Assembly 组装-使用2个以上的按钮进行中断?

Assembly 组装-使用2个以上的按钮进行中断?,assembly,microcontroller,interrupt,atmega,Assembly,Microcontroller,Interrupt,Atmega,我使用的是带有Atmega8535微控制器的STK200板。我使用INT0和INT1按钮作为外部中断,但为了初始化INT0,我必须将位6设置为1,而要初始化INT1,我必须将位7设置为1,因此没有更多空间来初始化其他按钮 我的讲师告诉我,可以使用更多的按钮来引起中断,但这超出了我学习的那一年(第一年软件工程)所需的知识 如果没有中断,我不知道如何处理按钮。因此,我需要关于如何处理按钮或如何使用更多按钮作为中断的建议。还有另一种处理按钮的方法(不同于中断),当然中断是最好的,但如果您没有任何外部中

我使用的是带有Atmega8535微控制器的STK200板。我使用INT0和INT1按钮作为外部中断,但为了初始化INT0,我必须将位6设置为1,而要初始化INT1,我必须将位7设置为1,因此没有更多空间来初始化其他按钮

我的讲师告诉我,可以使用更多的按钮来引起中断,但这超出了我学习的那一年(第一年软件工程)所需的知识


如果没有中断,我不知道如何处理按钮。因此,我需要关于如何处理按钮或如何使用更多按钮作为中断的建议。

还有另一种处理按钮的方法(不同于中断),当然中断是最好的,但如果您没有任何外部中断引脚,那么您可以使用此方法。该方法基本上是轮询连接按钮的pin。我将在asm中发布8051的代码实现,以便您更好地理解它。希望有帮助:

);假设您已将按钮连接到P1.1

org 00H
 jb P1.1,$      ;wait for a hold button    
 jnb P1.1,$     ;wait for button to be unhold
 ;perform anything
 end
正如你在第二行代码中看到的,我检查按钮是否被按下(当然,假设按钮处于低激活状态),如果没有,我就呆在那里,如果被按下,我跳到第3行,在那里我等待直到按钮被解除锁定。如果您不等待btn解除锁定,则微处理器将执行您想执行多次的操作,只需按一次btn。原因很简单:mP的频率(可能为12MHz)比您的手指按下按钮的频率快得多,或者,换句话说:你可以尽可能快地按下按钮,但是mP总是比你快:)。 注意:中断比这更好,原因很简单:它们不必进行轮询


希望您能理解。

您的讲师可能指的是插脚更改中断(
PCINT
),它允许您通过任何PBn、PCn和PDn插脚上的更改触发中断。谷歌搜索它,我相信你能找到一些资料阅读。你试过吗?怎么样?这段代码的一个问题是它需要硬件去抖动,因为代码本身不做任何去抖动