51单片机(串口通信、蓝牙)

这篇具有很好参考价值的文章主要介绍了51单片机(串口通信、蓝牙)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、串口 

1、串口认知

串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方 式的扩展接口。串行接口(Serial Interface)是指数据一位一位地顺序传送。其特点是通信线路简 单,只要一对传输线就可以实现双向通信(可以直接利用电话线作为传输线),从而大大降低了成 本,特别适用于远距离通信,但传送速度较慢。

异步串行是指UART(Universal Asynchronous Receiver/Transmitter),通用异步接收/发送。 UART包含TTL电平的串口和RS232电平的串口

  • 是设备间接线通信的一种方式
  • 数据一位一位地顺序传送
  • 双向通信,全双工
  • 传送速度相对较慢

2、串口接线

  • 笔记本电脑通过TTL电平与单片机通信,TX发送线(端口)数据输入引脚,数据接受; RX接收线 (端口)数据发送引脚,数据发送

        USB转TTL,使用CH340通信

51单片机蓝牙串口,51单片机,51单片机,单片机,fpga开发

  • 串口接线方式

51单片机蓝牙串口,51单片机,51单片机,单片机,fpga开发

  • 蓝牙模块(接线与串口一致,都为交叉接线)一般用串口测试完毕,再用蓝牙模块开发

 51单片机蓝牙串口,51单片机,51单片机,单片机,fpga开发

二、串口通信

串口相关寄存器

51单片机蓝牙串口,51单片机,51单片机,单片机,fpga开发

SBUF: STC89C52设有2个互相独立的接收、发送缓冲器,可以同时发送和接收数据。发送缓冲器只能写入而不能读出,接收缓冲器只能读出而不能写入,因而两个缓冲器可以共用一个地址码( 99H),都 是两个独立的8 位寄存器。两个缓冲器统称 串行通信特殊功能寄存器SBUF

代码体现为:   接收数据   char data = SBUF          发送数据    SBUF = data

51单片机蓝牙串口,51单片机,51单片机,单片机,fpga开发

波特率:UART是异步串行接口,通信双方使用时钟不同,因为双方硬件配置不同,但是需要约定通信速度,叫做波特率。

串行通信设有4种工作方式,其中两种方式的波特率是可变的,另两种是固定的,以供不同应用场合选用。波特率由内部定时器/计数器产生,用软件设置不同的波特率和选择不同的工作方式。主机可通过查询或中断方式对接收/发送进行程序处理,使用十分灵活。

(校验位和停止位一般都为初始配置,这里就不着重介绍了)

51单片机蓝牙串口,51单片机,51单片机,单片机,fpga开发

SCON寄存器:用来控制串行通信的工作方式及反映串行口的工作状态。SCON的地址是98H,可位寻址。如下图所示。

51单片机蓝牙串口,51单片机,51单片机,单片机,fpga开发

配置常用SCON寄存器,主要通过对串行通信的工作模式进行控制。

  • SM0、SM1:组合确定串行口的模式,不同的模式下波特率不同,功能也不同。

51单片机蓝牙串口,51单片机,51单片机,单片机,fpga开发

  • 51单片机蓝牙串口,51单片机,51单片机,单片机,fpga开发
  • REN:允许/禁止串行接收控制位。 由软件置位REN,即REN=1为允许串行接收状态,可启动串行口接收数据。
  • TI:发送中断请求标志位。主机通过串行口发送数据发送完成后,TI会置1,向串口申请中断,如果TI为1 就表示SUBF的数据已经发送完成了,要手动将TI位清零。(即SBUF=Data)
  • RI:接收中断请求标志位。从机接收到主机通过串行口接收到的数据后,RI会置1,即会串口申请中断,如果RI为1 就表示数据已经通过SBUF读取完成了,要手动将RI位清零。(即Data=SBUF)

 具体其他位功能可自行阅读产品手册

SCON寄存器:电源控制寄存器

51单片机蓝牙串口,51单片机,51单片机,单片机,fpga开发

stc-isp工具波特率计算器(方便)

51单片机蓝牙串口,51单片机,51单片机,单片机,fpga开发

 三、代码实现

通过串口中断方式进行点灯

51单片机蓝牙串口,51单片机,51单片机,单片机,fpga开发

static关键字:

静态全局变量:在声明它的整个文件都是可见的,而在文件之外是不可见的,即使用extern声明也不能使用。

静态局部变量:在程序执行到该对象的声明处时只执行一次初始化;

静态局部变量一般在声明处初始化,如果没有显式初始化,会被程序自动初始化为0;

#include <reg52.h>
#include <intrins.h>
#include <string.h>

#define SIZE 12
sfr AUXR=0x8E;
sbit led1=P3^7;
char cmd[12];

void UartInit(void)		//9600bps@11.0592MHz
{
	AUXR=0x01;
	SCON=0x50;//8位数据,可变波特率 REN置1
	TMOD &= 0x0F;//定时器时钟为12T
	TMOD |= 0x20;//串口1选择定时器1为波特率发生器
	
	TH1=0xFD;//设定定时初值
	TL1=0xFD;//波特率为9600
	TR1=1;//启动定时器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为发送中断请求位
	 TI=0;//软件置0
	
}
void sendString(char *str)//发送字符串
{
	 while(*str!='\0'){
    sendByte(*str);
		 str++;
 }
}
void main()
{
	led1=1;
	UartInit();//串口初始化
	while(1){ 
	    Delay1000ms(); 
       sendString("zhengyanfeng handsome\r\n");   
 }
}

void Uart_handle() interrupt 4
{
	static int i=0;//静态变量,初始化1次
	if(RI==1){  //中断函数中对接收中断的响应
        RI=0;  //RI为接受中断数据标志位,接收完数据硬件置1,需要软件置0
        cmd[i]=SBUF;
		i++; //在SBUF里读取发送的数据
        if(i==SIZE){
        i=0;
       }
				if(strstr(cmd,"en")){   //strstr(str1,str2)判断str1里面是不是有str2
					led1=0;//点灯
					i=0;
					memset(cmd,'\0',SIZE);//memset是将某一块内存中的内容全部设置为指定的值
				}
				if(strstr(cmd,"se")){
                    led1=1;//关灯
					i=0;
					memset(cmd,'\0',SIZE);
        }
 }
}

字符 'a' 是如何从单片机上传到PC

a 的 ASSII 码是 97 , 16 进制就是 0x61, 二进制是 01010001 ,这个 8 位就是数据位
串口工作模式 1 ,一帧数据有 10 位,起始位(0)、数据位、停止位(1)
那么 a 的一帧数据就是 0 10001010 1 起始位, a 的低位到高位,停止位

51单片机蓝牙串口,51单片机,51单片机,单片机,fpga开发

51单片机蓝牙串口,51单片机,51单片机,单片机,fpga开发 

 文章来源地址https://www.toymoban.com/news/detail-550812.html

到了这里,关于51单片机(串口通信、蓝牙)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 51单片机 | 串口通信实验

      这一节我们就来学习 51 单片机的串口通信。开发板上集成了 1 个串口通信电路,是 USB 转串口模块,它既可下载程序也可实现串口通信功能。本节要实现的功能是: 51 单片机通过串口( UART )实现与 PC 机对话, 51 单片机的串口收到 PC 机发来的数据后原封不动的返回给

    2024年02月04日
    浏览(60)
  • 51单片机学习--串口通信

    首先需要配置寄存器: 下面这里SCON配0x40和0x50都可以,因为暂时还不需要接受信息,所以REN置1置0都可 在main中调用SendByte函数,每按下一次复位键,接收缓冲区就会收到一个11 这就是单向发送的一个简单实例,接下来实现每隔一秒发送一个递增的数据,只需要添加一个全局变

    2024年02月14日
    浏览(45)
  • 【51单片机】串口通信&&使用串口通信控制LED灯

    🎊专栏【51单片机】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【Promise】 🥰大一同学小吉,欢迎并且感谢大家指出我的问题🥰 目录 🍔串口通信 😎代码   🍔串口初始化 ⭐分析  🏳️‍🌈确定T1的工作方式 🎈TMOD=0X20;  🏳️‍🌈确定T1的初值 🎈

    2024年02月17日
    浏览(44)
  • 【51单片机系列】proteus仿真单片机的串口通信

    本文参考:https://zhuanlan.zhihu.com/p/425809292。 在proteus之外使用串口软件和单片机通信。通过在proteus设计一个单片机接收PC发送的数据,并将接收的数据发送出去,利用软件【Configure Virtual Serial Port Driver】创建一对虚拟串口,利用软件【串口助手】向单片机发送数据。 proteus仿真

    2024年01月17日
    浏览(49)
  • 【PROTEUS-51单片机串口通信仿真】

    本次实验对51单片机的串口进行了双机通信的仿真,实现了51单片机的简单双机通信;现对本次仿真的结构及实现的功能做简要的介绍, 本次仿真主要构成:主机U1-MASTER、从机U2-SLAVE、以及LED显示部分(第一部分显示主机接收到的信息、第二部分显示从机接收到的信号); 实

    2024年01月15日
    浏览(72)
  • c51单片机串口通信(中断方式接收数据)(单片机--单片机通信)示例代码 附proteus图

         单片机一般采用中断方式接受数据,这样便于及时处理 其中发送数据段采用的是查询方式,接收端采用了中断方式, 要注意的地方有: 在中断处理函数int_0()内,处理数据前要先关闭中断,否则中断可能会不断传过来, EA=0; 然后退出中断处理函数前恢复中断处理能力:

    2024年02月13日
    浏览(58)
  • 51单片机编程应用(C语言):串口通信

    目录 通信的基本概念和种类    1.1串行通信与并行通信 ​编辑 1.2同步通信与异步通信 1.3单工,半双工,全双工   1.4通信速率  二、波特率和比特率的关系 串口通信简介: 1.接口标准 RS-232 2、D型9针接口定义 3.通信协议: 2.串口内部结构  51单片机串口相关寄存器   1.80c

    2024年02月19日
    浏览(49)
  • 51单片机:中断系统(外部中断,定时器中断,串口通信)

    目录 中断系统简介: 中断的优先级和嵌套: 8个中断请求源及其优先级: 中断的分别介绍: 1、外部中断0:INT0   2、外部中断1  3、T0和 T1:定时计数器的功能 4、串口中断(串口为什么使用定时器后面讲) 中断寄存器 (1)中断允许控制(IE) (2)中断请求标志(TCON) (

    2024年01月25日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包