0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

使用高速微型的串行端口

星星科技指導員 ? 來源:ADI ? 作者:ADI ? 2023-06-13 14:52 ? 次閱讀

模擬DS80C320和其他高速微控制器具有兩個相同的串行端口。本應用筆記向用戶介紹微控制器中使用的通用同步/異步接收器/發(fā)送器(USART)。應用筆記討論了波特時鐘源、輪詢和中斷模式、波特率生成、異步10位操作和雙串行端口操作。代碼示例用于突出顯示用作波特率生成器的計時器的使用。

介紹

高速微控制器的串行接口在功能上與其他性能較低的8051處理器上的接口相同。它們基于通用同步/異步接收器/發(fā)射器 (USART) 實現(xiàn)。顧名思義,USART 將并行數(shù)據(jù)與同步或異步串行位流相互轉換。器件的并行數(shù)據(jù)側與處理器的內部數(shù)據(jù)總線接口,串行端與外界接口。本應用筆記描述了該接口最常見的工作模式的設置和操作。

由于其普遍適用性,高速微型串行通道最常用的配置是其10位異步模式。在本應用筆記中,將詳細描述此配置。將提供港口操作的一般概述,并提供詳細的軟件示例。還將介紹說明使用雙串行端口和11位地址識別功能的示例。通過這三個示例,將討論串口操作的不同方面。

最常見的串行通信模式是基于異步數(shù)據(jù)傳輸。在這種傳輸模式下,沒有單獨的時鐘信號。圖1所示的經典串行異步數(shù)據(jù)通信格式無需時鐘信號即可提供必要的同步。在這種格式中,8或9個數(shù)據(jù)位伴隨著一個起始位和一個或兩個停止位。第 9 個數(shù)據(jù)位經常用作奇偶校驗位。開始位和停止位提供必要的同步信息。此模式下的串行比特流內容與流行的RS-232協(xié)議兼容。但是,信號電平不是。為了兼容信號電平,必須使用DS232A等電平轉換器將TTL/CMOS電平轉換為RS-232電平。

wKgZomSIF5-AF6j_AAAnfmIZZnA330.png

圖1.異步數(shù)據(jù)格式。

請注意,高速微控制器系列的許多成員具有兩個功能相同的串行端口。隨著新成員添加到處理器家族中,有些成員可能沒有兩個串行端口。有關具體功能,請參閱各個器件的數(shù)據(jù)手冊。本應用筆記將重點介紹單個串行端口(端口0)的使用,但在示例中,所介紹的想法同樣適用于兩個端口。一個示例程序演示了這兩個串行端口的使用。

波特鐘源

雖然本文檔的目的不是討論高速微型內部定時器的細節(jié),但必須對它們進行一些討論,因為它們經常被用作波特率時鐘的來源。高速微型包含三個內部定時器,其中兩個可用作波特率發(fā)生器。以下各節(jié)簡要介紹這些定時器及其最常用于波特率的模式 代。

有關定時器設置的詳細信息將通過下面的軟件示例進行說明。

在這兩個定時器上,自動重新加載模式經常用于波特率生成,因為它不需要處理器的干預。初始化后,定時器自動運行,根據(jù)加載到定時器重加載寄存器中的值生成波特率時鐘。在此模式下,計時器 1 使用 SFR 寄存器 TL1 進行計數(shù),使用 TH1 存儲重新加載值。軟件必須使用所需的重新加載值初始化 TH1,如果第一個時間間隔是正確的,TL1 也必須使用相同的值加載。定時器2使用寄存器TL2和TH2進行計數(shù),并寄存器RCAP2L和RCAP2H用于保存重新加載值。同樣,這些寄存器必須由軟件初始化。啟用后,計時器將根據(jù)所選時鐘源開始計數(shù)。定時器1的時鐘是振蕩器/12或振蕩器/4。對于定時器2,振蕩器/2是波特時鐘生成模式下的唯一可能性。當計數(shù)寄存器從其最大計數(shù)滾動到 0 時,它們將自動重新加載,并帶有重新加載寄存器中的值。除非由軟件修改,否則重新加載值保持不變。每次發(fā)生翻轉時,都會產生一個時鐘脈沖。該時鐘脈沖被串行端口用作波特率時鐘。通過改變重載值,可以實現(xiàn)多種波特率。

輪詢模式與中斷驅動模式

高速微型的串行通道在SFR地址空間中具有指示通道狀態(tài)的標志位。對于每個串行通道,都有一個指示何時接收字符的標志 (RI) 和一個指示何時傳輸字符的標志 (TI)。無論是否啟用關聯(lián)的中斷,都會設置這些標志,因此可以在輪詢操作模式下使用?;蛘撸绻麊⒂昧酥袛?,則這些標志中的任何一個的設置都將導致跳轉到串行通道的關聯(lián)中斷向量。

由于串行中斷是異步的,基于與外部設備的串行通信,大多數(shù)應用將受益于使用中斷驅動的通信方案。這樣,處理器可以在等待接收中斷時完成其他任務。如果使用輪詢方法,則會花費時間不斷檢查標志位以查看是否已設置。本應用筆記的示例說明了這兩種方法。第一個示例演示了典型的中斷驅動操作模式。第二個示例執(zhí)行一組非常結構化的事件,因此它非常適合輪詢操作。

插入中斷字符

中斷字符是通信流中很長的 null。確切的長度因所使用的通信格式而異。軟件可以通過將邏輯 0 寫入相應串行端口的 RX 引腳的端口鎖存位來輕松創(chuàng)建空值。請注意,將 00h 寫入 SBUF0 或 SBUF1 不會達到預期效果,因為數(shù)據(jù)流中使用的開始位和停止位是邏輯 1。在斷字符結束時,軟件只需要將邏輯1寫入相應串行端口的RX引腳的端口鎖存位。

異步 10 位模式示例

異步 10 位工作模式可以說是 8051 系列中最常用的串行通信方法。這是因為此模式與熟悉的RS-232協(xié)議兼容。雖然信號電平不同,但使用簡單的電平轉換器將允許與任何個人計算機的標準串行端口進行通信。事實上,本應用筆記中的所有軟件都使用PC與DS80C320測試板接口進行測試。

此特定串行模式可以使用定時器 1 為串行端口 1 生成波特率,或為串行端口 1 生成定時器 2 或 0。在本例中,定時器2在自動重新加載模式下運行,以生成串行端口0的波特率。

建立定時器的工作模式后,重新加載值必須存儲在重新加載寄存器中。重載寄存器的內容可以使用以下公式計算所需的波特率和振蕩器頻率:

wKgaomSIEi-AEd5vAAAFBcVkHD0113.gif

使用該公式,可以計算出任何所需波特率和振蕩器頻率的重載值。對于本軟件示例,假設振蕩器頻率為 11.0592 MHz。下表顯示了基于該晶體頻率的幾種常見波特率的重載值。應該注意的是,并非每個晶體值都會產生可接受的波特率。如果需要特定的波特率,則在為系統(tǒng)選擇晶體之前,可能需要對上述方程進行一些評估。

波特率 RCAP2H RCAP2L
57600 0FFh 0FAh
9600 0FFh 0直流小時
2400 0FFh 070小時
1200 0飛揚 0E0h

一旦確定了重載值,就必須將其加載到定時器的重載寄存器中,以建立定時器的輸出時鐘頻率。

初始化定時器后,可以根據(jù)需要設置串行端口。要為串行端口 0 建立正確的操作模式,必須正確設置 SCON 寄存器的 SM0 和 SM1 位(地址 098h)。下表顯示了這些位的可能設置和生成的模式。如圖所示,對于 0 位異步操作,SM1 和 SM0(SCON1.0 和 SCON0.0)必須分別設置為 1 和 10。

SM0 SM1 模式 功能 長度 時期
0 0 0 同步 8 位 4/12 噸時鐘
0 1 1 異步 10 位 定時器 1 或 2*
1 0 2 異步 11 位 64/32 噸時鐘
1 1 3 異步 11 位 定時器 1 或 2*
*定時器2僅適用于串行端口0上的波特率生成。

由于串行端口將在中斷驅動模式下運行,因此必須正確設置中斷使能。通過將 ES0(地址 0ACh)和 EA(地址 0AFh)位設置為 1,串行端口 0 將在傳輸字符或接收字符時生成中斷。

作為初始化的最后一步,通過設置位 TR2(地址 0CAh)來啟動計時器。此時,串行通信可能開始。為了傳輸字符,將字符寫入 SBUF(字節(jié)地址 099h),并執(zhí)行其他任務,直到收到中斷(在本例中為緊密循環(huán))。在接收字符時,在發(fā)生中斷之前不需要執(zhí)行任何操作。由于發(fā)送或接收都可能導致跳轉到同一中斷向量,因此中斷服務例程 (ISR) 必須確定哪個是原因。這是通過讀取SCON寄存器的TI(位地址099h)和RI(位地址098h)狀態(tài)位來完成的。如果設置了 TI,則“傳輸完成”會導致中斷。如果設置了 RI,則“接收”會導致中斷。如果傳輸導致中斷,則 TI 位可能被清除并退出 ISR。如果接收導致中斷,則必須清除 RI 位,并且必須從 SBUF 讀取接收的字符。

下面示例 1 的軟件列表說明了實現(xiàn)此串行操作模式的詳細信息。

雙串行端口示例

本例演示DS80C320上兩個串行端口的用法。該示例的主要目的是說明如何初始化和使用第二個端口。如前所述,有關串行端口 0 的許多信息同樣適用于串行端口 1。但是,此示例將有助于澄清有關使用此資源的任何混淆。

在此示例中,端口 1 (TXD1) 的輸出以“環(huán)回”配置連接到其輸入 (RXD1)。編寫該軟件以創(chuàng)建以端口 0 作為輸入和輸出的閉合串行環(huán)。運行終端仿真器的終端或 PC 連接到端口 0 的輸入 (RXD0) 和輸出 (TXD0)。最初,軟件通過端口0向終端輸出三行消息,DS80C320等待輸入。當終端向DS80C320發(fā)送字符時,設置RI位。當軟件識別出此位已設置時,它會讀取接收到的字符并將其傳輸?shù)蕉丝?1 的傳輸緩沖區(qū)。出于說明目的,字符在傳輸之前將轉換為大寫(如果尚未轉換為大寫)。由于端口 1 的輸出與其輸入相關聯(lián),因此傳輸?shù)淖址麜詣舆M入接收緩沖區(qū)。然后,軟件將此字符復制到端口 0 的傳輸緩沖區(qū),從而使其從處理器傳輸出去。最后,字符作為大寫字符到達終端,從而完成循環(huán)。

在此軟件示例中,兩個串行端口都設置為從定時器1生成的波特時鐘運行。定時器設置為自動重新加載模式,計數(shù)和重新加載寄存器加載適當?shù)闹怠6〞r器 1 用于計算重載值的公式與定時器 2 的公式不同,如下所示:

wKgZomSIEjCAYTByAAAEOEFYm1s119.gif

使用上述公式,可以計算所需波特率和振蕩器頻率的重載值??梢钥闯觯剌d值是 2 提高到 SMOD 的冪的函數(shù)。由于 SMOD 可以是 0 或 1,因此該項可以是 1 或 2 (20= 1, 21= 2)。因此,將 SMOD 設置為 1 具有使波特率加倍的效果。同樣,對于本軟件示例,假設振蕩器頻率為11.0592 MHz。下表3顯示了基于該晶體頻率為幾種常見波特率計算的重載值。

波特率 SMOD 重新加載
57600 1 FF
19200 1 FD
9600 0 FD
2400 0 F4
1200 0 E8

如上式所示,重載值是根據(jù) SMOD 波特率倍增器位的設置計算的。如果該位對于所需的波特率為 0,則無需在初始化軟件中清除它 因為這是它的重置默認設置。但是,為清楚起見,示例中包含了清除兩個端口的此位的說明。由于SMOD位不是“位可尋址”的,因此必須寫入整個PCON寄存器。示例代碼顯示了使用單個邏輯指令清除和設置 SMOD 位的指令。程序中未使用的指令被注釋掉。

在該示例中,初始化定時器模式,加載計數(shù)和重新加載寄存器,清除兩個SMOD位,并禁用定時器中斷。這完全配置了波特時鐘生成。將兩個串行控制寄存器設置為所需模式后,定時器啟動,串行通信開始。

此示例處理串行通信的方式與前面的示例所示不同。此示例使用輪詢模式來監(jiān)視串行狀態(tài)。由于此示例的操作更加結構化,因此這種輪詢方法是合適的。傳輸字符的基本函數(shù)是 GETCH 和 PUTCH。這兩個函數(shù)都執(zhí)行一個緊密循環(huán),等待設置適當?shù)臉酥?。當它出現(xiàn)時,程序將繼續(xù)。這通常被認為是浪費時間,但在此應用程序和其他類似應用程序中,輪詢操作是有意義的。

示例 2 的軟件列表說明了實現(xiàn)此串行操作模式的詳細信息。

地址識別示例

本例演示了高速微型串行通道的地址識別功能。此外,它還說明了一種不涉及使用定時器(即 串行模式 2)。

高速微型的地址識別功能經常用于多處理器通信??偩€上的每個處理器都可以分配一個唯一的地址。配置后,處理器將無法識別任何串行通信,除非其地址匹配。有關此工作模式的完整詳細信息,請參閱《高速微控制器用戶指南》。

在此示例中,地址設置為識別控件 C 字符 (03h)。在控件 C 之前接收的任何字符都將被忽略。但是,當收到控件 C 時,會立即打印一個字符串, 在 RXD0 上收到的后續(xù)字符將回顯到 TXD0。

如前所述,圖示的產生波特率的模式不涉及定時器(即串行模式2)。波特率可選,如下式所示:

wKgaomSIEjOAB5CzAAADdLuYhFQ941.gif

從等式中可以看出,如果需要特定的波特率,則這種串行模式的晶體頻率選擇比其他模式受到更多的限制。事實上,產生標準波特率的晶體頻率相對較少。在本例中,假設振蕩器頻率為 7.372 MHz,這將導致速率為 115,200 波特,SMOD 清除為 0??吹?12.0 MHz 的振蕩器將產生 187,500 波特的速率,SMOD 清除為 0 是很常見的。

審核編輯:郭婷

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 微控制器
    +關注

    關注

    48

    文章

    7336

    瀏覽量

    150107
  • 計時器
    +關注

    關注

    1

    文章

    414

    瀏覽量

    32486
  • 發(fā)送器
    +關注

    關注

    1

    文章

    258

    瀏覽量

    26740
收藏 人收藏

    評論

    相關推薦

    利用高速Micro的串行端口

    本應用指南描述了Dallas半導體公司高速微控制器系列串行接口的常見運行模式的設置和操作。
    發(fā)表于 09-23 13:47

    串行端口工作原理

    串行端口工作原理 串行端口工作原理 9針連
    發(fā)表于 07-24 00:21 ?1846次閱讀

    USB 2.0高速端口的ESD保護設計方案

    USB 2.0高速端口的ESD保護設計方案 通用串行總線(USB)高速數(shù)據(jù)應用也十分普遍,用戶在熱插撥任何USB外設時可能會導致ESD事件。此外
    發(fā)表于 04-12 09:19 ?1.3w次閱讀
    USB 2.0<b class='flag-5'>高速</b><b class='flag-5'>端口</b>的ESD保護設計方案

    4端口串行接口資料

    4端口串行接口PDF+源程序,感興趣的小伙伴們可以瞧一瞧。
    發(fā)表于 11-22 11:21 ?0次下載

    使用mxtni的串行端口

    外部串行端口 在使用外部串行端口之前,必須添加必要的硬件。外部串行端口包括五個模塊:DUART、
    發(fā)表于 04-12 11:08 ?6次下載
    使用mxtni的<b class='flag-5'>串行</b><b class='flag-5'>端口</b>

    串行端口完成COM端口和USB虛擬及嵌入式系統(tǒng)端口的應用第二版應用指南

    當通用串行總線(USB)在20世紀90年代末開始使用時,許多人預測串行端口很快就會過時。許多以前使用串行端口的外圍設備都已切換到USB。但是
    發(fā)表于 01-04 15:34 ?0次下載
    <b class='flag-5'>串行</b><b class='flag-5'>端口</b>完成COM<b class='flag-5'>端口</b>和USB虛擬及嵌入式系統(tǒng)<b class='flag-5'>端口</b>的應用第二版應用指南

    并行端口串行端口的區(qū)別在哪里?求解

    串行端口稱為串口,也稱為串行通信接口,即COM端口。
    的頭像 發(fā)表于 06-09 15:34 ?4617次閱讀

    使用MAXQ610微控制器上的串行端口

    MAXQ610微控制器提供兩個標準的USART串行端口。異步模式1是MAXQ610串行端口支持的模式之一,可用于與PC COM端口和許多其他
    的頭像 發(fā)表于 02-20 13:42 ?812次閱讀

    使用高速微型串行端口

    Maxim DS80C320和其他高速微控制器具有兩個相同的串行端口。本應用筆記向用戶介紹微控制器中使用的通用同步/異步接收器/發(fā)送器(USART)。應用筆記討論了波特時鐘源、輪詢和中斷模式、波特率生成、異步10位操作和雙
    的頭像 發(fā)表于 02-21 10:17 ?807次閱讀
    使用<b class='flag-5'>高速</b><b class='flag-5'>微型</b>的<b class='flag-5'>串行</b><b class='flag-5'>端口</b>

    使用雙數(shù)據(jù)指針實現(xiàn)串行端口FIFO

    Dallas Semiconductor高速微控制器系列允許系統(tǒng)設計人員通過內部UART優(yōu)化串行通信。本應用筆記演示了如何利用這些增強型8051微控制器中的雙數(shù)據(jù)指針使用循環(huán)緩沖器。提供的示例匯編代碼用于顯示簡單的 256 字節(jié)串行
    的頭像 發(fā)表于 02-21 16:06 ?755次閱讀
    使用雙數(shù)據(jù)指針實現(xiàn)<b class='flag-5'>串行</b><b class='flag-5'>端口</b>FIFO

    使用MxTNI的串行端口

    許多設備使用串行端口作為與其他電子設備通信的手段 - 從個人計算機和調制解調器等非常著名的示例到制造和工業(yè)自動化設備。事實上,對于許多人來說,串行端口提供了與外界通信的唯一機制。這些設
    的頭像 發(fā)表于 03-01 16:41 ?708次閱讀
    使用MxTNI的<b class='flag-5'>串行</b><b class='flag-5'>端口</b>

    在設計中擴展串行端口的入門知識

    ? ? 即使USB出現(xiàn),串行端口也不會消亡。對于術語“串行端口”,我們通常指的是或多或少符合RS-232 標準或相應的TTL 信號的硬件。 ? ?? 串口 在軟硬件集成初期易于調試。即
    的頭像 發(fā)表于 08-18 17:25 ?481次閱讀

    在設計中擴展串行端口的入門知識分享

    即使USB出現(xiàn),串行端口也不會消亡。對于術語“串行端口”,我們通常指的是或多或少符合RS-232 標準或相應的TTL 信號的硬件。
    的頭像 發(fā)表于 08-18 17:24 ?1381次閱讀
    在設計中擴展<b class='flag-5'>串行</b><b class='flag-5'>端口</b>的入門知識分享

    什么是串行端口?有哪幾種分類?

    什么是串行端口?有哪幾種分類? 串行端口是計算機中用于進行數(shù)據(jù)傳輸?shù)囊环N接口類型,通過單一的數(shù)據(jù)線逐位地傳輸數(shù)據(jù)。與串行
    的頭像 發(fā)表于 02-02 15:40 ?1535次閱讀

    在嵌入式設計中擴展串行端口的入門知識

    大多數(shù)嵌入式系統(tǒng)都至少提供兩個串口。然而,有些系統(tǒng)需要更多。因此,這需要以某種方式擴展串行端口的數(shù)量。設計人員可用的一些選擇包括 USB 到串行端口、I2C 到
    發(fā)表于 05-03 09:30 ?169次閱讀
    在嵌入式設計中擴展<b class='flag-5'>串行</b><b class='flag-5'>端口</b>的入門知識