Amiccom 51核 Soc Uart 串口使用介紹

SamYang2024-03-1251核110
  • 本篇介紹Amiccom 51核Soc的UART使用(使用mode1)

代碼:

RC_SOC_19_Soc refrence code for UART_9600.zip

  1. 先將P3.0 & P3.1 I/O設定成UART mode & Timer1 use 系統時鐘(Xtal)/4

image.png

	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;

image.png

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. 串列傳輸工作於模式1, 不可接收資料==>SCON=0x40

  2. 設定串列傳輸工作於模式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

image.png

无标题.png

无标题.png

image.png

image.png





  • 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;
    }
}

實測結果

圖片1.png


发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。