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