Чтение виртуального последовательного порта с MicroC для 8051 - PullRequest
0 голосов
/ 28 мая 2011

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

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 Ответ

1 голос
/ 31 мая 2011

Вы определяете переменную приема 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
        }
    }
}
...