关于STC单片机多串口使用的问题

2019-07-15 11:23发布

无标题.jpg
最近写的一个程序遇到了一些问题,硬件示意图如图所示。
单片机将串口1收到的数据先存一个数组里备用,每个包是类似AA XX XX FF这样的。
然后从数组里提取出XX XX,计算得到一个int值a。
接着将a显示出来,同时把a封装成FE XX XX AA通过串口2发送给HC-05蓝牙模块 。

可问题来了,
手机还未连接HC-05时(蓝牙模块指示灯快闪),单片机上的数码管能正确显示a。
可是当手机连接到HC-05时(蓝牙模块指示灯慢闪),单片机上就显示0了,似乎是无法从串口1读取到数据了。
手机上收到的是FE 00 00 AA,即得到的a也是0。此时断开连接,单片机又能正常显示a。

希望大神能指点一下哪里可能出问题了。此问题已经困扰我多日了,始终无法找到问题所在。谢谢了!

涉及代码:
#define Data_Size 21      //数组长度
int Buffer[Data_Size];
int Pointer=0;
int temp;
unsigned char al, ah;           //保存待发送数据
bit busy=0;

void SendtoBluetooth(char low,char high)
{
        while(busy);
        S2BUF=0xFE;
        busy=1;
        while(busy);
        S2BUF=high;
        busy=1;
        while(busy);
        S2BUF=low;
        busy=1;       
        while(busy);
        S2BUF=0xAA;
        busy=1;
}
void Uart1() interrupt 4                   //串口1
{
        if(RI)
                RI=0;                           
        if(ti)
                TI=0;                                                          
}
void Uart2() interrupt 8                   //串口2
{
        if(S2CON & 0x01)
                S2CON &= 0xFE;                           
        if(S2CON & 0x02)
                S2CON &= 0xFD;                                                       
        busy=0;
}
void main()
{
         //省略了初始化、设置串口1波特率2400、串口2波特率9600、以及显示部分的代码
         while (1)
        {
                if(RI==1)
                {
                        Buffer[Pointer]=SBUF;
                        Pointer+=1;
                        if (Pointer>20)
                        {
                                Pointer=0;
                                ES=0;
                                for(i=0;i<13;i++)
                                {
                                        if(Buffer==0xAA)
                                        {
                                                        if  (Buffer[i+1]<0x75)
                                                        {       
                                                                temp=Buffer[i+1]*256+Buffer[i+2];
                                                                temp=temp*2.5/1024;                                                                       
                                                        }
                                                        break;                                               
                                        }
                                }
                                show();                               
                                al=temp%256;
                                ah=temp/256;
                                SendtoBluetooth(al,ah);                            
                                ES=1;
                        }
                }
        }
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
hobbye501
1楼-- · 2019-07-15 13:57
可能是 串口1和2切换的问题,你可以这样调试,手机端打开连接蓝牙,用PC串口助手连接串口1  收发数据 看看 单片机收到的数据对不对

评分

参与人数 1积分 +5 收起 理由 ElecFans王岑 + 5

查看全部评分

fengjumeng
2楼-- · 2019-07-15 14:39
 精彩回答 2  元偷偷看……
yhs598
3楼-- · 2019-07-15 18:56
你的问题是,串口2一直中断收发数据,所以串口1 得不到中断请求,  你的想办法,叫串口1工作一会,然后让串口2工作一会, 轮流工作 就可以了!希望对你有帮助!

一周热门 更多>