UART 功能使用方法

UART 功能使用方法
UART 功能使用方法
1
適用產品:
1.1 SM59R16A5/ SM59R09A5/ SM59R05A5/ SM59R16A3/ SM59R09A3/ SM59R05A3
1.2 SM59R16G6/ SM59R09G6/ SM59R05G6
1.3 SM59R04A2/ SM59R04A1/ SM59R03A1/ SM59R02A1
1.4 SM59R16A2/ SM59R08A2
2
UART 差異如下說明:
○
P4UR1
(UART1 function pin assign)
○
P1UR0
(UART0 function pin assign)
×
○
○
○
×
SM59R09A5
○
○
○
×
SM59R09A3
○
○
○
×
SM59R05A5
○
○
○
×
SM59R05A3
○
○
○
×
SM59R16A2
○
○
×
×
SM59R08A2
○
○
×
×
SM59R16G6
○
×
×
○
SM59R09G6
○
×
×
○
SM59R05G6
○
×
×
○
SM59R04A2
○
○
○
×
SM59R04A1
○
×
×
×
SM59R03A1
○
×
×
×
SM59R02A1
○
×
×
×
UART0
UART1
SM59R16A5
○
SM59R16A3
○:表示該型號可以使用此特殊功能
×:表示該型號不可使用此特殊功能
Notice:選用 Package DIP 因沒有 P4,所以無法使用此特殊功能
2.1 SM59R 系列 UART0 和傳統 12T 8051 程序可完全相容(使用 Timer 1),不須修改。
2.2 SM59R 系列大多數皆有雙 UART 功能,有少數系列只提供 UART0 功能,如上表。
2.3 建議使用 UART0 和 UART1 獨立的 10-bit baud-rate generator,可不佔用 MCU 其它資源(例如
Timer 1, 2)。
Specifications subject to change without notice, contact your sales representatives for the most recent information.
ISSFA-0199
1
Ver B 2011/01
UART 功能使用方法
2.4 UART0 鮑率功式選擇(BRS)位置不同,其它用方相同,請參考以下:
2.4.1 SM59R16A5/ SM59R09A5/ SM59R05A5/ SM59R16A3/ SM59R09A3/ SM59R05A3/
SM59R04A2請參考以下:
Mnemonic
Description
Direct
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
RESET
P4IIC
P0KBI
-
DPS
00H
Bit 3
Bit 2
Bit 1
Bit 0
RESET
P2PWM
DPS
00H
Serial interface 0 and 1
AUX
Auxiliary register
91h
BRS
P4CC
P4SPI
P4UR1
2.4.2 SM59R16G6/ SM59R09G6/ SM59R05G6請參考以下:
Mnemonic
Description
Direct
Bit 7
Bit 6
Bit 5
Bit 4
Serial interface 0 and 1
AUX
Auxiliary register
91h
P4SPI
BRS
P4UR0
P4IIC
2.4.3 SM59R16A2/ SM59R08A2請參考以下:
Mnemonic
BRGS
Description
Direct
Bit 7
Baud rate
generator switch
D8h
BRS
Bit 6
Bit 5
Bit 4
Serial interface 0 and 1
-
-
-
Bit 3
Bit 2
Bit 1
Bit 0
RESET
-
-
-
-
00h
各系列 UART 串口鮑率(Baud rate)計算功式,請參考下表:
Device
Device
SM59R16A5/ SM59R09A5/ SM59R05A5/
SM59R16A3/ SM59R09A3/ SM59R05A3/
SM59R16G6/ SM59R09G6/ SM59R05G6
SM59R04A2/ SM59R04A1/ SM59R03A1/
SM59R02A1/ SM59R16A2/ SM59R08A2
T1PS[1:0] is 00
2SMOD × Fclk
Baud Rate =
32 × 12 × (256 − TH1)
BRS = 0
T1PS[1:0] is 01
2SMOD × Fclk
Baud Rate =
32 × (256 − TH1)
2SMOD × FOSC
Baud Rate =
32 ×12 × (256 − TH1)
T1PS[1:0] is 10
2SMOD × Fclk
Baud Rate =
32 × 96 × (256 − TH1)
* T1PS 請參考 SFR PFCON 說明
Specifications subject to change without notice, contact your sales representatives for the most recent information.
ISSFA-0199
2
Ver B 2011/01
UART 功能使用方法
S0RELPS[1:0] is 00
2 SMOD × Fclk
Baud Rate =
64 × 210 − S0REL
(
)
S0RELPS[1:0] is 01
2 SMOD × Fclk
Baud Rate =
32 × (210 − S0REL )
2SMOD × FOSC
Baud Rate =
64 × 210 − S0REL
(
BRS = 1
S0RELPS[1:0] is 10
2 SMOD × Fclk
Baud Rate =
16 × 210 − S0REL
(
S0RELPS[1:0] is 11
2 SMOD × Fclk
Baud Rate =
8 × 210 − S0REL
(
)
)
)
2.4.4 SM59R16G6/ SM59R09G6/ SM59R05G6系列,UART0支援更快速的baud rate,請參考以下:
Mnemonic
PFCON
Description
Direct
Peripheral
Frequency control
register
D9H
Bit 7
Bit 6
Bit 5
Timer 0 and 1
Mnemonic: PFCON
7
6
5
4
S0RELPS[1:0]
-
Bit 4
Bit 3
S0RELPS[1:0]
3
T1PS[1:0]
2
Bit 2
T1PS[1:0]
Bit 1
Bit 0
RESET
T0PS[1:0]
Address: D9H
0
Reset
T0PS[1:0]
00H
1
S0RELPS[1:0]: S0REL Prescaler select
S0RELPS[1:0]
Prescaler
00
Fclk/64
01
Fclk/32
10
Fclk/16
11
Fclk/8
T1PS[1:0]: Timer1 Prescaler select
T1PS[1:0]
Prescaler
00
Fosc/12
01
Fosc
10
Fosc/96
11
reserved
Specifications subject to change without notice, contact your sales representatives for the most recent information.
ISSFA-0199
3
Ver B 2011/01
00H
UART 功能使用方法
2.5 UART0(或 UART1)的 RX 和 TX 提供可指定腳位(pin assign)的功能,避免和其它特殊功能腳位
重複,並提高硬體規劃的相容性。指定腳位只須在程序中設定 P4UR0(或 P4UR1)即可,更可擴展
為多組 UART。
2.5.1 SM59R16A5/ SM59R09A5/ SM59R05A5/ SM59R16A3/ SM59R09A3/ SM59R05A3/
SM59R04A2,請參考以下:
P4UR1: P4UR1 = 0 – Serial interface 1 function on P1 ( RXD1 in P1.2, TXD1 in P1.3 ).
P4UR1 = 1 – Serial interface 1 function on P4 ( RXD1 in P4.2, TXD1 in P4.3 ).
2.5.2 SM59R16G6/ SM59R09G6/ SM59R05G6,請參考以下:
P1UR0: P4UR0 = 0 – Serial interface 1 function on P1 ( RXD0 in P3.0, TXD0 in P3.1).
P4UR0 = 1 – Serial interface 1 function on P4 ( RXD0 in P1.2, TXD0 in P1.3 ).
3
UART 使用概述
鮑率說明:
3.1 使用串口時,系統晶振頻率的誤差須小於 2%,因內部晶振頻率的誤差較大,為避免資料遺失,
系統建議使用外部晶振。
3.2 UART0 鮑率:功能和一般 8051 相同,可使用 Timer1(8-bit)做鮑率產生,另多一組內部鮑率(Baud
rate)產生器(16-bit),鮑率相容更高更準確,可供選用,詳細說明參考 5.1.1 計算公式。
3.3 UART1 鮑率:使用內部鮑率產生器(16-bit)產生,詳細說明參考 5.1.2 計算公式。
硬件說明:
3.4 UART0 有四種操作模式(mode 1~mode 4),使用方式及設定可完全相容傳統 8051,詳細請參考
章節第 6.0 說明。
3.5 UART1 有二種操作模式(mode A 和 mode B) ,請參考章節第 7.0 說明。
3.6 每一組串口分別有獨立的緩衝記憶體,傳送及接收則是共用緩衝記憶體:
‹
UART0 使用S0BUF
‹
UART1 使用S1BUF
當執行資料接收時,必須在前一筆資料完成執行工作以後,否則會造成資料流失(新資料覆蓋舊
資料)的情形;可由傳送旗標(TXIF)和接收旗標(RXIF)判斷前一次的工作狀態是否完成。
3.7 鮑率無論由 Timer(8-bit)或內部鮑率產生器(16-bit)產生,其頻率固定預除 12,不受系統頻率選擇
1T 或 2T 的影響。
4
UART 相關的特殊暫存器 UART Special Function Register (SFR)
Mnemonic
PCON
AUX
S0CON
S0RELL
S0RELH
Bit 6
Bit 3
Bit 2
Bit 1
Bit 0
RESE
T
P4IIC
P0KBI
STOP
-
IDLE
DPS
40h
00H
REN0
TB80
RB80
TI0
RI0
00h
S0REL.5
S0REL.4
S0REL.3
S0REL.2
S0REL.1
S0REL.0
00h
-
-
-
-
S0REL.9
S0REL.8
00h
Description
Direct
Bit 7
Bit 5
Power control
Auxiliary register
Serial Port 0
control register
Serial Port 0
reload register
low byte
Serial Port 0
87h
91h
SMOD
BRS
98h
SM0
SM1
SM20
AAh
S0REL.7
S0REL.6
BAh
-
-
Bit 4
Serial interface 0 and 1
MDUF
P4CC
P4SPI P4UR0
Specifications subject to change without notice, contact your sales representatives for the most recent information.
ISSFA-0199
4
Ver B 2011/01
UART 功能使用方法
S0BUF
S1CON
S1RELL
S1RELH
S1BUF
reload register
high byte
Serial Port 0
data buffer
Serial Port 1
control register
Serial Port 1
reload register
low byte
Serial Port 1
reload register
high byte
Serial Port 1
data buffer
99h
S0BUF[7:0]
00h
9Bh
SM
-
SM21
REN1
TB81
RB81
TI1
RI1
00h
9Dh
S1REL
.7
S1REL
.6
S1REL
.5
S1REL
.4
S1REL
.3
S1REL
.2
S1REL
.1
S1REL
.0
00h
BBh
-
-
-
-
-
-
S1REL
.9
S1REL
.8
00h
9Ch
S1BUF[7:0]
00h
Only for SM59R16A2/ SM59R08A2 used:
Mnemonic
PCON
BRGS
Description
Direct
Bit 7
Power control
Baud rate
generator switch
87h
SMOD
D8h
BRS
Mnemonic: S0CON
7
6
5
SM0
SM1
SM20
Bit 6
Bit 5
Bit 3
Bit 2
Bit 1
Bit 0
RESE
T
-
-
STOP
IDLE
00h
-
-
-
-
-
00h
2
RB80
1
TI0
Bit 4
Serial interface 0 and 1
MDUF
PMW
-
4
REN0
-
3
TB80
Address: 98h
0
Reset
RI0
00h
SM0,SM1: 串口 0(UART0)模式選擇(Serial Port 0 mode selection.)
SM0
SM1
Mode
Description
Board Rate
Baud Rate generate
0
0
0
Shift register
Fosc/12
Fixed
0
1
1
8-bit UART
Variable
Internal baud rate
generator or Timer 1
1
0
2
9-bit UART
Fosc/32 or
Fosc/64
Fixed
1
1
3
9-bit UART
Variable
Internal baud rate
generator or Timer 1
詳細可參考章節 6.說明。
SM20: 多工處理機通訊致能旗標(Enables multiprocessor communication feature.)此功
能只和 UART 串口接收中斷(RI)有關,不影響傳送中斷中(TI),各模式說明如下:
Mode
SM2 功能說明
0
模式 0,SM20 必須為 0。
1
模式 1:RB80 為停止位元(stop bit)
若 SM20=0,無論停止位元為 1 或 0,RI 皆會動作。
若 SM20=1,當停止位元不正確時,RI 則不動作。
2&3
RB80 為資料的第 9 位元(9th-bit)
若 SM20 設定=0:無論第 9 位元為 1 或 0,RI 皆會動作。
若 SM20 設定=1:若第 9 位元=1 則 RI 會動作。
若第 9 位元=0 則 RI 不會動作。
Specifications subject to change without notice, contact your sales representatives for the most recent information.
ISSFA-0199
5
Ver B 2011/01
UART 功能使用方法
REN0: 接收致能旗標:
“1” – 致能。
“0” – 禁能,必須由軟體清除。
TB80: 在傳送模式 2 和模式 3 時,所傳送的資料的第 9 位元(9th-bit)
The 9th transmitted data bit in modes 2 and 3.
Set or cleared by the CPU depending on the function it performs such as
parity check, multiprocessor communication etc.
RB80: 在傳送模式 2 和模式 3 時,所接收的資料的第 9 位元(9th-bit)
在傳送模式 1 時,如果 SM20 為 0,則 RB80 為停止位元(stop bit)
在傳送模式 0 時,RB80 無作用
此位元必須由軟體清除。
TI0: 傳送中斷旗標(Transmit interrupt flag):
在模式 0 時,在第 8 位元結束時,硬體會將它設為 1;
其他模式時,在 stop bit 停止位元的開始時設定為 1。
“1” – 傳送完成由硬體設置。
“0” – 必須由軟體清除。
RI0: 接收中斷旗標(Receive interrupt flag)
在模式 0 時,在第 8 位元結束時,硬體會將它設為 1,
其他模式時,在 stop bit 停止位元的一半的時候由硬體設定
“1” – 接收完成由硬體設置。
“0” – 必須由軟體清除。
須參考 SM20。
Mnemonic: S1CON
7
6
5
SM
SM21
4
REN1
3
TB81
2
RB81
1
TI1
Address: 9Bh
0
Reset
RI1
00h
SM: 串通訊列埠 1(UART1)模式選擇(Serial Port1 mode selection.)
SM
Mode
Description
Baud Rate
Notice
0
A
9-bit UART
Variable
此模式與 UART0 的 Mode
2 和 Mode 3 相似。
1
B
8-bit UART
Variable
此模式與 UART0 的 Mode
1 類似。
詳細可參考章節 7.說明。
SM21: 多工處理機通訊致能位元(Enables multiprocessor communication feature.)
此功能只和串口接收中斷(RI)有關,和傳送中斷(TI)無關,各模式說明如下:
Mode
SM2 功能說明
RB81 為資料的第 9 位元(9th-bit)
若 SM21 設定=0:無論第 9 位元為 1 或 0,RI 皆會動作。
若 SM21 設定=1:若第 9 位元=1 則 RI 會動作。
若第 9 位元=0 則 RI 不會動作。
B
RB81 為停止位元(stop bit)
若 SM21=0:無論停止位元為 1 或 0,RI 皆會動作。
若 SM21=1:當停止位元不正確時,RI 則不動作。
REN1: 接收致能位元:
A
Specifications subject to change without notice, contact your sales representatives for the most recent information.
ISSFA-0199
6
Ver B 2011/01
UART 功能使用方法
“1” – 致能。
“0” – 禁能,必須由軟體清除。
TB81: 在傳送模式 2 和模式 3 時,所傳送的資料的第 9 位元(9th-bit)
The 9th transmitted data bit in mode A. Set or cleared by the CPU depending
on the function it performs such as parity check, multiprocessor
communication etc.
RB81: 在傳送模式 A 時,所接收的資料的第 9 位元(9th-bit)
在傳送模式 B 時,如果 SM21 為 0,則 RB81 為停止位元(stop bit)
此位元必須由軟體清除。
TI1: 傳送中斷旗標(Transmit interrupt flag)
在模式 0 時,在第 8 位元結束時,硬體會將它設為 1。
其他模式時,在 stop bit 停止位元的開始時設定為 1。
“1” – 傳送完成由硬體設置。
“0” – 必須由軟體清除。
RI1: 接收中斷旗標(Receive interrupt flag)
在模式 0 時,在第 8 位元結束時,硬體會將它設為 1,
其他模式時,在 stop bit 停止位元的一半的時候由硬體設定
“1” – 接收完成由硬體設置。
“0” – 必須由軟體清除。
須參考 SM21。
4.1 串口鮑率(Baud rate)計算功式:
4.1.1 Serial interface 0(UART0) modes 1 and 3
(a) When BRS = 0:
Baud Rate =
2SMOD × FOSC
32 ×12 × (256 − TH1)
(b) When BRS = 1:
2SMOD × FOSC
64 × (210 − S0REL)
Baud Rate =
4.1.2 Serial interface 1(UART1) modes A and B
Baud Rate =
5
FOSC
32 × 2 − S1REL
(
10
)
UART0(Serial interface 0)
串口有以下四種操作模式:
SM0
SM1
Mode
Description
Board Rate
Baud Rate generate
0
0
0
Shift register
Fosc/12
Fixed
0
1
1
8-bit UART
Variable
Internal baud rate generator or Timer 1
Specifications subject to change without notice, contact your sales representatives for the most recent information.
ISSFA-0199
7
Ver B 2011/01
UART 功能使用方法
1
0
2
9-bit UART
Fosc/32 or Fosc/64
Fixed
1
1
3
9-bit UART
Variable
Internal baud rate generator or Timer 1
Fosc指crystal或oscillator的振盪頻率。
5.1.1
Mode 0
1. MCU資料輸出或輸入都是利用RXD0為引腳。TXD0為MCU輸出移位時脈(固定為Fosc/12)。
2. 資料為8 bits,由LSB先傳送。
3. 固定鮑率(Baud rate)為Fosc/12。
4. Mode 0初始化由旗標S0CON設定:RI0 = 0 and REN0 = 1。
5. 當傳送資料時:須先以軟體清除S0CON中的REN0=0,執行資料寫入S0BUF指令,則會引發資料傳送
的動作;資料傳送完畢後,MCU會將S0CON中的TI0設定為1,通知中斷產生。
6. 當接收資料時:須先以軟體設定S0CON中的REN0=1,然後執行清除RI位元,串列埠就會依時序進行
接收的工作;資料接收完畢後,MCU會將S0CON中的RI0設定為1,通知中斷產生。
Fig. 9-1: Transmit mode 0 for Serial 0
Fig. 9-2: Receive mode 0 for Serial 0
5.1.2
1.
2.
Mode 1
鮑率(Baud rate),由內部鮑率產生器(SFR S0RELH 及 S0RELL 設定)或 Timer1 來產生。
RXD0 為輸入資料的引腳,TXD0 為輸出資料的引腳。
Specifications subject to change without notice, contact your sales representatives for the most recent information.
ISSFA-0199
8
Ver B 2011/01
UART 功能使用方法
3.
Mode1 沒有使用任何的位移時脈,資料以 10bits 傳輸,分為三部分:
(1) bit[0] a start bit (always 0)
(2) bit[1~8] 8 data bits (LSB first)
4.
(3) bit[9] a stop bit (always 1) (save to RB80, clear by software)
在接收模式中,start bit 與資料傳輸會同時發生,可從 SFR S0BUF 讀取 8 data bits,stop bit 則
存至 SFR S0CON 的 RB80 旗標設置(由軟體清除)。
Fig. 9-3: Transmit mode 1 for Serial 0
Fig. 9-4: Receive mode 1 for Serial 0
5.1.3
Mode 2
此模式與 Mode 1 相似,僅有兩點不相同:
1.
固定的鮑率(Baud rate)有兩種:
(1)
2.
3.
Fosc/12 (SMOD=1)
(2) Fosc/64 (SMOD=0)
資料是以 11bits 傳送或接收,分為四個部分:
(1)
bit[0] a start bit (always 0)
(2)
bit[1~8] 8 data bits (LSB first)
(3)
bit[9] a programmable
(4) bit[10] a stop bit(always 1)
資料 bit[9]可當作同位元檢查位元(parity check bit)
(1) 在傳送模式:SFR S0CON 的 TB80 為傳送資料的第九位元。
(2)
在接收模式:SFR S0CON 的 RB80 為接收資料的第九位元。
Specifications subject to change without notice, contact your sales representatives for the most recent information.
ISSFA-0199
9
Ver B 2011/01
UART 功能使用方法
5.1.4
Mode 3
此模式與 Mode 2 相似,僅有一項不同,即鮑率(Baud rate)可指定由內部鮑率產生器(SFR S0RELH
及 S0RELL 設定)或 Timer1 來產生(與 Mode1 相同)。
Fig. 9-5: Transmit modes 2 and 3 for Serial 0
Fig. 9-6: Receive modes 2 and 3 for Serial 0
6
UART1(Serial interface 1)
串口有以下二種操作模式:
SM
0
1
Mode
A
B
Description
9-bit UART
8-bit UART
Baud Rate
Variable
Variable
6.1 Mode A
6.1.1 此模式與UART0的Mode 2和Mode 3相似。
6.1.2 鮑率(Baud rate),由內部鮑率產生器產生(SFR S1RELH及S1RELL設定)。
6.1.3 數據為11bits傳送或接收,分為四個部分:
(1)
(2)
bit[0] a start bit (always 0)
bit[1~8] 8 data bits (LSB first)
(3)
bit[9] a programmable (TB81 or RB81)
(4)
bit[10] a stop bit(always 1)
Specifications subject to change without notice, contact your sales representatives for the most recent information.
ISSFA-0199
10
Ver B 2011/01
UART 功能使用方法
6.1.4 資料bit[9]可當作同位元檢查位元(parity check bit)
(1) 在傳送模式:SFR S1CON 的 TB81 為傳送資料的第九位元。
(2) 在接收模式:SFR S1CON 的 RB81 為接收資料的第九位元。
Fig. 9-7: Transmit mode A for Serial 1
Fig. 9-8: Receive mode A for Serial 1
6.2 Mode B
6.2.1 此模式與UART0的Mode 1類似。
6.2.2 鮑率(Baud rate),由內部鮑率產生器產生(SFR S1RELH及S1RELL設定)。
6.2.3 RXD0為輸入資料的引腳,TXD0為輸出資料的引腳。
6.2.4 沒有使用任何的位移時脈。
6.2.5 數據為10bits傳輸,分為三部分:
(1) bit[0] a start bit (always 0) 。
(2) bit[1~8] 8 data bits (LSB first) 。
(3) bit[9] a stop bit (always 1) (save to RB80, clear by software) 。
在接收模式中,start bit與資料傳輸會同時發生,8 data bits可從SFR S1BUF讀取,stop bit則存
至SFR S1CON的RB80旗標設置(由軟體清除)。
Fig. 9-9: Transmit mode B for Serial 1
Specifications subject to change without notice, contact your sales representatives for the most recent information.
ISSFA-0199
11
Ver B 2011/01
UART 功能使用方法
Fig. 9-10: Receive mode B for Serial 1
7
以下為 UART 串口中斷應用有關的致能旗標
Interrupt vectors Table
Interrupt Vector
Address
0003h
000Bh
Interrupt Number
*(use Keil C Tool)
0
1
IE1 – External interrupt 1
0013h
2
TF1 – Timer 1 interrupt
001Bh
3
RI0/TI0 – Serial channel 0 interrupt
TF2/EXF2 – Timer 2 interrupt
PWMIF – PWM interrupt
(The SM59R16A2/SM59R08A2 haven’t)
SPIIF – SPI interrupt
0023h
002Bh
4
5
0043h
8
004Bh
9
0053h
005Bh
10
11
0063h
12
006Bh
0083h
13
16
008Bh
17
0093h
18
Interrupt Request Flags
IE0 – External interrupt 0
TF0 – Timer 0 interrupt
ADCIF – A/D converter interrupt
KBIIF – keyboard Interface interrupt
LVIIF – Low Voltage Interrupt
(The SM59R16A2/SM59R08A2 haven’t)
IICIF – IIC interrupt
RI1/TI1 – Serial channel 1 interrupt
RTC/ALARM interrupt
(Only SM59R16A5/SM59R09A5/SM59R05A5 have)
Comparator interrupt
(Only SM59R16A5/SM59R09A5/SM59R05A5 have)
*See Keil C about C51 User’s Guide about Interrupt Function description
Mnemonic
IEN0
IEN1
IEN2
IRCON
IP0
Description
Interrupt Enable
0 register
Interrupt Enable
1 register
Interrupt Enable
2 register
Interrupt request
register
Interrupt priority
level 0
Direct
Bit 7
Bit 6
Bit 5
Interrupt
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
RESET
A8h
EA
-
ET2
ES0
ET1
EX1
ET0
EX0
00h
B8h
EXEN2
-
IEIIC
IELVI
IEKBI
IEADC
IESPI
IEPWM
00h
9Ah
-
-
-
-
-
-
-
ES1
00h
C0H
EXF2
TF2
IICIF
LVIIF
KBIIF
ADCIF
SPIIF
PWMIF
00H
A9h
-
-
IP0.5
IP0.4
IP0.3
IP0.2
IP0.1
IP0.0
00h
Specifications subject to change without notice, contact your sales representatives for the most recent information.
ISSFA-0199
12
Ver B 2011/01
UART 功能使用方法
IP1
Interrupt priority
level 1
B9h
-
-
IP1.5
IP1.4
IP1.3
IP1.2
IP1.1
IP1.0
00h
*如果需要使用中斷程序,可參考以下設置:
void SerialChannel_0(void) interrupt 4
{}
void SerialChannel_1(void) interrupt 16
{}
8
範例程式 Serial Port 1(UART1) TX 及 RX 通訊的範例程式
1.
程式使用雙串口(UART0,UART1),中斷致能,設定 baud rate 115200 bps。
2.
UART0 及 UART1 設定使用 internal baud rate generator。
3.
UART0 及 UART1 通訊協定相同,程序會一直等待接收外部資料,收到資料後會以相同的數
據回傳,例如 RX 收到數據 5Ah,TX 會回傳 5Ah。
Description
Main program
4.
連接 PC COM Port 設定:
4.1.
baud rate=115200bps
4.2.
Data Bits=8
4.3.
No Parity
4.4.
Stop bits=1
//===================================================================
//
//
S Y N C M O S T E C H N O L O G Y
//
//===================================================================
#include "SM59R04A2.h"
#define S0BUF
SBUF
#define S0CON
SCON
#define S0CON_TI
TI
#define S0CON_RI
RI
bit TX_IF0 = 0;
bit TX_IF1 = 0;
bit UART0_toogle = 0;
bit UART1_toogle = 0;
unsigned char RXBUF0 = 0;
unsigned char RXBUF1 = 0;
void UART0_INT(void) interrupt 4
{
if(S0CON_RI)
//UART0_INT_RX
{
UART0_toogle = 1;
RXBUF0 = S0BUF;
S0CON_RI= 0;
//clear UART0 RI
//RX_IF0
= 1;
}
Specifications subject to change without notice, contact your sales representatives for the most recent information.
ISSFA-0199
13
Ver B 2011/01
UART 功能使用方法
else
{
S0CON_TI=0;
TX_IF0 =1;
}
//UART0_INT_TX
//clear UART0 TI
}
void UART1_INT(void) interrupt 16
{
if(S1CON & 0x01)
//UART1_INT_RX
{
UART1_toogle = 1;
RXBUF1 = S1BUF;
S1CON &= 0xFE; //clear UART1 RI
//RX_IF1 = 1;
}
else
{
S1CON &= 0xFD;
TX_IF1 =1;
}
//UART1_INT_TX
//clear UART1 TI
}
void UART0_TX(void)
{
S0BUF = RXBUF0;
while(!TX_IF0);
// confirm INT
//while(!S0CON_TI);
TX_IF0 =0;
}
void UART1_TX(void)
{
S1BUF = RXBUF1;
while(!TX_IF1);
// confirm INT
// while(!(S1CON & 0x02));
TX_IF1 =0;
}
void init_UART0(void)
{
//AUX &= 0x7F;
AUX |= 0x80;
S0RELH/S0RELL(16-bit)
PCON |= 0x80;
S0CON
= 0x50;
S0RELH = 0x03;
S0RELL = 0xFA;
IEN0
|= 0x10;
}
void init_UART1(void)
{
S1CON
= 0xB0;
S1RELH = 0x03;
S1RELL = 0xFA;
IEN2
|= 0x01;
}
void init_MCU(void)
{
IFCON |= 0X80;
IEN0 = 0x80;
// for UART0, set BRS =0, BR ref.to TH1(8-bit)
// for UART0, set BRS =1, BR ref.to
//
//
//
//
//
set SMOD 1
Mode 1 sel / REN Enable / RI&TI Clear
set BR 115200 | External OSC=22.1184MHz
set BR 115200 | External OSC=22.1184MHz
ES0 enbale (serial channel 0 interrupt)
//
//
//
//
Mode B sel / REN Enable / RI&TI Clear
set BR 115200 | External OSC=22.1184MHz
set BR 115200 | External OSC=22.1184MHz
ES1 enbale (serial channel 1 interrupt)
// 1T select
// all Interrupt enable
Specifications subject to change without notice, contact your sales representatives for the most recent information.
ISSFA-0199
14
Ver B 2011/01
UART 功能使用方法
}
void main(void)
{
unsigned int Loop=0;
init_MCU();
init_UART0();
init_UART1();
while(1)
{
if(UART0_toogle)
{
UART0_TX();
UART0_toogle = 0;
}
if(UART1_toogle)
{
UART1_TX();
UART1_toogle = 0;
}
}
}
Specifications subject to change without notice, contact your sales representatives for the most recent information.
ISSFA-0199
15
Ver B 2011/01