protues 仿真ARM7的串口UART0 5

本人这几天在裸奔ARM程序,遇到了串口UART0,纠结了三四天了,还没见效果,我用的是keil4编译,在PC机上显示HELLOWORLD!下面是程序,万望高手指点,不胜感... 本人这几天在裸奔ARM程序,遇到了串口UART0,纠结了三四天了,还没见效果,我用的是keil4编译,在PC机上显示HELLO WORLD!下面是程序,万望高手指点,不胜感激啊,下面是我写的程序。

#include <lpc21xx.h>
typedef unsigned int uint32;
typedef unsigned char uint8;
void DelayNS(uint32 dly)
{ uint32 i;

for(;dly>0;dly--)
for(i=0;i<50000;i++);
}
void UART0_Ini(void)
{ U0LCR=0x83; //DLAB=1,可设置波特率
U0DLL=0x12;
U0DLM=0x00;
U0LCR=0x03;
}

void UART0_SendByte(uint8 data)
{ U0THR=data; //发送数据
while((U0LSR&0x40)==0); //等待数据发送完毕
{
uint32 i;
for(i=0; i<5; i++);
}
}
void UART0_SendStr(uint8 const *str)
{ while(1)
{ if(*str=='\0')
{UART0_SendByte('\r');
UART0_SendByte('\n');
break;
}
UART0_SendByte(*str++); //发送数据
}
}
char UART0_RecvByte(void)
{ while(!(U0LSR&0x01));
return U0RBR;
}
int main(void)
{ uint8 const SEND_STRING[]="HELLO WORLD!\n";
PINSEL0=0x00000005;
PINSEL1=0x00000000;
UART0_Ini();
UART0_SendStr(SEND_STRING);
DelayNS(10);

while(1)
{
UART0_SendByte(UART0_RecvByte());
}
}
要么什么都不显示,要么显示乱码。
展开
 我来答
ch314156
2011-05-04 · TA获得超过4377个赞
知道小有建树答主
回答量:2036
采纳率:100%
帮助的人:1066万
展开全部
keil4 有软件仿真 仿真能力比proteus真实的多
详细来我空间 你试试我的程序
//*********************************************
//功能: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);
}
//**********************************************************
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式