什么是串口通信?
就是可以同时收发的通信方式,就比如:
A,B栋有两扇门,T门,R门,T门只能出不进,R门只进不出。
有两座桥把他们交叉连接起来了,那如果我要从A栋去B栋怎么去呢?
是不是就要在A栋从T门出来再到B栋R门进去?
那我从B栋去A栋是不是也是这样?
对!
R门就是串口通信中的===RXD
T门就是串口通信中的===TXD
发接收,收连发,一发一收,一收一发互不干扰!这就是串口通信!
那单片机怎么与蓝牙模块串口通信呢?
JDY-31蓝牙模块:
小桥精悍!它能干什么,当手机或者其他设备连接上了它,当告诉他你要发送什么数据的时候,他就会自动把数据接收并发给单片机!
52单片机:
那它如何接收数据?
单片机中自带一个UART!那又什么东西呢?
当接收到数据会把数据自动存在一个位置,当要发一个数据只需要将要发的数据放到一个位置他便会自动发送!
知道这些那手机与单片机是不是就很容易实现了?
第一:配置好蓝牙模块
JDY—31信号蓝牙模块在默认状态下基本上不用配置,直接连接即可(密码1234)
如果需要配置的话,将蓝牙模块与出口调试助手
第二:JDY—31将蓝牙模快与52单片机串口连接好
如图:RXD与TXD相连接
第三:配置好单片机UART定时器
如图:使用STC-ISP软件找到波特率计算器然后会自动计算好并配置好
当接收到数据后UART会触发中断,然后需要响应,进行接收数据读取
void UART_Routine() interrupt 4
{
//因为接收数据发送数据都会触发中断
//所以需要进行判断是接收中断再触发程序
if(RI==1)
{
RI=0;
RI_Byte=SBUF; //将接收到的数据给一个变量就行数据处理
}
}
第4:手机连接蓝牙,再下载一个软件蓝牙调试器,
注意!当以上步骤完成后,蓝牙模块led在闪烁时,将手机蓝牙打开,
并打开蓝牙调试助手,然后去手机设置里使用手机蓝牙搜索模块蓝牙,当搜索到后不要点连接!!!切换到蓝牙调试助手,这时软件才会出现模块蓝牙,然后连接后切换到对话模式那个界面发送数据,单片机便可以接收了。
因为看不到单片机数据,所以可以使用STC调试器软件里面的串口调试助手进行观察,是否接收到数据。
4步即可完成!
注意!注意!注意!
手机蓝牙调试器发送的数据是ASCII码数据,在进行数据判断时不能直接进行判断,需要进行数据转换,或者判断条件改变!!!
完整代码如下:
#include <REGX52.H>
#include "delay.h"
unsigned char RI_Byte;
void Uart_Init()//9600bps@11.0592MHz
{
PCON |= 0x80; //使能波特率倍速位SMOD
SCON = 0x50; //8位数据,可变波特率
TMOD &= 0x0F;
TMOD |= 0x20; //设置定时器模式
TL1 = 0xFA; //设置定时初始值
TH1 = 0xFA; //设置定时重载值
ET1 = 0; //打开定时器1中断
TR1 = 1; //定时器1开始计时
EA=1; //打开总中断
ES=1; //打开串口中断
}
//发送一位数据
void Uart_SendByte(unsigned char Byte)
{
SBUF=Byte; //将要发送的数据放在缓存区(SBUF)
while(TI==0); //因为数据不是立刻发送,所以需要检查是是否发送了数据
TI=0; //已经发送了数据就关闭标志位额,也就是软件置零
}
void main()
{
Uart_Init();
while(1)
{
if(RI_Byte==0x31){P2=0;} //进行数据判断符合并作出反应
if(RI_Byte==0x32){P2=0xFF;}
}
}
void UART_Routine() interrupt 4
{
//因为接收数据发送数据都会触发中断
//所以需要进行判断是接收中断再触发程序
if(RI==1)
{
RI=0;
RI_Byte=SBUF; //将接收到的数据给一个变量就行数据处理
}
}