|
单片机是stc89c52,晶振是11.0592M,用的是蓝牙hc05,硬件连好后发送命令,问题在于发送前两次命令正常,但第三次收到消息不对,并且之后发命令像死机一样无反应怎么解决,已测任何命令发送都成功过,大部分都在第三次时候出现,顺便问下hc05模块en脚和state脚要接么,我没接悬空了。代码如下:
#include<reg52.h>
#include "intrins.h"
#include "stdio.h"
#define uchar unsigned char
#define uint unsigned int
uchar date;
uint cmd;
sbit a=P2^0;
sbit b=P2^1;
sbit c=P2^2;
sbit d=P2^3;
uchar code at[]="get a";
uchar code bt[]="get b";
uchar code ct[]="get c";
uchar code dt[]="get d";
//------------------------------BLE---------------------------------------
void UartConfiguration() //串口初始化
{
TMOD=0x20; //定时器工作在模式2,8位自动重装模式
TH1=0xfd;
TL1=0xfd;
PCON=0x00; //串口波特率,SMOD=0
SCON=0x50; //串口工作在模式1 10uart
EA=1; //总开关开
ES=1;
TR1=1; //计数器开
}
void sendDate(uchar buf) //发送字符
{
SBUF=buf;
while(!TI);
TI=0;
}
void SendString(uchar *p) //发送字符串
{
while(*p)
{
sendDate(*p);
p++;
}
}
void Iscmd()
{
if(date=='a'||date=='b'||date=='c'||date=='d')cmd=1; //判断是否为命令
}
void Uart() interrupt 4 //串口判断是否有收到或发送完毕
{
if(RI==1){date=SBUF;RI=0;Iscmd();} //获取收到数据,RI置0,判断是否是命令
if(TI==1){TI=0;} //发送完毕置0
}
//----------------------------------------------------------------
void main()
{
UartConfiguration(); //蓝牙初始化
while(1)
{
if(cmd) //命令判断
{
switch(date){ //根据命令选择
case 'a':SendString(at);a=0;break;
case 'b':SendString(bt);b=0;break;
case 'c':SendString(ct);c=0;break;
case 'd':SendString(dt);d=0;break;
default:break;
}
cmd=0; //命令标志置0
}
}
}
|
|