单片机串行口详解

这篇具有很好参考价值的文章主要介绍了单片机串行口详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

之前学习了UART通信协议,那为了实现串行通信,单片机中需要有对应的硬件电路。 这些硬件电路用来解决串行通信中的一系列协调问题,而这些硬件就是串行接口,简称为串行口。

下面对80C51单片机中的串行口进行介绍。

硬件结构

通常把实现异步通信的串行口称为通用异步接收器/发送器UART,把实现同步通信的串行口称为通用同步接收器/发送器USRT,把实现同步和异步通信的串行口称为通用同步异步接收/发送器USART。
80C51的串行口,虽然是既能实现同步通信,又能实现异步通信的全双工串口,但在单片机的串行数据通信中,最常用的是异步方式,因此常把它写为UART。它的硬件结构如下图:
单片机串行口详解,单片机,嵌入式硬件
SBUF为8位只写寄存器,地址为99H。在发送状态下,写入该寄存器的数据将从TXD引脚发送出去。在接收状态下,存放从RXD引脚接收到的数据,只供CPU读取。
鉴于任何时刻CPU只能执行发送或接收指令中的一种,因此,这两个状态的寄存器共用一个地址。

在通信过程中,一旦SBUF变成空或变满,便向CPU发送中断请求。
串行口有两个相互独立的数据引脚,即发送引脚TXD和接收引脚RXD,分别供数据发送和接收使用。 但这两个引脚都是和IO口线复用的,TXD与P3.1共用,RXD与P3.0共用。

串行口的主要功能是实现数据的串行化/反串行化,串行化是把并行数据转变为串行数据,而反串行化则是把串行数据转变为并行数据。

串行口的数据发送是一个串行化的过程,在这一过程中,把写入发送寄存器的并行数据,按帧格式要求插入格式信息(起始位,奇偶校验位和停止位),构成一个串行位串,经TXD引脚串行送出。
串行口的数据接收是一个反串行化过程。 在反串行化过程中,串行数据通过引脚RXD进入,经移位寄存器移位,把帧格式中的信息格式滤除而保留数据位,从而在接收缓冲器中得到并行数据,并送上内部数据总线。

在串行接收通路中,移位寄存器和接收缓冲器构成了双缓冲结构,以避免在数据接收过程中出现帧重叠错误
所谓帧重叠错误,就是在接收下一帧数据时候,前一帧的数据还没有被读走.

控制机制

80C51串行口通过控制寄存器、中断功能和波特率设置实现串行通信控制,此处先介绍前两项内容。

串行口控制寄存器SCON

SCON是80C51的一个可位寻址的专用寄存器,用于串行数据通信控制。 单元地址为98H,位地址为9FH~98H。寄存器内容及位地址表示如下:

位地址 9FH 9EH 9DH 9CH 9BH 9AH 99H 98H
位符号 SM0 SM1 SM2 REN TB8 RB8 TI RI

SM0/SM1—串行口工作方式选择位. 00为工作方式0,依次类推

SM2—多机通信控制位.

TB8—发送数据位8

RB8—接收数据位8

REN—允许接收位

TI—串行发送中断请求标志.
在数据发送过程中,当最后一个数据位被发送完成后,RI由硬件置位. 软件查询时TI可作为状态位使用.

RI—串行接收中断请求标志.
在数据接收过程中,当采样到最后一个数据位有效时,RI由硬件置位.软件查询时RI可作为状态位使用.

串行中断

80C51有两个串行中断,即串行发送中断和串行接收中断. 但这两个串行中断共享一个中断向量0023H. 每当串行口发送或接收一个数据字节时,都产生中断请求. 串行中断请求在芯片内部发生,因此不需要引脚. 两个中断共享一个中断向量,就需要在中断服务程序中对中断源进行判断,以便进行不同的中断处理.
对于串行中断控制共涉及3个寄存器. 其中一个就是上面介绍的SCON,用于存放串行中断请求标志. 另外两个是中断允许控制寄存器IE和中断优先级控制寄存器IP. (具体内容可参考我写的另一个篇关于中断系统的博客:中断系统详解)

工作方式

上面介绍到SM1/SM0可以控制串行口的工作方式,其概况如表所示:

SM0 SM1 工作方式 功能简述 波特率
0 0 方式0 8位同步移位寄存器 fosc/12
0 1 方式1 10位UART 可变
1 0 方式2 11位UART fosc/32或fosc/64
1 1 方式3 11位UART 可变

下面对其中的内容进行具体介绍

方式0

方式0是把串行口作为同步移位寄存器使用,实现串行数据的输入/输出. 移位数据的传输以8位为一组,地位在前,高位在后.
利用工作方式0,加上"并入串出"或"串入并出"芯片的配合.80C51的串行口可实现数据的并行输入/输出.

并入串出芯片用于把并行数据通过移位形成位串,传送给串行口;而串入并出芯片则接收串行口的串行数据,通过移位形成8位并行数据输出.

在方式0下,串行数据的发送和接收都使用RXD引脚,而TXD引脚用来为并入串出或串入并出芯片中的移位寄存器提供移位脉冲,控制数据移位速率. 该移位脉冲由串行口提供,直接送到两种移位寄存器的时钟输入端.

为控制并行数据的输入和移位,并入串出芯片要有输入选通和启动移位的信号,即移位/加载信号. 先把此信号置0以加载并行数据,随后再变为1以启动移位,把数据位直接移向串行口的RXD引脚. 实际应用中,该信号通常由软件方法产生,通过一条口线送出.

方式0的帧格式都是纯数据位,不用附加起始位,停止位和校验位, 数据移位按低位在前,高位在后的顺序进行. 输入的并行数据在串行口缓冲器SBUF中. 串行数据接收需要有允许接收的控制,具体由SCON中的REN位实现. 当REN=0时,禁止接收,REN=1时,允许接收.

当软件置位REN时,即开始从RXD端输入数据,当接收到8位数据后,中断标志RI置位. 再通过查询或中断方法把移入串行口的数据读走,然后就可以对并入串出芯片加载新数据了.

要用80C51的串行口进行并行数据的输出,先把数据字节通过RXD引脚串行传送给串入并出芯片,并在TXD引脚移位脉冲的控制下,把接收的串行数据通过移位得到并行数据,移位停止后,8位并行数据留在其中,等待被其他设备取走.

如果串入并出芯片没有并行输出的选通控制功能,可在数据输出端加三态门,通过选通控制,实现并行数据齐步输出. 当串行口把8位数据全部移走后,SCON寄存器的中断标志TI被自动置1. 通知CPU以中断或查询的方法把并行数据取走

工作方式0时,移位操作(串入或串出)的波特率时固定的,位单片机晶振频率的1/12,若晶振频率用fosc表示,则波特率为fosc/12.

按此波特率的一个机器周期进行一次移位,若fosc = 6MHz,则波特率为500kb/s,即2μs移位一次. 若fosc =12MHz,则波特率为1Mb/s,即1μs移位一次.

方式1

串行方式1是10位为一帧的异步串行通信方式,这种工作方式是为双机通信而准备的. 帧格式包括一个起始位,8个数据位和1个停止位.

方式1的数据发送是由一条写发送寄存器SBUF的指令开始, 随后在串行口由硬件自动加入起始位和停止位,构成一个完整的帧格式, 然后在移位脉冲的作用下,由TXD端串行输出. 一个字符帧发送完后,使TXD输出线维持在1状态下,并将SCON的TI位置1,通知CPU可以接着发送下一个字符.

接收数据时,SCON的REN位应处于允许接收状态,即REN=1. 在此前提下,串行口采样RXD端,当采样到从1到0的状态跳变时,就认为已接收到起始位. 随后在移位脉冲的控制下,把接收到的数据位移入移位寄存器中. 直到停止位到来之后置位中断标志RI,通知CPU从SBUF取走接收到的一个字符.

方式2和3

串行工作方式2和3都是11位为一帧的串行通信方式,即1个起始位,9个数据位和1个停止位.
其帧格式为:

起始 D0 D1 D2 D3 D4 D5 D6 D7 D8 停止位

在这两种工作方式下,字符还是8个数据位,只不过增加了一个第九数据位D8,它是一个可编程位,其功能由用户设定.

在发送数据时,应先在串行口控制寄存器SCON的TB8 位中把第九个数据位的内容准备好

发送数据D0~D7由MOV指令向SBUF写入,而D8位的内容则来自SCON的TB8位,在发送移位过程中插入到8位数据后成为第九数据位. 这两种工作方式的数据接收过程也与方式1基本类似,不同点仍在第九数据位上,串行口把接收到的8位数据位移入SBUF,而把第九位数据位送到SCON的RB8中.

串行工作方式2和3是为多机通信准备的. 两者的工作过程相同,差别仅在于波特率的设置,方式2的波特率是固定的,而方式3的波特率可由用户根据需要设定,设定方法与方式1相同. 不同波特率的设置可以应对多样的通信环境.

上述的介绍中,一直在使用一个词汇,波特率. 那么什么是波特率呢?又应该如何设置波特率呢?
这个问题将在下面进行解答.而介绍波特率,要从串行通信传输速率开始介绍.

传输速率用于说明信息传输的快慢,是串行通信的一项重要技术指标. 以单位时间内,传输信息的单位数表示.

传输速率通常以秒为单位时间,但信心单位却可能多样,因此就出现了多种表示传输速率的方法.

单片机应用中涉及到的有关传输速率的术语有一下几点:

  1. 波特Baud. 每秒一次的信号变化,称为1波特. 波特原本是表示电信设备传输速率的单位,后来又用于表示调制解调器的数据传输速率
  2. 波特率Baud rate. 波特率是每秒钟事件发生的数目或信号变化的次数. 在单片机的串行数据传输中,事件和信号变化都反映在二进制上,因此就以波特率表示串行数据的传输速率.
  3. 比特率Bit rate. 比特率也称为位速率,即每秒钟传输二进制的位数

在一般的单片机串行通信中,波特率和比特率的概念是一样的,但在高速串行通信中,由于一个事件的编码往往不止1位,因此波特率和比特率就不一样了.

例如事件按4位编码,如果数据传输的波特率为2400,则比特率为9600.

单片机中使用波特率作为串行通信传送速率的单位. 每秒传送1个格式位就是1波特. 即

1波特 = 1b/s

在串行数据传输中,波特率除表明数据传送速率外,还可以表示串行口中移位脉冲频率的高低,因为串行数据发送和接收的速率是由移位脉冲来决定的. 波特率高,表示移位脉冲频率高,串行传送数据速度就快,反之就慢.

80C51的波特率设置

工作方式0的波特率

串行工作方式0的波特率是固定的,其值为

波特率=fosc/12

其中fosc表示外部振荡器频率,除以12表示12分频,而外部振荡器的12分频产生一个机器周期,因此在串行工作方式0下,一个机器周期产生一个移位脉冲,进行一次串行移位.
因为波特率固定,因此不存在设置波特率的问题

工作方式2的波特率

方式2的波特率也是固定的,但有两个数值,其计算公式为:

波特率 = fosc/2smod/64

其中smod是串行口波特率倍增位SMOD的值,由公式可知,当smod=1时,波特率位fosc/32,当smod=0时,波特率位fosc/64.
这两种固定的波特率可根据需要选择,而选择的方法是设置PCON寄存器中SMOD的状态. PCON为电源控制寄存器. 地址为87H. 其中最高位SMOD是串行口的波特率倍增位. 当SMOD=1时,串行口波特率加倍,系统复位时,该位的值为0.
PCON寄存器不能进行位寻址,因此只有位序而没有位地址.

工作方式1和3的波特率

串行工作方式1和方式3的波特率不是固定的,可以根据需要设置. 具体地说,80C51是以定时器T1作为波特率发生器,以其溢出脉冲产生串行口的移位脉冲. 因此这两种工作方式中,通过计算T1的计数初值就可以实现波特率的设置. 假设定时器的计数初值为X,则计数溢出周期为:

(12 / fosc) × \times × (256 -X )

则波特率的计算公式为:

波特率 = (2smod /32 ) × \times × {fosc /[12 × \times × (256 - X)]}

再根据上述波特率计算公式,得出计数初值的计算公式为:

X= 256 - [fosc × \times × 2 smod] / (384 × \times × 波特率)

以定时器T1作为波特率发生器是由系统决定的,内部的硬件电路已经接好,无需用户操心, 用户只需先把波特率确定下来,再通过计算得到定时器的计数初值,然后通过初始化程序装入T1即可. 当定时器T1作为波特率发生器使用时,应选择定时方式2,因为在定时方式2下定时器才具有自动重新加载功能文章来源地址https://www.toymoban.com/news/detail-826706.html

到了这里,关于单片机串行口详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 单片机/嵌入式小白教程—硬件(三)51单片机最小系统

    目录 简介 51单片机器件原理图 复位电路 供电电路 晶振电路 下载电路 最小系统原理图  更加方便的51单片机 传统51单片机最小系统包含:复位电路、供电电路、晶振电路、下载电路   其中, 第9脚(RST)为复位引脚, 第40脚(VCC)第20脚(GND)为供电引脚, 第19脚(XTAL1)第

    2024年02月08日
    浏览(75)
  • 单片机(嵌入式)程序分层架构

    目录 前言 嵌入式3层软件架构 嵌入式4层软件架构-1 驱动层 操作系统层 中间件层 应用层 嵌入式4层软件架构-2 硬件层 嵌入式微处理芯片 嵌入式存储器系统 嵌入式I/O接口 中间层 系统软件层 RTOS 文件系统 GUI 应用层 嵌入式5层软件架构1 嵌入式5层软件架构2 嵌入式6层软件架构

    2023年04月19日
    浏览(80)
  • 单片机和Linux嵌入式区别

    单片机是一种集成电路,它能够在一个芯片上完成各种计算、控制和管理任务。单片机没有明确的分层,这是因为它通常被用来设计嵌入式系统,其程序结构和功能要根据具体的应用需求来设计。 在单片机的程序设计中,可以通过一些方法将程序分为不同的层次,比如可以将

    2024年01月17日
    浏览(64)
  • 【单片机/嵌入式】最完整学习路线

            关于这个问题我在网上寻找到 了 相关文章解释得很详细,不了解的同学可以参考一下这篇文章: 到底什么是嵌入式?什么是单片机? - 知乎         一个人学习是孤独的,如果你是一名学生,建议加入学校的电子社团或者实验室,有老师的帮助和同学的互助

    2024年02月03日
    浏览(54)
  • 嵌入式51单片机04-矩阵按键系列

    一、矩阵按键基础知识 矩阵按键工作原理 : 逐行扫描 :通过高四位轮流输出低电平来对矩阵键盘进行扫描,当低四位接收到的数据不全为1的时候,说明有按键按下,然后通过判断低四位数据中哪一位为零来判断哪一个按键被按下。 逐列扫描 :通过低四位轮流输出低电平来

    2024年02月07日
    浏览(65)
  • 【唠唠嵌入式】__如何学习单片机?

    目录 前言 个人定位,从事软件还是硬件? 学习内容 (* ̄︶ ̄)创作不易!期待你们的 点赞、收藏和评论喔。 作为一个老司机,多年来跟 单片机 、 Keil 、 C语言 、 AD 、 烙铁 、 风枪 、 示波器 、 电子元器件 纠缠不清。期间经历了不少磨练,熬过了很多夜晚,也掉了大把头

    2024年02月06日
    浏览(71)
  • 嵌入式(二)单片机基础 | 单片机特点 内部结构 最小系统 电源 晶振 复位

    上一篇文章我们介绍了嵌入式系统 嵌入式系统(Embedded System)是一种特定用途的计算机系统,它通常嵌入在更大的产品或系统中,用于控制、监测或执行特定的任务。这些系统通常由硬件和软件组成,旨在满足特定的需求,如嵌入在家电、汽车、医疗设备、工业自动化、消费

    2024年02月02日
    浏览(108)
  • 嵌入式Linux知识第六章——单片机

    目录 6.1 CPU 内存 虚拟内存 磁盘/硬盘 的关系⭐⭐⭐ 6.2 CPU内部结构⭐⭐⭐⭐ 6.3 ARM结构处理器简析 ⭐⭐ 6.4波特率是什么,为什么双方波特率要相同,高低波特率有什么区别;⭐⭐⭐⭐ 6.5arm和dsp有什么区别⭐⭐ 6.6 ROM RAM的概念浅析⭐⭐⭐ 6.7 IO口工作方式:上拉输入 下拉输入

    2024年04月10日
    浏览(77)
  • 梳理一下嵌入式和单片机之间的关系

    一定有很多人都听说过嵌入式和单片机,但在刚开始接触时,不知道大家有没有听说过嵌入式就是单片机这样的说法,其实嵌入式和单片机还是有区别的。单片机与嵌入式到底有什么关系? 下面我们就来说说嵌入式和单片机之间的联系和区别吧。 01  什么是单片机? 首先,

    2024年02月04日
    浏览(51)
  • 嵌入式软件必读10本书_单片机篇

    大家好,我是知微! 虽然现在网上的技术文章非常多,但缺点是知识点太零散。 书籍是经过精心整理和编排的,仍旧是非常优秀的学习资料。下面一起来看看本文推荐的10本书吧! 这本书物融合了生动活泼的漫画、风趣幽默的文字,以浅显易懂的方式探讨编程思维。 特别适

    2024年02月19日
    浏览(64)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包