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

📄 uart.c

📁 以c8051f120为主控芯片,AD0采集的8路模拟信号经过简单计算处理通过Uart0发送到计算机。可以通过串口助手观察结果。通道0和1以及片上温度传感器采集的数据经过简单计算处理在Lcd上显示。
💻 C
字号:
/************************************************************************************
*  Copyright (c) 2004,西安铭朗电子科技有限责任公司
*            All rights reserved.
*
* 文件名称: Uart.C
* 文件标识: none
* 适用器件: C8051F120
* 
* 摘 要: 	本文件是串口0、1子程序; Uart驱动程序,包括初始化、使用外部22.1184MHz晶振。
*	  		波特率设置,单字节发送接收、字符串发送接受等。
* 
* 当前版本:1.2
* 作 者:李林利
* 完成日期:2005年6月19日
*
* 历史版本:1.0
* 作 者:卢 阳
* 完成日期:2004年11月14日
*
* 历史版本:0.9 
* 原作者 : 李林利
* 完成日期:2004年1月1日
*************************************************************************************/

/************************************************************************************/
// 引用外部头文件

#include "c8051f120.h"
#include "uart.h"

/************************************************************************************/

/*************************************************************************************
* 函数名称:Uart0_Init;
*
* 函数功能描述:Uart0初始化;
*              
* 输入参数:unsigned char类型,发送数据波特率;
*
* 返回数据:none;
*
* 注意:    具体模式设置查看UART.H文件;
*************************************************************************************/
void Uart0_Init(unsigned long BaudRate)     
{         
	char data SFRPAGE_SAVE = SFRPAGE;// Save Current SFR page

	SFRPAGE  = UART0_PAGE;	// set SFR page 
	SCON0    = 0x52;		// SCON0工作于模式1, 8字节UART TI0预置1
	SSTA0    = 0x1F; 		// 设置Uart0 TX,RX 波特率时钟源为TMR4

	SFRPAGE  = TMR4_PAGE;	// set SFR page
	TMR4CN 	&= ~0x04;       // 关闭定时器Timer4
	EIE2  	&= ~0x04;       // 关闭Timer4中断
	EIP2    &= ~0x04;       // 关闭Timer4中断优先级	 
	EIE2    &= ~0x40;		// 关闭Uart0中断
	EIP2    &= ~0x40;       // 关闭Uart0中断优先级 
	RCAP4H   = (65536-(SYSCLK/(BaudRate*16)))/256;
	RCAP4L   = (65536-(SYSCLK/(BaudRate*16)))%256;
	// 设置定时器Timer4重载值, Uart1_CLK=SYSCLK/2	
	TMR4CF	 = 0x08; 		// clk = SYS_CLK;
    TMR4CN  |= 0x04;        // Uart0时钟源开始工作

	SFRPAGE  = SFRPAGE_SAVE;// Restore SFR page
}

/***********************************************************************************
* 函数名称:Uart0_Enable;
*
* 函数功能描述:Uart0初始化;
*              
* 输入参数:bool类型,打开输入1;关闭输入0;
*
* 返回数据:none;
*
* 注意:    none;
************************************************************************************/
void Uart0_Enable(unsigned char Flag)
{
	char data SFRPAGE_SAVE = SFRPAGE;// Save Current SFR page
	SFRPAGE = SFR_PAGE_0;			// set SFR page 0

	if (Flag)
		TR1	= 1;      				// 打开串口Uart0
	else
        TR1	= 0;;    				// 关闭串口Uart0

    SFRPAGE = SFRPAGE_SAVE; 		// Restore SFR page
}

/***********************************************************************************
* 函数名称:Uart0_SendString;
*
* 函数功能描述:Uart0发送字符串;
*              
* 输入参数: unsigned char类型指针,发送数据;
*
* 返回数据:none;
*
* 注意:    none;
************************************************************************************/
void Uart0_SendString(unsigned char  *pt)
{  
	while(*pt)
	{
		Uart0_SendByte(*pt++);
	}
}

/***********************************************************************************
* 函数名称:Uart0_SendByte;
*
* 函数功能描述:Uart0发送字符;
*              
* 输入参数:unsigned char类型,发送数据;
*
* 返回数据:none;
*
* 注意:    none;
************************************************************************************/
void Uart0_SendByte(unsigned char value)
{
	char data SFRPAGE_SAVE = SFRPAGE;   // Save Current SFR page
	SFRPAGE = SFR_PAGE_0;				// set SFR page 0

	while(!TI0);            			// 等待发送1个字节数据完成
    SBUF0=value;            			// 发送数据到uart0
	TI0=0;  							// 清除中断标志

	SFRPAGE = SFRPAGE_SAVE;          	// Restore SFR page
}

/***********************************************************************************
* 函数名称:Uart0_ReceiveData;
*
* 函数功能描述:Uart0接收数据;
*              
* 输入参数:none;
*
* 返回数据:unsigned char类型,接收数据;
*
* 注意:    none;
************************************************************************************
unsigned char Uart0_ReceiveData(void)
{
	char data SFRPAGE_SAVE = SFRPAGE;   // Save Current SFR page
	SFRPAGE = SFR_PAGE_0;				// set SFR page 0

	if(RI0)
	{
		SCON0&=~0x01;   				// 清除RI1标志位
		return SBUF0;
	}

	SFRPAGE = SFRPAGE_SAVE;          	// Restore SFR page

	return 0xff;
}

/***********************************************************************************
* 函数名称:Uart1_Init;
*
* 函数功能描述:Uart1初始化;
*              
* 输入参数:unsigned char类型,发送数据波特率;
*
* 返回数据:none;
*
* 注意:    none;
************************************************************************************/
void Uart1_Init(unsigned long BaudRate)                               
{   
	char data SFRPAGE_SAVE = SFRPAGE;	// Save Current SFR page
	SFRPAGE = TIMER01_PAGE;				// set SFR page 0
                          
	TR1		=	0;              // 关闭定时器Timer1,串口0停止工作
	ET1		=	0;				// 关闭定时器Timer1中断
	PT1		=	0;              // 关闭定时器Timer1中断优先权
	TMOD	=	(TMOD&0x0F)
				|0x20;          // TMOD: 定时器1模式设置  

	SFRPAGE = UART1_PAGE;		// set SFR page
    SCON1	=	0x52;			// SCON0: 8位Uart 可变波特率 允许接收	

	SFRPAGE = TIMER01_PAGE;		// set SFR page 0
 	if (BaudRate>=172800)
	{
	 	CKCON |= 0x10;                      // 定时器Timer1使用系统时钟作为时间基准
	 	TH1    = -(SYSCLK/(BaudRate*2));    // 设置定时器Timer1重载值
	}
	else if ((BaudRate<172800)&&(BaudRate>=14400))
	{
	 	CKCON = 0x00;           			// 定时器Timer1使用系统时钟作为时间/12基准
	 	TH1    = -(SYSCLK/(BaudRate*2*12)); // 设置定时器Timer1重载值
	}
	else
	{

		CKCON = 0x02;              			// 定时器Timer1使用系统时钟作为时间/48基准
		TH1    = -(SYSCLK/(BaudRate*2*48)); // 设置定时器Timer1重载值
	}
	SFRPAGE = UART1_PAGE;		// set SFR page
	EIE2   &=	~0x40;			// 关闭串口Uart0中断
	EIP2   &=	~0x40;			// 关闭串口中断优先权       				 
    TR1		=	1;				// 打开定时器Timer1,串口0开始工作
	
	SFRPAGE = SFRPAGE_SAVE;     // Restore SFR page
}

/***********************************************************************************
* 函数名称:Uart1_Enable;
*
* 函数功能描述:Uart0初始化;
*              
* 输入参数:bool类型,打开输入1;关闭输入0;
*
* 返回数据:none;
*
* 注意:    none;
************************************************************************************/
void Uart1_Enable(unsigned char Flag)
{
	char data SFRPAGE_SAVE = SFRPAGE;	// Save Current SFR page
	SFRPAGE = TMR4_PAGE;				// set SFR page

	if (Flag)
		TMR4CN |=0x04;      			// 打开Uart1
	else
        TMR4CN &=~0x04;     			// 关闭Uart1

	SFRPAGE = SFRPAGE_SAVE;				// Restore SFR page
}

/***********************************************************************************
* 函数名称: Uart1_SendString;
*
* 函数功能描述:Uart0初始化;
*              
* 输入参数:unsigned char类型指针,发送数据;
*
* 返回数据:none;
*
* 注意:    none;
************************************************************************************/
void Uart1_SendString(unsigned char *pt)
{
	while(*pt)
	{
		Uart1_SendByte(*pt++);
	}
}

/***********************************************************************************
* 函数名称:Uart1_SendByte;
*
* 函数功能描述:Uart0初始化;
*              
* 输入参数:unsigned char类型指针,发送数据;
*
* 返回数据:none;
*
* 注意:    none;
************************************************************************************/
void Uart1_SendByte(unsigned char value)
{
	char data SFRPAGE_SAVE = SFRPAGE;	// Save Current SFR page
	SFRPAGE = UART1_PAGE;				// set SFR page

	while(!(TI1));						// 等待发送1个字节数据完成
	SBUF1=value;  						// 发送数据到uart1
    SCON1&=~0x02;       				// 清除中断标志

	SFRPAGE = SFRPAGE_SAVE;				// Restore SFR page
}

/***********************************************************************************
* 函数名称:Uart1_ReceiveData;
*
* 函数功能描述:Uart0初始化;
*              
* 输入参数:none;
*
* 返回数据:unsigned char类型,接收数据;
*
* 注意:    none;
************************************************************************************
unsigned char Uart1_ReceiveData(void)
{
	char data SFRPAGE_SAVE = SFRPAGE;	// Save Current SFR page
	SFRPAGE = UART1_PAGE;				// set SFR page

	while(RI1)
	{
		SCON1&=~0x01;   				// 清除RI1标志位
		return SBUF1;
	}	

	SFRPAGE = SFRPAGE_SAVE;				// Restore SFR page

	return 0xff;
}

/***********************************************************************************
*文件结束
***********************************************************************************/

⌨️ 快捷键说明

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