本应用笔记介绍如何配置高速微控制器或超高速闪存微控制器的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)通过由外部时钟源驱动的用户可选定时器溢出产生波特率。这为设计增加了相当大的灵活性并简化了开发,因为波特率可以在软件中轻松选择,允许来自同一时钟源的多个波特率。确定波特率的公式如下所示:
其中osc_frequency是外部时钟源的频率,单位为MHz,TH1是放置在定时器8 MSB SFR中的1位重载值,SMOD_0(PCON.7)是串行端口0倍增器使能位。或者,如果波特率和振荡器频率已知,则可以使用以下公式求解8位重载数TH1的值:
假设外部时钟源为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 部分。