2011-05-28 71 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)。

我不熟悉您特定的設置或調試/故障排除選項,但您可以嘗試編寫一些代碼來協助調試您的問題。下面的例子可能是有用的。它確實假定LED連接到端口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 
     } 
    } 
}