(七)串口(串行)通信

(七)串口(串行)通信

一、简介

如果将单片机比作一个人的话,每个单片机都是一个个体,大多数人是无法一个人在这个社会上生存的,通常都需要和领导、家人、朋友、甚至陌生人进行交流,而在交流的时候,交流的双方必须采用相同的语言才能进行正常交流,一个说英语,一个说汉语那沟通就费劲了,当然了这也是可以沟通的,毕竟还有翻译(电平转换,协议转换)。
串行口就是单片机行业中非常流行的一种通信协议(语言),也是比较基础的一种通信协议,基本上弄明白了串口,其他如IIC、SPI(也都属于串行的范畴,只不过实现方式稍微有点不同)就很简单了。

二、通信原理

我在前面就说过了,单片机无非是输入输出,无论是点亮LED还是串口,使用的都是普通IO口,也就是高低电平的转换,达到通信的目的。串口通信也不过是更有规律的、符合某项规定的电平转换方式而已。

首先不考虑串口的协议规定,我们先做一些约定:
  1. 我们有两个单片机A和B,如下图
  2. A作为发送数据方、B作为接收方,P0.0---->P1.0
  3. A、B的晶振频率可以不同
  4. A发送的速度和B接收的速度相同,比如,A每秒发送1bit数据,B每秒接收1bit数据,这个很关键

image.png

好了,假如有一个数据“001”,一般来说,我们从低位开始发送:
  1. 由数据可得,此时A应该发送“1”数据,则将P00管脚置高(P00=1)
  2. P00置高并保持1s时间,由于A和B的收发速度相同,则这1s内,B一定会读一次P10管脚的状态(x=P10)
  3. 由于A的P00和B的P10管脚是接在一起的,而P00此时为高电平,所以P10也是高电平,此时x=1,实现数据“1”的发送
  4. 第二位数据是“0”,则将P00管脚置低(P00=0)
  5. P00保持1s(第2s),则这1s内,P10管脚读到的状态就变成了0,实现了数据“0”的传输
  6. 第三位数据依然是“0”,此时P00管脚状态不变
  7. P00保持1s(第3s),则这1s内,P10管脚读到的状态依然是0,实现数据“0”的传输
  8. 至此,实现了3位数据的发送
总结

在串口通信过程中,两方的运行速度可以不同,比如有时我们需要将数据从单片机发送到电脑或反过来,此时两方的运行速度是不可能一样的。但是两方的通信速度必须相同,体现在发送和接收的时间间隔必须相同,这是串口通信的重点。

三、一些概念

1. 波特率

波特率决定了通信双方的通信速度。
波特率的英文写法是bps(bit per second),也就是位每秒,常见的串行波特率如:9600bps、115200bps等,实际上除以8才可以转换为字节,因此可以看出,串口通信的速度实际上并不快。

2. 校验位

串口通信采用的是奇偶校验,校验位是在数据位之后额外添加的一位数据。如果设置了校验位,则发送和接收双方必须设置相同的校验方式,如果设置为偶校验,则通信过程接受方收到的数据中“1”的数量必须是偶数,否则可以认为通信失败。例如:
A和B同时设置为偶校验,实际发送过程中1的数量必须是偶数个

数据1的数量校验位实际发送数据
10012(偶数)01001 0
10001(奇数)11000 1
3. 起始位

就好像人打电话一样,首先被呼叫的人得能够知道他应该准备好接电话了,之后才能建立沟通,串口通信时也需要这样一个过程,在串口通信开始之前,发送方需要发送起始位,其实就是将管脚拉低一段时间,当接收方检测到这个状态后,就知道后边会有数据进来了。

4. 数据位

顾名思义,真正的数据是在数据位的。

5. 停止位

停止位用来表示数据传输完成,通常停止位是一定时间长度的高电平。同时由于各个单片机之间的时钟信号略有偏差,在停止位可以对双方的时钟进行一个矫正。

6. 是否双工

按照是否能够同时收发信息,串口通信主要分为三种:
单工:单向传输数据
半双工:可以双向通信,但是某一时刻只能往一个方向进行数据传输
全双工:可以双向通信,而且同一时刻收发可以同时进行

7. 其他串口

一般来说我们常说的串口是指的TTL电平的串口通信,除了这种电平以外还有两种比较常见的串口通信:
RS233:RS232串口通信与TTL通信主要是有两方面不同,一个是电平不同,RS232电平要高于TTL电平,所以在使用时需要使用转换器,如MAX232芯片,同时高电平带来的是远距离传输的优势;第二个是接口不同,RS232原则上需要使用被称为DB9的插口进行通信,共有9根线,除了TX、RX两个主要的信息传输引脚外,还增加了许多流控引脚,能够让通信更加稳定,虽然一般不咋用。。。
RS485:RS485是一种典型的半双工通信方式,其在通信时使用的是差分通信方式,一般只有两个脚,对接头没有要求,两根线接在接线座上就可以,通常一根线标A,另一根标B,或标485+和485-;由于其采用的差分通信,两根线之间的压差才能决定1bit数据,因此485只能采用半双工通信,这使得485能够在远距离传输时保持一定的稳定性。
除此之外,485通常还被称为485总线,因为其两根通信线上可以挂载多个设备,按照芯片的驱动能力最多挂载64、128甚至更多的设备,之后可以一主多从的方式,由**主机(master)采用轮询的方式一个一个去读取从设备(slave)**的数据,达到总线通信的目的。

8. 9600 8N1

在看别人的数据手册或者产品说明时,通常会看到这样一个参数,9600 8N1,实际上当我们拿到一个产品没有任何说明时,就可以尝试使用这个配置进行串口通信,实际意义如下:
9600:波特率9600bps
8:8位数据位
N:没有奇偶校验位,None无校验,ODD奇校验,EVEN偶校验
1:1位停止位,也就是停止位占用发送1bit数据所需的时间,2表示发送2bit数据所需的时间

四、时序图

网上找了个图,地址点击这里

由上图可以看出,串口通信中一帧数据包含10位数据,其中:
起始位:1位
数据位:7位
校验位:1位
停止位:1位
不进行通信时,串口所用的引脚处在高电平状态。
需要注意的是:
上图只有7位数据位,从实际串口通信的使用来看,此时是没有采用校验的,校验位也可以作为1位数据位,因此是8位数据位,如果是采用奇偶校验,实际上数据位是9位,增加1位奇偶校验位,此时数据帧的总长度是11位。


前几篇文章
(一)Proteus+keil=C51闪个灯
(二)流水灯-C51
(三)按键检测
(四)中断系统
(五)中断代码仿真
(六)定时器/计数器
引导关注二维码.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值