标题:
ESP8266如何从15单片机串口中读取需要的数据?
[打印本页]
作者:
风晓得OME
时间:
2022-4-12 17:07
标题:
ESP8266如何从15单片机串口中读取需要的数据?
我用2套15F2K60S单片机+8266,一套做发射端,一套做接收端。
发射端已经弄好了一套程序,超声波和声音传感器测量数据,数据格式如下:T=60.3cm,S=0E。发送是正常的。现在问题就是接收端解释不了我需要的数据。早期测试的时候,串口2的数据是可以接收到的,但获取不了需要的数据。
接收端的8266是用串口2的,代码如下:
//串口2中断
void Uart2() interrupt 8 using 1
{
IE2 = 0x00; //关闭串口2中断
if (S2CON & S2RI)
{
S2CON &= ~S2RI;
res = S2BUF;
test[RX_num2]=res;
RX_num2++;
if(res=='T'||u>0)
{
RX_buffer2[u]=res;
u++;
//i++;
if(res=='E')
{
//添加对收到信息的处理代码
memset(RX_buffer2, 0, 30);//清缓存数据
u=0;
//i=0; //接收计数变量清0
}
}
if(RX_num2>tbuf) RX_num2 = 0;
}
if (S2CON & S2TI)
{
S2CON &= ~S2TI;
}
IE2 = 0x01; //开启串口2中断
复制代码
求各位大神帮忙看看。要怎么才能获取到我需要的关键信息。
作者:
人工置顶员
时间:
2022-4-12 22:34
顶一下
作者:
yzwzfyz
时间:
2022-4-14 09:26
中断后关闭中断是个错误的观念,不是说不可以。
1、至少浪费两条指令的时间,开它和关它。
2、如果新的中断来了,则可能会留失数据,如你认为后面又打开了,则不关不是一样吗。
不要在中断中分析数据(IF RES 如何如何)!!中断只做数据的接收与存储就行了,做个标记立即结束退出,这样中断服务时间才最短,不会影响到下个数据的接收。数据处理应在主程序中去做!!
记住:所有中断服务程序,要尽可能地节省时间,尽快退出。能在主程序中处理的,不要在中断中处理。
理由:中断服务程序期间,其它平级低级中断将无法响应!!
例如:时间中断执行时间长,中断期间,低级的串口中断来了,因无法即时响应,结果下一个串行字节又来了,则数据就丢失了一个。这种事情,在你的程序中是否会发生呢?全面查一下。
作者:
风晓得OME
时间:
2022-4-16 15:53
yzwzfyz 发表于 2022-4-14 09:26
中断后关闭中断是个错误的观念,不是说不可以。
1、至少浪费两条指令的时间,开它和关它。
2、如果新的中 ...
你好,问题解决了。加了这个
res2 = S2BUF; 就可以正常识别了。
//串口2中断
void Uart2() interrupt 8 using 1
{
IE2 = 0x00; //关闭串口2中断
if (S2CON & S2RI)
{
S2CON &= ~S2RI;
res2 = S2BUF;
RX_buffer2[RX_num2]=res2;
RX_num2++;
if(res2=='\n') RX_num2 = 0;flag=1;
}
if (S2CON & S2TI)
{
S2CON &= ~S2TI;
}
IE2 = 0x01; //开启串口2中断
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1