08 51单片机之串口通信

发布于:2025-07-27 ⋅ 阅读:(17) ⋅ 点赞:(0)


1、前言

在前面的文章中介绍了51单片机之定时器,今天介绍单片机的串口通信。


2、串口介绍

串行接口是一种可以将接收来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接收的串行数据流转换为并行的数据字符供给CPU的器件。一般完成这种功能的电路,我们称为串行接口电路。串口通信(Serial Communications)的概念非常简单,串口按位(bit)发送和接收字节的通信方式。并行通信是指将数据字节中的各位用多条数据线同时进行传输。

这种通信方式的优点是传输速度快、效率高,缺点是每一个数据位都需要一个数据线,数据有多少位就需要多少根数据线,占用引脚和单片机资源太多。另外,并行的数据线易受外界干扰,传输距离不能太远,由于传输线较多,长距离传送时成本高且接收方的各位同时接收存在困难。在实际应用中,微处理器与内存、硬盘、光驱等外设之间的数据传递一般都采用并行通信标准。

51单片机内部自带UART (Universal Asynchronous ReceiverTransmitter,通用异步收发器),可实现单片机的串口通信。
在这里插入图片描述

Figure1. 串口介绍

3、DB9串口介绍

3-1、什么是DB9串口?

DB9串口是一种常用于串行通信的物理接口标准,其名称来源于连接器的型号—DB9(D-subminiature 9-pin)。DB9接口具有9个引脚,用于数据的发送和接收,以及控制信号的传输。

3-2、DB9串口的主要特点

  • 物理接口:采用9针D型连接器,外观为D型孔(母头)或D型针(公头)。
  • 信号传输:支持串行数据传输,包括数据的发送(TXD)和接收(RXD)。
  • 控制信号:除了数据信号外,还包含多种控制信号,如数据终端准备好(DTR)、数据准备好(DSR)、请求发送(RTS)、清除发送(CTS)、载波检测(DCD)、振铃提示(RI)等。
  • 电平标准:通常遵循RS-232C电平标准,逻辑1为-3V~-15V,逻辑0为+3~+15V。

3-3、DB9串口的物理接口定义

DB9串口的物理接口定义如下:

  1. 引脚1(DCD):载波检测,用于检测对方Modem发来的载波信号。
  2. 引脚2(RXD):接收数据,用于接收来自对方设备的数据。
  3. 引脚3(TXD):发送数据,用于向对方设备发送数据。
  4. 引脚4(DTR):数据终端准备好,表示数据终端已做好通信准备。
  5. 引脚5(SG):信号地,作为所有信号的公共参考点。
  6. 引脚6(DSR):数据准备好,表示数据通信设备已准备好进行通信。
  7. 引脚7(RTS):请求发送,用于请求对方设备准备接收数据。
  8. 引脚8(CTS):清除发送,表示对方设备已准备好接收数据。
  9. 引脚9(RI):振铃提示,用于指示有来电呼叫。
    在这里插入图片描述
Figure2. DB9串口的物理接口

4、硬件电路

  1. 简单双向串口通信有两根通信线(发送端TXD(Transmit Exchange Data)和接收端RXD(Receive Exchange Data))。
  2. TXD与RXD要交叉连接
  3. 当只需单向的数据传输时,可以直接一根通信线。
  4. 当电平标准不一致时,需要加电平转换芯片

在这里插入图片描述

Figure3. 硬件电路

5、电平标准

电平标准是数据1和数据0的表达方式,是传输线缆中人为规定的电压与数据的对应关系。串口常用的电平标准有如下三种:

  1. TTL电平:+5V表示1,0V表示0。
  2. RS232电平:-3 ~ -15V表示1。+3 ~ +15V表示0。
  3. RS485电平:两线压差+2 ~ +6V表示1,-2 ~ -6V表示0(差分信号)。

6、通信术语

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

  • 半双工:通信双方可以互相传输数据,但必须分时复用一根数据线。

  • 单工:通信只能有一方发送到另一方,不能反向传输,比如遥控器。

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

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

  • 总线:连接各个设备的数据传输线路(类似于一条马路,把路边各住户连接起来,使住户可以相互交流)。可以参考STC89C52系列单片机的内部结构


7、串行通信口

7-1、51单片机的串口通信

STC89C52系列单片机内部集成有一个功能很强的全双工串行通信口,与传统8051单片机的串口完全兼容。设有2个互相独立的接收、发送缓冲器,可以同时发送和接收数据。发送缓冲器只能写入而不能读出,接收缓冲器只能读出而不能写入,因而两个缓冲器可以共用一个地址码(99H)。两个缓冲器统称串行通信特殊功能寄存器SBUF

串行通信设有4种工作方式,其中两种方式的波特率是可多变的,另两种是固定的,以供不同应用场合选用。波特率由内部定时器/计数器产生,用软件设置不同的波特率和选择不同的工作方式。主机可通过查询或中断方式对接收/发送进行程序处理,使用十分灵活。

  1. 模式0:同步移位寄存器
  2. 模式1:8位UART,波特率可变(常用)
  3. 模式2:9位UART,波特率固定
  4. 模式3:9位UART,波特率可变

STC89C52系列单片机串行口对应的硬件部分对应的管脚是P3.0/RxD和P3.1/TxD。STC89C52系列单片机的串行通信口,除用于数据通信外,还可方便地构成一个或多个并行I/O口,或作串一并转换,或用于扩展串行外设等。

7-2、51单片机的串口通信原理图

在这里插入图片描述

Figure4. 51单片机的串口通信原理图

7-3、串口参数及时序图

  • 波特率:串口通信的速率(发送和接收各数据位的间隔时间)。
  • 检验位:用于数据验证。
  • 停止位:用于数据帧间隔。

在这里插入图片描述

Figure5. 串口参数及时序图

7-4、串口模式图

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

Figure6. 串口模式图

7-5、串口和中断系统

中断系统可以参考:中断系统

在这里插入图片描述

Figure7. 串口和中断系统

7-6、串行口相关寄存器

在这里插入图片描述

Figure8. 串行口相关寄存器

7-6-1、串行口控制寄存器SCON和PCON

在这里插入图片描述

Figure9. 串行口控制寄存器SCON

在这里插入图片描述

Figure10. 串行口控制寄存器PCON

7-6-2、串行口数据缓冲寄存器SBUF

  1. STC89C52系列单片机的串行口缓冲寄存器(SBUF)的地址是99H,实际是2个缓冲器,写SBUF的操作完成待发送数据的加载,读SBUF的操作可获得已接收到的数据。两个操作分别对应两个不同的寄存器,1个是只写寄存器,1个是只读寄存器。
  2. 串行通道内设有数据寄存器。在所有的串行通信方式!中,在写入SBUF信号的控制下,把数据装入相同的9位移位寄存器,前面8位为数据字节,其最低位为移位寄存器的输出位。根据不同的工作方式会自动将"1"或TB8的值装入移位寄存器的第9位,并进行发送。
  3. 串行通道的接收寄存器是一个输入移位寄存器。在方式0时它的字长为8位,其他方式时为9位。当一帧接收完毕,移位寄存器中的数据字节装入串行数据缓冲器SBUF中,其第9位则装入SCON寄存器中的RB8位。如果由于SM2使得已接收到的的数据无效时,RB8和SBUF中内容不变。
  4. 由于接收通道内设有输入移位寄存器和SBUF缓冲器,从而能使一帧接收完将数据由移位寄存器装入SBUF后,可立即开始接收下一帧信息,主机应在该帧接收结束前从SBUF缓冲器中将数据取走,否则前一帧数据将丢失。SBUF以并行方式送往内部数据总线。

7-6-3、从机地址控制寄存器SADEN和SADDR

为了方便多机通信,STC89C52系列单片机设置了从机地址控制寄存器SADEN和SADDR。其中SADEN是从机地址掩模寄存器(地址为B9H,复位值为00H1),SADDR是从机地址寄存器(地址为A9H,复位值为00H)。


7-6-4、与串行口中断相关的寄存器IE和IPH、IP

串行口中断允许位ES位于中断允许寄存器IE中,中断允许寄存器的格式如下:
在这里插入图片描述

Figure11. 串行口中断相关的寄存器IE
  1. EA:CPU的总中断允许控制位,EA=1,CPU开放中断,ECA=0,CPU屏蔽所有的中断申请。EA的作用是使中断允许形成多级控制。即各中断源首先受受EA控制,其次还受各中断源自己的中断允许控制位控制。
  2. ES:串行口中断允许位,ES=1,允许串行口中断,ES=0,禁止串行口中断。

串行口中断优先级控制位PS/PSH位于中断优先级控制寄存器IP/IPH中,中断优先级控制寄存器的格式如下:
在这里插入图片描述

Figure12. 串行口中断相关的寄存器IPH、IP

PSH,PS:串口1中断优先级控制位。

  1. PSH=0PS=0时,串口1中断为最低优先级中断(优先级0)
  2. PSH=0PS=1时,串口1中断为较低优先级中断(优先级1)
  3. PSH=1PS=0时,串口1中断为较高优先级中断(优先级2)
  4. PSH=1PS=1时,串口1中断为最高优先级中断(优先级3)

8、工程编码

8-1、STC_ISP生成波特率配置代码

在这里插入图片描述

Figure13. STC_ISP生成波特率配置代码
void Uart1_Init(void)	//4800bps@11.0592MHz
{
	PCON |= 0x80;		//使能波特率倍速位SMOD
	SCON = 0x50;		//8位数据,可变波特率
	AUXR &= 0xBF;		//定时器时钟12T模式
	AUXR &= 0xFE;		//串口1选择定时器1为波特率发生器
	TMOD &= 0x0F;		//设置定时器模式
	TMOD |= 0x20;		//设置定时器模式
	TL1 = 0xF4;			//设置定时初始值
	TH1 = 0xF4;			//设置定时重载值
	ET1 = 0;			//禁止定时器中断
	TR1 = 1;			//定时器1开始计时
}

8-2、MCU端发送数据到上位机

在这里插入图片描述

Figure14. MCU端发送数据到上位机

8-3、实验现象

在这里插入图片描述


在这里插入图片描述


8-4、上位机发送数据到MCU端

在这里插入图片描述

Figure15. 上位机发送数据到MCU端

8-5、实验现象

在这里插入图片描述


8-6、波特率计算

0xFF - 0xF3 = 13 -> 13us,也就是每隔13us溢出一次。1/13 = 0.07692307692307692307692307692308MHz

  1. 波特率:0.07692307692307692307692307692308MHz / 16 = 0.00480769230769230769230769230769MHz = 4,807.6923076923076923076923076923Hz
  2. 误差:(4,807.6923076923076923076923076923 - 4800)/ 4800 = 0.00160256410256410256410256410256 = 0.16025641025641025641025641025641%。故符合上图中的误差范围,见波特率计算

8-7、数据显示模式

  • HEX模式/十六进制模式/二进制模式:以原始数据的形式显示。
  • 文本模式/字符模式:以原始数据编码后的形式显示。

Table1. SCII 编码一览表
二进制 十进制 十六进制 字符/缩写 解释
00000000 0 00 NUL (NULL) 空字符
00000001 1 01 SOH (Start Of Headling) 标题开始
00000010 2 02 STX (Start Of Text) 正文开始
00000011 3 03 ETX (End Of Text) 正文结束
00000100 4 04 EOT (End Of Transmission) 传输结束
00000101 5 05 ENQ (Enquiry) 请求
00000110 6 06 ACK (Acknowledge) 回应/响应/收到通知
00000111 7 07 BEL (Bell) 响铃
00001000 8 08 BS (Backspace) 退格
00001001 9 09 HT (Horizontal Tab) 水平制表符
00001010 10 0A LF/NL(Line Feed/New Line) 换行键
00001011 11 0B VT (Vertical Tab) 垂直制表符
00001100 12 0C FF/NP (Form Feed/New Page) 换页键
00001101 13 0D CR (Carriage Return) 回车键
00001110 14 0E SO (Shift Out) 不用切换
00001111 15 0F SI (Shift In) 启用切换
00010000 16 10 DLE (Data Link Escape) 数据链路转义
00010001 17 11 DC1/XON (Device Control 1/Transmission On)
00010010 18 12 DC2 (Device Control 2) 设备控制2
00010011 19 13 DC3/XOFF (Device Control 3/Transmission Off)
00010100 20 14 DC4 (Device Control 4) 设备控制4
00010101 21 15 NAK (Negative Acknowledge) 无响应/非正常响应/拒绝接收
00010110 22 16 SYN (Synchronous Idle) 同步空闲
00010111 23 17 ETB (End of Transmission Block) 传输块结束/块传输终止
00011000 24 18 CAN (Cancel) 取消
00011001 25 19 EM (End of Medium) 已到介质末端/介质存储已满/介质中断
00011010 26 1A SUB (Substitute) 替补/替换
00011011 27 1B ESC (Escape) 逃离/取消
00011100 28 1C FS (File Separator) 文件分割符
00011101 29 1D GS (Group Separator) 组分隔符/分组符
00011110 30 1E RS (Record Separator) 记录分离符
00011111 31 1F US (Unit Separator) 单元分隔符
00100000 32 20 (Space) 空格
00100001 33 21 !
00100010 34 22 "
00100011 35 23 #
00100100 36 24 $
00100101 37 25 %
00100110 38 26 &
00100111 39 27
00101000 40 28 (
00101001 41 29 )
00101010 42 2A *
00101011 43 2B +
00101100 44 2C ,
00101101 45 2D -
00101110 46 2E .
00101111 47 2F /
00110000 48 30 0
00110001 49 31 1
00110010 50 32 2
00110011 51 33 3
00110100 52 34 4
00110101 53 35 5
00110110 54 36 6
00110111 55 37 7
00111000 56 38 8
00111001 57 39 9
00111010 58 3A :
00111011 59 3B ;
00111100 60 3C <
00111101 61 3D =
00111110 62 3E >
00111111 63 3F ?
01000000 64 40 @
01000001 65 41 A
01000010 66 42 B
01000011 67 43 C
01000100 68 44 D
01000101 69 45 E
01000110 70 46 F
01000111 71 47 G
01001000 72 48 H
01001001 73 49 I
01001010 74 4A J
01001011 75 4B K
01001100 76 4C L
01001101 77 4D M
01001110 78 4E N
01001111 79 4F O
01010000 80 50 P
01010001 81 51 Q
01010010 82 52 R
01010011 83 53 S
01010100 84 54 T
01010101 85 55 U
01010110 86 56 V
01010111 87 57 W
01011000 88 58 X
01011001 89 59 Y
01011010 90 5A Z
01011011 91 5B [
01011100 92 5C |
01011101 93 5D ]
01011110 94 5E ^
01011111 95 5F _
01100000 96 60 `
01100001 97 61 a
01100010 98 62 b
01100011 99 63 c
01100100 100 64 d
01100101 101 65 e
01100110 102 66 f
01100111 103 67 g
01101000 104 68 h
01101001 105 69 i
01101010 106 6A j
01101011 107 6B k
01101100 108 6C l
01101101 109 6D m
01101110 110 6E n
01101111 111 6F o
01110000 112 70 p
01110001 113 71 q
01110010 114 72 r
01110011 115 73 s
01110100 116 74 t
01110101 117 75 u
01110110 118 76 v
01110111 119 77 w
01111000 120 78 x
01111001 121 79 y
01111010 122 7A z
01111011 123 7B {
01111100 124 7C
01111101 125 7D }
01111110 126 7E ~
01111111 127 7F DEL(Delete) 删除

参考资料

  1. 串口通信
  2. 51单片机入门教程-2020版 程序全程纯手打 从零开始入门
  3. db9 串口 定义-百度

网站公告

今日签到

点亮在社区的每一天
去签到