Как определить, когда нажата кнопка? - PullRequest
1 голос
/ 06 марта 2019

Я пытаюсь запрограммировать msp430 для изменения переменной, чтобы изменить скорость мигающего светодиода. Это моя первая попытка. Как выполнить подпрограмму «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 голосов
/ 16 апреля 2019

Вы должны разрешить прерывание, установив P2IE, и включить подтягивание / подтягивание с помощью P2REN. P2OUT должен быть выбран соответственно (1 для подтягивания 0 для выпадения)

Затем вам нужно зарегистрировать обработчик прерываний, используя фиксированный адрес в векторе прерываний:

ORG     PORT2_VECTOR
DW      your_interrupt_handler

Вы можете установить значение задержки.

Не забудьте добавить какую-нибудь процедуру антибампинга, чтобы отфильтровать глюки. Прерывания на самом деле не нужны, вы также можете объединить вход порта (как и вы), но вам нужно заменить цикл задержки на какой-то счетчик, который решает, когда включать / выключать светодиод, а также заставляет ваш процессор спать в каждом цикле. и установите таймер, чтобы разбудить ее (это поможет вам сделать точные задержки и запланировать / выполнить вашу задачу правильно). Что-то вроде

Mainloop
    nop
    bis #LPM0,SR            ; sleep
    nop

    <<<yourcode here>>>

    jmp Mainloop

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

Старайтесь считывать несколько раз порт и сигнализировать о нажатой кнопке, только если она остается стабильной не менее 20 мс.

...