找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1280|回复: 3
打印 上一主题 下一主题
收起左侧

求助51单片机串口接收字符串程序问题

[复制链接]
跳转到指定楼层
楼主
ID:876099 发表于 2022-1-13 16:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近在做一个和模块相互工作的一个程序,具体实现的功能就是串口发送什么数据过去,然后单片机就会向串口发送,实现串口回显的功能,还需要将串口接收到的数据存放在数组,在网上搜索一下午没有解决问题所以想求助一下论坛里面的各位,希望有大佬帮助解决一下问题

单片机源程序如下:
  1. #include <REGX51.H>
  2. #include "stdio.h"
  3. int i=123;
  4. unsigned char table[20]={"AT"};
  5. void main()
  6. {
  7.    P1=0x00;
  8.    TMOD=0x21;                   //设T0为方式1,GATE=1;
  9.         SCON=0x50;
  10.         TH1=0xFD;
  11.         TL1=0xFD;
  12.         TR1=1;                           //开启定时器
  13.         TI=1;
  14.         EA=1;
  15.         ES=1;
  16.         printf("123\r\n");
  17.         while(1)
  18.         {
  19. }
  20. }

  21. void zd() interrupt  4
  22. {
  23.     static unsigned char num=0,q;
  24.          if(RI==1)
  25.          {
  26.              q=SBUF;
  27.                   while(q!='\n')
  28.                   {
  29.                           table[num]=SBUF;
  30.                           num++;
  31.                   }
  32.                   RI=0;
  33.           }
  34.         
  35. }
复制代码



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:876099 发表于 2022-1-13 21:29 | 只看该作者
这一段代码它的问题就是我在开头发送一串字符不能完成串口发送出去,还有就是我电脑第一次发送回显没有问题,后来就不能回显,按一下复位键发送正常接收,第二次就不行了
  1. #include <REGX51.H>
  2. #include "stdio.h"
  3. #define u8 unsigned char
  4. int i=123;
  5. unsigned char table[10];
  6. bit flag=0;

  7. void send_byte(u8  str)
  8. {
  9.    SBUF=str;
  10.    while(!TI);
  11.    TI=0;
  12. }
  13. void  send_string(u8 *str)
  14. {
  15.    while(*str!='\0')
  16.    {
  17.       send_byte(*str);
  18.                 str++;          
  19.    }
  20. }
  21. void main()
  22. {
  23.    P1=0x00;
  24.    TMOD=0x21;                   //设T0为方式1,GATE=1;
  25.         SCON=0x50;
  26.         TH1=0xFD;
  27.         TL1=0xFD;
  28.         TR1=1;                           //开启定时器
  29.         TI=1;
  30.         EA=1;
  31.         ES=1;
  32.         send_string("asdfg");
  33.         while(1)
  34.         {

  35.            static unsigned char j;
  36.                 if(flag==1)
  37.                 {
  38. //                  printf("%s\r\n",&table);
  39.                   send_string(&table);
  40.                   flag=0;
  41.                  for(j=0;j<10;j++)
  42.                  {
  43.                    table[j]='\0';
  44.                  }
  45.                 }
  46.    }
  47. }

  48. void zd() interrupt  4
  49. {
  50.     static unsigned char num=0,temp;
  51.          num=0;
  52.          if(RI==1)
  53.          {             
  54.              temp=SBUF;
  55.                   if(temp!='\n')
  56.                   {
  57.                     table[num++]=temp;                          
  58.                   }
  59.                   else
  60.                   flag=1;
  61.                   RI=0;
  62.           }       
  63. }
复制代码
回复

使用道具 举报

板凳
ID:625730 发表于 2022-1-13 23:26 | 只看该作者
把你的中断函数修改一下,num定义到外部去,以'\n'作为结束字符,试了一下,是可以回传的。

  1. void zd() interrupt  4
  2. {
  3.     static unsigned char temp;
  4.          
  5.          if(RI==1)
  6.          {            
  7.            RI=0;  
  8.                                          temp=SBUF;
  9.                   if(temp!='\n')
  10.                   {
  11.                     table[num++]=temp;                          
  12.                   }
  13.                   else if(temp=='\n')
  14.                                                                         {
  15.                                                                                 flag=1;
  16.                                                                         num=0;
  17.                   
  18.                                                                         }
  19.           }      
  20. }
复制代码
回复

使用道具 举报

地板
ID:876099 发表于 2022-1-18 22:58 | 只看该作者
TEC 发表于 2022-1-13 23:26
把你的中断函数修改一下,num定义到外部去,以'\n'作为结束字符,试了一下,是可以回传的。

好的谢谢你我去试试
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表