如何检测何时按下按钮?

时间:2019-03-06 13:37:25

标签: assembly msp430

我正在尝试对msp430进行编程,以更改变量以更改LED闪烁的速度。这是我的第一次尝试。按下按钮后如何执行子程序“ changeVelocity”?

  bic.b #00001000b, &P2DIR  ; P2.3 as input
  bis.b #1,&P1DIR       ; P1.0 as output
  bis.b #00001000b, &P2REN  ; select internal resistor
  bis.b #00001000b, &P2OUT  ; make it pull-up


main:
    xor.b #1,&P1OUT            ; Toggle P1.0
    call #ExtraDelay
    bit.b  #00001000b, &P2IN ;poll 2.3 (trying to detect the button)
    jz changeVelocity ;this is how I'm trying but do not work as expected.
    jmp main

1 个答案:

答案 0 :(得分:-1)

您必须通过设置P2IE来启用中断,并通过P2REN来启用上拉/上拉。应相应选择P2OUT(上拉为1,下拉为0)

然后您应该使用中断向量中的固定地址注册中断处理程序:

ORG     PORT2_VECTOR
DW      your_interrupt_handler

您可以在其中设置一个延迟值。

请记住要添加某种反颠簸程序来滤除毛刺。并不是真正需要中断,您也可以合并端口输入(在执行操作时),但是您需要用某种计数器来代替延迟环路,该计数器决定何时打开/关闭LED并在每个周期使您的CPU休眠并设置一个计时器将她唤醒(这将帮助您进行精确的延迟并正确安排/执行任务)。 像

Mainloop
    nop
    bis #LPM0,SR            ; sleep
    nop

    <<<yourcode here>>>

    jmp Mainloop

TimerA0_ISR_Handler
    bic     #LPM0,0(SP)     ; wake up
    reti

尝试读取该端口的服务器倍数,并仅在按钮保持稳定至少20ms时向该按钮发出信号。