DS89C430和其他高速微控制器具有兩個(gè)相同的串行端口。本應(yīng)用筆記向用戶介紹微控制器中使用的通用異步接收器/發(fā)送器。應(yīng)用筆記討論了波特時(shí)鐘源、中斷模式、波特率生成、異步10位操作和雙串行端口操作。代碼示例重點(diǎn)介紹了如何使用定時(shí)器 1 和定時(shí)器 2 作為串行端口的波特率發(fā)生器。
介紹
DS89C430高速微控制器的串行接口與其他8051處理器的串行接口相同。
本應(yīng)用筆記介紹了該接口最常用的工作模式(10位異步或標(biāo)準(zhǔn)全雙工異步通信模式1)的設(shè)置和操作。將提供港口運(yùn)行的總體概述,特別是模式1操作和波特率生成。將介紹詳細(xì)的軟件示例。示例說明了使用具有不同計(jì)時(shí)器配置的雙串行端口。DS89C430用戶指南和下面的附錄A描述了DS89C430寄存器在系統(tǒng)時(shí)鐘頻率設(shè)置、波特率產(chǎn)生和串行端口操作中涉及的所有寄存器。
波特率生成
每種模式都有一個(gè)與之關(guān)聯(lián)的波特率發(fā)生器。對(duì)于每個(gè) UART,此生成器通常是相同的。幾種波特率生成技術(shù)具有獨(dú)立于兩個(gè)UART的選項(xiàng)。以下波特率描述特定于為模式 1 操作配置的串行端口使用的計(jì)時(shí)器和波特率生成公式。
使用定時(shí)器 1 生成波特率
要使用定時(shí)器1作為波特率發(fā)生器,通常將其置于8位自動(dòng)重新加載模式。這樣,CPU 就不參與波特率生成。請(qǐng)注意,不應(yīng)啟用計(jì)時(shí)器中斷。在 8 位自動(dòng)重新加載模式(定時(shí)器 1、模式 2)中,重新加載值存儲(chǔ)在 TH1 中。因此,定時(shí)器1輸入時(shí)鐘頻率和TH1的組合決定了波特率。定時(shí)器1輸入時(shí)鐘相對(duì)于外部晶體時(shí)鐘,可以通過兩種方式改變:
更改系統(tǒng)時(shí)鐘,或
更改定時(shí)器輸入時(shí)鐘分頻比。
通過使用 PMR 特殊功能寄存器中的時(shí)鐘分頻位 (CD1:0) 來修改系統(tǒng)時(shí)鐘。定時(shí)器1輸入時(shí)鐘分頻比可使用T1M (CKCON.4)和T1MH (CKMOD.4)寄存器位進(jìn)行配置。將 T1MH 位設(shè)置為邏輯 1 會(huì)導(dǎo)致系統(tǒng)時(shí)鐘用于時(shí)鐘定時(shí)器 1。當(dāng) T1MH 清除 (= 0) 時(shí),將 T1M 位設(shè)置為邏輯 1 可為定時(shí)器 4 提供系統(tǒng)時(shí)鐘除以 1 的輸入。當(dāng)T1M和T1MH均為邏輯0時(shí),定時(shí)器1輸入時(shí)鐘固定在振蕩器頻率除以12。使用電源管理模式時(shí),將 T1MH 或 T1M 設(shè)置為邏輯 1 會(huì)導(dǎo)致系統(tǒng)時(shí)鐘 (OSC/1024) 用作定時(shí)器 1 的輸入時(shí)鐘。如果在電源管理模式下兩個(gè)位都為清除 (= 0),則系統(tǒng)時(shí)鐘除以 3 (OSC/3072) 提供給定時(shí)器 1。
表1總結(jié)了每種不同配置的外部晶體頻率與定時(shí)器1輸入時(shí)鐘之間的關(guān)系。
系統(tǒng)時(shí)鐘模式 |
PMR 寄存器位 (4x/2x、CD1、CD0) |
定時(shí)器1輸入時(shí)鐘頻率 | ||
T1MH, T1M = 00 | T1MH, T1M = 01 | T1MH, T1M = 1X | ||
晶體乘法模式 4X | 100 | OSC/12 | OSC/1 | OSC/0.25 |
晶體乘法模式 2X | 000 | OSC/12 | OSC/2 | OSC/0.5 |
除以 1(默認(rèn)值) | X01, X10 | OSC/12 | OSC/4 | OSC/1 |
電源管理模式 (/1024) | X11 | OSC/3072 | OSC/1024 | OSC/1024 |
使用定時(shí)器 1 的波特率公式
表2列出了TH1寄存器的重載值,用于生成一些更常見的波特率。
波特率 | 斯莫德 | 輸入時(shí)鐘頻率(1分頻) | |
TH1 - 重新加載值 | |||
OSC = 11.05MHz | OSC = 22.11MHz | ||
115200 | 0/1 | FD/FA | FA/F4 |
57600 | 0/1 | FA/F4 | F4/E8 |
38400 | 0/1 | F7/EE | 電波/直流電 |
28800 | 0/1 | F4/E8 | E8/D0 |
19200 | 0/1 | 電波/直流電 | 直流/B8 |
14400 | 0/1 | E8/D0 | D0/A0 |
9600 | 0/1 | 直流/B8 | B8/70 |
1200 | 0/1 | 不適用 | 不適用 |
使用定時(shí)器 2 生成波特率
要將定時(shí)器 2 用作串行端口 0 的波特率發(fā)生器,定時(shí)器配置為自動(dòng)重新加載模式。然后,TCLK 或 RCLK 位(或兩者)設(shè)置為邏輯 1。TCLK = 1 選擇定時(shí)器 2 作為發(fā)射器的波特率發(fā)生器;RCLK = 1 為接收器選擇計(jì)時(shí)器 2。因此,串行端口 0 可以通過為一個(gè)數(shù)據(jù)方向選擇定時(shí)器 1,為另一個(gè)數(shù)據(jù)方向選擇定時(shí)器 2,使發(fā)射器和接收器以不同的波特率運(yùn)行。RCLK 和 TCLK 分別位于 T2CON.4 和 TCON.5 中。
雖然定時(shí)器2輸入時(shí)鐘的配置可以類似于定時(shí)器1,但必須將其置于波特率發(fā)生器模式才能由串行端口0使用。將 RCLK 或 TCLK 設(shè)置為邏輯 1 會(huì)選擇定時(shí)器 2 進(jìn)行波特率生成。完成此操作后,定時(shí)器2的輸入時(shí)鐘固定為振蕩器頻率除以2。唯一的例外是當(dāng)定時(shí)器2用于在電源管理模式(PMM)下生成波特率時(shí)。對(duì)于 PMM,系統(tǒng)時(shí)鐘 (OSC/1024) 用作計(jì)時(shí)器 2 的輸入時(shí)鐘。設(shè)置 RCLK 或 TCLK 時(shí),定時(shí)器 2 中斷將自動(dòng)禁用。此外,TF2 (TCON.7) 標(biāo)志未在計(jì)時(shí)器滾動(dòng)更新時(shí)設(shè)置。下表3總結(jié)了各種配置的外部晶體頻率與定時(shí)器2輸入時(shí)鐘之間的關(guān)系。
系統(tǒng)時(shí)鐘模式 |
PMR 寄存器位 (4x/2x、CD1、CD0) |
定時(shí)器2輸入時(shí)鐘頻率 波特率發(fā)生器模式 (RCLK或TCLK = 1) |
晶體乘法模式 4X | 100 | OSC/2 |
晶體乘法模式 2X | 000 | OSC/2 |
除以 1(默認(rèn)值) | X01, X10 | OSC/2 |
電源管理模式 (/1024) | X11 | OSC/1024 |
使用定時(shí)器 2 的波特率公式
表4顯示了RCAP2H和RCAP2L寄存器的重載值,用于生成一些更常見的波特率。
波特率 | 輸入時(shí)鐘頻率(1分頻) | |
RCAP2H/RCAP2L - 重新加載值 | ||
OSC = 11.05MHz | OSC = 22.11MHz | |
115200 | FF/FD | FF/FA |
57600 | FF/FA | FF/F4 |
38400 | FF/F7 | FF/EE |
28800 | FF/F4 | FF/E8 |
19200 | FF/EE | FF/直流 |
14400 | FF/E8 | FF/D0 |
9600 | FF/直流 | FF/B8 |
1200 | 鐵/E0 | FD/C0 |
串行端口初始化
要使用UART函數(shù),必須初始化串行端口。此過程包括選擇模式和時(shí)基,然后初始化波特率發(fā)生器。然后可以使用串行通信。見表5。波特率發(fā)生器運(yùn)行后,UART可以發(fā)送/接收數(shù)據(jù)。大多數(shù)串行端口控制由 SCON0 和 SCON1 寄存器提供。有關(guān)這些寄存器的詳細(xì)位說明,請(qǐng)參考上文引用的DS89C430用戶指南。
SM0 | SM1 | SM2 | 模式 | 功能 | 長(zhǎng)度(位) | 時(shí)期 |
0 | 0 | 0 | 0 | 同步 | 8 | 參見 PMR 寄存器 |
0 | 0 | 1 | 0 | 同步 | 8 | 參見 PMR 寄存器 |
0 | 1 | X | 1 | 異步 | 10 |
定時(shí)器 1 或 2(僅限端口 0) 波特率方程 |
1 | 0 | 0 | 2 | 異步 | 11 | 參見 PMR 寄存器 |
1 | 0 | 1 | 2 | 與多處理器通信異步 | 11 | 參見 PMR 寄存器 |
1 | 1 | 0 | 3 | 異步 | 11 |
定時(shí)器 1 或 2(僅限端口 0) 波特率方程 |
1 | 1 | 1 | 3 | 與多處理器通信異步 | 11 |
定時(shí)器 1 或 2(僅限端口 0) 波特率方程 |
模式 1
如前所述,我們只對(duì)異步模式 1 操作感興趣。此異步模式通常用于與 PC、調(diào)制解調(diào)器和其他類似接口進(jìn)行通信。此模式提供標(biāo)準(zhǔn)的全雙工異步通信??偣矀鬏?10 位,包括 1 個(gè)起始位、8 個(gè)數(shù)據(jù)位和 1 個(gè)停止位。接收到的停止位存儲(chǔ)在相關(guān)SCON寄存器的位位置RB8中。
在模式 1 中,波特率是定時(shí)器溢出的函數(shù)。這使得波特率可由用戶編程。兩個(gè)UART在模式1配置方面存在的一個(gè)區(qū)別是:串行端口1只能使用計(jì)時(shí)器1。相反,串行端口 0 可以使用定時(shí)器 1 或定時(shí)器 2 來生成波特率。如果兩個(gè)串行端口使用相同的計(jì)時(shí)器,則它們以相同的波特率運(yùn)行?;蛘撸粋€(gè)定時(shí)器的運(yùn)行速度可以是另一個(gè)定時(shí)器的兩倍(當(dāng)波特率倍增器位 PCON.7 和 WDCON.7 的配置不同時(shí))。如果兩個(gè)UART使用不同的定時(shí)器,則彼此相關(guān)的波特率配置不會(huì)那么嚴(yán)格。模式 1 的波特率生成在上面定時(shí)器 1 和定時(shí)器 2 的波特率生成部分中進(jìn)行了討論。以下示例提供了更多詳細(xì)信息。
串行通信中斷
每個(gè)UART都可以生成一個(gè)中斷,每個(gè)UART都有自己的中斷使能、向量和優(yōu)先級(jí)。每個(gè)UART中斷都有兩個(gè)標(biāo)志(RI,TI),ISR使用它來確定中斷是來自接收的字還是傳輸?shù)淖帧.?dāng)UART完成字的傳輸時(shí),將設(shè)置TI位并生成中斷(如果啟用)。同樣,UART 設(shè)置 RI 位,并在完全接收到字時(shí)生成中斷。在完全接收或傳輸字之前,不會(huì)通知 CPU?;蛘?,如果啟用了中斷,則這些標(biāo)志中的任何一個(gè)的設(shè)置都會(huì)導(dǎo)致跳轉(zhuǎn)到串行通道的關(guān)聯(lián)中斷向量。DS89C430的中斷向量表見表6。
中斷 | 中斷向量 | 自然秩序 | 中斷標(biāo)志 | 使 | 優(yōu)先級(jí)控制 |
電源故障 | 0033H | 0(最高) | PFI (WDCON.4) | EPFI (WDCON.5) | 不適用 |
外部中斷 0 | 0003H | 1 | IE0 (TCON.1) | EX0 (IE.0) | MPX0 (IP1.0)/LPX0 (IP0.0) |
計(jì)時(shí)器 0 溢出 | 000Bh | 2 | TF0 (TCON.5) | ET0 (IE.1) | MPT0 (IP1.1)/LPT0 (IP0.1) |
外部中斷 1 | 0013H | 3 | IE1 (TCON.3) | EX1 (IE.2) | MPX1 (IP1.2)/LPX1 (IP0.2) |
計(jì)時(shí)器 1 溢出 | 001Bh | 4 | TF1 (TCON.7) | ET1 (IE.3) | MPT1 (IP1.3)/LPT1 (IP0.3) |
串行端口 0 | 0023H | 5 | RI_0 (SCON0.0)/TI_0 (SCON0.1) | ES0 (IE.4) | MPS0 (IP1.4)/LPS0 (IP0.4) |
計(jì)時(shí)器 2 溢出 | 002Bh | 6 | TF2 (T2CON.7)/EXF2 (T2CON.6) | ET2 (IE.5) | MPT2 (IP1.5)/LPT2 (IP0.5) |
串行端口 1 | 003Bh | 7 | RI_1 (SCON1.0)/TI_1 (SCON1.1) | ES1 (IE.6) | MPS1 (IP1.6)/LPS1 (IP0.6) |
外部中斷 2 | 0043H | 8 | IE2 (EXIF.4) | EX2 (EIE.0) | MPX2 (EIP1.0)/LPX2 (EIP0.0) |
外部中斷 3 | 004Bh | 9 | IE3 (EXIF.5) | EX3 (EIE.1) | MPX3 (EIP1.1)/LPX3 (EIP0.1) |
外部中斷 4 | 0053H | 10 | IE4 (EXIF.6) | EX4 (EIE.2) | MPX4 (EIP1.2)/LPX4 (EIP0.2) |
外部中斷 5 | 005Bh | 11 | IE5 (EXIF.7) | EX5 (EIE.3) | MPX5 (EIP1.3)/LPX5 (EIP0.3) |
看門狗中斷 | 0063H | 12 | WDIF (WDCON.3) | EWDI (EIE.4) | MPWDI (EIP1.4)/LPWDI (EIP0.4) |
為了使用Keil?編譯器開發(fā)C代碼,我們需要將DS89C430的中斷向量與其中斷號(hào)相匹配。表 7 顯示了中斷的 Keil C 編譯器編號(hào)。
中斷編號(hào) | 地址 | 中斷編號(hào) | 地址 |
0(外部中斷 0) | 0003H | 16 | 0083H |
1(定時(shí)器/計(jì)數(shù)器 0) | 000Bh | 17 | 008Bh |
2(外部中斷 1) | 0013H | 18 | 0093H |
3(定時(shí)器/計(jì)數(shù)器 1) | 001Bh | 19 | 009Bh |
4(串行端口) | 0023H | 20 | 00A3h |
5(定時(shí)器/計(jì)數(shù)器 2) | 002Bh | 21 | 00ABh |
6 | 0033H | 22 | 00B3小時(shí) |
7 | 003Bh | 23 | 00BBh |
8 | 0043H | 24 | 00C3h |
9 | 004Bh | 25 | 00立方比 |
10 | 0053H | 26 | 00D3h |
11 | 005Bh | 27 | 00分貝 |
12 | 0063H | 28 | 00E3h |
13 | 006Bh | 29 | 00EBh |
14 | 0073H | 30 | 00F3h |
15 | 007Bh | 31 | 00聯(lián)邦小時(shí) |
從表 7 中,串行端口 0 分配了中斷號(hào) 4,串行端口 1 分配了中斷號(hào) 7。
使用 Keil C編譯器創(chuàng)建和編譯 C 應(yīng)用程序
假設(shè)讀者已經(jīng)擁有 Keil C 編譯器。本應(yīng)用筆記解釋了如何使用Keil μVision?工具套件為Maxim的超高速閃存微控制器系列(包括DS89C430)構(gòu)建C應(yīng)用。本文還介紹了使用Maxim微控制器工具包(MTK)應(yīng)用將編譯的應(yīng)用加載到微控制器的過程。DS89C430插入DS89C450評(píng)估(EV)板。有關(guān)該板DIP開關(guān)的設(shè)置和位置,請(qǐng)查看完整的DS89C450數(shù)據(jù)資料。要使用串行端口 1,請(qǐng)將 SW1.6 和 SW1.7 放在 ON 位置。
雙串行端口示例
以下示例演示了DS89C430上兩個(gè)串行端口的使用。它們說明了如何以不同計(jì)時(shí)器生成的不同波特率初始化和使用兩個(gè)串行端口。如前所述,有關(guān)串行端口 0 的許多信息同樣適用于串行端口 1。但是,這些示例將有助于澄清有關(guān)使用串行端口的任何混淆。
在所有示例中,軟件只需將消息輸出到分別連接到端口 0 和端口 1 的終端應(yīng)用程序(此處顯示的 MTK)。然后,軟件等待輸入。當(dāng)任一端子向DS89C430發(fā)送字符時(shí),設(shè)置相關(guān)的RI位。中斷使軟件識(shí)別出此位已設(shè)置。然后,軟件讀取接收到的字符并將其傳輸?shù)絻蓚€(gè)串行端口的傳輸緩沖區(qū)。為了便于說明,字符通過串行端口 0 回顯到終端 0,并在通過串行端口 1 傳輸?shù)浇K端 1 之前增加 1。
在示例中,輸入時(shí)鐘頻率設(shè)置為默認(rèn)值 1 分頻;兩個(gè) SMOD 位被清除;計(jì)時(shí)器的中斷被禁用;定時(shí)器的模式已初始化;并加載計(jì)數(shù)和重新加載寄存器。這完全配置了波特時(shí)鐘生成。將兩個(gè)串行控制寄存器設(shè)置為所需模式后,定時(shí)器啟動(dòng)并開始串行通信。所有軟件應(yīng)用程序示例都包括包含中斷子例程和其他實(shí)用程序函數(shù)的 DualPort.h 頭文件。
結(jié)論
本應(yīng)用筆記展示了使用兩個(gè)標(biāo)準(zhǔn)串行端口在軟件中實(shí)現(xiàn)10位異步UART是多么容易。同樣的技術(shù)可用于實(shí)現(xiàn)超高速閃存系列微控制器中的任何串行端口,包括DS89C430、DS89C450或其他高速8051兼容器件。定時(shí)器的時(shí)鐘倍頻器和可選高速時(shí)鐘會(huì)直接影響串行端口的波特率生成。用戶可以設(shè)置直接由所選定時(shí)器的速度得出的串行端口波特率。不同串口模式的波特率公式請(qǐng)參考DS89C430用戶指南。
審核編輯:郭婷
-
微控制器
+關(guān)注
關(guān)注
48文章
7455瀏覽量
150856 -
定時(shí)器
+關(guān)注
關(guān)注
23文章
3232瀏覽量
114329 -
編譯器
+關(guān)注
關(guān)注
1文章
1617瀏覽量
49015
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論