當前位置:首頁 > 單片機 > 單片機
[導讀]總算是整好了~~基于LPC2106的Proteus仿真UART0~~重點就是頻率的設置~~寫程序是小事~~明白其中的PLL才是大事~~后面的程序里面有詳細的介紹~~三、UART三—(02)、向串口發(fā)送字符串(就是發(fā)送_Justin~~哈哈~~)然后就是

總算是整好了~~

基于LPC2106的Proteus仿真UART0~~

重點就是頻率的設置~~

寫程序是小事~~

明白其中的PLL才是大事~~

后面的程序里面有詳細的介紹~~

三、UART

三—(02)、向串口發(fā)送字符串(就是發(fā)送_Justin~~哈哈~~)







然后就是源代碼:

MDK3_1.c

//------------------------------------------------------------------------------
//向串口發(fā)送字符串
//向串口UART0發(fā)送字符串“Designed by: _Justin"
//使用外部晶振12MHz;使用KEIL自帶的啟動代碼Startup.s,里面有關時鐘的設置(下邊有圖~~)
//PLL設置:倍頻系數(shù)M=4,分頻系數(shù)P=2
//當外部晶振頻率為12MHz時,系統(tǒng)時鐘60MHz,外設時鐘15MHz

//順便再介紹一下波特率的除數(shù)計算吧:
//UxDLM、UxDLL=Fpclk/(16*baud)
//UART基本操作如下:
//1)設置I/O連接到UART0
//2)設置串口波特率(U0DLM、U0DLL)
//3)設置穿口工作模式(U0LCR、U0FCR)
//4)發(fā)送或者接收數(shù)據(jù)(U0THR、U0RBR)
//5)檢查串口狀態(tài)字或者等待串口中斷(U0LSR)
//------------------------------------------------------------------------------
#include"lpc210x.h"
#include"delay.h"
#include"macroandconst.h"
#include"bit.h"
//------------------------------------------------------------------------------
#define Fpclk 15000000
#define BAUD 9600
#define THRE 5//線狀態(tài)寄存器第五位,發(fā)送保持寄存器空~~
uchar const send_string[]="Designed by:_Justin";
//------------------------------------------------------------------------------
//端口初始化函數(shù)
void port_init()
{
PINSEL0=0x00000005;//設置I/O口連接到UART0
PINSEL1=0X00000000;
//由于當I/O口設置為第二引腳功能后,I/O口的輸入輸出就不受寄存器控制
//硬件自動控制~~
}
//------------------------------------------------------------------------------
//串口初始化函數(shù)——uart0_init()
//初始化串口0,設置為8位數(shù)據(jù)位,1位停止位,無奇偶校驗,波特率為9600
void uart0_init()
{
uint32 Fdiv;
U0LCR=0X83;//DLAB=1,可以設置波特率;同時設置8位數(shù)據(jù)位
Fdiv=(Fpclk/16)/BAUD;//就是上面的波特率除數(shù)計算公式~~
U0DLM=Fdiv/256;
U0DLL=Fdiv%6;
U0LCR=0X03;//清零DLAB,禁止訪問除數(shù)鎖存~~
}
//------------------------------------------------------------------------------
//向串口發(fā)送字節(jié)函數(shù)——uart0_send_byte()
void uart0_send_byte(uchar dat)
{
U0THR=dat;//向發(fā)送器保持寄存器U0THR寫入數(shù)據(jù),它是UART0 Tx FIFO的最高字節(jié)
//它包含了Tx FIFO中最新的字符,為只寫寄存器,DLAB必須為0

while(GET_BIT(U0LSR,6)==0X00);//等待數(shù)據(jù)發(fā)送完畢

}
//------------------------------------------------------------------------------
//uart0_send_string()
//向串口發(fā)送字符串函數(shù)
void uart0_send_string(uchar const *s)
{
while(1)
{
if(*s=='