Невозможно вырваться из оператора if после нажатия кнопки - микрочип - PullRequest
0 голосов
/ 18 октября 2019

Я не могу выйти из оператора if после нажатия кнопки. Кнопка активирует реле, и нажатие выключает реле.

Вот мой полный код: я новичок в C, поэтому все комментарии и предложения приветствуются.

 #include "mcc_generated_files/mcc.h"
 #define FCY  8000000UL
 #include <libpic30.h>
//#define baudrate 19200

 int main(void)
 {
     // Initialise the device
      SYSTEM_Initialize();
      while(1)
      {
          LED4_SetLow();                    // Turn on 3v3 LED
          LED12v_SetHigh(); 
          LED3_SetHigh(); 
          LED1_SetHigh(); 

          int button;
          button = UART5_Read();
          if (button == 0x08)
          {
              RLY1_SetHigh();
              RLY3_SetHigh(); 
              if (button == 0x00)
                  goto finished;
          }

          finished:
          RLY1_SetLow();
          RLY3_SetLow();
      }   
      return (0);
}

Теперь я отредактировал код следующим образом. Реле можно установить на высокое, но условие 0x00 никогда не достигается. Может кто-нибудь объяснить, пожалуйста?

#include "mcc_generated_files/mcc.h"
#define FCY  8000000UL
#include <libpic30.h>
//#define baudrate 19200

int main(void)
{
    // Initialise the device
    SYSTEM_Initialize();
    while(1)
    {
        LED4_SetLow();                  // Turn on 3v3 LED
        LED12v_SetHigh(); 
        LED3_SetHigh(); 
        LED1_SetHigh(); 

        int button;
        int release;
        button = UART5_Read();
        release = UART5_Read();
        if (button == 0x08)
        {
            RLY1_SetHigh();
            RLY3_SetHigh(); 
        }
        if (release == 0x00)
        {
            RLY1_SetLow();
            RLY3_SetLow();
        }
        __delay_ms(1000);   
    }    
    return (0);
}    

1 Ответ

0 голосов
/ 18 октября 2019

Я не использовал ни этот MCU, ни его библиотеки, но я считаю, что правильный код должен выглядеть примерно так:

#include "mcc_generated_files/mcc.h"
#include <libpic30.h>
#include <stdint.h>

#define BUTTON_CODE 0x8u   // use named constants instead of magic numbers

void main (void)
{
  // Initialise the device
  SYSTEM_Initialize();

  for(;;)
  {
    uint8_t data;

    LED4_SetLow();                    // Turn on 3v3 LED
    LED12v_SetHigh(); 
    LED3_SetHigh(); 
    LED1_SetHigh(); 

    if(UART5_Data_Ready())
    {
      data = UART5_Read();
      if(data == BUTTON_CODE)
      {
        RLY1_SetHigh();
        RLY3_SetHigh(); 
      }
      else
      {
        RLY1_SetLow();
        RLY3_SetLow();
      }
    }
  }
}
...