通信的基本概念
通信的方式可以分为多种,按照数据传送方式可分为串行通信和并行通信。按照通信的数据同步方式,可分为异步通信和同步通信,按照数据的传输方向 又可分为单工、半双工和全双工通信。
串行通信
串行通信是指使用一条数据线 ,将数据一位一位依次传输,每一位数据占据一个固定的时间长度
串行通信的特点
:传输线少,长距离传送时成本低,并且可以利用电话网等现成的设备,但数据的传送控制比并行通信复杂。
并行通信
并行通信通常时将数据字节的各位用多条数据线同时进行传送,通常是8位、16位、32位等数据一起传输。
并行通信的特点
:控制简单、传输速度快;由于传输线较多,长距离传送时成本高且接收方的各位同时接收存在困难,抗干扰能力差。
特点 | 传输速率 | 抗干扰能力 | 通信距离 | IO资源占用 | 成本 |
---|---|---|---|---|---|
串行通信 | 较低 | 较强 | 较长 | 较少 | 较低 |
并行通信 | 较高 | 较弱 | 较短 | 较多 | 较高 |
异步通信
异步通信是指通信的发送与接收设备使用各自的时钟控制数据的发送和接收过程。
为使双方的收发协调,要求发送和接收设备的时钟尽可能一致 。异步通信是以字符(构成的帧)为单位进行传输,字符与字符之间的间隙(时间间隔)是任意的,但每个字符中的各位是以固定的时间传送的,即字符之间不一定有“位间隔”的整数倍的关系,但同一字符内的各位之间的距 离均为“位 间隔”的整数倍。
异步通信的特点:不要求收发双方时钟的严格一致,实现容易,设备开销较小,但每个字符要附加 2~3 位用于起止位,各帧之间还有间隔,因此传输效率不高。
同步通信
同步通信时要建立发送方时钟对接收方时钟的直接控制,使双方达到完全同步。此时,传输数据的位之间的距离均为“位间隔”的整数倍,同时传送的字符 间不留间隙,即保持位同步关系,也保持字符同步关系。发送方对接收方的同步 可以通过两种方法实现。
在串行通信中,自同步和外同步是与数据同步相关的两种主要方法。
1. 自同步(也称为内同步):
自同步是指发送端不发送专门的同步信息,而接收端设法从接收到的信号中提取同步信息的方法。
(一般不使用自同步)
2. 外同步:
外同步是指由发送端发送专门的同步信息(常被称为导频),接收端把这个导频提取出来作为同步信号的方法。
通信(单工,半双工,全双工)
单工通信
定义: 单工是指数据传输仅能沿一个方向,单向不能反向传输,发送端只能发送数据,接收端只能接收数据,
特点: 单向传输,发送接收不能同时进行,接收方不能向发送方返回信息
应用: 广播电视、收音机
半双工通信
定义: 半双工是指数据传输可以沿两个方向,但需要分时进行,也就是需要排队,一根线来回传输,即发送跟接收是交替进行
特点: 虽然可以双向传输,但在某一时刻只能进行单向传输,通信双方需要在发送跟接收之间切换
应用: 对讲机
全双工通信
定义: 全双工是指数据可以同时进行双向传输,互不干扰,同一时间同时传输
特点: 可以实现双向同时传输,不需要等待对方停止发送信息
应用: 现代电话,网络通信,以太网,WIFI 等
通信速率
比特率
定义: 比特率是每秒钟传输二进制代码的位数
波特率
定义: 波特率衡量的是通信线路上信号的调制速率,即每秒钟传输的码元符号的个数,一个码元符可能包含一个或多个比特的信息
码元
定义: 码元是通信信号调制的概念,通信中常用时间间隔相同的符号来表示一个二进制数字,这样的信号成为码元
例子:常见的通信传输中,用0V表示数字0,5v表示数字1,一个码元就表示两种状态,一个码元等于一个二进制比特位, 此时波特率跟比特率大小一致,如果说是个4进制的那么就有0,1,2,3这时一个码元等于2个4进制比特位
比特率 每秒钟传送的比特数bit/s
波特率 每秒钟传送的码元数,Baud
比特率=波特率*log2^m m表示每个码元承载的信息量
二进制中,波特率数值等于比特率
常见的串行通信接口
通信接口 | 接口引脚 | 数据同步方式 | 数据传输方向 |
---|---|---|---|
1-wire | DQ:发送/接收 | 异步 | 半双工 |
IIC | SCL:同步时钟 SDA:数据输入、输出 | 同步 | 半双工 |
UART(通用异步收发器) | TXD:发送 RXD:接收 GND:公共地 | 异步 | 全双工 |
SPI | SCK:时钟 ,MISO:主->从机 ,MOSI:从->主,CS:片选信号 | 同步 | 全双工 |
通信传输速度
- one-write一般工作在小于100kbps
- IIC一般工作在100-400kbps
- UART一般工作在10Kbps
- SPI一般工作在100Mbps以下
应用场景
- 1-write一般使用在一些传感器,比如温度传感18B20
- IIC一般用相当高速的传感器,比如温湿度,小容量的EEPROM(256B)
- UART一般使用在蓝牙IC,无线IC,C51单片机程序下载。
- SPI一般用在超高速的设备,比如大容量的flash
串口通信
串口通信(Serial Communication),是指外设和计算机间通过数据信号线、 地线等按位进行传输数据的一种通信方式,属于串行通信方式。串口是一种接口标准,它规定了接口的电气标准,没有规定接口插件电缆以及使用的协议。
接口标准(物理层)
1.串口通信的接口标准有很多,有 RS-232C、
RS-232
、 RS-422A、RS-485
等。
2. RS-232C 还有一种 9 针的非标准连接器接口,简称 DB9。串口通信使用的大 多都是 DB9 接口。DB25 和 DB9 接头有公头和母头之分,其中带针状的接头是 公头,而带孔状的接头是母头。
、
主要的3个引脚,其余是用来提高信号的稳定性,减少干扰
各标准的定义电压
标准 | 高电平(1) | 低电平(0) |
---|---|---|
TTL(行业认准) | 3.3v-5v | 0-0.1v |
RS232(国际认准) | -15v~-3v | 3v~15v |
RS485(国际认准)就这一个需要差分电压 | 2v~6v | -6v~-2v |
要实现TTL单片机与PC端通信,需要借助 MAX232
电平转换芯片
通信协议(协议层)
RS232 的通信协议比较简单,通常遵循96-N-8-1 格式。
“96” 表示的是通信波特率为 9600。串口通信中通常使用的是异步串口通信,即没有时钟线,所以两个设备要通信,必须要保持一致的波特率,当然,波特率常用值还有 4800
、 115200
等。
“N” 表示的是无校验位,由于串口通信相对更容易受到外部干扰导致传输 数据出现偏差,可以在传输过程加上校验位来解决这个问题。校验方法有奇校验 (odd)、偶校验(even)、0 校验(space)、1 校验(mark)以及无校验(noparity)。
“8” 表示的是数据位数为 8 位,其数据格式在前面介绍异步通信中已讲过。 当然数据位数还可以为 5、6、7 位长度。
“1” 表示的是 1 位停止位,串口通讯的一个数据包从起始信号开始,直到停止信号结束。数据包的起始信号由一个逻辑 0 的数据位表示,而数据包的停 止信号可由 0.5、1、1.5 或 2 个逻辑 1 的数据位表示,只要双方约定一致即可。
串口内部结构
注意: 串口属于MCU的内部部件,包含有且仅有一个8位存储寄存SBUF,收发共用同一个SBUF。
1.MCU往SBUF中一位一位的赋值,当满8位时,触发RI =1,表示是收到一个字节数据,需要手动将RI置0。
2.程序往SBUF中以字节为单位赋值后, 等TI =1,表示数据发送完成后,需要手动将TI置0,以便为下次发送做准备。
while (TI == 0);:程序会在此处等待,直到 TI 被置为1,表示数据已经发送完毕。
TI = 0;:手动清除 TI,以便进行下次数据发送。
REN: 允许串行接收位。由软件置 REN=1,则启动串行口接收数据;若软件置 REN=0,则禁止接收。
TI: 发送中断标志位。在方式 0 时,当串行发送第 8 位数据结束时,或在其 它方式,串行发送停止位的开始时,由内部硬件使 TI 置 1,向 CPU 发中断申请。 在中断服务程序中,必须用软件将其清 0,取消此中断申请。 (自动置1,需要软件清0)
RI: 接收中断标志位。在方式 0 时,当串行接收第 8 位数据结束时,或在其 它方式,串行接收停止位的中间时,由内部硬件使 RI 置 1,向 CPU 发中断申请。 也必须在中断服务程序中,用软件将其清 0,取消此中断申请。 (自动置1,需要软件清0)
// 串行中断服务程序
void Serial_ISR(void) interrupt 4
{
if (RI == 1) // 如果接收到数据
{
unsigned char received_data = SBUF; // 读取接收到的数据
RI = 0; // 清除接收中断标志,准备下一次接收
// 这里可以处理接收到的数据,例如保存到缓冲区或执行其他操作
}
}