串口通讯对单片机来说意义重大,并且所需要的电缆数量少,接线简单,所以广泛应用于远程数据传输。简单来说,主机与外设的数据交换,比如电脑和打印机之间的沟通,还有主机与主机的数据交换,比如QQ通讯,都是由串口通讯来实现的。
想要实现串口通讯,需要三根线来完成整个过程:地线、发送和接收。由于串口通讯是异步的,端口能够在一根线上发送数据的同时,在另一根线上接收数据。其他的线用于“握手”,表示友好。整个过程好比木桶取水,发送方掀开桶盖儿,再往桶里倒水,也就是说,你要把数据发送给谁,发送什么东西。当发送完成,接收方需要从桶内取水。当水取完时,会给发送方一个消息,告诉他“我接收完了”。也就相当于打印机,在打印之前会问计算机,是否打印此数据。是,则启动打印工作;否,则停止打印。所以一般串口通讯,总要有一个主动方和一个被动方,而且二者传输数据时,会有一定的协商好的数据格式。发送和接收都要按照此数据格式进行。
串口通讯会用到串口,常用的串行端口有RS232、RS485、RS422。所谓串行通讯就是一次进行一个数据位传输的意思。也就是说在某个时间点上,只会呈现一种电平。各种电平一次呈现,可能会持续某个单位长度,我们把这种通讯称之为串口通讯。
比如我们要传输某个二进制数据:“10 10 10 10”。这个字节有八个比特位。串行通讯传输一个字节时,是从右边的低比特位开始传输。传输这个字节需要八个单位时间,而每个比特位的时间是可以单独设置的。如果发送方将每个比特位的时间设置为M,那么接收方也需要将每个比特位的时间设置为M。如果接收方将时间设置为N,也可以接收到数据,但是接受到的数据与源数据不一致。数据不一致,那么串口通讯过来的数据也就没有意义了。所以发送方和接收方的每个比特位时间数一定要一致。