STC15单片机最小系统实现HC05主从蓝牙通信

做课程设计之时,用到了蓝牙通信,本人使用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灯亮。

本程序只是实现了让主蓝牙给从蓝牙发送数据,当然从蓝牙也可以给主蓝牙发送数据,读者下去自行验证。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值