C51串口通信(蓝牙)

13 篇文章 1 订阅

简介

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

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

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

串口接线方式

RXD:数据输入引脚,数据接受;STC89系列对应P3.0口
TXD:数据发送引脚,数据发送;STC89系列对应P3.1口
接线方式
在这里插入图片描述
在这里插入图片描述

串口编程要素

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

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

在这里插入图片描述
字符 ‘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 ,一次从低位到高位发 送

接收也是
在这里插入图片描述

编程实现

/*
串口波特率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) //9600bps@11.0592MHz
{
	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蓝牙模块

在这里插入图片描述
扫上面的二维码下载手机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 清空配对列表

  • 3
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
51与PC通信 1 #include "at89x51.h" 2 #include "must.h" 3 sfr port_display = 0xa0;// 4 Uchar8 incept_data[10]; // 接收缓冲区 5 Uchar8 incept_index = 0; // 接收计数 6 Uchar8 send_data[10]={0,1,2,3,4,5,6,7,8,9}; // 发送缓冲区 7 Uchar8 send_index = 0; // 发送计数 8 Uchar8 table[]={ // 0~9 共饮共阴极数码管 9 0x3F, 10 0x06, 11 0x5B, 12 0x4F, 13 0x66, 14 0x6D, 15 0x7D, 16 0x07, 17 0x7F, 18 0x6F}; 19 /*********************************************************************************** 20 函数功能:延时y*1ms 21 入口参数:y 22 出口参数:无 23 ********************************************************************************/ 24 void Delay_1ms(Uint16 y) 25 { 26 1 Uint16 i,j; 27 1 for(i=0;i<y;i++) 28 1 { 29 2 for(j=0;j<60;j++) 30 2 {;} 31 2 } 32 1 } 33 /******************************************************************** 34 函数功能:设置串口通信方式 35 入口参数: 36 com_baud 串口波特率选择 37 1-----------300 38 2-----------600 39 3-----------1200 40 4-----------2400 41 5-----------4800 42 6-----------9600 43 7-----------19200 44 8-----------57600 45 46 出口参数:无 47 *********************************************************************/ 48 void Com_init(Uchar8 com_baud) 49 { 50 1 Uchar8 THTL; 51 1 switch (com_baud) 52 1 { 53 2 case 1: THTL = 64; break; //波特率300 54 2 case 2: THTL = 160; break; //600 55 2 case 3: THTL = 208; break; //1200 C51 COMPILER V8.08 COM_TEXT 05/24/2009 17:48:04 PAGE 2 56 2 case 4: THTL = 232; break; //2400 57 2 case 5: THTL = 244; break; //4800 58 2 case 6: THTL = 250; break; //9600 59 2 case 7: THTL = 253; break; //19200 60 2 case 8: THTL = 255; break; //57600 61 2 default: THTL = 208; //1200 62 2 } 63 1 SCON = 0x50; // 设定串行口工作方式 64 1 TMOD = 0x20; // 定时器1工作于8位自动重载模式, 用于产生波特率 65 1 PCON = 0x80; // 波特率倍增 66 1 RI = 0; // 清收标志 67 1 TI = 0; // 清发标志 68 1 TR1 = 1; // 启动定时器1 69 1 TH1 = THTL; 70 1 TL1 = THTL; 71 1 ES=1; 72 1 EA=1; 73 1 }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈学弟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值