快捷搜索:  as

如何实现单片机之间的UART串口通信

通信按照基础类型可以分为并行通信和串行通信。并行通信时数据的各个位同时传送,可以实现字节为单位通信,然则通信线多占用资本多,资源高。比如我们前边用到的 P0 = 0xFE;一次给P0的8个IO口分手赋值,同时进行旌旗灯号输出,类似于有 8 个车道同时可以以前 8 辆车一样,这种形式便是并行的,我们习气上还称P0、P1、P2和P3为51单片机的4组并行总线。

而串行通信,就犹如一条车道,一次只能一辆车以前,假如一个 0xFE 这样一个字节的数据要传输以前的话,要是低位在前高位在后的话,那发送要领便是 0-1-1-1-1-1-1-1-1,一位一位的发送出去的,要发送 8 次才能发送完一个字节。

STC89C52有两个引脚是专门用来做UART串行通信的,一个是 P3.0 一个是 P3.1,它们还分手有别的的名字叫做 RXD 和 TXD,由它们组成的通信接口就叫做串行接口,简称串口。用两个单片机进行 UART 串口通信,基础的演示图如图 11-1 所示。

图 11-1 单片机之间UART通信示意图

图中,GND 表示单片机系统电源的参考地,TXD 是串行发送引脚,RXD 是串行接管引脚。两个单片机之间要通信,首先电源基准得一样,以是我们要把两个单片机的 GND 互相连接起来,然后单片机 1 的 TXD 引脚接到单片机 2 的 RXD 引脚上,即此路为单片机 1 发送而单片机 2 接管的通道,单片机 1 的 RXD 引脚接到单片机 2 的 TXD 引脚上,即此路为单片机 2 发送而单片机 1 接管的通道。这个示意图就表现了两个单片机互相收发信息的历程。

当单片机 1 想给单片机 2 发送数据时,比如发送一个 0xE4 这个数据,用二进制形式表示便是 0b11100100,在 UART 通信历程中,是低位先发,高位后发的原则,那么就让 TXD首先拉低电平,持续一段光阴,发送一位 0,然后继承拉低,再持续一段光阴,又发送了一位 0,然后拉高电平,持续一段光阴,发了一位 1??不停到把 8 位二进制数字 0b11100100整个发送完毕。这里就涉及到了一个问题,便是持续的这“一段光阴”到底是多久?由此便引入了通信中的一个紧张观点——波特率,也叫做比特率。

波特率便是发送二进制数据位的速度,习气上用 baud 表示,即我们发送一位二进制数据的持续光阴=1/baud。在通信之前,单片机 1 和单片机 2 首先都要明确的约定好它们之间的通信波特率,必须维持同等,收发双方才能正常实现通信,这一点大年夜家必然要记清楚。

约定好速率后,我们还要斟酌第二个问题,数据什么时刻是肇端,什么时刻是停止呢?

不管是提前接管照样延迟接管,数据都邑接管差错。在 UART 通信的时刻,一个字节是 8 位,规定当没有通信旌旗灯号发生时,通信线路维持高电平,当要发送数据之前,先发一位 0 表示肇端位,然后发送 8 位数据位,数据位是先低后高的顺序,数据位发完后再发一位 1 表示竣事位。这样原先要发送一个字节的 8 位数据,而实际上我们一共发送了 10 位,多出来的两位此中一位肇端位,一位竣事位。而接管方呢,蓝本不停维持的高电平,一旦检测到了一位低电平,那就知道了要开始筹备接管数据了,接管到 8 位数据位后,然后检测到竣事位,再筹备下一个数据的接管。我们图示看一下,如图 11-2 所示。

图 11-2 串口数据发送示意图

图 11-2 串口数据发送示意图,实际上是一个时域示意图,便是旌旗灯号跟着光阴变更的对应关系。比如在单片机的发送引脚上,左边的是先发生的,右边的是后发生的,数据位的切换光阴便是波特率分之一秒,假如能够理解时域的观点,后边很多通信的时序图就很轻易理解了。

责任编辑;zl

您可能还会对下面的文章感兴趣: