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-0200
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-0200
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-0200
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-0200
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 会动作。
Specifications subject to change without notice, contact your sales representatives for the most recent information.
ISSFA-0200
5
Ver B 2011/01
UART 功能使用方法
若第 9 位=0 则 RI 不会动作。
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 功能说明
th
A
RB81 为数据的第 9 位(9 -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 则不动作。
Specifications subject to change without notice, contact your sales representatives for the most recent information.
ISSFA-0200
6
Ver B 2011/01
UART 功能使用方法
REN1: 接收致能位:
“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 =
2 SMOD × 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-0200
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-0200
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)
(3) bit[9] a stop bit (always 1) (save to RB80, clear by software)
4.
在接收模式中,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) Fosc/12 (SMOD=1)
(2)
2.
3.
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-0200
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) bit[0] a start bit (always 0)
(2) 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-0200
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-0200
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-0200
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-0200
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-0200
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-0200
15
Ver B 2011/01