标题: 用手机通过蓝牙HC-08发数据给51单片机,不知道为什么不行,不知道是不是波特率的问题 [打印本页]

作者: liang45    时间: 2020-5-17 23:53
标题: 用手机通过蓝牙HC-08发数据给51单片机,不知道为什么不行,不知道是不是波特率的问题
我的单片机是用12M的晶振,
程序在下,用到单片机中可以进行串口通信控制流水灯,蓝牙HC-08测试过可以和手机电脑进行通信,但用手机通过蓝牙HC-08发数据给51单片机,不知道为什么不行,不知道是不是波特率的问题,希望大家帮帮忙
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
void main()
{
TMOD=0x20;
SM0=0;
SM1=1;
TH1=0xf9;
TL1=0xf9;
TR1=1;
REN=1;
while(1)
{
  if(RI==1)
  {
   RI=0;  
   P0=SBUF;
  }
}
}


作者: 神蜂    时间: 2020-5-18 04:48
  最好把全部程序发出来。
        看看是不是要打开 中断  
          EA = 1;           //打开总中断
          ES = 1;     //打开串口中断
       
作者: 13681878016    时间: 2020-5-18 06:45
你用那个蓝牙SSP助手试试看,我记得HC-08是蓝牙4.0的协议。那些应用商店里的蓝牙串口APP很多是蓝牙2.0协议(HC-05和HC-06)。首先你单片机串口波特率需要=蓝牙串口模块的波特率,否则出现乱码。 至于手机上蓝牙的波特率是否需要和蓝牙串口模块的波特率相同我就不知道了,应该是自适应的我觉得。(我自己用SSP助手做蓝牙实验反正没有关注手机的蓝牙波特率,只要单片机和蓝牙串口模块的波特率就行了)
作者: jituo    时间: 2020-5-18 08:02
hc-08是4.0吧?要用厂家的串口软件测试。先保证(手机--HC08--电脑串口)成功。
作者: aking991    时间: 2020-5-18 08:18
没有串口中断入口定义当然不行了,单片机要先有中断,然后再进行接收及数据分析,这样才是个完整的过程
作者: 韩冰samuel    时间: 2020-5-18 09:35
jituo 发表于 2020-5-18 08:02
hc-08是4.0吧?要用厂家的串口软件测试。先保证(手机--HC08--电脑串口)成功。

我的也是跟楼主同样的问题,程序没问题,单片机和电脑能正常接受,9600波特率。蓝牙模块也能手机和pc正常通信,但是蓝牙接在单片机上就不行
作者: daocheng    时间: 2020-5-18 10:27
蓝牙HC-08和手机电脑进行通信,手机通过蓝牙HC-08发数据给51单片机,不都得有11.0592MHz晶振吗?12MHz的计算准确吗?
作者: liang45    时间: 2020-5-18 10:32
13681878016 发表于 2020-5-18 06:45
你用那个蓝牙SSP助手试试看,我记得HC-08是蓝牙4.0的协议。那些应用商店里的蓝牙串口APP很多是蓝牙2.0协议 ...

嗯嗯,那比如蓝牙的波特率为9600,单片机的晶振为12M,SMOD=1;经过计算,TH1=TL1=0xf9,误差为-6.99%,是这样吗?如果要消除误差是不是就要换晶振为11.0592才行,有没有其他方法消除误差。
作者: jituo    时间: 2020-5-18 10:47
韩冰samuel 发表于 2020-5-18 09:35
我的也是跟楼主同样的问题,程序没问题,单片机和电脑能正常接受,9600波特率。蓝牙模块也能手机和pc正常 ...

数据未转换,16进制转ascii, 如手机发ascii,单片机收到的是16进制。不是你发“a”收到的就是"a".
作者: 韩冰samuel    时间: 2020-5-19 07:28
jituo 发表于 2020-5-18 10:47
数据未转换,16进制转ascii, 如手机发ascii,单片机收到的是16进制。不是你发“a”收到的就是"a".

发的也是16进制,电脑端能正常接收。用万用表也测过,蓝牙模块接在电脑串口和单片机串口,各针脚电压也都相同,就是不知道问题在哪,换了两个蓝牙模块都不行。但是单片机本身串口也能和电脑相连,正常使用
作者: w254489035    时间: 2020-5-21 15:29
没有串口中断入口定义
作者: 莫扎他    时间: 2020-6-10 00:07
神蜂 发表于 2020-5-18 04:48
最好把全部程序发出来。
        看看是不是要打开 中断  
          EA = 1;           //打开总中断

他这是查询方式,不用中断
作者: lriyshine    时间: 2020-6-12 09:49
需要打开中断才能查询吧,我也是小白
作者: 星辰大海l    时间: 2020-6-12 19:53
串口中断入口定义有没
作者: suiiiii    时间: 2020-6-14 10:14
打开中断查询下吧,具体啥的也不是很清楚

作者: liang45    时间: 2020-7-15 02:45
qujiuhe 发表于 2020-5-18 10:27
蓝牙HC-08和手机电脑进行通信,手机通过蓝牙HC-08发数据给51单片机,不都得有11.0592MHz晶振吗?12MHz的计 ...

但我上网查了,12M的也可以用蓝牙,不影响数据通信,但我没找到解决办法
作者: liang45    时间: 2020-7-15 02:50
神蜂 发表于 2020-5-18 04:48
最好把全部程序发出来。
        看看是不是要打开 中断  
          EA = 1;           //打开总中断

现在是可以通信,但是乱码,不能正确接收数据,虽然可以测试出乱码规律,用来控制其他模块,但我想把它搞明白,波特率难搞,不知怎么设置,设不正确
作者: liang45    时间: 2020-7-15 02:55
韩冰samuel 发表于 2020-5-19 07:28
发的也是16进制,电脑端能正常接收。用万用表也测过,蓝牙模块接在电脑串口和单片机串口,各针脚电压也都 ...

我现在是能通信了,但接收到的数据不正确,是乱码,虽然可以测出乱码规律,用来控制其他模块,但我想完成它能正常通信,数据正确。不知道你解决了吗?
作者: liang45    时间: 2020-7-15 03:02
13681878016 发表于 2020-5-18 06:45
你用那个蓝牙SSP助手试试看,我记得HC-08是蓝牙4.0的协议。那些应用商店里的蓝牙串口APP很多是蓝牙2.0协议 ...

问题就是波特率,怎么设都不对,还是乱码,还是有规律的乱码,是只能用那11.0952的晶振了吗?有没有解决的办法!
作者: TTQ001    时间: 2020-7-15 08:30
原因有很多,首先,您的配置正确吗?
作者: liang45    时间: 2020-8-1 00:46
问题已解决,谢谢各位的解答。
1、晶振为11.0592,串口波特率9600,TH0=TL0=0xfd,波特率不加倍,没有误差
2、晶振为12.000,串口波特率4800,TH0=TL0=0xf3,波特率加倍,有误差0.16%,但不影响通信,能正常收发信息
作者: liang45    时间: 2020-8-1 00:47
TTQ001 发表于 2020-7-15 08:30
原因有很多,首先,您的配置正确吗?

已解决,谢谢你




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1