zoukankan      html  css  js  c++  java
  • 8051单片机的串行通信

            计算机的数据交换有两种方式,分别是串行通信和并行通信。

    并行通信:我们以8位(一个字节)的数据为例,在并行通信下,8位数据是同时传输的,同时发送,同时接受。所以通信的双方需要一个公共的时钟信号。并行传输速度快,效率高。但是传输需要的数据线多,传输距离近。

    串行通信:仍然以8位的数据为例,每一位数据都是分时发送的,接收方也是一位一位的接受。串行通信只需要一根数据线就可以,成本低。适用于大规模和远距离的数据传输。

    异步传输模式:每个传输的字符都用起始位和终止位包装起来,在字符间允许有长短不一的间隙。

    同步传输模式:一个数据块包含着许多连续的字符,在字符之间没有空闲。同步传输可以方便的实现某一通信协议要求的格式。

    波特率:在这里定义为串行通信每秒钟传送的“位”的个数。即n波特 = n b/s。在RS-232C标准中,串行通信的波特率规定如下:600,1200,2400,4800,9600等。

    串行口的波特率计算:

    在方式0下,波特率固定为:F/12  (F为晶振频率)

    方式2下,波特率固定为:F/32或者F/64  (取决于PCON寄存器的SMOD位,若SMOD = 1,则是F/32;否则为F/64)。

    方式1和方式3:采用了T1定时器的溢出率作为波特率的发生器,因此计算公式为:

                                    K*F/[32*12*(2^n - X)]。

       其中若SMOD = 1,则K = 2,否则K = 1,F为晶振频率,n为定时器的位数(即定时器处于哪种工作模式下),X是定时器填充的初值。

    在串行通信中要求通信双方拥有一致的波特率,但是有时候我们无法精确的达到那个波特率,此时我们需要考量在SMOD = 1和SMOD = 0这两种情况下哪一个所产生的相对误差较小,我们就去选用哪一个。

    相对误差 = (实际值 - 理论值 ) / 理论值 * 100%


  • 相关阅读:
    49. 字母异位词分组
    73. 矩阵置零
    Razor语法问题(foreach里面嵌套if)
    多线程问题
    Get json formatted string from web by sending HttpWebRequest and then deserialize it to get needed data
    How to execute tons of tasks parallelly with TPL method?
    How to sort the dictionary by the value field
    How to customize the console applicaton
    What is the difference for delete/truncate/drop
    How to call C/C++ sytle function from C# solution?
  • 原文地址:https://www.cnblogs.com/zy666/p/10504319.html
Copyright © 2011-2022 走看看