Как заставить светодиод светить при нажатии кнопки?

Делал емкостную сенсорную кнопку на базе MSP430G2744. Нажатие регистрировать я научился, а вот заставить светодиод светить при нажатии нет. У меня получилось только заставить его мигать, если не отключать сторожевой таймер. Вроде бы он уходит в перезагрузку по достижении какого то времени, а светодиод периодически мигает. Каким образом можно сделать так, чтобы при нажатии светодиод именно светился постоянно, а не мигал? Код программы на ассемблере прилагается. Писал в IAR.

#include "msp430.h"                      ; #define controlled include file

#define  LED     BIT0
#define  CPS     BIT1

              NAME    main                    ; module name

              PUBLIC  main                    ; make the main label vissible
                                                      ; outside this module
              ORG     0FFFEh
              DC16    init                    ; set reset vector to 'init' label
        
              RSEG    INTVEC                  ;вектор прерывания
              ORG     PORT1_VECTOR           
              DC16    inter

              RSEG    CSTACK                  ; pre-declaration of segment
              RSEG    CODE                    ; place program in 'CODE' segment


init:          MOV     #SFE(CSTACK), SP        ; set up stack
        

main:          NOP                             ; main program
              ;MOV.W  #WDTPW+WDTHOLD,&WDTCTL  ; Stop watchdog timer
              JMP    meas 
        
inter:        mov    TAR, r7                  ;обработчик прерывания
              mov.b  #0, P1IE                 ;сохраняем значение таймера
              mov.b  #0, P1IES
              jmp    comp

        
meas:         mov    #0, r7
                
             bis.w  #MC1, TACTL              ;установка таймера, непрерывный счет
             bis.w  #TASSEL1, TACTL          ;SMLCK
             mov    #0, TACCR0
        
        
             bis.b  #CPS, P1DIR              ;устанавливаем пин кнопки на выход
             bis.b  #CPS, P1OUT
             mov    #1000, r11
charge:    dec    r11                            ;ждем, пока емкость зарядится
             tst    r11
             jz     cont    
             jmp    charge 
        
cont:       bis.b  #CPS, P1IES                ;устанавливаем прерывания по низкому уровню
            bis.b  #CPS, P1IE                  ;на пине кнопки
        
            mov    #0, TAR
        
            mov.b  #0, P1DIR                ;устанавливаем пин кнопки на вход для разряда
            bis.w  #GIE, SR                    ;разрешаем прерывания
            jmp    $                               ;ждем прерывания
        

comp:     mov.b  #0x15, r10               ;сравниваем значение из TAR с заранее измеренным
            cmp.b  r7, r10            ;значением разряда при касании, 15 я выбрал, так как
            jl     led                  ;оно больше значения при касании
            jmp    meas
        
led:        mov.b  #LED, P1DIR              ;включаем светодиод
           mov.b  #LED, P1OUT
           mov    #65000, r6               
           jmp    delay
        
delay:    dec    r6                  ;задержка, чтобы увидеть свечение светодиода
           tst    r6
           jz     meas
           jmp    delay
             
                
        END
  • Вопрос задан
  • 3786 просмотров
Пригласить эксперта
Ответы на вопрос 1
@LampTester
У меня получилось только заставить его мигать, если не отключать сторожевой таймер. Вроде бы он уходит в перезагрузку по достижении какого то времени, а светодиод периодически мигает. Каким образом можно сделать так, чтобы при нажатии светодиод именно светился постоянно, а не мигал?


Собственно, отключить сторожевой таймер...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы