蓝桥杯单片机组-12串口通信的基本原理和应用

要求

在单片机实训平台上,利用51单片机的串行接口与上位机建立传输通道进行信息的收发。采用8位的UART模式,即模式1,波特率为9600BPS。数据发送采用查询的方式,数据接收采用中断的方式。

系统上电初始化后,单片机向上位机发送两个字节:0x5a和0xa5,然后等待接收上位机的数据,每接到一个字节后,在该字节的基础上加一,然后返回给上位机。

训练重点:

1.串口通信的初始化,注意工作模式与波特率的设置

2.串口通信单字节发送的程序设计

3.串口通信接收中断服务函数的设计

代码

串口

首先需要有串口初始化,在接收的时候需要中断函数。

由于在数据发送成功、数据接收成功都会产生中断,需要判断

sfr AUXR = 0x8e;
/*==========串口的初始化==========*/
void InitUart()
{
	TMOD = 0x20;
	TH1 = 0xfd;
	TL1 = 0xfd;
	TR1 = 1;
	
	SCON = 0x50;
	AUXR = 0x00;
	
	ES = 1;
	EA = 1;
}
/*=========在接收的时候用到中断函数=======*/
void ServiceUart() interrupt 4
{
  if(RI == 1)         //是否接收到一个完整的数据
	{
		RI = 0;
		urdat = SBUF;          //发送
		SendByte(urdat + 1);   //接收
	}
	if(TI == 1)         //是否发送完成
	{
	}
}

 题目要求

题目要求先发送0x5a、0xa5

void main()
{
	InitUart();
	SendByte(0x5a);     //题目要求发送5a
	SendByte(0xa5);
  while(1)
	{
	}
}

完整代码

//信息的收发
#include"reg52.h"
 
sfr AUXR = 0x8e;
unsigned char urdat = 0;
void SendByte(unsigned char dat);

/*==========串口的初始化==========*/
void InitUart()
{
	TMOD = 0x20;
	TH1 = 0xfd;
	TL1 = 0xfd;
	TR1 = 1;
	
	SCON = 0x50;
	AUXR = 0x00;
	
	ES = 1;
	EA = 1;
}

/*=========在接收的时候用到中断函数=======*/
void ServiceUart() interrupt 4
{
  if(RI == 1)         //是否接收到一个完整的数据
	{
		RI = 0;
		urdat = SBUF;          //发送
		SendByte(urdat + 1);   //接收
	}
	if(TI == 1)         //是否发送完成
	{
	}
}
/*==========查询发送函数=========*/
void SendByte(unsigned char dat)
{
	SBUF = dat;
	while(TI == 0);
	TI = 0;
}

void main()
{
	InitUart();
	SendByte(0x5a);     //题目要求发送5a
	SendByte(0xa5);
  while(1)
	{
	}
}

显示结果: 

总结

1.在发送单个字节的时候,可以直接使用SendByte()函数。如:0x5a

2.串口通信中,必须有:串口初始化+串口中断服务函数+查询发送函数

   其中,串口初始化、查询发送函数是固定的,直接记! 

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值