2017-01-16 1 views
2

수신기 모듈 TSOP2438가있는 PIC12F1572가있는 IR 수신기를 구축하고 있습니다. 이 프로젝트의 목적은 원격 제어로 데이터를 수신하여 UART를 통해 PC로 전송하는 것입니다. 코드를 완료했으며 내가 UART를 통해 정상적인 값을 보낼 수 있지만 Somewhereis 잘못 보낼 수 있도록 원격 제어의 명령에 관한 16 진수 값을받을 수있는 그것을 테스트 오전 누구든지 내 코드를 볼 수 있고 잘못 goping 무엇입니까? 여기 당신이 문자열로 변환하지 않고 16 진수 값을 전송하기 때문에이 생각하는 내 코드IR 수신기 RC5 with Pic12F1572

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; 
} 

답변

1

입니다. PC 터미널에서이 Hex 값을 인쇄하려면 먼저 ASCII 문자열로 변환해야합니다.

+0

감사합니다. @ user7424291 님, 구현할 것입니다. – Garryp

+0

모두 도와주세요. 투표 해주세요 ?? 더 이상 질문을 게시 할 수 없습니다 ... – Garryp