Вы должны разрешить прерывание, установив 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 мс.