蓝桥杯决赛03——串口通信基础

该博客介绍了如何在51单片机上快速配置串口通信,实现9600bps的波特率,并详细讲解了如何设置相关寄存器以及编写发送和接收数据的函数。通过中断处理接收数据,接收到数据后加一并回传。提供了完整的代码示例,适合初学者快速上手。
摘要由CSDN通过智能技术生成

前言

本人曾在第十三届蓝桥杯大赛单片机组中获得国一,以下是我在准备比赛过程中的一些记录,希望能给大家带来帮助

本人持续分享更多关于嵌入式和单片机的知识,如果大家喜欢,别忘点个赞加个关注哦,让我们一起共同进步~

前言:
串口通信是51单片机十分重要的一个部分,也是蓝桥杯国赛所考察的重点内容,本文不从原理,只从如何简单快速应用串口进行通信,并实现以下功能,希望对大家有所帮助。
1. 简单发送功能,通过单片机向上位机发送一位数据
2. 简单接受功能,接上位机发送的数据并加一返回上位机

实现步骤

1.配置相关寄存器,设置串口的模式和波特率

这里以串口1,波特率为9600,既然是直接应用我们不讲原理,直接通过STC下载器进行生成代码,结果如下。
void UartInit(void)		//9600bps@12.000MHz
{
	SCON = 0x50;		//8位数据,可变波特率
	AUXR |= 0x40;		//定时器1时钟为Fosc,即1T
	AUXR &= 0xFE;		//串口1选择定时器1为波特率发生器
	TMOD &= 0x0F;		//设定定时器1为16位自动重装方式
	TL1 = 0xC7;		//设定定时初值
	TH1 = 0xFE;		//设定定时初值
	ET1 = 0;		//禁止定时器1中断
	TR1 = 1;		//启动定时器1
	ES = 1;
	EA = 1;
}

需要注意的是,和定时器一样生成的代码并不包含中断的开启,需要我们自己添加,也就是以下内容:

ES = 1; //打开串口中断
EA = 1; // 打开定时器中断

2.实现发送功能

  • TI: 当数据发送成功时,TI 自动置1 ,但注意要手动清零
  • SBUF: 数据缓存器,当有数据输入进去时,会自动通过串口发送数据,当数据发送结束,TI置1

有了以上知识就很容易写出了发送数据的代码

void send_date(unsigned char dat)
{
	SBUF = 	dat;
	while(!TI);
	TI = 0;
}

是不是很简单,,,

3.实现接收功能

  • 当数据发送完成,或者是接受到数据,会立即进入中断,所以一但有数据接受到我们在中断中可以获取此数据
  • SBUF:一旦有数据接受到,会缓存在SBUF中
  • 当接受到数据,RI自动置1,但是别忘了软件清零
    代码如下:
void Uart1() interrupt 4
{

	if(RI){
		dat	= SBUF;
		RI = 0;
		send_date(dat + 1);
	
	}
}

由此我们就已经实现了,数据的接受与发送。

完整代码

void UartInit(void)		//9600bps@12.000MHz
{
	SCON = 0x50;		//8位数据,可变波特率
	AUXR |= 0x40;		//定时器1时钟为Fosc,即1T
	AUXR &= 0xFE;		//串口1选择定时器1为波特率发生器
	TMOD &= 0x0F;		//设定定时器1为16位自动重装方式
	TL1 = 0xC7;		//设定定时初值
	TH1 = 0xFE;		//设定定时初值
	ET1 = 0;		//禁止定时器1中断
	TR1 = 1;		//启动定时器1
	ES = 1;
	EA = 1;

}

void send_date(unsigned char dat)
{
	SBUF = 	dat;
	while(!TI);
	TI = 0;
}

unsigned char dat;

void Uart1() interrupt 4
{

	if(RI){
		dat	= SBUF;
		RI = 0;
		send_date(dat + 1);
	
	}
}
void main()
{
	UartInit();
	send_date(1);
 while(1){ 
 }

}

具体原理大家可以通过阅读数据手册,就可以有更加深入的理解。

更多相关资源

【全套完结】蓝桥杯单片机— 从省赛到国赛

https://blog.csdn.net/amimax/article/details/128749109?spm=1001.2014.3001.5501

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

おもいね

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

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

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

打赏作者

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

抵扣说明:

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

余额充值