Почему нажатие кнопки на MSP430 не зажигает светодиоды - PullRequest
0 голосов
/ 07 октября 2019

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

Я относительно новичок в программировании на микроконтроллере. Так что выше, это то, что я пытаюсь сделать. Однако, пытаясь заставить его работать в двоичном порядке, кнопка, кажется, перестала работать, и поэтому ни один из светодиодов не мигает. Я не уверен, что изменилось, так как раньше он работал хорошо без нажатия кнопки. По сравнению с друзьями это выглядит так же ошеломленно от того, что пошло не так.

Это код, который у меня есть.

#include <msp430.h> 


/*
 * main.c
 */
int main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop watchdog timer

  volatile unsigned int i;
  volatile unsigned int j;

  P1DIR |= 0x41;                            // Set P1.0 to output direction
  P1DIR &=~(BIT3);                          // Ensure P1.3 is an input
  P1REN |= BIT3;                            // Set pulling Resistor for P1.3
  P1OUT |= BIT3;                            // Make the pulling resistor for P1.3 a pull-UP resistor
  j=0;                                      // Button presses set to 0
  P1OUT &=~0x01;

  while (1)                                 // Test P1.3
  {
    if ((BIT3 & P1IN)) {                    // if P1.3 set, set P1.0 turning on the LED
        if (j == 0)
            P1OUT &= ~0x41;
        if (j == 1) {
            P1OUT |= 0x01;
            P1OUT &= ~0x40;
        }
        if (j == 2) {
            P1OUT &= ~0x01;
            P1OUT |= 0x40;
        }
       if (j == 3)
           P1OUT |= 0x41;
    else {
        for (i=3000; i>0; i--);
        if (j == 3)
            j++;
        else
            j = 0;
        }
       while ((BIT3 & P1IN));

  }
}
}

1 Ответ

0 голосов
/ 12 ноября 2019

Вы увеличиваете j только если j == 3. Таким образом, j всегда остается на 0, что означает, что все светодиоды выключены. Вы также пропустили закрывающую скобку перед остальным. Форматирование кода с правильным отступом помогает найти такие ошибки.

  while (1)
  {
    if ((BIT3 & P1IN)) 
    {
      if (j == 0)
      {
        P1OUT &= ~0x41;
      } 

      if (j == 1) 
      {
        P1OUT |= 0x01;
        P1OUT &= ~0x40;
      }

      if (j == 2) 
      {
         P1OUT &= ~0x01;
         P1OUT |= 0x40;
      }

      if (j == 3)
      {
         P1OUT |= 0x41;
      }
    }
    else 
    {
       for (i=3000; i>0; i--);

       // here I exchanged the == with <
       if ( j < 3 ) 
       {
         j++;
       }
       else
       {
         j = 0;
       }
    }
    while ((BIT3 & P1IN));
 }
...