0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

将基于8051的微控制器连接到SCI端口

星星科技指导员 来源:ADI 作者:ADI 2023-02-20 10:18 次阅读

本应用笔记介绍如何配置高速微控制器或超高速闪存微控制器的UART,以便与支持SCI的设备通信。它首先简要讨论了SCI和UART模块之间的差异,并以一个实际示例结束,说明如何配置基于8051的达拉斯半导体微控制器UART以与SCI模块通信。

介绍

串行通信接口 (SCI) 是一种高速串行 I/O 端口,允许设备之间的同步或异步通信。它允许微控制器连接到各种类似功能的外设,以及标准RS-232接口。SCI 的确切实现因设备制造商而异;许多器件都支持异步模式下的全双工通信、奇偶校验、错误检测以及 <> 到 <> 位的可编程字符长度等功能。

所有基于 8051 的达拉斯半导体微控制器都能够与支持 SCI 的设备进行通信,即使 SCI 功能未明确列在微控制器的功能列表中。我们所有的微控制器都包含一到三个8051型UART,可以配置为在大多数常见的SCI模式下运行。

本应用笔记介绍如何配置高速微控制器或超高速闪存微控制器的UART,以便与支持SCI的器件通信。它首先简要讨论了SCI和UART模块之间的差异,并以一个实际示例结束,说明如何配置基于8051的达拉斯半导体微控制器UART以与SCI模块通信。提供了一个代码示例,演示如何初始化微控制器并执行简单的测试以确保设备正确通信。

SCI的特点

如上所述,SCI是一种高速串行接口。它与基于达拉斯半导体8051的微控制器上的8051式UART有许多相似之处。以下是 UART 中的 SCI 功能及其对应项的列表。用户应注意,并非所有 SCI 模块都支持列出的所有功能,因此用户应仔细阅读支持 SCI 的器件的数据手册,以了解其使用方式。

特征 SCI 达拉斯半导体UART
异步模式 适用于大多数实现 串行模式 1、2、3
同步模式 在某些实现上可用 仅串行模式 0
字符长度 1 到 9(如果支持可选字符长度) 8 或 9
平价 在某些实现上可用 受 9 位模式下的软件支持
成帧错误 是的 是的
空闲字符 检测空闲字符以唤醒设备。 UART不能检测空闲字符,但UART微处理器通信模式可用于向UART发出信号,将下一个字节视为地址/标识符。
中断字符 SCI 可以发送和接收中断字符 (00h)。 可以通过将串口RX引脚转换为逻辑0来传输中断字符。收到中断字符可能会导致成帧错误,具体取决于所选字符长度。

大多数 SCI 模块都支持异步通信格式,其中许多是独占的。此处的示例演示如何将基于 Dallas Semiconductor 8051 的微控制器配置为与支持 SCI 的设备进行异步通信。在这种情况下,我们将微控制器配置为与配置了以下特征的目标 SCI 通信:

10位异步模式;1 个启动,8 个数据,1 个停止位

波特率:19200 bps

为了与此设备通信,我们将做出以下决定来设置达拉斯半导体微控制器:

使用串行端口 0 进行通信

外部时钟源为 22.1184MHz

串口将配置为10位异步模式;1 个启动,8 个数据,1 个停止位(这是串口模式 1。

波特率发生器时钟源将是自动重新加载模式下的定时器1(定时器模式2)。

由于所有基于 Dallas Semiconductor 8051 的微控制器定时器默认为原始的 12 分频工作模式,因此此示例的优点是适用于所有达拉斯半导体器件,无论内核的时钟除数如何。这是因为DS5000FP (被12分频)、DS80C320 (被四分频)和DS89C450 (被1分频)都使用相同的串行端口时序,如果未选择定时器的更高速度选项。 有关UART操作的详细信息,请参阅相应用户指南的串行I/O部分。

由于SCI决定了数据的格式,因此接下来必须将达拉斯半导体微控制器初始化为正确的波特率。8位自动重载模式(定时器模式2)通过由外部时钟源驱动的用户可选定时器溢出产生波特率。这为设计增加了相当大的灵活性并简化了开发,因为波特率可以在软件中轻松选择,允许来自同一时钟源的多个波特率。确定波特率的公式如下所示:

pYYBAGPy2H6AL0hRAAAHefSnmaY446.gif?imgver=1

其中osc_frequency是外部时钟源的频率,单位为MHz,TH1是放置在定时器8 MSB SFR中的1位重载值,SMOD_0(PCON.7)是串行端口0倍增器使能位。或者,如果波特率和振荡器频率已知,则可以使用以下公式求解8位重载数TH1的值:

poYBAGPy2H-AAcPCAAAHZmrR-Us741.gif?imgver=1

假设外部时钟源为22.1184MHz,TH1值为FDh将产生19200的目标波特率,并清除倍频位。有关波特率选择的更多信息,请参阅相应用户指南的串行 I/O 部分。

以下简短的汇编代码示例演示如何初始化串行端口 0 以与配置为 10 位异步模式的 SCI 模块通信,速率为 19200 bps。成功操作后,它将回显任何收到的字符。可以轻松删除此功能,使其成为任何用户所需的 SCI 通信应用程序的通用 shell。

;SCI emulation example
; Simple transmit test to demonstrate how to configure 8051 UART to
; emulate an SCI module. Test code embedded in this example echoes back
; received characters.

org 0h            ;Reset vector.
ljmp start

org 23h           ;Serial port 0 vector.
ljmp SP0_ISR


org 100h          ;Start of code.
start:            ;Initialize Serial Port 0 for mode 1, 19200 baud
MOV TMOD,  #020h  ;Set timer 1 for mode 2 (8-bit auto reload)
MOV SCON0, #050h  ;SP0  10-bit asynchronous mode with receive enabled

;Now select the reload value based on baud rate and xtal frequency.
MOV TH1,   #0FDh ;19200 baud at 22.11 MHz
;MOV TH1,   #0FDh ;9600 baud at 11.059 MHz
;MOV TH1,   #0FAh ;9600 baud at 22.11  MHz

SETB TR1          ;Serial port is initialized, now start timer

;Enable Interrupts
MOV IE, #90h      ;This example supports interrupt-driven communications, so
                  ; enable global and serial port 0 interrupts.


;Test code in receive interrupt routine echoes back any received characters
; when combined with the loop here.
loop: sjmp loop


SP0_ISR:          ;Serial port 0 Interrupt Service Routine
jb  RI0, RIO_INT  ;Determine if receiver/transmitter was cause of interrupt.

TIO_INT:          ;Interrupt was caused by transmission.
;
;                  Placeholder for transmitter routine
;
CLR TI0
RETI

RIO_INT:          ;Interrupt was caused by reception
;
;                  Placeholder for receiver routine
;

MOV A, SBUF0      ;Test code that echoes back received character
MOV SBUF0, A      ; Remove for real code.

CLR RI0
RETI

总结

达拉斯半导体基于8051的微控制器中的UART可以很容易地配置为与许多设备中的SCI模块接口。这种流行的串行接口可以在多种模式下工作,但最常见的是RS-10通信中使用的11/232位异步模式。允许达拉斯半导体微控制器连接到SCI模块可提高整体系统的灵活性,因为它们可以连接到更广泛的嵌入式系统

虽然此示例侧重于异步工作模式,但达拉斯半导体微控制器也可以配置为与在同步模式下运行的 SCI 接口。SCI 模块与 8051 UART 的相似性使得该接口能够以最小的努力完成。有关同步模式(串行端口模式 0)的详细信息,请参阅相应用户指南的串行 I/O 部分。

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 微控制器
    +关注

    关注

    48

    文章

    6809

    浏览量

    147634
  • uart
    +关注

    关注

    22

    文章

    1159

    浏览量

    99956
  • 串行通信
    +关注

    关注

    4

    文章

    535

    浏览量

    35019
收藏 人收藏

    评论

    相关推荐

    8051微控制器架构的简要说明

    此前已经介绍了关于8051微控制器基础知识和引脚图说明等相关知识,而在本文中,将重点介绍8051微控制器的硬件方面内容,如 I/O 端口、R
    发表于 08-23 14:45 1978次阅读
    <b class='flag-5'>8051</b><b class='flag-5'>微控制器</b>架构的简要说明

    #硬声创作季 微控制器原理:8051微控制器的技术发展

    微控制器mcu8051
    Mr_haohao
    发布于 :2022年11月02日 14:47:16

    怎么Fieldfox连接到微控制器

    我正在构建一个微控制器控制的转盘,用于测量天线辐射模式。阶段1简单地平台定位在0到360度的任何位置。我最不想做的是使用我的Fieldfox频谱分析仪以单一频率读取信号电平。有了这
    发表于 02-12 12:35

    如何微控制器与FPGA连接

    晚上好,如何微控制器与FPGA连接?如何使用微控制器配置FPGA?如何使用微控制器或软件程序为FPGA创建.bit文件以使用
    发表于 03-25 09:22

    如何8051微控制器引到FPGA中去?

    请问如何8051微控制器引到FPGA中去?
    发表于 04-28 06:41

    讨论AVR,ARM,8051和PIC微控制器之间的区别

    如今,微控制器非常便宜且易于获得,因此通常使用它们代替简单的逻辑电路(如计数微控制器是“在系统可编程”,这意味着可以调整正在执行的程序,而无需从其位置移除微控制器。本文我们
    发表于 11-23 07:24

    如何EVAL6498L连接到微控制器

    您好,我是栅极驱动评估板 EVAL6498L 的第一次用户,我正在尝试了解如何将它连接到控制器和 MOSFET,我正在使用此文档。假设我从微控制器 PWM1 和 PWM2 发送 2
    发表于 01-06 06:24

    请问是否有任何参考设计振荡连接到MKW38微控制器的XTAL引脚?

    请问是否有任何参考设计振荡连接到 MKW38 微控制器的 XTAL 引脚。
    发表于 04-25 07:41

    如何ESP连接到微控制器

    你好! 我有一个问题:这是 ESP 的最小电路。 我想用微控制器驱动它。我的问题是: 1) RST 和 EN 引脚通过电阻连接到 Vcc。如果我想将它连接到 STM32(连接到 STM
    发表于 05-15 08:30

    用AD7549双D A转换器和8051微控制器设计12位模拟

    用AD7549双D A转换器和8051微控制器设计12位模拟I O端口:
    发表于 06-12 15:32 67次下载
    用AD7549双D A转换器和<b class='flag-5'>8051</b><b class='flag-5'>微控制器</b>设计12位模拟

    8051微控制器引脚说明与基本电路

    此前已经介绍过8051微控制器的基础知识,包括它的历史、特性、封装和一些实际应用。在本文中,小编将将继续介绍关于8051微控制器引脚图、引脚说明以及其他一些细节内容,包括
    发表于 08-23 15:53 5573次阅读
    <b class='flag-5'>8051</b><b class='flag-5'>微控制器</b>引脚说明与基本电路

    用于8051兼容微控制器的高效位敲击SPI端口

    快速 SPI 端口可通过 GPIO 引脚进行位冲击,并作为具有 SPI 端口8051 兼容微控制器的低成本替代方案。本应用笔记所示的代码利用80
    的头像 发表于 01-12 16:18 636次阅读
    用于<b class='flag-5'>8051</b>兼容<b class='flag-5'>微控制器</b>的高效位敲击SPI<b class='flag-5'>端口</b>

    I²C接口将小型闪存卡连接到微控制器

    本应用笔记说明如何使用I²C I/O扩展器将CF卡连接到微控制器的I²C接口。解释了用于读取和写入数据的软件命令。MAX7311 I/O端口扩展器用于设计电路。
    的头像 发表于 02-14 10:19 625次阅读
    I²C接口将小型闪存卡<b class='flag-5'>连接到</b><b class='flag-5'>微控制器</b>

    DS1307与兼容8051微控制器接口

    DS1307串行实时时钟集成了2线串行接口,可使用兼容8051微控制器进行控制。本例中的DS1307直接连接到DS5000微控制器上的两个
    的头像 发表于 03-01 13:52 863次阅读
    DS1307与兼容<b class='flag-5'>8051</b>的<b class='flag-5'>微控制器</b>接口

    将基于8051微控制器连接到SCI端口

    本应用笔记介绍如何配置高速微控制器或超高速闪存微控制器的UART,以便与支持SCI的设备通信。它首先简要讨论了SCI和UART模块之间的差异,并以一个实际示例结束,说明如何配置基于
    的头像 发表于 06-13 15:48 446次阅读
    将基于<b class='flag-5'>8051</b>的<b class='flag-5'>微控制器</b><b class='flag-5'>连接到</b><b class='flag-5'>SCI</b><b class='flag-5'>端口</b>