那么问题来了。单片机与什么样的通信系统进行串行通信?答案是全双工。从MCU上有两个端口就可以知道最后一个重要的概念是波特率。
对于刚接触单片机的同学来说,串口通讯似乎是一件很神秘的事情。刚开始学习51单片机的时候,我看了郭天祥先生著名的《新概念51单片机教程》。但是看了串口通信的内容,突然觉得51单片机无非就是各种中断,定时器的使用,外部设备的控制,比如ADC芯片。
那么什么是串行通信呢?我觉得有必要先和大家讨论一下什么是“沟通”。
“交流是指人与人之间或人与自然之间通过一定的行为或媒介进行信息的交流和传递。广义上是指需要信息的两个或两个以上的当事人使用任何方法和任何媒介,在不违背自己意愿的情况下,准确、安全地将信息从一方传递给另一方。”(来源:百度百科)
从上面的定义我们可以知道,沟通其实就是信息的传递。所以我们需要理解几个重要的概念。第一个是传输介质。今天,手机屏幕前的你和正在打博客的我,聚焦于单片机这个话题,所以我们主要讨论以金属线为媒介的通讯方式。其次,我们需要注意传递信息的内容。在微型计算机系统中,微型计算机接受并处理所有二进制代码。当然,我们传递的信息是0/1。最后是交流的两面性。我们无法与空气交流。这种交流毫无意义。我们今天说的交流是微机和微机之间的交流,也就是你的PC和单片机之间的交流,或者是一男一女单片机之间的交流,或者是幸福的单片机家庭之间的交流。
那么你要问了,单片机之间怎么“聊天”?和我们人类类似,单片机之间的通讯也需要“传输外部数据”(TXD)和“耳朵”(RXD),我们把这两个接口称为“串口”。
它们在51单片机上的具体位置如图所示。除了RXD和TXD的作用,这里我想让大家明白的是,我们在交流时总是“口”对“耳”(即RXD和TXD相连),而“口对口”(TXD连TXD)或“耳对耳”(RXD连RXD)的行为是不可取的,容易引起其他单个单片机的不适。
好了,说了这么多,我还没讲什么是串行通信。可能大部分同学都默默离开了我的博客,留下了几条“胡说八道什么”的评论。别担心,读者们,节目正式开始了。
前面我们把单片机之间的通信比作人类之间的通信,其实很贴切(赞我聪明)。但是比较聪明的同学肯定会问,如果单片机里有个“哑巴”,它怎么和其他小伙伴交流呢?独秀,请坐下让我说:当然是通过“视觉”交流!这种方法在微机中也称为“并行通信”。
就像我们的眼睛一次只能看到一个画面一样,并行通信通常是用多条数据线同时传输每一位数据,这样我们的单片机就可以在一瞬间接收到一个字节或者多个字节的数据。这种传输方式的优点是传输速度很快,但缺点也很明显,就是传输距离短,成本高。它常用于集成电路芯片内部、同一卡板上的元件之间、同一机箱中的卡之间或者旧打印机连接到计算机时的数据传输。
那么什么是串行通信(SC)呢?我们可以理解为,我们仔细说话的时候,一般说一句话就一个字一个字跳出来。不管你说得多快,前一个词没说完,最后一个词是说不出来的。同样,在微型计算机中,使用数据线逐位传输数据,每一位数据占用固定长度的时间。系统之间交换信息只需要几根导线,特别适合计算机之间以及计算机与外设之间的远距离通信。很容易知道,串行通信比并行通信耗时长,但优点远大于缺点,所以应用广泛。
就像不同的人说话速度不一样,每个句子之间的停顿也不一样。串行通信又分为同步串行通信和同步串行通信。这里要提醒你的是,无论是同步串行通信还是异步串行通信,你说一个字的时候每个字之间的时间都是一样的,就像你说话时快时慢会让人特别难受一样。发送每个数据所用的时间应该尽可能相同,并与接收器的速度相匹配。就像说话太快,别人听不清楚一样。
那么什么是异步串行通信和同步串行通信呢?我们前面说过,说话时,发送方和接收方的“语速”要同步。在微机世界里,这可以通过让发送方和接收方共用一条时钟线来实现(你连时钟是什么都不知道吧?),这被称为“同步串行通信”
但是同步串行通信虽然快速高效,但是接收端和发送端需要共用一条时钟线,这和我们串行通信的初衷有些违背。聪明的同学一定会问:为什么不先告知双方通信速度,然后让他们按照速度进行通信?没错。这就引出了关键点:“异步串行通信”
什么是异步通信?即发送和接收设备都使用自己的时钟,要求是两个时钟尽量一致,发送时间间隔可以不同(如图)。接收器可以通过数据的起始位和停止位来同步数据。同步交流就像运动员全神贯注在起跑线上,等待发令枪响,异步交流就像上课走神的你。老师转身在黑板上写字,你开始走神,老师转身,你又开始听课。
因此,异步串行通信的基本格式在技术上称为“数据帧”。它由四部分组成:起始位、数据位、校验位和停止位。所谓奇偶校验位也叫奇偶校验位,其目的是告诉接收方这一帧数据在传输过程中是否存在错误。当然也分奇数检查和偶数检查。很多同学不能理解宇称的概念。这里我简单给大家介绍一下:奇数奇偶中,这一帧数据中“1”的个数之和是奇数,偶数奇偶与此类似。校验位就像一个调皮的孩子,在0和1之间反复跳跃,只为了让数据中“1”的个数变成奇数或偶数(奇数加1是偶数,偶数加1是奇数),从而让接收方知道接收到的信息是否“陈旧”。
串行通信中的通信方式按时间和方向可分为单工、半双工和全双工。
我们从图中可以看到,所谓单工,就是数据传输只能单向,不能实现反向传输。半双工意味着数据可以双向传输,但必须分时传输;全双工意味着数据可以同时双向传输。
那么问题来了,51单片机与PC机的串行通信属于什么样的通信系统?
(答案是全双工,从单片机上有两个端口RXD和TXD就知道了。)
最后,一个重要的概念叫做波特率。第一个LED灯实验点亮的时候大家都用了程序烧软件。在其中,我们经常会看到所谓的“波特率”,这是我们不知道却经常使用的(比如我们可以尝试降低波特率来解决程序烧坏故障)。其实我们51单片机的编程方式是采用串行通信的。所谓波特率,就是串行总线每秒传输的二进制码的位数,单位是bps(比特每秒)。比如1波特=1比特/秒,也就是每秒传输1比特的数据,那么常用的4800、9600等等就很好理解了。值得注意的是,串行传输时数据的波特率会随着导线的长度而降低,所以串行通信不适合长距离传输(一般使用rs485通信或can总线)。
至此,这篇博客应该要结束了,很高兴能和大家分享一些知识。我偶然接触到了单片机。我经常听人说,学习单片机将保证你有一个光明的未来。不管这是真是假,我觉得学习的最高动力应该是兴趣,兴趣是没有意义的,成名纯粹是爱好。当然,如果爱好能给生活带来一些改善是最好的。作为一个电子发烧友,我们永远不会忘记点亮第一盏LED灯的喜悦。有时候,回忆是我们被感动过,努力过,梦想过的最好证明。
在修远有很长的路要走,我将上下起伏。和你一起鼓励!
本博客引用的图片均引自网络,删除。
评论前必须登录!
注册