趣聊51之串口通信(概念篇)

        对于刚刚接触单片机的同学们来说,串口通信似乎是一个神秘感十足的东西,笔者在刚刚开始学习51单片机时,读的是郭天祥先生的那本著名的《新概念51单片机教程》,贼厚的一本书,但是等读完串口通信的内容之后,我突然觉得51单片机也就那回事,无非是各种中断,定时器的运用,对外部设备的控制啊,例如ADC芯片,12864液晶屏,再或者就是今天我们所提到的串口通信的内容。

        那么什么叫串口通信呢?我想有必要先来和大家讨论一下什么叫做“通信”。

        “通信,指人与人或人与自然之间通过某种行为或媒介进行的信息交流与传递,从广义上指需要信息的双方或多方在不违背各自意愿的情况下采用任意方法、任意媒质,将信息从某方准确安全地传送到另方”(来源:百度百科)

        从上面的定义我们可以知道,通信其实就是信息的传递。所以我们需要明白几个重要的概念。第一个就是传输媒介,手机屏幕前的你和正在敲博客的我,今天聚焦在单片机这个话题上,所以我们主要讨论以金属导线为媒介的通信方式。其次,我们需要关注传输信息的内容,在微机系统中,微型计算机接受和处理的都是二进制码,嗯,理所当然,咱们传输的信息便是0/1。最后便是通信的双方,我们不可能对着空气交流,这样的交流是没有意义的,我们今天聊的通信介于微机与微机之间,也就是你的PC与单片机间,或者一公一母的一对单片机之间,抑或是幸福的单片机家庭之间的信息交流。

        那么你要问了,单片机之间要如何“聊天”呢?类似于咱们人类,单片机之间的交流也需要“嘴”(Transmit external data,简称TXD)和“耳”(RXD,英文自行补充),我们把这两个接口称作“串口”。

        它们具体在51单片机上的位置如图所示。这里我想要大家理解的除了RXD和TXD的作用之外,还要知道,我们在通信时总是“嘴”对“耳”进行传输的(即RXD和TXD连接),“嘴对嘴”(TXD接TXD)或者是“耳对耳”(RXD对RXD)的行为是不可取的,容易引起其他单身单片机的不适。

        好了,说了这么多也没聊到什么是串口通信,可能大半的同学都默默离开了我的博客,并且还留下了几句“废话真多”的评论,好嘛,各位看官不要急,好戏正式开演。

        前面我们把单片机之间的通信比作我们人类之间的交流,这其实是非常恰当的(为我的聪明才智点个赞)。但是更聪明的同学肯定会提出来,如果单片机中出现了一个”哑巴“,它要如何与其他小伙伴进行交流呢?独秀同学请坐下,让我来说:当然是通过“视觉”交流!在微机中这种方法又叫“并行通讯”。

        就像我们的眼睛一次性能看到一幅画面一样,并行通信通常是将数据的各位用多条数据线同时进行传输,这样,瞬间咱们的单片机便可以接收到一个字节,或者多个字节的数据。这种传输方式的优点就是传输的速度非常快,但是其缺点也很明显,那就是传输距离短、成本高,常用在集成电路芯片的内部、同一插件板上各部件之间、同一机箱内个插件板之间的数据传输,或者老式打印机与计算机连接等场合。

        

        那么与之对应什么又是串行通信(serial communication,简称SC)呢?大家仔细琢磨一下我们说话的过程就可以明白,通常咱们说一句话时总是一个字一个字往外蹦,无论你语速多快,后一个字总要等前一个字说完以后才能被说出口,类似的,在微机中就是使用一条数据线,将数据一位一位地依次传输,每一位数据占据一个固定的时间长度。只需要少数几条线就可以在系统间交换信息,特别适用于计算机与计算机、计算机与外设之间的远距离通信。很容易可以知道,相比于并行通信,串行通信所花费的时间更长,但其优点远大于缺点,所以应用十分广泛。 

        正如不同人说话的语速不同,每句话之间的停顿也不同,串行通讯也被分为异步串行通信(synchronized serial port communication)与同步串行通信。我在这里想要提醒大家的是,无论是同步串行通信抑或是异步串行通信,在“说一句话”时每个“字”之间的时间是相同的,就像说话时快时慢会让人感觉特别难受一样,发送每位数据所占的时间要尽可能相同,并且要与接收者的速度相匹配。(就像说话速度太快,别人容易听不清)。

        那什么是异步串行通信和同步串行通信呢?前面我们说到,说话时要让“语速”在发送者和接收者之间同步。在微机世界中,想要达成这个目的可以通过让发送者和接收者共用一条时钟线(你该不会连时钟是什么都不明白吧?)来实现,这就是所谓的“同步串行通信”

        但是呢,虽然同步串行通信的速度快,效率高,但接收者和发送者之间需要共用一条时钟线,些许违背了我们串行通信的初衷,聪明的同学肯定会发出疑问:为什么不先告知双方通信的速度,然后让他们各自按照速度进行通信不就行了?非常正确!由此我们引出了重点:“异步串行通信”

        什么叫异步通信呢?就是发送与接受设备都使用各自的时钟,要求是这两个时钟要尽可能一致,发送的时间间隔可以不同(如图所示),接收方通过数据的起始位和停止位来实现数据的同步。同步通信就好比起跑线上全神贯注的运动员,时刻等待发令枪响,而异步通信就像上课走神的你,老师转过身去写板书时你便开始走神,而当老师回过身来你又开始听课。

        所以异步串行通信的基本格式,专业术语叫“数据帧”。它的组成包括了四个部分:起始位,数据位,校验位,和停止位。所谓的校验位又称奇偶校验位,它的目的就是告诉接收者,这帧数据在传输过程中有没有出错。理所当然,它分为奇校验和偶校验。很多同学理解不了奇偶校验的概念,这里我和大家简要介绍一下:奇校验时,这帧数据中“1”的个数之和为奇数,偶校验与此类似。校验位就像一个顽皮的孩子,在0和1之间反复横跳,只为让数据中“1”的个数为奇数或者偶数(奇数加一为偶,偶数加一为奇),以便让接收者知道接收到的信息有没有“变味”。

在串行通信中通信的方式根据时间和方向的不同可以分为:单工,半双工,全双工。

        我们从图中可以看出所谓单工就是数据的传输只能沿一个方向,不能实现反向传输。半双工就是数据可以沿两个方向传输了但是必须分时进行;全双工是指数据可以同时进行双向传输。

        那么问题来了,51单片机和PC之间的串口通信属于哪种通信制式呢?

        (答案是全双工,从单片机上有RXD和TXD两个口就可以知道)

        最后要讲的一个重要的概念叫波特率。大家在做点亮第一个LED灯实验时,就使用过程序烧录软件,在里面我们常常能看到所谓“波特率”,我们不知其意但又经常使用(例如程序烧录失败可以尝试调低波特率解决)。其实咱们51单片机的程序烧录方式采用了串行通信的方式,所谓波特率就是每秒钟串行总线传输二进制代码的位数,单位为bps(bit per second)简称波特。例如 1波特=1位/秒,也就是每秒钟传输1位数据,所以常用的4800、9600等等就很好理解了。值得注意的是,数据在串行传输过程中波特率会随着导线长度而衰减,所以串口通信并不适用于长距离的传输,(一般使用rs485通信或者can总线等等方式)。

        讲到这里,本篇博客应该就要结束了,很高兴给大家分享了一些知识。本人机缘巧合接触到单片机,之前常听别人说学会了单片机保你前途光明远大,此话是真是假暂且不论,我觉得学习的最高驱动力应该是兴趣,这种兴趣无谓功名纯属爱好,当然如果爱好能给人生带来一些起色是最好不过的。作为一名电子爱好者,我们永远忘记不了点亮第一颗LED灯时的喜悦,有时,铭记就是最好的证明,证明我们曾心动过,曾努力过,曾梦想过。

        路漫漫其修远兮,吾将上下而求索。与君共勉!

本博客所引图片均援引自网络,侵删。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>