蓝桥杯之单片机学习(十一)——串口通信的基本原理与应用

简介: 蓝桥杯之单片机学习(十一)——串口通信的基本原理与应用

一、串行通信概述


微控制器与外部设备的数据通信,根据连线结构和传送方式的不同,可以分为两种:并行通信和串行通信

并行通信:指数据的各位同时发送或接收,每个数据位使用一条导线。

串行通行:指数据一位接一位地顺序发送或接收


串行通信有SPI、IIC、UART等多种,最常见最通用的是指UART,大多数情况下,串口通信指的就是UART

串行通信的制式有:单工(只能发不能收)、半双工(能发能收,不能同时进行)、全双工(能发能收,能同时进行)三种

RS485总线是半双工的通信制式

串行通信的主要方式有两种:异步和同步。

同步串行通信:需要使用同一个时钟,以数据块为单位传送数据

异步串行通信:每个设备都有自己的时钟信号,通信中双方的波特率要保持一致,以i字符为单位进行数据帧传送,一次传送一个帧。


1.1 关于波特率的计算


波特率:串口每秒钟传输的位数

在51单片机的串口通信中,模式1和模式3的波特率是可变的,取决于定时1的溢出率,也就是说定时器1每溢出1次,串口就发送一次数据

通常使用定时器1的工作模式2(8位自动重装)来产生波特率,TL1作为脉冲计数寄存器,TH1作为自动冲转寄存器,当计数到最大值溢出时,TH1的值会自动装到TL1中


1.2 波特率计算公式


0a2653c851af460fa595bd959398a8f1.png


1.3 UART口的数据发送与接收


串行口中有两个缓冲寄存器SBUF,一个是发送寄存器,一个是接收寄存器,在物理结构上是完全独立的。它们都是字节寻址的寄存器,字节地址均为99H

这个重叠的地址靠读/写指令区分:

串行发送时,CPU向SBUF写入数据,此时99H表示发送缓存SBUF

串行接收时,CPU从SBUF读出数据,此时99H表示接收缓存SBUF

数据发送,把数据扔进SBUF后,内核会自动将数据发送出去,内容发送完成后,会将TI标志位置1

发送数据程序:SBUF = 数据/变量,如:SBUF = 0x58;

数据接收,内核从串口接收到一个完整的数据后,会将RI标志位置1,用户用SBUF直接读取即可

接收数据程序:变量 = SBUF, 如:dat = SBUF


1.4 串口控制寄存器SCON


2d65d23f6d4748949b924e4057485923.png


二、训练内容


在CT107D单片机综合训练平台上,利用51单片机的串行接口与上位机建立传输信道进行数据的收发。采用8位的UART模式,即模式1,波特率为9600BPS。数据发送采用查询方式,数据接收采用中断方式。系统上电初始化之后,单片机向上位机发送两个字节: 0x5a和0xa5,然后等待接收上位机的数据,每接收到一个字节后,在该字节的基础.上加1 然后返回给上位机


2.1 训练重点


1.串口通信的初始化设置,特别是工作模式和波特率的理解

2.串口通信单字节发送程序的设计

3.串口通信结束中断服务函数的设计

4cebaac233b3433da32a72337a77fc60.png


三、代码展示


#include <reg52.h>
sfr AUXR = 0x8e;
typedef unsigned int uint;
typedef unsigned char uchar;
uchar urdat;
void SelectHC138(uchar channel)
{
  switch(channel)
  {
  case 4:    //LED
    P2 = (P2 & 0X1F) | 0X80;
  break;
  case 5:    //蜂鸣器和继电器
    P2 = (P2 & 0X1F) | 0Xa0;
  break;
  case 6:    //位码
    P2 = (P2 & 0X1F) | 0Xc0;
  break;
  case 7:    //段码
    P2 = (P2 & 0X1F) | 0Xe0;
  break;
  }
}
void InitUart()
{
  TMOD = 0X20;
  TH1 = 0XFD;
  TL1 = 0XFD;
  TR1 = 1;
  SCON = 0X50;
  AUXR = 0X00;
  ES = 1;
  EA = 1;
}
void SendByte(uchar dat)
{
  SBUF = dat;
  while(TI == 0);
  TI = 0;
}
void ServiceUart() interrupt 4
{
  if(RI == 1)
  {
  RI = 0;
  urdat = SBUF;
  SendByte(urdat + 1);
  }
}
//初始化系统
void Initsys()
{
  SelectHC138(5);
  P0 = 0X00;//关闭蜂鸣器和继电器
  SelectHC138(4);
  P0 = 0XFF;//关闭LED
}
void main()
{
  InitUart();
  Initsys();
  SendByte(0xa5);      
  SendByte(0x5a);
  while(1);
}


四、一些参考



0a2653c851af460fa595bd959398a8f1.png2d65d23f6d4748949b924e4057485923.png

相关文章
|
2月前
|
传感器 存储 物联网
单片机的原理与应用
单片机是一种将计算机的CPU、存储器、输入输出接口等功能集成在一块芯片上的微型计算机,被广泛应用于各类控制系统和智能设备中。
92 5
|
6月前
|
存储 算法 测试技术
第十五届蓝桥杯大赛 国赛 pb组F题【括号与字母】(15分) 栈的应用
第十五届蓝桥杯大赛 国赛 pb组F题【括号与字母】(15分) 栈的应用
42 1
|
6月前
|
Java
2023蓝桥杯大赛软件类省赛Java大学B组G题 买二增一 队列的简单应用
2023蓝桥杯大赛软件类省赛Java大学B组G题 买二增一 队列的简单应用
44 1
|
5月前
蓝桥杯之单片机学习(终)——关于之前文章的错误及更正(附:第十四届蓝桥杯单片机赛题)
蓝桥杯之单片机学习(终)——关于之前文章的错误及更正(附:第十四届蓝桥杯单片机赛题)
|
5月前
|
传感器 存储 程序员
《单片机原理与应用及C51编程技术》期末复习笔记
《单片机原理与应用及C51编程技术》期末复习笔记
|
7月前
|
存储 芯片
【期末不挂科-单片机考前速过系列P11】(第十一章:15题速过串行口的工作原理和应用)经典例题盘点(带图解析)
【期末不挂科-单片机考前速过系列P11】(第十一章:15题速过串行口的工作原理和应用)经典例题盘点(带图解析)
|
7月前
|
芯片
AT89S52单片机的最小应用系统
AT89S52单片机的最小应用系统
122 0
|
7月前
|
人工智能 算法 Java
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1005 数字游戏
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1005 数字游戏
110 0
|
7月前
|
Java C语言 C++
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1000 kAc给糖果你吃
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1000 kAc给糖果你吃
86 0
|
7月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-999 数的潜能
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-999 数的潜能
88 0
下一篇
DataWorks