蓝桥杯单片机学习8——串口通信(UART的使用示例)

文章详细介绍了串口通信的基础知识,包括UART协议、串口寄存器、工作模式、波特率计算以及串口中断的配置。在串口通信进阶任务中,展示了如何使用51单片机通过串口与上位机交互,实现LED控制及数据交换。代码示例涵盖了串口初始化、中断服务函数以及LED状态控制函数的应用。

上期我们学习了如何通过定时器产生PWM波控制LED的亮度,现在我们开始学习串口通信

串口通信

1.串口通信概述

UART:通用异步收发器(Universal Asynchronous Receiver/Transmitter:UART),一种异步串行通信协议,原理是通过信号线将需要发送的数据以二进制的形式一位一位的发送出去,在传输的过程中高电平表示发送的数据为‘1’,低电平表示数据‘0’,

  • 异步指的是在串口通信的过程中,通信双方之间没有特定的时钟线约定时间,各自使用各自的时钟信号,双方通过约定的波特率进行通信。
  • 串行是指数据在发送的过程中以一位一位的形式发送

在串口通信的过程中,数据往往以数据帧的格式进行传输,数据帧的一般格式如下:
在这里插入图片描述
一个完整的数据帧应该包含:起始位、数据位、停止位。

  • 起始位:发送一个低电平,表示通信开始。
  • 数据位:一共含有8个数据位,可发送一个字节的数据
  • 校验位:可分为无校验、奇校验、偶校验三种,三种发送的区别如下:

无校验:无校验的情况下数据位为8位,不对数据通信过程中的数据正确与否进行检验
奇校验:奇校验的情况下数据位为9位,第九位根据前八位数据计算而来,当前八位数据中1的个数的偶数个,则第九位为1,反之如果为奇数个,则为0.
偶校验:偶校验则是在第九位补0或1,使得这九位数字中1的总数始终为偶数个

  • 停止位:一段时间的高电平,高电平的时间可以是1位、1.5位、2位、

2.串口寄存器

1.串口1的控制寄存器SCON(可位寻址)和PCON(不可位寻址)
在这里插入图片描述

  • SM0/1用于控制串口1的工作模式
  • SM2用于多机通信控制,这里不做解释
  • REN是串口接收允许控制,为1时表示允许串口接收,反之则不允许
  • TB8/RB8用于奇偶校验,这里也不做解释
  • TI/RI是串口发送/接收中断标志位,在发送/接收一个数据帧完成时由硬件置1,需要软件清0

在这里插入图片描述

  • SMOD:波特率选择位,控制波特率是否加倍
  • SMOD0:在奇偶校验中会用到,这里也不做解释

2. 串行口数据缓存数据寄存器SUBF:

在串口通信的过程中,发送/接收的数据都会存入SBUF寄存器,通过对TI/RI的判断,可以进行对SBUF寄存器的数据写入/读出.
3.辅助寄存器AUXR(不可位寻址):
在这里插入图片描述

- S1ST2:为0时通过定时器1为串口1提供波特率,为1时通过定时器2为串口1提供波特率,在串口初始化的时候应该将该位置0

3.串口工作模式

根据SM0/SM1的值,串口的工作模式有以下四种:

SM0 SM1 工作模式
0 0 工作模式0:同步移位寄存器
0 1 工作模式1:8位UART,无校验位,波特率可调
1 0 工作模式2:9位UART,波特率固定,可使用奇偶校验
1 1 工作模式3:9位UART,波特率可调,可使用奇偶校验
  • 在使用过程中,工作模式1使用最为广泛,下面重点介绍工作模式1.

4. 波特率计算

常见波特率与定时器1各参数关系图:
在工作模式1的情况下,波特率由以下公式计算:
举个栗子:
在工作模式1的情况下,波特率由以下公式计算:
波特率 = (2^SOMD /32) * SYSclk / 12 / (256_TH1) ----(定时器1工作模式为8位自动重装载)
将上述公式化简: 256-TH1 = (波特率 * 12 * 32)/ (2^SMOD * SYSclk)
假设波特率为 9600,SMOD = 0 则: 256 - TH1 = (96001232) / 12MHZ = 3.072
TH1 = 256-3 = 253 = 0xFD

5.串口中断的配置

串口初始化函数:

1.设置定时器1工作模式2八位自动重装
2.代开定时器1 ,设置波特率(设置TH1和TL1的初始值)
3.设置串口工作模式,是否允许接收(设置SCON寄存器)
4.打开串口中断和总中断允许
5.设置定时器1为串口1提供波特率

具体函数如下:

//串口初始化函数,设置模式为波特率可调,八位数据位,通过定时器1提供波特率
void Uart_Init(void)
{
   
   
    TMOD |= 0x20
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

不想写代码的我

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

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

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

打赏作者

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

抵扣说明:

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

余额充值