⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uart_module.c.bak

📁 我写的基于LPC2148的串口的最简单控制台
💻 BAK
字号:
/********************************************************/
/*UART_MODULE.c*/                                        
/********************************************************/
/*	模块:UART_MODULE				  													*/
/*	描述:串口初始化模块																*/
/*	注意:使用前需要先定义串口波特率,如:	            */
/*		//定义串口波特率为115200													*/
/*		#define UART_BPS	115200													*/
/*																											*/
/*  处理器:																						*/
/*  调用函数:																					*/
/*  版本历史:																						*/
/*	V1.0																								*/
/*  作者:																								*/
/*	日期:																								*/
/*	修改原因:																						*/
/********************************************************/

                                                        
#include "config.h"  

/*F_UART0_Init****************************************/
/*  函数名:UART0_Init()															*/
/*  参数:	无																					*/
/*  返回值:无																*/
/*  作用域:																						*/
/*  功能:	初始化串口0				*/
/********************************************************/
void UART0_Init(void)
{
	U0LCR=(ULCR_num|0x80);//设置串口模式并使能访问除数锁存
	U0DLM=UDLM_num;//设置除数锁存器,该值在config.h中预定义
	U0DLL=UDLL_num;
	U0FDR=UFDR_num;	
	U0LCR=ULCR_num;//设置串口模式并禁止访问除数锁存	

	U0FCR=0x01;//使能FIFO,触发点为1个字符
	U0IER=0x01;//允许RBR中断
}                                                         
/* End of F_UART0__Init********************************/
                                                                                                                
/*F_UART0_GetByte****************************************/
/*  函数名:UART0_GetByte()															*/
/*  参数:	无																					*/
/*  返回值:接收到的数据																*/
/*  作用域:																						*/
/*  功能:	从串口接收1字节数据				*/
/********************************************************/

uint8 UART0_GetByte (void)
{
	uint8 rcv_dat=0;
	
	while((U0LSR & 0x01) == 0);//等待有效数据
	rcv_dat = U0RBR;
	
	return (rcv_dat);	
}  	
                                                        
/* End of F_UART0_GetByte********************************/

/*F_UART0_GetStr*****************************************/
/*  函数名:																						*/
/*  参数:	s	指向接收数据数组的指针																						*/
/*					n	接收的个数																			*/
/*  返回值:	无																					*/
/*  作用域:																						*/
/*  功能:	从串口接收																						*/
/********************************************************/
void UART0_GetStr (uint8 *s, uint32 n)
{
	for ( ; n>0; n--)
	{
		*(s++) = UART0_GetByte();
	}
	*(s++) = '\0';
}                                                          
/* End of F_UART0_GetStr*********************************************/

/*F_UART0_SendByte*****************************************************/
/*  函数名:UART0_SendByte()																						*/
/*  参数:	dat	要发送的数据																						*/
/*  返回值:无																						*/
/*  作用域:																						*/
/*  功能:	向串口发送字节数据,并等待发送完毕,查询方式																						*/
/********************************************************/
void UART0_SendByte (uint8 dat)
{
	U0THR = dat;
	while ((U0LSR & 0x40) == 0);		// 等待数据发送完毕
}                                                         
/* End of F_UART0_SendByte*********************************************/

/*F_UART0_SendStr*****************************************************/
/*  函数名:UART0_SendStr()																						*/
/*  参数:	str	要发送的字符串的指针																						*/
/*  返回值:无																						*/
/*  作用域:																						*/
/*  功能:	向串口发送一字符串																						*/
/********************************************************/
 void UART0_SendStr (uint8 const *str)
{
	while (1)
	{
		if (*str == '\0')	break;		// 遇到结束符,退出
		UART0_SendByte(*str++);			// 发送数据
	}
}                                                         
/* End of F_UART0_SendStr*********************************************/

/*
以字节方式接收一个字符串,并保存到静态数组中(收到一个字节,判断命令接收数组是否已满,
未满即判断是否为0x0D或0x0A,是回车符则只存储不回显,既不是回车也不是换行则存储后立刻回显。
直到接收到换行符0x0A,判断存入数组中的上一个接收到的字符是不是0x0D,如果是则将0x0D改为0x00)。
然后判断数组中的字符串是否是预定义的命令,是则执行,不是则回显:
输入命令错误,请重新输入。
*/
__irq void UART0_SERV(void)  
{
	char *ptr;
	uint8 rcv_byte;
	static char cmd_str[10]={0x00};//声明一个静态命令接收数组,可以存放8位字节的命令。cmd_str[0]中存放空字节
	static uint8 str_ptr=1;//命令接受数组cmd_str[]的数组指针,静态变量。
	
	while(U0LSR&1==0x01)
	{
		rcv_byte=UART0_GetByte();//字节接收存储器
		if(str_ptr<10) //判断命令接收数组是否已满
		{
			if(rcv_byte!=0x0D)//判断数据是否为回车符
			{
				cmd_str[str_ptr]=rcv_byte;
				UART0_SendByte(rcv_byte);
				str_ptr++;
				//UART0_SendStr("\r\n");
				//UART0_SendStr("我收到的是");
				//UART0_SendByte(rcv_byte);
				//UART0_SendStr("\r\n");
			}
			else if(rcv_byte==0x0D)//若接收到的字节为回车符,存储不回显
			{
				cmd_str[str_ptr]=0x00;
				//UART0_SendStr("我收到了0D\r\n");
				ptr=&cmd_str[1];
					if(strcmp(ptr,"$YJSZ")==0)
					{
						UART0_SendStr("\r\n");
						UART0_SendStr(">");
						UART0_SendStr("你发送给我的命令是:$YJSZ.");
						UART0_SendStr("请发送给我新的命令\r\n");
						UART0_SendStr(">");
						str_ptr=1;
					}
					else
					{
						UART0_SendStr("命令错误1,请重新输入!");
						UART0_SendStr("\r\n");
						UART0_SendStr(">");
						str_ptr=1;
					}
			}
			
		}
		else//接收数组已满,但还未接收到回车换行符,说明命令错误
		{
			UART0_SendStr("命令错误3,请重新输入!");
			UART0_SendStr("\r\n");
			UART0_SendStr(">");
			str_ptr=1;	
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -