关于51单片机串口通信的相关知识(寄存器)

2023-05-16

一、51单片机串口概念

1、51单片机的串行口

        51单片机的串行口是一个可编程全双工的通信接口,具有UART(通用异步收发器)的全部功能。

 2、51单片机的硬件连接

        简单双向串口通信有两根数据通信线:

        发送端TXD(Transmit Data)

        接收端RXD(Receive Data)

        TXD和RXD要交叉连接

3、51单片机串口通信的基本结构

        51单片机的串行口主要是由两个独立的串行数据缓存器SUBF(一个发送缓存寄存器,一个接收缓存寄存器)和发送控制器、接收控制器、输入移位寄存器及若干控制门电路组成。串行口的基本结构如图所示:

关于SUBF:串口数据缓存寄存器,物理上是两个独立的寄存器,但是占用相同的地址。写操作时,写入的是发送寄存器;读操作时,读出的是接收寄存器。

①:接收端:数据通过RXD接收引脚,再通过移位寄存器将数据转存到接收寄存器中

②:发送端:讲数据从发送寄存器中移出,通过TXD发送引脚将数据发送出去

③:波特率:通过设置定时器1的初值,获取T1溢出率,通过SMOD模式的设置求取波特率

④:中断:通过发送中断标志位或接收中断标志位是否被置位,判断是否进入串口中断程序,在接收数据完成后,会将RI置位,产生一个接收中断;在发送完成后,会将TI置位,产生发送中断

4、传播速率——比特率

         比特率是指每秒传送的比特(bit)数。单位为bps(bit per second)也可表示为b/s,比特率越高,单位时间传送的数据量(位数)越大。

5、波特率

        在串口通信中,收发双方对发送或接收数据的速率有约定,即双方要有相同的波特率,我们可以通过编程对单片机串行口设定4中工作方式:

 其中,T1的溢出率 = 1/T1溢出的时间

①:关于定时器1方式的选择

        在说选取定时器1方式之前插一句:这里的定时器1方式2不是串口那4中方式中的方式2;

        在学习定时器的相关知识的时候,我们知道定时器有4种不同的工作方式,在串口通信的实验中,我们选择的是定时器1的工作方式2;

 定时器T1工作于方式0:溢出所需周期数=8192-x 

定时器T1工作于方式1:溢出所需周期数=65536-x

定时器T1工作于方式2:溢出所需周期数=256-x

为什么不选择定时器1的工作方式1:

如果我们使用定时器1的工作方式1在中断中装初值的方法来T1溢出率的话,在进入中断、重装值、出中断这个过程中很容易产生时间上的微小的误差,当多次操作时微小的误差不断累积,终会产生错误;

为什么选择定时器1的工作方式2:

因为方式2为自动重装初值的8位定时器/计数器模式(自动重装载就是在定时器溢出后自动装入设定的初值,这样的好处当然是显而易见的,不需要在中断服务器里手动赋值了,所以可以精确的定时)所以用它来做波特率发生器最恰当。

②:波特率的计算

        在上面介绍串口四种方式的时候提到了波特率的计算公式,由公式可以看出,串口方式0和方式2的波特率是固定的;方式1和方式3的波特率是可变的(根据定时器T1的溢出率来控制)

话不多说,根据题来理解:

根据已知波特率,如何计算定时器1方式2下计数寄存器中的初值:

已经波特率 = 9600,系统的晶振频率 = 12Mhz,求给TH1和TL1的初值:

 由此可见,当系统的晶振频率为12Mhz时,定时器的初值不是整数;经过计算可得,当晶振频率为11.0592Mhz时,(256-x) = 3;

当时钟频率选用11.0592MHZ时,取易获得标准的波特率,所以很多单片机系统选用这个看起来“怪”的晶振就是这个道理。

6、波特率与比特率关系与区别

        码元:在数字通信中常常用时间间隔相同的符号来表示一个 二进制数字 ,这样的时间间隔内的信号称为 (二进制)

        在信息传输通道中,携带数据信息的信号单元叫码元,每秒钟通过信道传输的码元数称为码元传输速率,简称波特率。即波特率是指数据信号对载波的调制速率,它用单位时间内载波调制状态改变次数来表示。每秒钟通过信道传输的信息量称为位传输速率,简称比特率。比特率表示有效数据的传输速率。波特率与比特率的关系是比特率=波特率X单个调制状态对应的二进制位数。波特率是传输通道频宽的指标。

二、串口通信有关寄存器

1、数据缓存寄存器

          SBUF是可以直接寻址的专用寄存器。物理上,它对应着两个寄存器,即一个发送寄存器一个接收寄存器,CPU写SBUF就是修改发送寄存器;读SBUF就是读接收寄存器。接收器是双缓冲的,以避免在接收下一帧数据之前,CPU未能及时的响应接收器的中断,没有把上一帧的数据读走而产生两帧数据重叠的问题。对于发送器,为了保持最大的传输速率,一般不需要双缓冲,因为发送时CPU是主动的,不会产生重叠问题。

2、电源寄存器PCON

该寄存器是用来管理单片机的电源部分,包括上电复位检测,掉电模式,空闲模式等

在串口通信中,我们仅仅需要关注SMOD这一位

SMOD = 0且串口方式为1、2、3时,波特率正常

SMOD = 1且串口方式为1、2、3时,波特率加倍

 

3、状态寄存器SCON(98H)

SM0 SM1:工作方式选择位,串行口有四种工作方式,他们由SM0和SM1设定,其对应关系表如下:

SM2:多机通信时的接收允许标志位

REN:允许串行接收位

TB8,RB8:发送接收数据的第9位,当串口工作于方式2或3 时使用到,指向的是串行传输的第9位数据;

1)SM2=0,在方式2或3下,TB8、RB8 发送与接收第9位奇偶校验位;

2)SM2=1,多机通信时的接收允许位,并且在方式2或3下工作;

TI:发送中断标志位,在方式0时,当串行发送第8位数据结束时,或在其他方式,串行发送停止位的开始时,由其内部硬件使TI置1,向CPU发出中断申请。在中断服务程序中,必须用软件将其清 0,取消此中断申请。

RI:接收中断标志位,在方式0时,当串行接收第8位数据结束时,或在其他方式,串行接收停止位的中间时,由内部硬件使RI置1,向CPU发出中断申请。也必须在中断服务程序中,用软件将其清0,取消此中断申请。

三、串口通信代码

串行口在工作之前,应对其进行初始化,主要是设置产生波特率的定时器1,串行口控制和中断控制。

void usart_init()
{
    TMOD = 0x20;    //选择定时器1的工作方式2
    TH1 = 0xF3;    //通过设置定时器1的初值来选择波特率
    TL1 = 0xf3;
    TR1 = 1;        //打开计数器
    SCON = 0x50;    //0101 0000
    PCON = 0x80;
    ES = 1;          //打开通信中断    ①
    EA = 1;          //打开总中断    ②
}

或者

void usart_init()
{
    TMOD = 0x20;

    TH1 = 253;
    TL1 = 253;

    TR1 = 1;
    
    SM0 = 0;
    SM1 = 1;
    
   // REN = 1
   // EA = 1;
   // ES = 1;
}

在编写串口发送端程序时,无需用到接收数据和中断服务函数,所以REN、EA、ES不需要对他们进行操作

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于51单片机串口通信的相关知识(寄存器) 的相关文章

随机推荐

  • 接口成员显示实现

    xff08 interface xff09 用来定义一种程序的协定 实现接口的类或者结构要与接口的定义严格一致 在前面的文章中 xff0c 我们已经对C 接口的概念 xff0c 如何定义接口以及如何对接口进行访问等问题进行了详细的讨论 在这
  • Oracle基础知识整理总结

    1 Oracle跟SQL Server 2005的区别 xff1f 宏观上 xff1a 1 最大的区别在于平台 xff0c oracle可以运行在不同的平台上 xff0c sql server只能运行在windows平台上 xff0c 由于
  • Javascript调用后台方法

    1 javaScript函数中执行C 代码中的函数 xff1a 方法一 xff1a 1 首先建立一个按钮 xff0c 在后台将调用或处理的内容写入button click中 2 在前台写一个js函数 xff0c 内容为document ge
  • Delphi设置某用户对文件(夹)的权限

    以下在代码在D7 43 2003和D7 43 XP中调试通过 unit NTSecurityU interface Uses Windows AclApi AccCtrl Const SECURITY NULL SID AUTHORITY
  • 关于VMWare压缩虚拟机的虚拟磁盘的问题

    随着我们使用虚拟系统的时间越长 xff0c Vmware创建的虚拟磁盘占用空间就越大 xff0c 即使将虚拟系统中的文件删除 xff0c 虚拟磁盘文件占用宿主系统硬盘空间也不会减少 xff0c 这个问题困扰了很多用户 a S 34 N 43
  • GB2312简体中文编码表

    const GB2312 中文编码 CHpb 61 B0 首页码 CHpe 61 F7 尾页码 CHab 61 A1 首地址 CHae 61 FE 尾地址 GB B 61 B0A1 GB E 61 F7FE ChCount 61 chpe
  • 自定义通信协议

    现在大部分的仪器设备都要求能过通过上位机软件来操作 xff0c 这样方便调试 xff0c 利于操作 其中就涉及到通信的过程 在实际制作的几个设备中 xff0c 笔者总结出了通信程序的通用写法 xff0c 包括上位机端和下位机端等 1 xff
  • vc的编译过程

    对VC 43 43 工程编译过程的梳理 VC 43 43 的项目和解决方案文件解读 xff0c 无非就是利用这些信息进行一个软件的编译 xff0c 这些文件里面是存放的项目的配置和工程的组织 xff0c 类似于makefile文件 但是只有
  • 用WSE在Web服务中验证用户身份

    一 Web服务安全与WS Security 毫无疑问 xff0c SOAP和XML Web服务在交互操作和标准上已经完全改变了电子商务领域的格局 然而直到最近 xff0c 在Web服务技术领域仍然存在着一些缺陷 xff0c 那就是处理消息级
  • 安装CUDA wget下载速度慢解决办法(天下无敌)

    因为墙的原因 xff0c 再加上英伟达工作人员脑筋不会急转弯 xff0c 以及wget是个弟中弟 xff0c 下载cuda时可能会很慢 断线 xff0c 翻墙又不方便 但是没关系 xff0c 谈笑间 xff0c 让我们用一分钟成交它 以ub
  • px4下载指定版本的固件、git用法

    https hub fastgit org PX4 PX4 Autopilot git describe tag 查看当前版本号 git tag l 查看所有版本 xff0c 也就是打个tag git checkout v1 9 1 跳转到
  • YOLOX网络结构

    本文为博主DaneAI原创文章 xff0c 遵循 CC 4 0 BY SA 版权协议 xff0c 转载请附上原文出处链接和本声明 原文链接 xff1a https blog csdn net happyday d article detai
  • 阿木实验室P450无人机硬件接线图备忘录

    其中数传是定制的 xff0c 相当于是路由器 43 数传二合一 xff0c 既负责地面站计算机与pixhawk的通讯 xff0c 又负责发射WiFi信号 组建局域网 xff0c 使板载英伟达NX上位机和手机 平板 笔记本电脑等远程终端连接在
  • yolov3损失函数公式及代码位置,绝对良心(更新)

    版本 xff1a darknet yolov3 环境 xff1a ubuntu16 04 本人小白 xff0c 毕设正在做基于yolov3的目标检测系统研究 xff0c 在网上找了一万遍 xff0c 基本没有靠谱的损失函数 xff0c 全是
  • 使用http协议Header中的Authorization传递token

    1 span class token annotation punctuation 64 GetMapping span span class token punctuation span span class token string 3
  • Shell命令之终端打开网页

    一句话用Safari打开百度 span class hljs built in open span span class hljs operator a span span class hljs string 34 Applications
  • 数据结构期末复习五:内部排序

    排序的基本概念和分类 排序 xff1a 将杂乱无章的数据按关键字递增 xff08 或递减 xff09 有序排列 假设Ki 61 Kj xff0c 排序前Ri领先于Rj 稳定排序 xff1a 排序后的序列Ri仍领先于Rj 不稳定排序 xff1
  • 数据同步工具DataX从Mysql同步数据到HDFS实战

    目录 1 查看数据同步模板2 高可用HA的HDFS配置3 MysqlReader针对Mysql类型转换说明4 HdfsWriter支持大部分Hive类型5 Mysql准备数据如下6 新建job mysql2hdfs json7 执行job8
  • 目标检测yolov3+文字识别CRNN 实现文本检测和识别

    参考链接 xff1a https github com chineseocr chineseocr https zhuanlan zhihu com p 34757009 https wenku baidu com view f4ec95e
  • 关于51单片机串口通信的相关知识(寄存器)

    一 51单片机串口概念 1 51单片机的串行口 51单片机的串行口是一个可编程全双工的通信接口 xff0c 具有UART xff08 通用异步收发器 xff09 的全部功能 2 51单片机的硬件连接 简单双向串口通信有两根数据通信线 xff