51单片机——串口通信

文章目录


前言

为了增强了单片机系统的硬件实力,单片机需要与各式各样的模块(WiFi模块,蓝牙模块等)互相通信,本文介绍了串口通信以及通过相关代码实现单片机与电脑的互相通信。


一、串口通信是什么?

1.串口:

          •串行接口简称串口,也称串行通信接口或串行通讯接口,是采用串行通信方式的扩展接口

串口是一种应用十分广泛的通讯接口,串口成本低、容易使用、通信线路简单,可实现两个设备的互相通信。
单片机的串口可以使单片机与单片机、单片机与电脑、单片机与各式各样的模块互相通信,极大的扩展了单片机的应用范围,增强了单片机系统的硬件实力。
51 单片机内部自带 UART Universal Asynchronous Receiver Transmitter ,通用异步收发器),可实现单片机的串口通信。

2.常见通信接口比较:

3.术语解释:

全双工:通信双方可以在同一时刻互相传输数据( 打电话,双方能同时说话
半双工:通信双方可以互相传输数据,但必须分时复用一根数据线( 对讲机
单工:通信只能有一方发送到另一方,不能反向传输( 收音机
异步:通信双方各自约定通信速率
同步:通信双方靠一根时钟线来约定通信速率
总线:连接各个设备的数据传输线路(类似于一条马路,把路边各住户连接起来,使住户可以相互交流)
•波特率:串口通信速率,单位时间内传输二进制的位数(例波特率为9600,指1s内传输                      9600位,则传输一位需要1/9600=104.17us)

 4.电平标准

电平标准是数据 1 和数据 0 的表达方式,是传输线缆中人为规定的电压与数据的对应关系,串口常用的电平标准有如下三种:
TTL电平(transistor transistor logic ): +5V 表示 1 0V 表示 0
RS232 电平: -3~-15V 表示 1 +3~+15V 表示 0
RS485 电平:两线压差 +2~+6V 表示 1 -2~-6V 表示 0 (差分信号)

二、功能实现

目标:

           ①单片机与电脑通信(单片机每隔一段时间通过串口向电脑发送数据)

           ②电脑与单片机通信(电脑通过串口向单片机发送数据控制灯的亮灭)

1.硬件 电路    

51单片机    USB-TTL模块

 注意:模块的TXD与单片机的RXD(P30)相连 ,模块的 RXD与的TXD(P31)相连

 RXD、TXD是Receive Data ,Transmit Data 的意思。 RXD 为接收数据的引脚,TXD 为发送数据的引脚。

 ②51单片机的UART

STC89C52 1 UART
STC89C52 UART 有四种工作模式:

  模式0:同步移位寄存器

  模式18UART,波特率可变(常用)

  模式29UART,波特率固定

  模式39UART,波特率可变

2.串口时序及模式 

1.串口时序

                                                                8位时序图 

 

                                                                 9位时序图 

2.串口模式

 •SBUF:串口数据缓存寄存器,物理上是两个独立的寄存器,但占用相同的地址。写操作时,写入的是发送寄存器,读操作时,读出的是接收寄存器

3.代码

①单片机与电脑通信(单片机每隔一段时间通过串口向电脑发送数据)

代码如下:

#include <REGX52.H>

// 延时函数1s
void Delay1000ms()		//@11.0592MHz
{
	unsigned char i, j, k;

	i = 8;
	j = 1;
	k = 243;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}

//串口初始化
void Uart_Init(void)		//9600bps@11.0592MHz
{
	PCON &= 0x7F;		//波特率不倍速
	SCON = 0x50;		//8位数据,可变波特率
	TMOD &= 0x0F;		//设置定时器模式
	TMOD |= 0x20;		//设置定时器模式
	TL1 = 0xFD;		//设置定时初始值
	TH1 = 0xFD;		//设置定时重载值
	ET1 = 0;		//禁止定时器%d中断
	TR1 = 1;		//定时器1开始计时
}

void main()
{
	unsigned char a;
	Uart_Init();
	
	while(1)
	{
		SBUF=a;//把a的值赋给缓存
		Delay1000ms();//延时1s
		a++;//自增
	}
}

电脑端接受缓存区如下图

数据为16进制,从00一直加到FF ,加到FF后溢出又变为00


 ②电脑与单片机通信(电脑通过串口向单片机发送数据控制灯的亮灭)

代码如下:

#include <REGX52.H>
	
void UART_Init(void)		//9600bps@11.0592MHz
{
	PCON &= 0x7F;		//波特率不倍速
	SCON = 0x50;		//8位数据,可变波特率
	TMOD &= 0x0F;		//设置定时器模式
	TMOD |= 0x20;		//设置定时器模式
	TL1 = 0xFD;		//设置定时初始值
	TH1 = 0xFD;		//设置定时重载值
	ET1 = 0;		//禁止定时器%d中断
	TR1 = 1;		//定时器1开始计时
	EA=1;			//开启总中断
	ES=1;			//开启串口中断
}

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

void UART_Rountine(void)  interrupt 4	//串口中断函数
{
	if(RI==1)
	{
		P2=SBUF;
		RI=0;
	}
	
}

总结

以上就是今天要讲的内容,本文仅仅简单介绍了串口通信的使用,而许多模块都采用串口通信,了解了串口通信之后,就能使用更多模块实现更多功能。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值