ARM7单片机(学习ing)—(三)、UART—02
扫描二维码
随时随地手机看文章
总算是整好了~~
基于LPC2106的Proteus仿真UART0~~
重点就是频率的设置~~
写程序是小事~~
明白其中的PLL才是大事~~
后面的程序里面有详细的介绍~~
三、UART
三—(02)、向串口发送字符串(就是发送_Justin~~哈哈~~)
然后就是源代码:
MDK3_1.c
//------------------------------------------------------------------------------
//向串口发送字符串
//向串口UART0发送字符串“Designed by: _Justin"
//使用外部晶振12MHz;使用KEIL自带的启动代码Startup.s,里面有关时钟的设置(下边有图~~)
//PLL设置:倍频系数M=4,分频系数P=2
//当外部晶振频率为12MHz时,系统时钟60MHz,外设时钟15MHz
//顺便再介绍一下波特率的除数计算吧:
//UxDLM、UxDLL=Fpclk/(16*baud)
//UART基本操作如下:
//1)设置I/O连接到UART0
//2)设置串口波特率(U0DLM、U0DLL)
//3)设置穿口工作模式(U0LCR、U0FCR)
//4)发送或者接收数据(U0THR、U0RBR)
//5)检查串口状态字或者等待串口中断(U0LSR)
//------------------------------------------------------------------------------
#include"lpc210x.h"
#include"delay.h"
#include"macroandconst.h"
#include"bit.h"
//------------------------------------------------------------------------------
#define Fpclk 15000000
#define BAUD 9600
#define THRE 5//线状态寄存器第五位,发送保持寄存器空~~
uchar const send_string[]="Designed by:_Justin";
//------------------------------------------------------------------------------
//端口初始化函数
void port_init()
{
PINSEL0=0x00000005;//设置I/O口连接到UART0
PINSEL1=0X00000000;
//由于当I/O口设置为第二引脚功能后,I/O口的输入输出就不受寄存器控制
//硬件自动控制~~
}
//------------------------------------------------------------------------------
//串口初始化函数——uart0_init()
//初始化串口0,设置为8位数据位,1位停止位,无奇偶校验,波特率为9600
void uart0_init()
{
uint32 Fdiv;
U0LCR=0X83;//DLAB=1,可以设置波特率;同时设置8位数据位
Fdiv=(Fpclk/16)/BAUD;//就是上面的波特率除数计算公式~~
U0DLM=Fdiv/256;
U0DLL=Fdiv%6;
U0LCR=0X03;//清零DLAB,禁止访问除数锁存~~
}
//------------------------------------------------------------------------------
//向串口发送字节函数——uart0_send_byte()
void uart0_send_byte(uchar dat)
{
U0THR=dat;//向发送器保持寄存器U0THR写入数据,它是UART0 Tx FIFO的最高字节
//它包含了Tx FIFO中最新的字符,为只写寄存器,DLAB必须为0
while(GET_BIT(U0LSR,6)==0X00);//等待数据发送完毕
}
//------------------------------------------------------------------------------
//uart0_send_string()
//向串口发送字符串函数
void uart0_send_string(uchar const *s)
{
while(1)
{
if(*s=='