UART通信——笔记

UART通信特点

异步、全双工、串行。
只使用一对线就可以实现数据的通信,节约成本。
数据一位一位发送,数据传输较慢。
只能一对一通信。

如何实现通信的?

UART:

  • 发送数据的TX
  • 接受数据的RX
  • 参考GND

UART是异步通信,通信双方使用各自的时钟系统,发送和接收数据需要统一双方发送和接收的频率,即统一波特率。

下面以9600的波特率为例子:
发送数据
UART通信——笔记_第1张图片
一直处于高电平代表停止,从高电平转换为低电平代表开始,开始后要延迟52us,之后可以发送数据,9600的波特率就是104us发送一条数据,发送端每104us发送一条数据,接受端每104us接收一条数据。

51单片机的UART

以stc89c52为例子:
UART通信——笔记_第2张图片
SCON用来控制通信的方式和其他功能。
在这里插入图片描述
SM0/FE和SM1可以构成4种工作方式:
SM0 = 0;SM1 = 0; 同步移位寄存器
SM0 = 0;SM1 = 1; 8位UART,波特率可变
SM0 = 1;SM1 = 0; 9位UART,波特率固定 (不使用效验位,波特率和晶振频率相关)
SM0 = 1;SM1 = 1; 9位UART,波特率可变(不使用效验位)
REN: 为1可以接收数据,为0不能接受数据。
TI: 如果是第一种方式,发生完第8位数据后会置1。其他方式是在停止位开始发送的时候置1。TI需要在软件中置0。

//发送数据
void UART_SendByte(unsigned char Byte)
{
	SBUF=Byte;
	while(TI==0);
	TI=0;
}

RI:与TI相对应,用于接受数据,数据接受完毕后置1。

//接受处理数据
void UART_Routine() interrupt 4
{
	if(RI==1)					//如果接收标志位为1,接收到了数据
	{
		P2=~SBUF;				//读取数据,取反后输出到LED
		UART_SendByte(SBUF);	//将受到的数据发回串口
		RI=0;					//接收标志位清0
	}

UART初始化。

void UART_Init()
{
	SCON=0x50;
	PCON |= 0x80;
	TMOD &= 0x0F;		//设置定时器模式
	TMOD |= 0x20;		//设置定时器模式
	TL1 = 0xF3;		//设定定时初值
	TH1 = 0xF3;		//设定定时器重装值
	ET1 = 0;		//禁止定时器1中断
	TR1 = 1;		//启动定时器1
	EA=1;
	ES=1;
}

你可能感兴趣的:(笔记)