关于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 收发数据 看看 单片机收到的数据对不对
考虑是两个串口冲突了,建议用官方提供的例子修改,在最新版本的下载工具里面有。另外,可以尝试断开蓝牙模块的发送接口尝试下