2012-09-06 67 views
-2
#include <reg51.h> 
#include "_LCD_R8C.c" 
#define INPUT_LENGTH 11 

char input[INPUT_LENGTH]; /* The input from the serial port */ 
int input_pos = 0;  /* Current position to write in the input buffer */ 

int main() 
{ 
    int i; 

    lcd_init(); 
    lcd_clear(); 
    SCON = 0x50; 
    TMOD = 0x20;    /* timer 1, mode 2, 8-bit reload */ 
    TH1 = 0xFD;    /* reload value for 2400 baud */ 
    TR1 = 1; 
    TI = 1; 
    RI = 1; 
    while (1 == 1) 
    { 
    /* read the next character from the serial port */ 
    input[input_pos++] = getCharacter(); 
    /* send it back to the original sender */ 
    for (i = 0; i <= input_pos; i++) 
    { 
     lcd_print_b(input[i]); 
    } 
    } 
} 

char getCharacter(void) 
{ 
    char chr[INPUT_LENGTH];   /* variable to hold the new character */ 

    while (RI != 1) {;} 
    chr[input_pos++] = SBUF; 
    RI = 0; 
    return (chr); 
} 

我試圖顯示我從rs232接收到的由rfreader讀取的no。 但我在顯示器上得到了錯誤的值,例如002100而不是0016221826.但是在超級終端上,我得到了準確的正確值,其中包括在$ sattying即$ 0016221826。顯示收到的號碼

回答

0

首先,您確實需要採用一種理智的凹痕風格,這段代碼很難閱讀。 您的代碼的問題在於您將用戶輸入數組讀取到本地數組「chr」中,然後將該數組的地址返回給main,而不是字符。 main()不期望地址,它期望一個字符。無論如何,無論如何,一旦你離開函數,數組「chr」是無效的。

您的循環打印也不正確,沒有任何意義。您每次收到新的字符時都會一遍又一遍地打印所有字符。

硬件或MCU可能存在其他問題,我只是修復了最明顯的軟件錯誤。

#include <reg51.h> 
#include "_LCD_R8C.c" 

#define INPUT_LENGTH 11 


int main() 
{ 
    char input[INPUT_LENGTH]; /* The input from the serial port */ 
    int input_pos = 0;  /* Current position to write in the input buffer */ 

    lcd_init(); 
    lcd_clear(); 

    SCON = 0x50; 
    TMOD = 0x20;    /* timer 1, mode 2, 8-bit reload */ 
    TH1 = 0xFD;    /* reload value for 2400 baud */ 
    TR1 = 1; 
    TI = 1; 
    RI = 1; 

    while(1) 
    { 
    /* read the next character from the serial port */ 
    if(input_pos < INPUT_LENGTH) /* check for buffer overflow */   
    { 
     input[input_pos] = getCharacter(); 
     lcd_print_b(input[input_post]); /* only makes sense to print each character once */ 
     input_pos++; 
    } 
} 


char getCharacter (void) 
{ 
    char chr   /* variable to hold the new character */ 

    while (RI != 1) 
    ; 

    chr = SBUF; 
    RI = 0; 

    return(chr); 
} 
+0

固定縮進 – Eregrith

+0

@Lundin我發送的地址,是這樣嗎?請你詳細解釋我 – pradeep

+0

@Lundin我可以使用ms延遲來接收字符嗎? – pradeep