ИК-приемник RC5 с Pic12F1572

Я создаю ИК-приемник с PIC12F1572 с модулем приемника TSOP2438 Моя цель этого проекта - получать данные с помощью пульта дистанционного управления и отправлять их на ПК через UART .. Я написал код и тестирую его. Я могу отправить нормальное значение. через UART, но где-то неправильно, поэтому я не могу получить шестнадцатеричные значения, касающиеся команд дистанционного управления. Может ли кто-нибудь увидеть мой код и сказать, где я ошибаюсь? Вот мой код

 void main(void)
{   
    OSCILLATOR_Initialize();          // 0x78 for Fosc = 16Mhz 
    PIN_MANAGER_Initialize();         //All port pins Digital and input
    EUSART_Initialize();
    INTCONbits.IOCIF = 0;            // Interrupt on-change Flag
    INTCONbits.PEIE = 1;            //SEt Peripheral Interrupt
    INTCONbits.GIE = 1;             //Set Global Interrupt 
  //while(!OSCSTATbits.HFIOFS);     //Check here or wait here to OSC stable/ 0.5% accuracy

    TRISAbits.TRISA2 = 1;           //Configure R1 as input

 // uint16_t Input_buffer [20];

  EUSART_Write(0x40);             // 0x40 = @ some flag


   while(1)
  {
    count = 0;
    //while((IR_PIN));                //IR_PIN receives an IR signal its output pin goes from logic 1 to logic 0
                                    //which causes the microcontroller to start reading the IR signal using the function. decode()
    EUSART_Write(0x41); 
   //while(IR_PIN);

    if(Decode())                    //check if RC5 decoding- new data is arrived
    {

        EUSART_Write(0x42); 

        toggle_bit = bit_test(IR_Code, 11);
        address = (IR_Code >> 6) & 0x1F;
        command = IR_Code & 0x3F;

        EUSART_Write(toggle_bit);
        EUSART_Write(address);
        EUSART_Write(command);

        EUSART_Write(0x43);


    }
  }
}

/*----------*/
uint8_t Measure_space()
{
  TMR0_Initialize();

  while(IR_PIN && (count < 2000))
    count = TMR0_ReadTimer();               //Read timer value and store it in count value
  if((count > 1999) || (count < 700))
    return 0;                               //0 = If width is out of range
  if(count > 1200)
    return 1;                               //1 = If width is long
  else
    return 2;                               //2 = If the width is short
}

uint8_t Decode()
{
  uint8_t i = 0, check;
  mid1:
  check = Measure_Pulse();
  if(check == 0)
    return FALSE;
  bit_set(IR_Code, 13 - i);
  i++;

  if(i > 13)
   return TRUE;

  if(check == 1)
    goto mid0;
  else
    goto start1;

  mid0:
  check = Measure_space();
  if((check == 0) && (i != 13))

    return FALSE;

  bit_clear(IR_Code, 13 - i);
  i++;

  if(i > 13) return TRUE;

  if(check == 1)
    goto mid1;
  else
    goto start0;

 start1:
  check = Measure_space();
  if(check != 2)
    return FALSE;
  goto mid1;
  start0:
  check = Measure_Pulse();
  if(check != 2)
    return FALSE;
  goto mid0;
}

person Garryp    schedule 16.01.2017    source источник


Ответы (1)


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

person rahul_T_T    schedule 23.01.2017
comment
Спасибо @ user7424291,, буду реализовывать - person Garryp; 29.01.2017
comment
Вы все можете дать мне голос, пожалуйста? Я больше не могу задать вопрос ... - person Garryp; 13.02.2017