51单片机-第五节-串口通信

1.什么是串口?

串口是通讯接口,实现两个设备的互相通信。

单片机自带UART,其中引脚有TXD发送端,RXD接收端。且电平标准为TTL(+5V为1,0V为0)。

2.常见电平标准:

(1)TTL电平:+5V表示1,0V表示0。

(2)RS232电平:-3~-15V表示1,+3·+15V表示0。

(3)RS485电平:两线压差+2~+6V表示1,-2~-6V表示0。

3.常见通信接口比较:

全双工:通信双方可在同一时刻互传数据。

半双工:不能同时

单工:只能一方传另一方

异步:双方各自约定通信速率

同步:通信双方靠一根时钟线来约定通信速率

4.51单片机的UART:

有四种工作模式,只讲常用的模式一:

(1)UART的结构:

定时器:

缓存寄存器:

控制器:

中断系统:RX/TX

(2)寄存器:

注意:SMOD和SMOD0两个位被放在了PCON中(而非SCON),推测当年因为正好有空。

TI为发送标志位,发送后硬件置1,需软件手动归零。

5.实战:

(1)配置环境:

SM0 SM1设置为 01 可将工作方式设置为模式1。其余均为0即可。

可用STC-ISP生成代码,配置如下:

cpp 复制代码
void UATR_Init()
{
	SCON = 0x40;
	PCON = 0x80;
	TMOD &= 0x0F;
	TMOD |= 0x20;//可使前4位保持不变,只改变定时器0对应的后4位
	TR1 = 1;
	//控制计时时长
	TH1 = 0xF3;
	TL1 = 0xF3;
	//禁止中断系统
	ET1 = 0;
}

(2)串口向电脑发送数据:

cpp 复制代码
void UART_SendByte(unsigned char Byte)
{
	SBUF = Byte;//串口缓冲
	while (TI == 0);
	TI = 0;
}
cpp 复制代码
void main()
{
	UATR_Init();
	while (1)
	{
		UART_SendByte(Sec);
		Sec++;
		Delay(1000);
	}
}

(3)串口接收电脑信息:

因为不知道电脑何时发送数据,故将数据接收放在中断里,待接收到数据,触发中断后再操作。

cpp 复制代码
void main()
{
	UATR_Init();
	while (1)
	{
		 

	}
}

//串口中断模板
void UART_Routine() interrupt 4
{
	if (RI == 1)
	{
		//接收到信息后要执行的操作
		P2 = ~SBUF;
		UART_SendByte(SBUF);
		RI = 0;
	}
}
相关推荐
单片机仿真设计5 小时前
【proteus仿真】基于 STM32 单片机衣柜温湿度监测系统(仿真图+程序)
stm32·单片机·嵌入式硬件·proteus
嵌入式学习菌5 小时前
Modbus‑RTU 数据类型分析
开发语言·单片机·bug
千秋岁rr6 小时前
11.USART
单片机·嵌入式硬件
ouynagda6 小时前
51 单片机外部中断 + 定时器中断实验(P3.2 按键清零,无消抖)
单片机·嵌入式硬件
辰域电子6 小时前
STM32项目开源:环境质量监测系统(代码+原理图+仿真)
stm32·单片机·嵌入式硬件·开源·毕业设计·proteus
单片机仿真设计6 小时前
【proteus仿真】基于 STM32+DHT11 温湿度监测系统 Proteus 仿真设计
stm32·单片机·嵌入式硬件·proteus
国科安芯6 小时前
星链供电架构中的高集成度电源管理方案研究——基于ASP4644四通道降压稳压器在低轨卫星星座中的应用分析
大数据·单片机·嵌入式硬件·架构·低轨卫星·星间链路
xx~t8 小时前
嵌入式——51单片机1
linux·c语言·单片机·嵌入式硬件·51单片机
保安大队王队长9 小时前
51单片机知识
单片机·嵌入式硬件·51单片机
一条破秋裤10 小时前
20_串口通信基础与USART流程
stm32·单片机