• C51串口通信(蓝牙)


    简介

    串口通信就是单片机和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);
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83

    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 清空配对列表

  • 相关阅读:
    Apache DolphinScheduler PMC:开源不一定也要九死一生
    板刷codeforces 1000分
    开源的全能维护 U 盘工具:Ventoy
    189. 轮转数组
    基于CNTK/C#实现图像分类【附部分源码及模型】
    基于Java+SpringBoot+vue+element实现餐厅点餐系统平台
    金仓数据库 KingbaseES 插件参考手册 P(1)
    1.创建Django项目
    冯登国院士团队重磅论文!《具体高效的安全多方计算协议综述》解读
    java springboot儿童影楼管理系统
  • 原文地址:https://blog.csdn.net/weixin_49001476/article/details/126756549