C51串口通信(蓝牙)

文章目录

    • 简介
    • 串口接线方式
    • 串口编程要素
    • 寄存器的配置以及串口的工作模式
    • 编程实现
    • HC-08蓝牙模块

简介

串口通信就是单片机和pc之间的一种通信方式。

通信方式:并行,串行,同步,异步(最常用的)

传输方向:单工,半双工(不同时间),全双工

串口接线方式

RXD:数据输入引脚,数据接受;STC89系列对应P3.0口
TXD:数据发送引脚,数据发送;STC89系列对应P3.1口
接线方式
C51串口通信(蓝牙)_第1张图片
C51串口通信(蓝牙)_第2张图片

串口编程要素

印象塑造
输入/输出数据缓冲器都叫做SBUF, 都用99H地址码,但是是两个独立的8位寄存器
代码体现为: 想要接收数据 char data = SBUF 想要发送数据 SBUF = data
C51串口通信(蓝牙)_第3张图片
回忆UART是异步串行接口,通信双方使用时钟不同,因为双方硬件配置不同,但是需要约定通信速度,叫做波特率
对于电脑来说,别人做好了软件,鼠标点点点就能配置好,而苦逼单片机的波特率配置需要我们写代码
点点点配置什么,我们代码也要配置对应参数
C51串口通信(蓝牙)_第4张图片

寄存器的配置以及串口的工作模式

C51串口通信(蓝牙)_第5张图片
字符 ‘a’ 是如何从单片机上传到PC的
a的ASSII码是97,16进制就是0x61, 二进制是01010001,这个8位就是数据位
串口工作模式1,一帧数据有10位,起始位(0),数据位,停止位(1)
那么a的一帧数据就是 0 1000 1010 1 起始位,a的低位到高位,停止位

  • 除了速度要求,还要有数据格式,双方 暗号 对上了再发数据,所以有起始位,和停止位 的概念
    在这里插入图片描述
  • 一个字节有8位,比如字母‘a’的ASSII码是十进制97,二进制是 0110 0001 ,一次从低位到高位发 送

接收也是
C51串口通信(蓝牙)_第6张图片

编程实现

/*
串口波特率9600
每隔一秒,单片机向PC发送一个字符串
PC上位机串口调试助手发送字母o点亮LED,发送字母c关闭LED
*/
#include "reg52.h"
#include "intrins.h"

sfr AUXR = 0x8E;
sbit D5 = P3^7;
char cmd;

void UartInit(void) //[email protected]
{
	AUXR = 0x01;
	SCON = 0x50; //配置串口工作方式1,REN使能接收
	TMOD &= 0xF0;
	TMOD |= 0x20;//定时器1工作方式位8位自动重装
	TH1 = 0xFD;
	TL1 = 0xFD;//9600波特率的初值
	TR1 = 1;//启动定时器
	EA = 1;//开启总中断
	ES = 1;//开启串口中断
}

void Delay1000ms() //@11.0592MHz
{
	unsigned char i, j, k;
	_nop_();
	i = 8;
	j = 1;
	k = 243;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}

void sendByte(char data_msg)
{
	SBUF = data_msg;
	while(!TI);
	TI = 0;
}
void sendString(char* str)
{
	while( *str != '\0'){
		sendByte(*str);
		str++;
	}
}

void main()
{
	D5 = 1;
	//配置C51串口的通信方式
	UartInit();
	while(1){
		Delay1000ms();
		//往发送缓冲区写入数据,就完成数据的发送
		sendString("hello world!\r\n");
	}
}

void Uart_Handler() interrupt 4
{
	if(RI)//中断处理函数中,对于接收中断的响应
	{
		RI = 0;//清除接收中断标志位
		cmd = SBUF;
		if(cmd == 'o'){
			D5 = 0;//点亮D5
		}
		if(cmd == 'c'){
			D5 = 1;//熄灭D5
		}
	}
	if(TI);
}

HC-08蓝牙模块

C51串口通信(蓝牙)_第7张图片
扫上面的二维码下载手机APP
然后进行控制

通过AT指令可以修改蓝牙名称
AT指令设置

AT+NAME = xx 设置蓝牙名称为xx

AT+ROLE=0 蓝牙模式为从模式 AT+ROLE=1 蓝牙模式为主模式
AT+CMODE=0 蓝牙连接模式为任意地址连接模式
AT+PSWD=1234 蓝牙配对密码为1234
AT+UART=9600,0,0 蓝牙通信串口波特率为9600,停止位1位,无校验位
AT+RMAAD 清空配对列表

你可能感兴趣的:(C51,C语言,单片机,c语言,嵌入式硬件)