C语言代码:
/*-----------------------------------------------------------------------------
* 实 验 名 : 串口通信试验 - 蓝牙HC06模块
* 实验说明 : 单片机串口接收数据控制灯亮灭
* 注 意 : 该试验使用的晶振是11.0592
* 接 口 : 单片机的P3^1(TXD)接HC06的RXD 单片机P3^0(RXD)接HC06的TXD
HC06的VCC接3.3V HC06的GND接单片机的GND
*******************************************************************************/
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar over[10] = {0x73,0x75,0x63,0x63,0x65,0x73,0x73,0x66,0x75,0x6c};
//--定义使用的IO--//
sbit LED=P2^0;
sbit LED1=P2^1;
//--声明全局函数--//
void UsartConfiguration();
void Delay_1ms(uint i);
/********************************************************************
* 名称 : Com_Int()
* 功能 : 串口中断子函数
* 输入 : 无 * 输出 : 无
***********************************************************************/
void Com_Int(void) interrupt 4
{
uchar i;
uchar receive_data;
EA = 0;
if(RI == 1) //当硬件接收到一个数据时,RI会置位
{
RI = 0;
receive_data = SBUF;//接收到的数据
if(receive_data == 1)
{
LED =0;//接收到1亮灯
}
else
{
LED1 =0; //其他情况灯灭
}
}
for(i=0; i<10; i++)
{
SBUF = over[i]; //将要发送的数据放入到发送寄存器
while(!TI); //等待发送数据完成
TI=0; //清除发送完成标志位
Delay_1ms(1);
}
EA = 1;
}
/*******************************************************************************
* 函 数 名 : main
* 函数功能 : 主函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void main()
{
UsartConfiguration();//初始化串口
while(1);
}
/*******************************************************************************
* 函 数 名 : UsartConfiguration()
* 函数功能 : 设置串口
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void UsartConfiguration()
{
SCON=0X50; //设置为工作方式1,8位数据,可变波特率
TMOD=0X20; //设置计数器工作方式2
PCON=0X00; //波特率不加倍
TH1=0XFd; //计数器初始值设置,9600@11.0592MHz
TL1=0XFd;
TR1=1; //打开计数器
ES = 1; //开串口中断
EA = 1; //开总中断
}
/********************************************************************
* 名称 : Delay_1ms()
* 功能 : 延时子程序,延时时间为 1ms
* x * 输入 : x (延时一毫秒的个数)
* 输出 : 无
***********************************************************************/
void Delay_1ms(uint i)//1ms延时
{
uchar x,j;
for(j=0;j<i;j++)
for(x=0;x<=148;x++);
}
ERROR
上述代码在测试时出现以下错误:
总体上匹配成功,数据也可以发送接收成功,但是发现一个奇怪的问题,有时候发送一个一字节的数据,低四位正常接收,高四位接受异常。
比如HC06发送0x10 ,手机接受为0x30;HC06发送0x73,手机接受为0xb3
别人的解决方法:
我不太清楚那个是对的,我也不知道解决方法。
其他的HC06说明:
https://www.basemu.com/ble_hc_06_pinout.html