找回密码
 立即注册

QQ登录

只需一步,快速开始

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

ESP8266如何从15单片机串口中读取需要的数据?

[复制链接]
跳转到指定楼层
楼主
ID:886263 发表于 2022-4-12 17:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用2套15F2K60S单片机+8266,一套做发射端,一套做接收端。
发射端已经弄好了一套程序,超声波和声音传感器测量数据,数据格式如下:T=60.3cm,S=0E。发送是正常的。现在问题就是接收端解释不了我需要的数据。早期测试的时候,串口2的数据是可以接收到的,但获取不了需要的数据。

接收端的8266是用串口2的,代码如下:

  1. //串口2中断
  2. void Uart2() interrupt 8 using 1
  3. {

  4. IE2 = 0x00;                  //关闭串口2中断
  5.                         if (S2CON & S2RI)
  6.                         {
  7.                         S2CON &= ~S2RI;         
  8.                         res = S2BUF;
  9.                         test[RX_num2]=res;
  10.                         RX_num2++;

  11.                                 if(res=='T'||u>0)
  12.                                 {
  13.                                 
  14.                                 RX_buffer2[u]=res;
  15.                                 u++;
  16.                                 //i++;
  17.                                         if(res=='E')
  18.                                         {
  19.                                                 
  20.                                                 //添加对收到信息的处理代码
  21.                                         memset(RX_buffer2, 0, 30);//清缓存数据
  22.                                         u=0;
  23.                                         //i=0;                                   //接收计数变量清0
  24.                                         }                        
  25.                                 }
  26.                         if(RX_num2>tbuf) RX_num2 = 0;
  27.                         }
  28.                         if (S2CON & S2TI)
  29.                         {
  30.                         S2CON &= ~S2TI;            
  31.                         }
  32.                         IE2 = 0x01;                //开启串口2中断

  33.                         
复制代码

求各位大神帮忙看看。要怎么才能获取到我需要的关键信息。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:301191 发表于 2022-4-12 22:34 | 只看该作者
顶一下
回复

使用道具 举报

板凳
ID:123289 发表于 2022-4-14 09:26 | 只看该作者
中断后关闭中断是个错误的观念,不是说不可以。
1、至少浪费两条指令的时间,开它和关它。
2、如果新的中断来了,则可能会留失数据,如你认为后面又打开了,则不关不是一样吗。
不要在中断中分析数据(IF RES 如何如何)!!中断只做数据的接收与存储就行了,做个标记立即结束退出,这样中断服务时间才最短,不会影响到下个数据的接收。数据处理应在主程序中去做!!
记住:所有中断服务程序,要尽可能地节省时间,尽快退出。能在主程序中处理的,不要在中断中处理。
理由:中断服务程序期间,其它平级低级中断将无法响应!!
例如:时间中断执行时间长,中断期间,低级的串口中断来了,因无法即时响应,结果下一个串行字节又来了,则数据就丢失了一个。这种事情,在你的程序中是否会发生呢?全面查一下。
回复

使用道具 举报

地板
ID:886263 发表于 2022-4-16 15:53 | 只看该作者
yzwzfyz 发表于 2022-4-14 09:26
中断后关闭中断是个错误的观念,不是说不可以。
1、至少浪费两条指令的时间,开它和关它。
2、如果新的中 ...

你好,问题解决了。加了这个res2 = S2BUF; 就可以正常识别了。
  1. //串口2中断
  2. void Uart2() interrupt 8 using 1
  3. {

  4. IE2 = 0x00;                  //关闭串口2中断
  5.                         if (S2CON & S2RI)
  6.                         {
  7.                         S2CON &= ~S2RI;         
  8.                         res2 = S2BUF;
  9.                         RX_buffer2[RX_num2]=res2;
  10.                         RX_num2++;
  11.                         if(res2=='\n') RX_num2 = 0;flag=1;
  12.                         }
  13.                         if (S2CON & S2TI)
  14.                         {
  15.                         S2CON &= ~S2TI;            
  16.                         }
  17.                         IE2 = 0x01;                //开启串口2中断

  18.                        

  19. }
复制代码



回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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