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

描述

本应用笔记介绍如何配置高速微控制器或超高速闪存微控制器的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)通过由外部时钟源驱动的用户可选定时器溢出产生波特率。这为设计增加了相当大的灵活性并简化了开发,因为波特率可以在软件中轻松选择,允许来自同一时钟源的多个波特率。确定波特率的公式如下所示:

uart

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

uart

假设外部时钟源为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 部分。

审核编辑:郭婷

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

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分