找回密码
 注册
关于网站域名变更的通知
查看: 622|回复: 3
打印 上一主题 下一主题

求教,关于单片机与蓝牙hc05问题

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2021-3-18 11:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
单片机是stc89c52,晶振是11.0592M,用的是蓝牙hc05,硬件连好后发送命令,问题在于发送前两次命令正常,但第三次收到消息不对,并且之后发命令像死机一样无反应怎么解决,已测任何命令发送都成功过,大部分都在第三次时候出现,顺便问下hc05模块en脚和state脚要接么,我没接悬空了。代码如下:: ?3 l) y2 W! i! S& }6 W) h
#include<reg52.h>9 @1 k; y- U; H2 p6 w: w' {* y
#include "intrins.h"3 U, c) v( @9 b0 l* d, [
#include "stdio.h"- o: o$ b2 \- |/ b9 ]0 k3 `
#define uchar unsigned char' a! _% A4 Z0 S# I. t/ s
#define uint unsigned int
3 s, x2 D2 j9 J& M; C! Z7 X
9 D2 {: l( U( B/ s% y2 L' i" \8 Suchar date;      
3 `/ _! O8 R% p( K! A/ W3 @uint cmd;
  a: j7 j* P% i9 w: Ksbit a=P2^0;
% c/ y8 r  _, k( @; y/ Msbit b=P2^1;( q  v4 n! i% Q, e! w/ j8 g7 B5 [
sbit c=P2^2;2 y" W3 s: p" ]3 M- x. ~
sbit d=P2^3;
) P2 x. r1 |- Fuchar code at[]="get a";4 D8 @8 q, S& f
uchar code bt[]="get b";. k+ J& \1 _  D4 q4 n3 @
uchar code ct[]="get c";( m8 C0 {, m3 r4 T* B- W- f
uchar code dt[]="get d";7 @* H( y/ M. \

  v2 ^9 l4 d  h. @% U* m0 a3 M; I//------------------------------BLE---------------------------------------
4 C8 }2 l' b4 Cvoid UartConfiguration() //串口初始化3 R$ s1 ~3 ]6 S/ t/ }- _. f; k
{
) H5 ?  F: i4 y1 ~4 g/ ^: u- p        TMOD=0x20;           //定时器工作在模式2,8位自动重装模式
6 d. r  {2 x# x        TH1=0xfd;          # D, C6 X. \! N! p; W
        TL1=0xfd;
# P: ^+ {- M- {0 x6 O  K6 v! ?        PCON=0x00;           //串口波特率,SMOD=0
- g. [1 C" R/ }        SCON=0x50;           //串口工作在模式1     10uart
3 }9 c/ U' V, C  X7 ?$ B        EA=1;                   //总开关开
& l9 c( Y2 R! {+ Q        ES=1;
- p& o& o: ?" m* S: R, Y1 f; H        TR1=1;                   //计数器开5 }9 `0 G; |, y6 _1 p/ f$ `  W1 B
' `1 G% U+ s7 T( \  n, z% J3 Y, ?1 B
}/ J* g! y: E/ R  J0 L

5 c' X! L. e( e! V0 ?  Avoid sendDate(uchar buf)                //发送字符
0 g/ [* y9 L; ~{7 E2 q4 ]% N8 s& X8 {6 k
          SBUF=buf;( V# Y, i: y0 J3 C
        while(!TI);
/ S+ f5 l' Q9 g. @) p& m        TI=0;+ c" S! v% e6 j  \
}, n; H  x- v+ q/ d6 H
void SendString(uchar *p)                //发送字符串3 W7 e: ]1 y% {
{       $ K3 {) K$ M* L
        while(*p)0 R- Q8 j/ q0 s  f  c' ?, w, ]
        {) y/ y+ Z( V+ o, `4 h
         sendDate(*p);
% N2 N; g. n2 g: x& A; M0 X         p++;  J1 Z3 k: c+ ]
        }/ ^) n8 r5 t5 @0 M+ l8 z
}7 n$ r+ d. r( _2 D( k5 d, \
void Iscmd()
3 p) t( S$ j2 T- T{
2 K5 L- Q) S8 n$ ?0 D        if(date=='a'||date=='b'||date=='c'||date=='d')cmd=1;           //判断是否为命令
8 p" m3 h0 S1 q7 \8 C) A0 \}( n$ g0 v; W4 n5 v' v5 R

- h3 t# c/ X# c. H% ~5 d5 X. P+ Svoid Uart() interrupt 4                           //串口判断是否有收到或发送完毕$ f, m& z( Y& W. `# ]
{6 e0 Y' L; P( M0 k0 R9 X3 [) l! R, R
        if(RI==1){date=SBUF;RI=0;Iscmd();}         //获取收到数据,RI置0,判断是否是命令
  w  Y' D; j/ u0 u; r& Z' _) k        if(TI==1){TI=0;}                           //发送完毕置0! {. [/ x% u8 g& ]" F
}
5 A2 o% M# p- H2 Q3 S//----------------------------------------------------------------
# f! {4 W& I8 S4 ]) B- @
) ^0 t3 f* n9 k) D5 e3 z, D0 r0 a$ @; Q3 m) i3 ?
void main()
6 b0 F7 v" E; Q+ r6 {! b{  d3 o" R* T: X( h: r7 _2 P* }" V
  UartConfiguration(); //蓝牙初始化% `% T% b. i0 t3 T2 J, A! S
  while(1)
3 V5 \& Q; W4 D" z) b/ I7 B  {      
- @1 H8 I8 z3 C$ v8 I/ w        if(cmd)                  //命令判断' J+ ]  q2 v7 s; I9 {3 H1 L
        {4 e3 A9 I  A, H0 c8 V  @5 r9 O
                switch(date){                   //根据命令选择
  J$ w% \3 X4 G                           case 'a':SendString(at);a=0;break;. W6 u& P8 s  U
                           case 'b':SendString(bt);b=0;break;9 r3 ^* Q! q- ^6 w
                           case 'c':SendString(ct);c=0;break;
9 H; L- m1 R3 c- G4 `: C                           case 'd':SendString(dt);d=0;break;
! S# \$ Q5 w. ^+ f                           default:break;
3 r( _4 F( i  r5 u* O6 b3 r; S                                  }  G& w/ ?7 Z1 V# ~, k. P+ H
                cmd=0;         //命令标志置0) k( G6 W6 A6 g; o; y8 {: ]
        }1 g) {& q; w6 w3 m" v
  }
. c4 u: H/ Y& L5 ~}
5 O+ D* C; S: t- z$ ?9 F, e, b2 g0 m8 k. C! U

该用户从未签到

2#
发表于 2021-3-18 11:28 | 只看该作者
电脑上sscom5仿真,看看是硬件问题还是软件问题

点评

先判断是那的问题,硬件或软件 在电脑上用串口助手发命令很好的方法  详情 回复 发表于 2021-3-18 13:35
  • TA的每日心情
    开心
    2023-5-15 15:14
  • 签到天数: 1 天

    [LV.1]初来乍到

    3#
    发表于 2021-3-18 13:35 | 只看该作者
    行者~ABC 发表于 2021-3-18 11:28. B# R' C" f& j& V9 w7 h4 P
    电脑上sscom5仿真,看看是硬件问题还是软件问题

    ) X7 U8 f( g1 v: b- i8 e/ g  N先判断是那的问题,硬件或软件
    % ]- L# i& `0 h1 b在电脑上用串口助手发命令很好的方法) d# i6 ]6 E6 {# C' O% Q

    该用户从未签到

    4#
    发表于 2021-3-18 13:45 | 只看该作者
    是不是单片机跑死了,需要加看门狗
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-6-22 01:14 , Processed in 0.093750 second(s), 24 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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