本應用筆記介紹如何配置高速微控制器或超高速閃存微控制器的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 部分。
審核編輯:郭婷
-
微控制器
+關注
關注
48文章
7496瀏覽量
151085 -
半導體
+關注
關注
334文章
27063瀏覽量
216490 -
uart
+關注
關注
22文章
1228瀏覽量
101198
發布評論請先 登錄
相關推薦
評論