51单片机,通过串口助手向单片机发送字符串,单片机将字符串逆序发送回计算机,用C语言编程

51单片机,通过串口助手向单片机发送字符串,单片机将字符串逆序发送回计算机,比如输入的是“abcdefg",单片机返回字符串“gfedcba ",求求大佬编一个

像这种发送字符串的,需要有一个字符串结束标志,不能用0作为字符串结束标志了!这里以回车作0xd为结束标志!

#include <reg51.h>

typedef unsigned char uint8; 

bit flag = 0;

uint8 idata buf[30];

uint8 ct;



void InitUART(void) //串口初始化 9600bps

{

    TMOD = 0x20;

    SCON = 0x50;

    TH1 = 0xFD;

    TL1 = TH1;

    PCON = 0x00;

    EA = 1;

    ES = 1;

    TR1 = 1;

}


void Send(uint8 c)

{

    SBUF = c;

    while(!TI);

    TI = 0;

}


void main(void)

{

  char j;  

InitUART();

  while(1)

{

if(flag)   //是否接收到回车  字符串发送完

{

flag = 0;

for(j = ct ; j > 0 ; j--)

{

  Send(buf[j-1]);       

}

      }

    }

}


void UARTInterrupt(void) interrupt 4

{

  static uint8 i = 0; 

if(RI)

    {

        RI = 0;       

  buf[i++] = SBUF;

  if(SBUF == 0x0d) //接受到回车

{

ct = i-1 ;

flag = 1;

i = 0;


        }

    }

    else

        TI = 0;

}

仿真结果

程序作为参考 希望  你自己能理解程序!只有自己掌握了才能很好地用!

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-08-20

电脑通过串口助手向单片机发送字符串,单片机定义一个可以保存7个字符的数组,依次保存接收的字符串,当接收到7个字符串后,就可以从数组的最后一个字符向前发送每一个字符给电脑就可以了。剩下的就是串口初始化,串口接收和发送程序了,就比较好写了。其实,电脑发送任意的7个字符的字符串都可以,单片机收到后就可以逆序返回给电脑的。

用proteus 仿真测试,可以用虚接终端代替电脑发送和接收字符串,仿真结果如下图。

本回答被网友采纳
相似回答