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

📄 uart.c

📁 基于STC51通过GPS自主定位导航FAT文件系统程序
💻 C
字号:
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&串口驱动&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//*文件名称:uart.c

//*文件作用:串口驱动

//*文件作者:翟  鹏

//*创建日期:2004年5月
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&



#include <include.h>



uchar idata uart_fifo[UART_BUFF_SIZE];//接收FIFO
uchar idata  uart_fifo_in=0;//写指针
uchar idata  uart_fifo_out=0;//读指针



//***********************************************************************************************************************
//函数作用:SP2349中断服务程序
//参数说明:无
//注意事项:注意中断号码和优先级设置
//返回说明:无
//***********************************************************************************************************************
static void uart_isr(void) interrupt IRQ_UART //using USE_UART
{
	if(RI)
	{
		uart_fifo[uart_fifo_in++]=SBUF;//接收串口一个字符
		if(uart_fifo_in>=UART_BUFF_SIZE)uart_fifo_in=0;//如果接收缓冲区满	
		RI=0;//清除中断标志
	}
}

//***********************************************************************************************************************
//*函数作用:uart初始化---串口波特率设置 停止位设置
//*参数说明:
//*注意事项:
//*返回说明:无
//***********************************************************************************************************************
void uart_init(ulong baud)
{		
	ES=0;//关中断
	PS=0;//串口中断--低优先级
	SCON=0x58;//串口1方式1 8位数据位 1位停止位

	ET1=0;//关闭timer1中断
	PT1=0;//timer1中断--低优先级
	TR1=0;//关闭timer1
	TMOD|=0x20;//timer1方式2---波特率发生器

	//波特率倍增
	#ifdef DOUBLE_BAUDRATE
	PCON=0x80;//设置波特率倍增寄存器
	baud>>=1;//波特率倍增
	#endif
	TH1=256-((ulong)F_OSC)/32/CLOCK_COUNT/baud;//timer1设置计数初值---TH1=256-F_OSC/32/CLOCK_COUNT/baud
	TL1=256-((ulong)F_OSC)/32/CLOCK_COUNT/baud;//timer1装载初始化值---TL1=256-F_OSC/32/CLOCK_COUNT/baud
	TR1=1;//开启timer1
	
	uart_flush();
	
	ES=1;//开中断
}

//***********************************************************************************************************************
//函数作用:清除串口缓存的数据
//参数说明:无
//注意事项:
//返回说明:无
//***********************************************************************************************************************
void uart_flush(void)
{
	uart_fifo_in=uart_fifo_out=0;
}

//***********************************************************************************************************************
//函数作用:查询串口 如果有数据读取一个字节
//参数说明:ch---读取字符存放地址
//注意事项:
//返回说明:如果有数据返回1
//***********************************************************************************************************************
uchar uart_read_char(uchar *ch)
{
	if(uart_fifo_out==uart_fifo_in)return 0;
	*ch=uart_fifo[uart_fifo_out];//得到当前要读取的字符
	uart_fifo_out++;//指向下一个要读取的字符
	if(uart_fifo_out==UART_BUFF_SIZE)uart_fifo_out=0;//如果到了fifo末尾 则重从头开始
	return 1;
}

//***********************************************************************************************************************
//函数作用:向串口发送一个字符
//参数说明:ch---要发送的字符
//注意事项:
//返回说明:无
//***********************************************************************************************************************
void uart_write_char(uchar ch)
{	
	SBUF=ch;
	while(TI==0);//如果TI=0说明还没有发送完毕---死等
	TI=0;//发送完毕以后--TI清0
}

//***********************************************************************************************************************
//函数作用:向串口发送字符串
//参数说明:str---要发送的字符串
//注意事项:
//返回说明:无
//***********************************************************************************************************************
void uart_write_str(uchar *str)
{
	while(*str)uart_write_char(*str++);
}

//***********************************************************************************************************************
//函数作用:向串口发送缓冲区的数据
//参数说明:
//注意事项:
//返回说明:无
//***********************************************************************************************************************
//void uart_write_buf(uchar *buffer, uint length)
//{	
//	while(length--)
//	{
//		uart_write_char(*buffer++);
//	}
//}


⌨️ 快捷键说明

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