原创 LPC2131学习笔记之串口发送(查询方式)

2009-11-17 12:48 2804 4 4 分类: MCU/ 嵌入式

https://static.assets-stash.eet-china.com/album/old-resources/2009/11/17/14ba7b06-17bd-49eb-ae92-0879c56b165d.rar      LPC2131学习笔记之串口发送(查询方式)


                            作者:kgq398


     这里主要说明注意的是,如果是在proteus下面仿真的话,那就需要把波特率设定到9600,很奇怪这是为什么,貌似AVR用115200也不能成功.


  #include "config.h"


#define UART_BPS 9600    // 串口通讯波特率
/*
*********************************************************************************************************
** 函数名称 :UART0_Init()
** 函数功能 :串口初始化,设置为8位数据位,1位停止位,无奇偶校验,波特率115200。
** 入口参数 :无
** 出口参数 :无
*********************************************************************************************************
*/
void UART0_Init (void)
{
 uint16 Fdiv;
 PINSEL0 = (PINSEL0 & (~0x0F)) | 0x05; // 设置I/O连接到UART0,8位数据位,一位停止位
 U0LCR = 0x83;      // DLAB="1",允许设置波特率
 Fdiv  = (Fpclk / 16) / UART_BPS; // 设置波特率
 U0DLM = Fdiv / 256;
 U0DLL = Fdiv % 256;
 U0LCR = 0x03;
}
/*
*********************************************************************************************************
** 函数名称 :UART0_GetByte()
** 函数功能 :从串口接收1字节数据,使用查询方式接收。
** 入口参数 :无
** 出口参数 :接收到的数据
*********************************************************************************************************
*/
uint8 UART0_GetByte (void)
{
 uint8 rcv_dat;
 
 while ((U0LSR & 0x01) == 0);
 rcv_dat = U0RBR;
 
 return (rcv_dat); 
}
/*
*********************************************************************************************************
** 函数名称 :UART0_GetStr()
** 函数功能 :从串口接收
** 入口参数 : s 指向接收数据数组的指针
**    n 接收的个数
** 出口参数 : 无
*********************************************************************************************************
*/
void UART0_GetStr (uint8 *s, uint32 n)
{
 for ( ; n>0; n--)
 {
  *s++ = UART0_GetByte();
 }
}
/*
*********************************************************************************************************
** 函数名称 :UART0_SendByte()
** 函数功能 :向串口发送字节数据,并等待发送完毕,查询方式。
** 入口参数 :dat 要发送的数据
** 出口参数 :无
*********************************************************************************************************
*/
void UART0_SendByte (uint8 dat)
{
 U0THR = dat;
 while ((U0LSR & 0x40) == 0);  // 等待数据发送完毕
}
/*
*********************************************************************************************************
** 函数名称 :UART0_SendStr()
** 函数功能 :向串口发送一字符串
** 入口参数 :str 要发送的字符串的指针
** 出口参数 :无
*********************************************************************************************************
*/
void UART0_SendStr (uint8 const *str)
{
 while (1)
 {
  if (*str == '\0') break;  // 遇到结束符,退出
  UART0_SendByte(*str++);   // 发送数据
 }
}


 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
4
关闭 站长推荐上一条 /3 下一条