zoukankan      html  css  js  c++  java
  • 51单片机 | 串口工作原理知识点汇总

    ————————————————————————————————————————————

    理论概念

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    • 不同型号的单片机使用的串口不同,根据需求选择相应的单片机,在有些场合如果单片机如果没有需要的串行通信接口,则可以通过单片机的I/O口进行模拟。
    • 全双工UART(异步串行通信接口)

      UART有两种工作状态:

    1. 同步串行通信状态:速率高,硬件电路复杂,需要同时使用两条信号线,所以只能使用单工方式或半双工方式工作。
    2. 异步串行通信状态:方式简单,传输速率不高,应用广泛,方便与其他通信标准进行衔接。

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    异步传输工作方式:

    • 传输效率较低,起始位,校验位,停止位占用的位较多

    数据格式:

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    同步传输工作方式:

    • 双方同时使用两条通信线:
      • 一条用于产生时钟并要求发送和接受的双方必须保持完全同步(一般情况下,时钟信号由发送端提供)。
      • 另一条用于传送数据。
      • 如果需要双向数据传输,需要再多添加两条通信线(MCS-51不支持同时的双向数据同步传输,只能使用分时复用)。
    • 除了用于通信外,同步方式还可以用于I/O口的扩展,与74LS164联合使用时扩展成输出口,与74LS165联合使用时扩展成输入口。
    • 因为没有附加起始位和停止位,所以传输效率较高
    • 一旦发现数据出错,所有的数据都需要重新传输,大量数据一次性传输时错误的概率较高。
    • 远距离通信时,通过调试解调从数据流中提取同步信号,用锁相的技术使接收方得到与发送方相同的时钟信号。时钟信号线与数据线分离可以实现高效率、大容量的数据通信。

    数据格式:

    ————————————————————————————————————————————

    使用方式

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    使用的寄存器:

    • 串行接口寄存器 SCON:规定了串行通信的方式和功能,可以选择通信模式/允许接收/检查状态位

    • 电源控制寄存器 PCON

      SMOD = 0 波特率为原值;

      SMOD为1 波特率提高一倍。

      只有SMOD位对串口通信有影响

      注:该寄存器不能进行位寻址,只能整字节操作。

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    工作方式:

    p.s.:UART有一个接收数据缓冲区,当上一个字节未被处理时下一个字节收入缓冲区。但如果在下一个字节接收完毕时前一字节还未处理,则上一个字节会被覆盖掉。因此软件必须在下一个字节接收完毕之前处理上一个字节(当连续发送字节时也是如此)。

    • 用途:可以用来和某些具有8位串行口的EEPROM器件通信

      原理:

      • RXD从低位开始收发数据,TXD从发送同步移位脉冲。
      • 向SBUF写入字节时开始发送数据,发送完毕后TI位置位。

           

      • 置位REN时,开始接收数据,接收完8位数据后RI位置位。

         

    • 方式110位数据的异步通信口,波特率可变(与T1的溢出率有关)。RXD为数据接收,TXD为数据发送。

      数据帧格式:

      原理:

      • 软件置REN为1时,接收器选择波特率为16倍速率采样RXD引脚电平,当检测到RXD引脚输入电平发生负跳变(1->0)说明起始位有效,移入输入移位寄存器并开始接收这一帧信息的其余位。需要手动清零

           

      • 接收过程中,数据从输入移位寄存器右边移入,起始位移至输入移位寄存器最左边时,控制电路进行最后一次移位。当RI=0且SM2=0(或接收到的停止位为1)时,接收到的9位数据的前8位装入接收SBUF,第9位(停止位)进入RB8并置RI=1,向CPU请求中断。RI需要手动清零

         

      波特率计算装入TH1的初值:

      p.s. SMOD=0时,K=1;SMOD=1时,K=2;

      代码示例:

       1 #include <reg51.h>
       2 main()
       3 {
       4     TMOD = 0x20;
       5     SM0 = 0;
       6     SM1 = 1;
       7     REN = 1;
       8     PCON = 0;
       9     TH1 = 0xFD; //253=256-(1*11.0592*10^6)/(384*9600)
      10     TL1 = 0xFD;
      11     TR1 = 1;
      12     P1 = SBUF;
      13     while(!RI);
      14     RI = 0;
      15     SBUF = P1;
      16     while(!TI);
      17     TI = 0;
      18 }
    • 数据帧格式:起始位1位,数据9位(第9位在发送时为TB8,接收时为RB8)

         

      原理:

      • 发送开始时,先把起始位0输出到TXD引脚,然后发送移位寄存器的输出位D0到TXD引脚,每一个移位脉冲都使输出移位寄存器的各位向右移一位,并由TXD引脚输出。第一次移位时,停止位"1"移入输出移位寄存器的第9位,以后每次移位左边都移 0。当停止位移至输出位时,左边其余位全为0,当检测到这一条件时,控制电路进行最后一次移位并置TI=1,请求中断。需要手动清零

           

      • 接收数据时,数据从右边移入输入移位寄存器,在起始位0移到最左边时,控制电路进行最后一次移位。当RI=0且SM2=0(或接收到的第9位数据为1)时,接收到的数据装入接收缓冲器SBUF和RB8(接收数据的第9位),置RI=1,向CPU请求中断。如果条件不满足,则数据丢失且不置位RI,继续搜索RXD引脚的负跳变。

           

      代码示例:多机互联

       1 TMOD = 0x20;
       2 TH1 = 0xFD;
       3 TL1 = 0xFD;
       4 PCON = 0x00;
       5 TR1 = 1;
       6 SCON = 0xF8;
       7 SBUF = 0x01;
       8 while(!TI);
       9 TI = 0;
      10 P3_5 = 0;
      11 SM2 = 0;
      12 while(!RI);
      13 RI = 0;
      14 P2 = SBUF;
      15 SM2 = 1;
      16 P3_5 = 1;

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    波特率的计算:

    • 当T1用作波特率发生器时,最典型的用法是使T1工作再自动重装8位定时器方式(方式2),溢出率取决于TH1中的计数值

    • 常见波特率对照表

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    串口通信初始化步骤:

    • 确定T1的工作方式(编程TMOD寄存器)
    • 计算T1的初值,装载TH1、TL1
    • 启动T1
    • 确定串行口控制(编程SCON寄存器)
    • 在中断方式工作时进行中断设置(编程IE IP寄存器)
  • 相关阅读:
    10. Regular Expression Matching
    9. Palindrome Number
    6. ZigZag Conversion
    5. Longest Palindromic Substring
    4. Median of Two Sorted Arrays
    3. Longest Substring Without Repeating Characters
    2. Add Two Numbers
    链式表的按序号查找
    可持久化线段树——区间更新hdu4348
    主席树——树链上第k大spoj COT
  • 原文地址:https://www.cnblogs.com/hughdong/p/6856861.html
Copyright © 2011-2022 走看看