51单片机入门 - 串口工作原理知识点汇总

发布者:数字探险家最新更新时间:2022-05-27 来源: eefocus关键字: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位置位。

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

    数据帧格式:

    原理:

       

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

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

    代码示例:

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

         

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

    1. 1 #include

    2. 2 main()

    3. 3 {

    4. 4     TMOD = 0x20;

    5. 5     SM0 = 0;

    6. 6     SM1 = 1;

    7. 7     REN = 1;

    8. 8     PCON = 0;

    9. 9     TH1 = 0xFD; //253=256-(1*11.0592*10^6)/(384*9600)

    10. 10     TL1 = 0xFD;

    11. 11     TR1 = 1;

    12. 12     P1 = SBUF;

    13. 13     while(!RI);

    14. 14     RI = 0;

    15. 15     SBUF = P1;

    16. 16     while(!TI);

    17. 17     TI = 0;

    18. 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. 1 TMOD = 0x20;

    2. 2 TH1 = 0xFD;

    3. 3 TL1 = 0xFD;

    4. 4 PCON = 0x00;

    5. 5 TR1 = 1;

    6. 6 SCON = 0xF8;

    7. 7 SBUF = 0x01;

    8. 8 while(!TI);

    9. 9 TI = 0;

    10. 10 P3_5 = 0;

    11. 11 SM2 = 0;

    12. 12 while(!RI);

    13. 13 RI = 0;

    14. 14 P2 = SBUF;

    15. 15 SM2 = 1;

    16. 16 P3_5 = 1;

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

波特率的计算:

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

  • 常见波特率对照表

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

串口通信初始化步骤:

  • 确定T1的工作方式(编程TMOD寄存器)

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

  • 启动T1

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

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


关键字:51单片机  串口  工作方式 引用地址:51单片机入门 - 串口工作原理知识点汇总

上一篇:51单片机入门 - 定时/计数器原理及结构(T0和T1)
下一篇:51单片机的主要组成结构分析详解

推荐阅读最新更新时间:2024-11-16 19:51

51单片机+18B20显示程序+74HC164扩展显示数码管
51 单片机 +18B20显示程序+74HC164扩展显示数码管 #include stc.h #include intrins.h //_nop_();延时函数用 #define uchar unsigned char #define uint unsigned int //================18b20数据口定义=============== uint temp; // 定义一个16位变量用于COPY数据 sbit DQ = P2^6; char flash,presence; uint temp1,temp2; //读出温度暂放 uchar s1,s2,s3,s4
[单片机]
关于51单片机IO引脚的驱动能力与上拉电阻设计方案
单片机的引脚,可以用程序来控制,输出高、低电平,这些可算是 单片机 的输出电压。但是,程序控制不了单片机的输出电流。 单片机的输出电流,很大程度上是取决于引脚上的外接器件。单片机输出低电平时,将允许外部器件,向单片机引脚内灌入电流,这个电流,称为 灌电流 ,外部电路称为 灌电流负载 ;单片机输出高电平时,则允许外部器件,从单片机的引脚,拉出电流,这个电流,称为 拉电流 ,外部电路称为 拉电流负载 。这些电流一般是多少?最大限度是多少? 这就是常见的 单片机 输出驱动能力的问题。 早期的 51 系列单片机的带负载能力,是很小的,仅仅用 能带动多少个 TTL 输入端 来说明的。P1、P2 和 P3口,每个引脚可以都带动 3 个 TTL
[单片机]
51单片机RS485通讯程序仿真与MODBUS RTU静止时间详解
仿真原理图如下 由于MODBUS-RTU 要求每帧信息中的数据间隔时间不得超过1.5字符的静止时间。 因此: (1)、当串口产生接收中断后,立即重装“超时定时器”的初始值。(注:超时定时器的初始值和波特率有关) 问题如下:  (a)、由于要求在串口接收中断中重装超时定时器初始值,那么,该超时定时器就只能采用“溢出模式”,而不能采用“CTC模式” (b)、超时定时器必须在程序初始化时就一直开启。 我的理解对吗? (2)两帧之间的3.5字符的静止时间该如何实现呢? 接收到每个字节的时候,初始化定时器就行,最后一个字节后,定时器就溢出了 利用单独的软件定时器,来判断一帧接收报文结束,可以防止若报文接收不完整,该帧通信任务无
[单片机]
<font color='red'>51单片机</font>RS485通讯程序仿真与MODBUS RTU静止时间详解
51单片机串口发送字符事例
#include reg52.h #define jingzhen 11059200UL /*使用22.1184M晶体*/ #define botelv 9600UL /*波特率定义为9600*/ unsigned char zifuchuan = 您好!n ; //待显示字符。 volatile unsigned char sending; sbit S4=P3^2; void delay(unsigned char i) { unsigned char j,k; for(j=i;j 0;j--) for(k=90;k 0;k--); } void init(v
[单片机]
关于stm32f407 串口程序编写过程 总结
一.背景介绍 17/07毕业,通过完成试用期的几个小项目,感觉自己能独立的完成部分项目,便接手了配合硬件工程师,将公司模块升级的任务(M3-- M4) 目标: 1.bootloader更改 2.将rt_thread 系统移植到 stm32f407板子上 3.将485,can , gsm ,以太网 驱动接口补上 4.重新设计程序收发流程,完成实时收发数据 (数据字典,wwdg , 校验设计,对上,对下的协议修改等等 ,这些已在之前完成,只要调用响应接口,调试下即可) 二.目标实现 目标1.bootloader更改 通过学
[单片机]
关于stm32f407 <font color='red'>串口</font>程序编写过程 总结
51单片机基于定时器0的硬件延时代码
1 //晶振的频率 2 #define OSC_FREQ (11059200UL) 3 4 //每个指令的振荡周期数(4,6,12),注意,这里一定要仔细查看芯片手册 5 //*12 - 早期的8051、8052及当前的绝大部分51单片机 6 //*6 - Philips 的芯片 7 //*4 - Dallas 8 #define OSC_PER_INST (12) 9 10 //TIME 为定时时间 单位MS 11 #define PRELOAD1MS (65536 - 1*(UINT16)(OSC_FREQ/(OSC_PER_INST*1000))) 12 #define PRELOAD5MS (65536
[单片机]
8051单片机的GPIO
51单片机并行GPIO,按其特性分为 单一的准双向口 多功能复用准双向口 地址总线输出准双向口 地址/数据总线口的三态双向 P0 ~ P3口都有各自的用法: P0:常作系统数据或低8位地址复用口,第二功能:用于系统扩展 P1:常作通用I/O口使用 P2:常作系统高8位地址,第二功能:用于系统扩展 P3:常用第二功能 1. P0 1.1 构成 1个输出锁存器(D型触发器) 2个三态缓冲器(控制读引脚或读锁存器) 1个输出驱动电路(1对场效应晶体管FET构成) 1个输出控制端(1个与门、1个反相器、1个转换开关MUX组成) 1.2 做输入端口 P0口的输入信号既送到下面的三态缓冲器,又送到
[单片机]
80<font color='red'>51单片机</font>的GPIO
节省IO的小技巧:GD32 MCU如何使用一个GPIO实现串口半双工收发
一般情况串口的接受和发送分别需要使用TX和RX两个引脚来实现,但在一些UART的实际应用中,通信双方身份为主机和从机,数据流是半双工的,那么当IO口资源紧张时可以使用半双工模式通过一个引脚实现数据的发送和接受,同时又保证数据不出错。我们一起来看下红枫派开发板例程中是如何实现的? 首先GD32F303的UART是支持半双工模式的,但想要真正使用起来,软硬件还需要特殊设计。 首先是硬件设计,在红枫派开发板中的RS485通信使用半双工实现,原理图是这样的: 其中很重要的两个点是: 1、在MCU的TX引脚上一定要增加一个上拉电阻,保证MCU发送和接受模式切换时IO口电平可以保持高电平的空闲态。 2、485端实际还是发送和接受
[单片机]
节省IO的小技巧:GD32 MCU如何使用一个GPIO实现<font color='red'>串口</font>半双工收发

推荐帖子

关于对安捷伦 InfiniVison DSO-X2012A示波器操作功能改善建议
工作需要,也一直对安捷伦的仪器情有独钟,所以购买了这款示波器。然后工作中使用中,这款示波器有个操作我觉的非常有必要改善下,我只能用生不如死来形容我的使用感受,发这个帖子也是来吐槽下希望下一版的软件升级中能改善,因为只需要软件进行一点改动,即可大幅提升人性化的操作使用感受。简单描述下问题,在通道一测量菜单中,设置好各个测量参数,还有DVM功能显示的小窗口后,从一通道切换到显示二通道,我觉的正常的操作应该是示波器马上从一通道切换到显示二通道的测量结果,然后傻逼的是,你不仅需要重新设置Tri
ylyfxzsx 测试/测量
请教:如何得知板子上网卡的mac地址?
我用别人做好的一个板子,需要知道上面网卡的mac地址。这个地址最初是怎么决定的?由出厂芯片还是做硬件的人制定的(好像说要根据时序烧录进去)?可以根据芯片查到么?如果是做硬件的人制定,而他当时就没有烧mac地址进去,是不是网卡就不能用?请各位不吝赐教。请教:如何得知板子上网卡的mac地址?1运行CMD2ipconfig/all就能看了由软件决定的
shinesnow 嵌入式系统
还是那个物联网问题的后续问题
本帖最后由lidonglei1于2015-9-2410:21编辑 接着这个帖子:我想学习把单片机数据传到wifi模块,再传到服务器的数据库(虚拟服务器数据库)中。。。。。https://bbs.eeworld.com.cn/thread-473309-1-1.html虚拟服务器或云主机(新浪云SEA)好像都不提供socket的接口,就算提供了我在远端调试也不方便,有没有什么高端的方法能够通过类似网页进行数据交互,即单片机通过wifi发送数据到指定域名的网页,然后再根据网页内
lidonglei1 综合技术交流
如何在ccs编写c程序,机械零件的分类及参数测量
如何在ccs编写c程序,机械零件的分类及参数测量如何在ccs编写c程序,机械零件的分类及参数测量问题太笼统了能详细点吗?littleming1028发表于2014-11-1120:09问题太笼统了能详细点吗? 数字图像处理方面。涉及到数字图像边缘提取,图像采集,参数测量等。
nengneng3389 DSP 与 ARM 处理器
人造闪电
52岁的澳洲男子彼得·特伦是位业余科学家,他最大的爱好便是制作出形形色色令人眩目标“人造闪电”,最高电压可达50万伏!这些精彩绝伦的实验包含,闪电束穿过篮球架和梯子、旋转火花包围汽车、头顶闪电笼中信步,等等。据悉,特伦“触电”已有40个年头!闪电束穿过篮球架缭绕着汽车的闪电束缭绕着手提电脑的闪电束从头顶放射出去的闪电束人造闪电特斯拉线圈很诡异的感觉纯粹玩命做法请勿模仿这个,有想法……前些日子介绍了特斯拉线圈的做法,效果相当壮观,但是工程也相当浩大,造价挺高,并不是每人都能亲
xyh_521 创意市集
大电流输出并联2个MOS管如何均流,MOS管所选封装是不是太小了?
看到一个汽车的PDU域控主板,上面有两路120A的输出是经过4个MOS管(用的是捷捷微电子的JMSH0601AGQ)背靠背2路并联实现的输出控制。两个问题:一是类似这种大电流输出如果一颗MOS不足以支持选用多个MOS并联使用,在导通时由于工艺误差的原因并联MOS的内阻可能不一致,这会导致2路MOS上分得的电流大小不一样,这样一来内阻小电流大的是否发热严重,会更容易损坏?类似这种环境多MOS管并联使用如何做到平均电流。二是选用的MOS封装是PDFN5x6-
lkh747566933 汽车电子
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved