|
通信,按照传统的理解就是信息的传输与交换。对于单片机来说,通信则与传感器、存储芯片、外围控制芯片等技术紧密结合,成为整个单片机系统的“神经中枢”。没有通信,单片机所实现的功能仅局限于单片机本身,就无法通过其它设备获得有用信息,也无法将自己产生的信息告诉其它设备。如果单片机通信没处理好的话,它和外围器件的合作程度就受到限制,最终整个系统也无法完成强大的功能,由此可见单片机通信技术的重要性。UART(Universal Asynchronous Receiver/Transmitter,即通用异步收发器)串行通信是单片机最常用的一种通信技术,通常用于单片机和电脑之间以及单片机和单片机之间的通信。 本章除了介绍单片机的UART通信外, C语言的学习也逐步开始进入深水区。几乎每一本C语言教材都会强调:指针是C语言的灵魂。由此可见,能不能灵活应用指针是判断是否真正学会C语言的重要指标之一,本章将开始介绍指针相关的内容。 10.1 串行通信的初步认识通信按照基本类型可以分为并行通信和串行通信。并行通信数据的各个位同时传送,可以实现字节为单位通信,通信线多占用资源多,成本高。前边用到的P0 = 0xFE;一次给P0的8个I/O口赋值,同时进行信号输出,类似于有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串口通信基本的演示图如图10-1所示。 图10-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位数据位后,然后检测到停止位,再准备下一个数据的接收,如图10-2所示。 图10-2 串口数据发送示意图 图10-2串口数据发送示意图,实际上是一个时域示意图,就是信号随着时间变化的对应关系。比如在单片机的发送引脚上,左边的是先发生的,右边的是后发生的,数据位的切换时间就是波特率分之一秒。 10.2 USB转串口通信早期的电脑,尤其是台式机通常有一个9针的串行接口,叫做RS232串口。随着技术的发展,工业上还有RS232串口通信的大量使用,但是商业技术的应用上,已经慢慢的使用USB转UART技术取代了RS232串口。 在电路上添加一个USB转串口芯片,就可以实现USB通信协议和标准UART串行通信协议的转换,Kinst51开发板上使用的是CH340这个芯片,如图10-3所示。 图10-3 USB转串口电路 图10-3中,CH340电路比较简单,根据数据手册,把电源、晶振接好后,1脚和2脚的DP和DM分别接USB口的2个数据引脚,6脚和7脚接到了单片机的RXD和TXD上去。 CH340的6脚位置加了4148二极管,是STC89C52RC这个单片机下载程序的特殊需求。这个单片机下载程序需要冷启动,即软件上先点下载后给电路上电,上电的瞬间单片机通过串口检测是否需要下载程序。虽然单片机的VCC是由开关控制,但是由于CH340的6脚是输出引脚,如果此处没有二极管的话,开关没有打开之前,由于6脚默认是高电平,电流会从CH340的6脚灌入单片机的P3.0引脚,给后级的电容进行充电,造成后级有一定幅度的电压。这个电压值虽然只有两三伏左右,但是可能会影响到正常的冷启动。加了二极管后,可以消除这种不良影响,此外也不影响通信。串口通信时,CH340的6脚输出高电平时,单片机的RXD也是高电平;当CH340输出低电平时,单片机的RXD为二极管的压降值约0.7V,依然会被单片机识别成为低电平。
|