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