一、通信传输方式
并行通信与串行通信
通信传输方式可分成串行通信和并行通信:
- 并行通常将数据字节的各位用多条数据线传送。并行通信控制简单,传输速度快;但对传输线路要求高,成本较高,且接收方同时接收存在困难,抗干扰能力差。适合近距离、大量、快速的信息交换。
- 串行通信将数据字节分成一位一位的形式在一条传输线上逐个传送。传输线少,长距离成本低,可利用电话网等现成设备,但数据的传送控制比并行通信复杂,且传送效率低。适合长距离,低速率的通信。
同步通信与异步通信
串行通信可以分为同步通信与异步通信:
- 异步通信是以字符(构成的帧)为单位进行传输,字符与字符之间的间隔是任意的,但是字符之间的位间隔必须固定时间传送。异步通信不要求收发双方时钟严格一致,实现容易,设备开销较小,但每个字符要附加2-3位起止位,各帧之间有间隔,传输效率不高。
- 同步通信在通信时要建立发送方时钟对接收方时钟的直接控制,使得双方达到完全同步。此时传输数据的位之间的距离均为位间隔的整数倍,分为外同步和自同步。可以实现点对多点通信,传送效率很高,但实现的软硬件成本较高。
串行通信传输方向
- 单工数据传输仅能沿一个方向,不能实现反向传输。如:电视,广播
- 半双工是指数据传输可以沿两个方向,但要分时进行。如:对讲机
- 全双工是指数据可以同时进行双向传输。如:电话
串行通信的校验
- 奇偶校验
数据尾随的一位为奇偶校验位,被传输数据中1的个数是奇数或偶数进行校验,采用奇数为奇校验,反之为偶校验。若1的个数不一致,则数据传输过程中出现了差错。 - 代码和校验
发送方把所发数据块求和(或各字节异或),产生一个字节校验字符,附加到数据块末尾,由接收方校验。 - 循环冗余校验
通过某种数学运算实现有效信息与校验位之间的循环校验,广泛用于同步通信中。哈希函数的一种。
二、电平转换与波特率
-
电平标准
TTL电平:+5V等价于逻辑“1”,0V等价于逻辑“0”。但电平是个电压范围,因此规定标准的TTL输出高电平>2.4V,输出低电平<0.4V;输入高电平>=2.0V,输入低电平<=0.8V。
CMOS电平:同样采用+5V等价于逻辑“1”,0V等价于逻辑“0”。输出高电平>=4.45V,输出低电平<=0.5V;输入高电平>=3.5V,输入低电平<=1.5V。
同时还有3.3V等低压的LVTTL,LVCMOS电平。
RS-232C电平:-15V ~ -3V等价于逻辑“1”,+3V ~ +15V等价于逻辑“0”。 -
电平转换
由于单片机串口采用TTL电平标准,计算机USB接口或RS-232C接口采用RS-232C电平标准,二者在通信时需要进行电平转换。有MAX232,CH340等转接芯片。 -
波特率
比特率为每秒中传输二进制代码的位,单位:位/秒(bps)。严格上讲波特率与比特率不是一种物理量,不过在串口通信中,二者恰好相等且都可以表示数据的传输速率。波特率与传送距离成反比。在串口通信中,发送方和接收方的必须波特率相同才能正确的传输数据。
如果想深究波特率和比特率,可以看看这篇博客,解释的很清晰。
三、51单片机的串口通信
概况
51单片机的串行口是全双工类型的,一般RXD引脚为P3.0,TXD引脚为P3.1。RXD为Receive Data,TXD为Transmit Data。
1、寄存器
控制寄存器SCON
- SCON寄存器各位定义如下:
位序号 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|---|
位符号 | SM0 | SM1 | SM2 | REN | TB8 | RB8 | TI | RI |
- 其中,SM0,SM1控制串行口的工作方式:
SM0 | SM1 | 方式 | 功能 | 波特率 |
---|---|---|---|---|
0 | 0 | 0 | 同步移位寄存器方式(通常用于扩展I/O口) | fosc/12 |
0 | 1 | 1 | 10位异步收发(8位数据),波特率可变 | 2SMOD/32×T1溢出率 |
1 | 0 | 2 | 11位异步收发(9位数据),波特率固定 | 2SMOD/64×fosc |
1 | 1 | 3 | 11位异步收发(9位数据),波特率可变 | 2SMOD/32×T1溢出率 |
上表中,fosc为系统晶振频率,SMOD为电源管理寄存器PCON中的一位,用于控制串口通信方式1,2,3的波特率。SMOD=0时,波特率正常,SMOD=1时,波特率加倍。PCON寄存器中仅有SMOD与串口通信有关。T1溢出率为定时器T1溢出的频率,定时器T1溢出一次的时间T的倒数1/T即溢出率。
位符号 | 解释 | 功能 |
---|---|---|
SM2 | 多机通信控制位 | 主要应用与方式2和3.SM2=1,检测RB8的值决定是否接受数据,SM2=0,无论是什么数据都接收 |
REN | 允许串行接收位 | REN=1,允许串行口接收数据;REN=0,禁止串行口接收数据 |
TB8 | 方式2,3中的发送数据的第9位 | 方式2,3中可用作校验位,多机通信时可作为地址帧/数据帧的标志位 |
RB8 | 方式2,3中的接收数据的第9位 | 可作为校验位或地址帧/数据帧标志位,在方式1时,若SM2=0,则RB8接收到的是停止位 |
TI | 发送中断标志位 |