做课程设计之时,用到了蓝牙通信,本人使用STC15单片机的最小系统进行主从蓝牙之间的通信。蓝牙配置(配置方法见上一篇文章)好了之后,在串口上可以通信,但到了最小系统就是不能通信,经过多方查找原因,最终发现在串口配的方面出现了问题,原来STC89C52与STC15的串口初始化配置略有不同,在STC15中不能按照STC89C52的方式配置串口,因为15比52在串口配置上多了一个辅助寄存器(AUXR)。
AUXR本人还未深入理解其具体用法,待做完课设之后,再另发文章补充。
程序如下:
主蓝牙程序:
/*蓝牙程序(主)*/
#include "stc15.h"
/*15单片机默认P3^1为TX P3^0为RX*/
void ConfigUART();
char dat=1;
void main()
{
ConfigUART();
while(1)
{
SBUF = dat;
while(!TI);
TI=0;
}
}
void ConfigUART()
{
PCON &= 0x7F; //波特率不倍速
SCON = 0x50; //8位数据,可变波特率
AUXR &= 0xBF; //定时器1时钟为Fosc/12,即12T
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //清除定时器1模式位
TMOD |= 0x20; //设定定时器1为8位自动重装方式
TL1 = 0xFD; //设定定时初值
TH1 = 0xFD; //设定定时器重装值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
}
从蓝牙程序:
/*蓝牙程序(从)*/
#include "stc15.h"
/*15单片机默认P3^1为TX P3^0为RX*/
sbit LED=P5^5;
void ConfigUART();
unsigned char ReceiveDate;
void main()
{
ConfigUART();
while(1)
{
LED=0;
ReceiveDate=SBUF;
RI=0;
if(ReceiveDate==1)
{
LED=1;
}
}
}
void ConfigUART()
{
PCON &= 0x7F; //波特率不倍速
SCON = 0x50; //8位数据,可变波特率
AUXR &= 0xBF; //定时器1时钟为Fosc/12,即12T
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //清除定时器1模式位
TMOD |= 0x20; //设定定时器1为8位自动重装方式
TL1 = 0xFD; //设定定时初值
TH1 = 0xFD; //设定定时器重装值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
}
将这两个程序分别烧录入两个STC15单片机中,就可以实现蓝牙的通信了,本程序实现的是让主蓝牙发送1,从蓝牙收到后,让接在P5.5口的LED灯亮。
本程序只是实现了让主蓝牙给从蓝牙发送数据,当然从蓝牙也可以给主蓝牙发送数据,读者下去自行验证。