Amiccom 51核 Soc Uart 串口使用介紹
本篇介紹Amiccom 51核Soc的UART使用(使用mode1)
代碼:
RC_SOC_19_Soc refrence code for UART_9600.zip
先將P3.0 & P3.1 I/O設定成UART mode & Timer1 use 系統時鐘(Xtal)/4
IOSEL = UART0_SEL; //enable UARTIOS=1 CKCON = 0x10; //TM1=system clock/4
2.SCON(串口控制REG ,Addr=0x98h)設定成MODE1
#define UART0_MODE1 0x40 // 8-bits UART SCON = UART0_MODE1;
SM2:在模式2和3時,致能多重CPU通信功能。若SM2 = 1,當接收到的第9位元為0時,RI不被設定,亦即不接收資料。
在模式1時,若SM2等於1,當接收到的「停止位元」不正確時,RI亦不被設定,亦即錯誤資料不接收。
在模式0時,SM2必須清除為0。
REN:0 => RXD接腳不接收資料,如果只需要負責傳送而不收資料,可將此位元設為'0',RXD(P3.0)接腳可做其他用途。
1 => RXD接腳可接收資料。
TB8:在模式2和3時,TB8被當作是傳送的第9個位元,可由軟體設為1或稱除為0
RB8:
TI:傳送完畢旗號,此位元須由軟體清除。
RI:接收完畢旗號,此位元須由軟體清除
此篇只介紹使用mode1,因此SCON設定起來相對簡單
串列傳輸工作於模式1, 不可接收資料==>SCON=0x40
設定串列傳輸工作於模式1, 可接收資料==>SCON=0x50
串口傳輸的波特率是由'TIMER1'的溢位率決定的,通常會將它設在模式2 M[1:0]=10,自動載入的模式,這樣就不用再反覆給予初值,TH1初值的計算方式說明如下
PCON = 0x00; // SMOD = 0 #define TIMER1_8BITSAUTO 0x20 TMOD = TIMER1_8BITSAUTO; TH1 = (256-13); TL1 = (256-13); REN = ENABLE; //表示RX可以接收資料 TR1 = ENABLE; //Timer1 Enable ES = ENABLE; //RI & TI interrupt enable flag EA = ENABLE; //Enable global interrupts
Demo Uart持續發送0xAA,
TXBuf = 0xAA; SBUF = TXBuf; while(1) { while(1); }
UART中斷函數
void ISR_UART (void) interrupt 4 { P0_0 = ~P0_0; if(TI)////判斷TI是否等於1(傳送完畢) { TI = 0;//清除串列傳送完畢旗號 } else { RI = 0; TXBuf++; SBUF = TXBuf; } }
實測結果