2011-05-28 4 views
0

У меня есть проблема, пожалуйста, помогите мне. около проекта Домашнего задания нужно читать из виртуального последовательного порта с MicroC и отправить эту информацию в AT89C52 microconttoller .. Это мой исходный код:Чтение виртуального последовательного порта с MicroC для 8051

int uart_rd; 
void main() { 

    P1=0X00; 
    UART1_Init(9600); 
    delay_ms(100); 

    while(1) 
    {  
     if(UART1_Data_Ready()){ 

     uart_rd=UART1_read(); 

     if(uart_rd=='1') 
     {P1=0X01; delay_ms(1500); P1=0X00; } 

     if(uart_rd=='2') 
     {P1=0X02; delay_ms(1500); P1=0X00; } 
     } 
    } 
} 

НО я не могу получить информацию от порта. Где ошибка. Пожалуйста, помогите мне ...

ответ

1

Вы определяете свою переменную приема UART (uart_rd) как int, которая является переменной 2 байта. Я ожидал бы UART1_read(), чтобы вернуть один байт (char).

Я не знаком с вашими параметрами настройки или отладки/устранения неполадок, но вы можете попробовать написать код, чтобы помочь в отладке вашей проблемы. Следующий пример может быть полезен. Он предполагает, что светодиоды подключены как к порту 1, так и к порту 2, поэтому может потребоваться некоторая настройка.

char uart_rd; 

void main() 
{ 
    UART1_Init(9600); // Initialize UART at 9600 bps 
    delay_ms(100);  // Wait for UART to stabilize 

    while(1) 
    {  
     if(UART1_Data_Ready()) 
     { 
      P2 = 0xFF;    // Turn ON PORT2 LEDs upon data ready 
      uart_rd = UART1_read(); // Receive data 
      P1 = uart_rd;   // Display data on port 1 LEDs 
      UART1_write(uart_rd); // Transmit same data back 
      delay_ms(1500);   // Brief delay 
      P1 = 0x00;    // Turn OFF port 1 LEDs 
      P2 = 0x00;    // Turn OFF port 2 LEDs 
     } 
    } 
}