找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1450|回复: 2
打印 上一主题 下一主题
收起左侧

求教,关于单片机与蓝牙hc05通讯程序的问题

[复制链接]
跳转到指定楼层
楼主
单片机是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
        }
  }
}

Screenshot_2021-03-18-10-33-21-15.png (124.8 KB, 下载次数: 52)

Screenshot_2021-03-18-10-33-21-15.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:570264 发表于 2021-3-18 10:44 | 只看该作者
电脑上sscom5仿真成功过,一切没问题,是硬件原因吗?
回复

使用道具 举报

板凳
ID:570264 发表于 2021-3-18 10:55 | 只看该作者
啊,解决了,我把main函数里的switch判断语句放到 Iscmd函数里就不会有问题了,哪位大神能告诉我原因吗?

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表