这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » [经验] 51单片机 | 串口工作原理知识点汇总

共7条 1/1 1 跳转至

[经验] 51单片机 | 串口工作原理知识点汇总

工程师
2019-11-19 17:36:26     打赏
理论概念
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  • 不同型号的单片机使用的串口不同,根据需求选择相应的单片机,在有些场合如果单片机如果没有需要的串行通信接口,则可以通过单片机的I/O口进行模拟。


  • 全双工UART(异步串行通信接口)
    UART有两种工作状态:

  • 同步串行通信状态:速率高,硬件电路复杂,需要同时使用两条信号线,所以只能使用单工方式或半双工方式工作。

  • 异步串行通信状态:方式简单,传输速率不高,应用广泛,方便与其他通信标准进行衔接。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
异步传输工作方式:
  • 传输效率较低,起始位,校验位,停止位占用的位较多

数据格式:


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
同步传输工作方式:
  • 双方同时使用两条通信线:

    • 一条用于产生时钟并要求发送和接受的双方必须保持完全同步(一般情况下,时钟信号由发送端提供)。

    • 另一条用于传送数据。

    • 如果需要双向数据传输,需要再多添加两条通信线(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位置位。



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


    原理:


    波特率计算装入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 }






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



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




  • 数据帧格式:起始位1位,数据9位(第9位在发送时为TB8,接收时为RB8)


    原理:

    代码示例:多机互联


    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;



    • 发送开始时,先把起始位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引脚的负跳变。



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


  • 常见波特率对照表



- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
串口通信初始化步骤:
  • 确定T1的工作方式(编程TMOD寄存器)

  • 计算T1的初值,装载TH1、TL1

  • 启动T1

  • 确定串行口控制(编程SCON寄存器)

  • 在中断方式工作时进行中断设置(编程IE IP寄存器)





关键词: 单片机     串口     工作     原理     知识点    

工程师
2019-11-19 17:41:45     打赏
2楼

总结的不错    


工程师
2019-11-19 17:49:02     打赏
3楼

谢谢楼主分享


工程师
2019-11-19 17:52:45     打赏
4楼

收藏一下  


工程师
2019-11-19 17:58:12     打赏
5楼

学习一下  谢谢分享 


高工
2019-11-19 21:32:45     打赏
6楼

总结的很不错


助工
2019-12-08 17:16:05     打赏
7楼

非常实用的经验贴 楼主费心了


共7条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]