MCU-51:单片机串口详解

一、计算机通信简介

概念:计算机与外部设备或计算机与计算机之间的信息交换。
主要的通信形式有两种:并行通信和串行通信。

**并行通信:**将数据字节的多位用多根数据线连接同时进行传送。
优点:控制简单、传输速度快。
缺点:长距离通信时,成本高且接受方的各位同时接收存在困难。
在这里插入图片描述
**串行通信:**将数据字节分成一位一位的形式在一条传输线上进行数据传输。
优点:传输线少、长距离传输成本低。
缺点:传输控制相对并行困难。
在这里插入图片描述

二、串口通信简介

串口通信可以分为同步通信和异步通信。

2.1 同步通信

同步通信:一种比特同步通信技术,要求发收双方具有同频同相的同步时钟信号,只需在传送报文的最前面附加特定的同步字符,使发收双方建立同步,此后便在同步时钟的控制下逐位发送/接收。

同步通信时要建立发送方时钟对接收方时钟的直接控制,使双方达到完全同步。此时,传输数据的位之间的距离均为“位间隔”的整数倍,同时传送的字符间不留间隙,即保持位同步关系,也保持字符同步关系。发送方对接收方的同步可以通过两种方法实现
在这里插入图片描述

2.2 异步通信

异步通信:异步通信是指通信中两个字符(8位)之间的时间间隔是不固定的,而在一个字符内各位的时间间隔是固定的。

异步通信是以字符(构成的帧)为单位进行传输,字符与字符之间的间隙(时间间隔)是任意的,但每个字符中的各位是以固定的时间传送的,即字符之间不一定有“位间隔”的整数倍的关系,但同一字符内的各位之间的距离均为“位间隔”的整数倍。

通信的发送与接收设备使用格子的时钟控制数据的发送和接受过程。为了使双方的手法协调,要求发送和接收设备的时钟尽可能一致
在这里插入图片描述
异步通信特点:
1.不要求收发双方时钟的严格一致
2.容易实现
3.设备开销较小
4.每个字符需要附加2到3位用于起止位
5.各帧之间还有间隔
6.传输效率不高

三、串行通信的传输方式

传输方式有三种,分别为单工、半双工和全双工
单工:数据传输仅能延一个方向,不能实现反向传输。
半双工:数据传输可以延两个方向,但是需要分时进行(不能同时进行通信)。
全双工:数据可以同时进行双向传输(不需要要分时)。
在这里插入图片描述

四、串口通信硬件电路

1.简单的串口通信有两根通信线(发送端TXD 和 接收端RXD)。
2.TXD 和 RXD 需要交叉连接。
3.当只需要单向传输时,也可以只接一根传输线。
4.当电平标标准不一致时,需要加电平转换芯片。
在这里插入图片描述

五、常见接口介绍

在这里插入图片描述
除此之外还有CAN、USB等。

六、串口相关寄存器详解

51单片机串口通信相关寄存器有SCON、SBUF、PCON、TMOD等

6.1 特殊功能寄存器SCON

SCON:用来设定串行口的工作方式、接受/发送控制以及设置状态指示。
在这里插入图片描述
SM2:多机通讯控制位。在方式0时,SM2一定要等于0。在方式1中,当(SM2)=1则只有接收到有效停止位时,RI才置1。在方式2或方式3当(SM2)=1且接收到的第九位数据RB8=0时,RI才置1。

REN:接收允许控制位。由软件置位以允许接收,又由软件清0来禁止接收。

TB8: 是要发送数据的第9位。在方式2或方式3中,要发送的第9位数据,根据需要由软件置1或清0。例如,可约定作为奇偶校验位,或在多机通讯中作为区别地址帧或数据帧的标志位。

RB8:接收到的数据的第9位。在方式0中不使用RB8。在方式1中,若(SM2)=0,RB8为接收到的停止位。在方式2或方式3中,RB8为接收到的第9位数据。

TI:发送中断标志。在方式0中,第8位发送结束时,由硬件置位。在其它方式的发送停止位前,由硬件置位。TI置位既表示一帧信息发送结束,同时也是申请中断,可根据需要,用软件查询的方法获得数据已发送完毕的信息,或用中断的方式来发送下一个数据。TI必须用软件清0。

RI:接收中断标志位。在方式0,当接收完第8位数据后,由硬件置位。在其它方式中,在接收到停止位的中间时刻由硬件置位(例外情况见于SM2的说明)。RI置位表示一帧数据接收完毕,可用查询的方法获知或者用中断的方法获知。RI也必须用软件清0。

SM1,SM0:串行工作方式:
在这里插入图片描述

6.2 PCON寄存器

注意:改寄存器中只有一位与串行口工作有关
在这里插入图片描述
SMOD:波特率倍增位。在串口工作在方式2、方式3,波特率与SMOD有关。

当SMOD = 1时,波特率提高一倍。
当SMOD = 0时,不加倍。

6.3 TMOD寄存器

在这里插入图片描述
高四位为定时计数器1的设置,低四位是定时计数器0设置,串口通信波特率设置占用定时计数器1,这里主要说串口通信,不过多说定时计数器,只需要设置定时计数器1的工作方式即可

当GATE=1时,“与门”的输出信号K由INTx输入电平和TRx位的状态一起决定(即此时K=TRx·INTx),当且仅当TRx=1,INTx=1(高电平)时,计数启动;否则,计数停止。

当INT0引脚为高电平时且TR0置位,TR0=1;启动定时器T0;

当INT1引脚为高电平时且TR1置位,TR1=1;启动定时器T1。

当GATE=0时,“或门”输出恒为1,“与门”的输出信号K由TRx决定(即此时K=TRx),定时器不受INTx输入电平的影响,由TRx直接控制定时器的启动和停止。

当TR0=1,启动定时器T0。

当TR1=1,启动定时器T1。

C/T:定时器和计数器选择位,0为定时器,1为计数器
在这里插入图片描述

七、代码演示-单片机和电脑通信

7.1 串口向电脑发送数据

#include <REGX52.H>
#include "Delay.h"


unsigned char Sec;

void UART_Init()//4800bps@12.000MHz
{
	SCON=0x40;
	PCON=PCON|0x80;
	TMOD=TMOD&0x0F;//把TM0D的低四位清零,高四位保持不变
	TMOD=TMOD|0x20;//把TM0D的最低位置置1,高四位保持不变
	TL0=0xF3;//设置定时初值
	TH0=0xF3;//设置定时初值
	ET1=0;//禁止定时器1中断
	TR1=1;
}

void UART_SendByte(unsigned char Byte)
{
	SBUF=Byte;
	while(TI==0);
	TI=0;
}

void main()
{ 
	UART_Init();

        while(1)
        {
					UART_SendByte(Sec);
					Sec++;
					Delay(1000);
        
         }
}

7.2 电脑通过串口控制LED

main.c

#include <REGX52.H>
#include "Delay.h"
#include "UART.h"


void main()
{ 
	UART_Init();

        while(1)
        {
					
         }
}

void UART_Routine() interrupt 4
{
	if(RI==1)
	{
	P2=~SBUF;
		UART_SendByte(SBUF);
		RI=0;
	}
}

UART.c

#include <REGX52.H>

void UART_Init()//4800bps@12.000MHz
{
	SCON=0x50;
	PCON=PCON|0x80;
	TMOD=TMOD&0x0F;//把TM0D的低四位清零,高四位保持不变
	TMOD=TMOD|0x20;//把TM0D的最低位置置1,高四位保持不变
	TL0=0xF3;//设置定时初值
	TH0=0xF3;//设置定时初值
	ET1=0;//禁止定时器1中断
	TR1=1;
	EA=1;
	ES=1;
}

void UART_SendByte(unsigned char Byte)
{
	SBUF=Byte;
	while(TI==0);
	TI=0;
}

注意:一定要看

千万不要直接复制代码,因为是模块化编写,模块的代码没有往上复制,大家一定要自己动手跟着教学视屏自己写!!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Hello xiǎo lěi

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

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

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

打赏作者

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

抵扣说明:

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

余额充值