1

我正在使用 keil c51 编译器。我使用串行端口将数据从我的电脑传输到 MCU,它效果最好。当我将数据从我的 MCU 传输到 PC 时,它也工作得最好。但是,当我将数据传输到 MCU,然后将其存储到缓冲区字符指针并再次从该字符指针缓冲区传输返回到 PC 时,它不起作用并给出垃圾值?

我的这两个功能的代码如下。

#include <REG51.H>
#include "uart.c"


void delay_ms(unsigned int x)    // delays x msec (at fosc=11.0592MHz)
{
    unsigned char j=0;
    while(x-- > 0)
    {
        for (j=0; j<125; j++){;}
    }
}


sbit SW = P3^2;
sbit LED = P3^3;

bit x = 0;

void main ()
{
        char *buf;

        int len=0;
        int len1 = 0;

        uart_init();
        while(1){

            if(RI == 1){

                UART_RxString(buf,&len);
                buf -= (len-1) ;

                x = 1;                  
            }

            if(x == 1 && SW == 0){

                UART_TxString(buf,&len1);

                x = 0;
            }
        }
}

以下是功能。1.

void UART_TxString(char *string_ptr, int *l)
 {
      int count = 0;
      while(*string_ptr){
         UART_TxChar(*string_ptr++);
         count++;

      }
     *l = count;

}

void UART_RxString(char *string_ptr, int *l)
{
    char ch;
    int count = 0;
    while(1)
    {
        ch=UART_RxChar();    //Reaceive a char
        //UART_TxChar(ch);     //Echo back the received char
        count++;
        if((ch=='\r') || (ch=='\n')) //read till enter key is pressed
        {                          //once enter key is pressed
            *string_ptr=0;          //null terminate the string
            break;                //and break the loop
        } 
        *string_ptr=ch;              //copy the char into string.
        string_ptr++;                //and increment the pointer
    }
    *l = count;
}
4

0 回答 0