51单片机个人学习笔记7(串口通信)

前言

本篇文章属于STC89C52单片机(以下简称单片机)的学习笔记,来源于B站教学视频。下面是这位up主的视频链接。本文为个人学习笔记,只能做参考,细节方面建议观看视频,肯定受益匪浅。

[1-1] 课程简介_哔哩哔哩_bilibili

一、串口介绍

二、串口硬件电路

TXD:transmit exchange data

RXD:receive exchange data

当设备1和设备2都有独立供电时,VCC可以不接

假如设备2是1个没有独立供电的模块,就要接上VCC让设备1给设备2供电进行工作

四、电平标准

单片机使用的就是TTL电平

TTL电平和RS232电平的传输距离很有限,可能传输十几米数据就出现错误了

RS485电平可以传输1000米以上的距离

差分信号 --> 是两根线的压差,不是一根线对地的压差

五、接口及引脚定义

标准九针接口,更多的线实现流控,使发射信号的频率可调整,防止出现数据传输过快,处理不过来的情况

但51单片机不支持流控

六、常见通信接口的比较

相关术语:

七、该单片机的UART

1.四种工作模式

2.串口参数及时序图

3.串口模式图

4.串口和中断系统

5.串口相关寄存器

八、实例一(串口向电脑发送数据)

1.要配置的寄存器

(1)串口控制寄存器SCON和PCON

①SCON

将SM0、SM1配置为01,选择方式1:8位UART,波特率可变(常用)

REN为1,串口允许接收信息;REN为0,串口禁止接收信息

发送数据结束后TI自动会置1,进入中断系统,中断系统执行完后,要自己手动将T1置为0

接受数据接受后RI自动会置1,进入中断系统,中断系统执行完后,要自己手动将R1置为0

初始化配置如图,即SCON=0x40;

②PCON

SMOD对应这个位置

而SMOD0默认为0,使SCON寄存器中的SM0/FE位用于SM0功能,不需要配置

(2)中断有关寄存器

2.代码演示

UART.c

#include <REGX52.H>

/**
  * @brief  串口初始化,4800bps@11.0592MHz
  * @param  无
  * @retval 无
  */
void UART_Init()
{
	SCON=0x40;
	PCON|=0x80;
	TMOD &= 0x0F;		//设置定时器模式
	TMOD |= 0x20;		//设置定时器模式
	TL1 = 0xF4;		//设定定时初值
	TH1 = 0xF4;		//设定定时器重装值
	ET1 = 0;		//禁止定时器1中断
	TR1 = 1;		//启动定时器1

}

/**
  * @brief  串口发送一个字节数据
  * @param  Byte 要发生的一个字节数据
  * @retval 无
  */
void UART_SendByte(unsigned char Byte)
{
	SBUF=Byte;
	while(TI==0);
	TI=0;
}

main.c

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

unsigned char Sec;

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

九、实例二(电脑通过串口控制LED)

1.代码演示

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

	}
}

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

另外,UART初始化函数要启用中断系统

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

十、波特率的计算(以12MHz为例进行计算)

初值为0xF3,二进制下为243,定时器在256时溢出

则要计的数是256-244=13

即13us溢出一次

溢出频率(T1的溢出率)就为1/13=0.0769230769230769MHz

0.0769230769230769MHz/16=0.0048076923076923MHz=4,807.692307692308Hz

误差率(4,807.692307692308-4800)/4800=0.16025641025641%

十一、数据显示模式

Char就是文本模式

Dec和Hex就是HEX模式

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值