微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 关于STC单片机多串口使用的问题

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

时间:10-02 整理:3721RD 点击:


最近写的一个程序遇到了一些问题,硬件示意图如图所示。
单片机将串口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;
                        }
                }
        }
}

可能是 串口1和2切换的问题,你可以这样调试,手机端打开连接蓝牙,用PC串口助手连接串口1  收发数据 看看 单片机收到的数据对不对

考虑是两个串口冲突了,建议用官方提供的例子修改,在最新版本的下载工具里面有。另外,可以尝试断开蓝牙模块的发送接口尝试下

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top