【问题标题】:Assembly - using more than 2 buttons for interrupts?装配 - 使用超过 2 个按钮进行中断?
【发布时间】:2013-04-06 09:11:03
【问题描述】:

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

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

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

【问题讨论】:

  • 您的讲师可能提到了引脚更改中断 (PCINT),它允许您通过任何 PBn、PCn 和 PDn 引脚上的更改触发中断。谷歌一下,我相信你可以找到一些材料来阅读。
  • 你试过了吗?怎么样?

标签: assembly microcontroller interrupt atmega


【解决方案1】:

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

;假设您已将按钮连接到 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 被释放,那么微处理器将执行您想要执行很多次的 ehat,只需按一下 btn。原因很简单:mP 的频率(可能是 12MHz)要快得多比你手指按下按钮的频率,或者,换句话说:你可以尽可能快地按下按钮,但 mP 总是比你快:)。 注意:中断比这更好,原因很简单:它们不必进行轮询。

希望你能理解。

【讨论】:

  • 这段代码的一个问题是它需要硬件去抖动,因为代码本身不做任何去抖动
猜你喜欢
  • 1970-01-01
  • 2013-07-29
  • 1970-01-01
  • 1970-01-01
  • 2019-02-13
  • 1970-01-01
  • 1970-01-01
  • 2014-11-11
  • 2013-05-16
相关资源
最近更新 更多