通讯依照根本类型可以分为并行通讯和串行通讯。并行通讯时数据的各个位同时传送,可以完成字节为单元通讯,然则通讯线多占用资本多,本钱高。比方我们前边用到的 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 通讯表示图
图 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  串口数据发送表示图


图 11-2 串口数据发送表示图,实践上是一个时域表示图,就是旌旗灯号跟着工夫变更的对应关系。比方在单片机的发送引脚上,右边的是先发作的,左边的是后发作的,数据位的切换工夫就是波特率分之一秒,假如可以了解时域的概念,后边许多通讯的时序图就很轻易了解了。