本應(yīng)用筆記介紹如何配置高速微控制器或超高速閃存微控制器的UART,以便與支持SCI的設(shè)備通信。它首先簡(jiǎn)要討論了SCI和UART模塊之間的差異,并以一個(gè)實(shí)際示例結(jié)束,說(shuō)明如何配置基于8051的達(dá)拉斯半導(dǎo)體微控制器UART以與SCI模塊通信。
介紹
串行通信接口 (SCI) 是一種高速串行 I/O 端口,允許設(shè)備之間的同步或異步通信。它允許微控制器連接到各種類似功能的外設(shè),以及標(biāo)準(zhǔn)RS-232接口。SCI 的確切實(shí)現(xiàn)因設(shè)備制造商而異;許多器件都支持異步模式下的全雙工通信、奇偶校驗(yàn)、錯(cuò)誤檢測(cè)以及 <> 到 <> 位的可編程字符長(zhǎng)度等功能。
所有基于 8051 的達(dá)拉斯半導(dǎo)體微控制器都能夠與支持 SCI 的設(shè)備進(jìn)行通信,即使 SCI 功能未明確列在微控制器的功能列表中。我們所有的微控制器都包含一到三個(gè)8051型UART,可以配置為在大多數(shù)常見(jiàn)的SCI模式下運(yùn)行。
本應(yīng)用筆記介紹如何配置高速微控制器或超高速閃存微控制器的UART,以便與支持SCI的器件通信。它首先簡(jiǎn)要討論了SCI和UART模塊之間的差異,并以一個(gè)實(shí)際示例結(jié)束,說(shuō)明如何配置基于8051的達(dá)拉斯半導(dǎo)體微控制器UART以與SCI模塊通信。提供了一個(gè)代碼示例,演示如何初始化微控制器并執(zhí)行簡(jiǎn)單的測(cè)試以確保設(shè)備正確通信。
SCI的特點(diǎn)
如上所述,SCI是一種高速串行接口。它與基于達(dá)拉斯半導(dǎo)體8051的微控制器上的8051式UART有許多相似之處。以下是 UART 中的 SCI 功能及其對(duì)應(yīng)項(xiàng)的列表。用戶應(yīng)注意,并非所有 SCI 模塊都支持列出的所有功能,因此用戶應(yīng)仔細(xì)閱讀支持 SCI 的器件的數(shù)據(jù)手冊(cè),以了解其使用方式。
特征 | SCI | 達(dá)拉斯半導(dǎo)體UART |
異步模式 | 適用于大多數(shù)實(shí)現(xiàn) | 串行模式 1、2、3 |
同步模式 | 在某些實(shí)現(xiàn)上可用 | 僅串行模式 0 |
字符長(zhǎng)度 | 1 到 9(如果支持可選字符長(zhǎng)度) | 8 或 9 |
平價(jià) | 在某些實(shí)現(xiàn)上可用 | 受 9 位模式下的軟件支持 |
成幀錯(cuò)誤 | 是的 | 是的 |
空閑字符 | 檢測(cè)空閑字符以喚醒設(shè)備。 | UART不能檢測(cè)空閑字符,但UART微處理器通信模式可用于向UART發(fā)出信號(hào),將下一個(gè)字節(jié)視為地址/標(biāo)識(shí)符。 |
中斷字符 | SCI 可以發(fā)送和接收中斷字符 (00h)。 | 可以通過(guò)將串口RX引腳轉(zhuǎn)換為邏輯0來(lái)傳輸中斷字符。收到中斷字符可能會(huì)導(dǎo)致成幀錯(cuò)誤,具體取決于所選字符長(zhǎng)度。 |
例
大多數(shù) SCI 模塊都支持異步通信格式,其中許多是獨(dú)占的。此處的示例演示如何將基于 Dallas Semiconductor 8051 的微控制器配置為與支持 SCI 的設(shè)備進(jìn)行異步通信。在這種情況下,我們將微控制器配置為與配置了以下特征的目標(biāo) SCI 通信:
10位異步模式;1 個(gè)啟動(dòng),8 個(gè)數(shù)據(jù),1 個(gè)停止位
波特率:19200 bps
為了與此設(shè)備通信,我們將做出以下決定來(lái)設(shè)置達(dá)拉斯半導(dǎo)體微控制器:
使用串行端口 0 進(jìn)行通信
外部時(shí)鐘源為 22.1184MHz
串口將配置為10位異步模式;1 個(gè)啟動(dòng),8 個(gè)數(shù)據(jù),1 個(gè)停止位(這是串口模式 1。
波特率發(fā)生器時(shí)鐘源將是自動(dòng)重新加載模式下的定時(shí)器1(定時(shí)器模式2)。
由于所有基于 Dallas Semiconductor 8051 的微控制器定時(shí)器默認(rèn)為原始的 12 分頻工作模式,因此此示例的優(yōu)點(diǎn)是適用于所有達(dá)拉斯半導(dǎo)體器件,無(wú)論內(nèi)核的時(shí)鐘除數(shù)如何。這是因?yàn)镈S5000FP (被12分頻)、DS80C320 (被四分頻)和DS89C450 (被1分頻)都使用相同的串行端口時(shí)序,如果未選擇定時(shí)器的更高速度選項(xiàng)。 有關(guān)UART操作的詳細(xì)信息,請(qǐng)參閱相應(yīng)用戶指南的串行I/O部分。
由于SCI決定了數(shù)據(jù)的格式,因此接下來(lái)必須將達(dá)拉斯半導(dǎo)體微控制器初始化為正確的波特率。8位自動(dòng)重載模式(定時(shí)器模式2)通過(guò)由外部時(shí)鐘源驅(qū)動(dòng)的用戶可選定時(shí)器溢出產(chǎn)生波特率。這為設(shè)計(jì)增加了相當(dāng)大的靈活性并簡(jiǎn)化了開(kāi)發(fā),因?yàn)椴ㄌ芈士梢栽谲浖休p松選擇,允許來(lái)自同一時(shí)鐘源的多個(gè)波特率。確定波特率的公式如下所示:
其中osc_frequency是外部時(shí)鐘源的頻率,單位為MHz,TH1是放置在定時(shí)器8 MSB SFR中的1位重載值,SMOD_0(PCON.7)是串行端口0倍增器使能位?;蛘?,如果波特率和振蕩器頻率已知,則可以使用以下公式求解8位重載數(shù)TH1的值:
假設(shè)外部時(shí)鐘源為22.1184MHz,TH1值為FDh將產(chǎn)生19200的目標(biāo)波特率,并清除倍頻位。有關(guān)波特率選擇的更多信息,請(qǐng)參閱相應(yīng)用戶指南的串行 I/O 部分。
以下簡(jiǎn)短的匯編代碼示例演示如何初始化串行端口 0 以與配置為 10 位異步模式的 SCI 模塊通信,速率為 19200 bps。成功操作后,它將回顯任何收到的字符??梢暂p松刪除此功能,使其成為任何用戶所需的 SCI 通信應(yīng)用程序的通用 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
總結(jié)
達(dá)拉斯半導(dǎo)體基于8051的微控制器中的UART可以很容易地配置為與許多設(shè)備中的SCI模塊接口。這種流行的串行接口可以在多種模式下工作,但最常見(jiàn)的是RS-10通信中使用的11/232位異步模式。允許達(dá)拉斯半導(dǎo)體微控制器連接到SCI模塊可提高整體系統(tǒng)的靈活性,因?yàn)樗鼈兛梢赃B接到更廣泛的嵌入式系統(tǒng)。
雖然此示例側(cè)重于異步工作模式,但達(dá)拉斯半導(dǎo)體微控制器也可以配置為與在同步模式下運(yùn)行的 SCI 接口。SCI 模塊與 8051 UART 的相似性使得該接口能夠以最小的努力完成。有關(guān)同步模式(串行端口模式 0)的詳細(xì)信息,請(qǐng)參閱相應(yīng)用戶指南的串行 I/O 部分。
審核編輯:郭婷
-
微控制器
+關(guān)注
關(guān)注
48文章
7555瀏覽量
151429 -
半導(dǎo)體
+關(guān)注
關(guān)注
334文章
27367瀏覽量
218821 -
uart
+關(guān)注
關(guān)注
22文章
1235瀏覽量
101404
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論