//*********************************************
//功能:LPC2103的UART0演示
//內容:上位機PC以9600的波特率向LPC2103發送壹個字符
// LPC2103再返回該字符
#include<lpc2103.h>
#define Fosc 11059200 //晶振
#define Fcclk Fosc*5 //系統頻率
#define Fpclk Fcclk/4 //PCLK
#define UART_bps 9600 //波特率
#define u8 unsigned char
//以下是函數聲明
void uart_ini(void);
u8 get_char(void);
void put_char(u8);
void put_string(u8*);
int main()
{
u8 zifu;
uart_ini(); //UART初始化
put_string("Please input a char:"); //輸出字符串
while(1)
{
zifu=get_char(); //接收壹個字符
put_string("\nYou have sent:");
put_char(zifu); //發送該字符
}
}
//UART初始化
void uart_ini()
{
unsigned short Fdiv;
APBDIV=0; // Fpclk = Fcclk/4
PINSEL0=0x05; //選擇P0.0和P0.1為TXD0和RXD0
U0LCR=0x80; //除數鎖存訪問位打開
Fdiv=(Fpclk/16)/UART_bps;//波特率bps=(Fpclk/16)/(U0DLM:U0DLL),計算(U0DLM:U0DLL)
U0DLM = Fdiv / 256; //U0DLM放除數高八位
U0DLL = Fdiv % 256; //U0DLL放除數低八位
U0LCR=0x03; //關閉除數鎖存訪問位(這時RBR,THR處於可尋址狀態),並設定壹個字符的位寬為8位
}
//接收壹個字符
u8 get_char()
{
while((U0LSR&0x01)==0); //等待接收完成
return(U0RBR); //返回接收的字符
}
//發送壹個字符
void put_char(u8 byte)
{
U0THR=byte; //發送壹個字符
while((U0LSR&0x40)==0); //等待發送完畢
}
//發送字符串
void put_string(u8 *p)
{
for(;*p!='\0';p++) //如果不是結束符,就發送
put_char(*p);
}
//**********************************************************