UART串口通信

UART串口通信

一、背景

很久没用过UART串口通信了,趁着学习HC-05模块顺便复习一下。通过串口可以实现单片机与计算机之间的信息传输,常用的串口通信协议有UART、I2C,学51时就用了这两个协议。

二、原理

串口通信的原理是这样:微处理器用三根线与电脑相连,微处理器的发送总线与电脑的接收总线相连,电脑的发送总线与微处理器的接收总线相连,这就是为什么微处理器的RXD要与计算机的TXD相连,反之亦然;还有一根线是地线,地线相连。
在无校验位的八位数据通信情况下,微处理器发送的高低电平组成了数据帧,我们每一位之间要有一个时间间隔,以让计算机区分好每一位,通俗来说这个时间间隔就是波特率。波特率为9600就是说微处理器一秒要发送9600位数据。
因为是每隔一段时间发出一位数据,所以很容易就想到可以用定时器和中断来发送数据。所以UART串口通信离不开定时器。

三、51单片机上UART的通信方法

1、配置好串口控制器SCON和PCON(可以用STC-ISP生成)

SCON可以自己决定,但是PCON需要用STC生成。SCON初始时将发送标志位TI和接收标志位RI置0,这个标志位以单片机为视角,也就是说单片机接收到数据后就将RI置1。这两个位都必须软件复位。

2、配置好定时器和中断

定时器配置好TCON和TMOD,TH和TL的值要通过计算波特率得出(也可以用STC-ISP生成,但最好自己会算。)
开总中断和对应定时器的中断。
波特率的计算:
在这里插入图片描述

3、SBUF的介绍

SBUF是单片机与计算机之间所传输数据的缓冲
计算机向单片机发送数据:SBUF = 0x66
单片机向计算机发送数据:int i = SBUF
PS:可以将SBUF看作是单片机的,单片机向计算机发数据时,先将数据放在自己的SBUF中,再递给计算机。计算机将数据放在SBUF中,再将SBUF递给单片机。

4、程序
#include <REGX52.H>

void UART_Init()
{
	SCON = 0x50;
	PCON &= 0x7F;
	TMOD &= 0x0F;			//设置定时器模式
	TMOD |= 0x20;			//设置定时器模式
	TL1 = 0xFA;			//设置定时初始值
	TH1 = 0xFA;			//与波特率有关	
	TR1 = 1;				//定时器0开始计时
	ET1 = 0;
	EA=1; // 启动中断允许寄存器
	ES = 1; // 启动中断允许寄存器
}

void SendByte(unsigned char Byte)
{
	SBUF = Byte;
}

void main()
{
	UART_Init();
	while(1);
}

// UART的中断处理函数,使用STC向单片机发送数据后单片机发出中断并将RI置1
void UART_Rountine() interrupt 4
{
	if(RI == 1)
	{
        // 将接收到的数据再发给计算机
		SendByte(SBUF);
        // 接收到的数据会被放在SBUF中
		P2 = ~SBUF;
		RI = 0;
	}	
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值