通讯依照根本类型可以分为并行通讯和串行通讯。并行通讯时数据的各个位一起传送,可以完成字节为单位通讯,可是通讯线多占用资源多,本钱高。比方咱们前边用到的 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