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

📄 uart.c

📁 C8051F020单片机AD转换程序
💻 C
字号:
/************************************************************************************
*  Copyright (c) 2004,西安铭朗电子科技有限责任公司
*            All rights reserved.
*
* 文件名称: Uart.C
* 文件标识: none
* 适用器件: C8051F020
* 
* 摘 要:	uart0和uart1工作在8位,可变波特率异步方式下.可修改头文件改变UART工作.
*
* 当前版本:1.1
* 作 者:刘大伟
* 完成日期:2006年12月12日
*
* 历史版本:1.0
* 作 者:卢 阳
* 完成日期:2004年11月14日
*
* 历史版本:0.9 
* 原作者 : 李林利
* 完成日期:2004年7月1日
*************************************************************************************/

/************************************************************************************/
// 引用外部头文件
#include "c8051f020.h"
#include "uart.h"

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

/*************************************************************************************
* 函数名称:Uart0_Init;
*
* 函数功能描述:Uart0初始化;
*              
* 输入参数:unsigned char类型,发送数据波特率;
*
* 返回数据:none;
*
* 注意:    具体模式设置查看UART.H文件;
*************************************************************************************/
void Uart0_Init(unsigned char BaudRate) //Uart0初始化        
{                                    
	TMR1_Stop;                          // 关闭定时器Timer1,串口0停止工作
	TMR1_Uart0App_Set;                  // 关闭定时器Timer1中断,关闭定时器Timer1中断优先权
	T1_MOD_Set;                        	// TMOD: 定时器1模式设置  
    Uart0_Mod_Set;                      // SCON0: 串口工作模式设置
	
	if (BaudRate>=BaudRate_4800)
	{
	 	CKCON |= 0x10;                             // 定时器Timer1使用系统时钟作为时间基准
	 	TH1    = -(SYSCLK/1200/(BaudRate*16));     // 设置定时器Timer1重载值
	}
	else
	{
		CKCON &= ~0x10;                            // 定时器Timer1使用系统时钟作为时间基准
	 	TH1    = -(SYSCLK/1200/(BaudRate*16*12));  // 设置定时器Timer1重载值
	}

	Uart0_Int_Close;		// 关闭串口Uart0中断,中断优先权       				 
	TI0  = 1;				// Indicate TX0 ready
    RI0  = 0;				// Indicate RX0 ready
    TMR1_Start;				// 打开定时器Timer1,串口0开始工作
}

/***********************************************************************************
* 函数名称:Uart0_Enable;
*
* 函数功能描述:Uart0初始化;
*              
* 输入参数:bool类型,打开输入1;关闭输入0;
*
* 返回数据:none;
*
* 注意:    none;
************************************************************************************/
void Uart0_Enable(unsigned char Flag)
{
	if (Flag)
		TMR1_Start;   // 打开串口Uart0
	else
        TMR1_Stop;    // 关闭串口Uart0
}

/***********************************************************************************
* 函数名称: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)
{
	while(!TI0);            // 等待发送1个字节数据完成
    SBUF0=value;            // 发送数据到uart0
	TI0=0;  				// 清除中断标志
}

/***********************************************************************************
* 函数名称:Uart0_ReceiveData;
*
* 函数功能描述:Uart0接收数据;
*              
* 输入参数:none;
*
* 返回数据:unsigned char类型,接收数据;
*
* 注意:    none;
************************************************************************************
unsigned char Uart0_ReceiveData(void)
{
	if(RI0)
	{
		SCON0&=~0x01;   // 清除RI1标志位
		return SBUF0;
	}
	return 0xff;
}

/***********************************************************************************
* 函数名称:Uart1_Init;
*
* 函数功能描述:Uart1初始化;
*              
* 输入参数:unsigned char类型,发送数据波特率;
*
* 返回数据:none;
*
* 注意:    none;
************************************************************************************/
void Uart1_Init(unsigned char BaudRate)    //Uart0初始化                             
{   

	 T4CON&=~0x04;        // 关闭定时器Timer4
	 EIE2&=~0x04;         // 关闭Timer4中断
	 EIP2&=~0x04;         // 关闭Timer4中断优先级
	 
	 T4CON=0x30; 		  // 工作模式2: TX,RX 波特率模式
	 
	 PCON|=0x10;          // 电源控制寄存器, SMOD=1,BaudRate
	 SCON1=0x52;		  // SCON0:模式1, 8字节UART, 打开RX, TI1=1,RI1=0
	
	 CKCON |= 0x40;       // Uart1使用SYSCLK/2作为时间基准
	 
	 RCAP4H =(65536-(SYSCLK/1200/(BaudRate*32)))/256;
	 RCAP4L =(65536-(SYSCLK/1200/(BaudRate*32)))%256;
	 					  // 设置定时器Timer4重载值, Uart1_CLK=SYSCLK/2
		
	 EIE2&=~0x40;         // 关闭Uart1中断
	 EIP2&=~0x40;         // 关闭Uart1中断优先级
	
     T4CON|=0x04;         // 打开Uart1
}

/***********************************************************************************
* 函数名称:Uart1_Enable;
*
* 函数功能描述:Uart0初始化;
*              
* 输入参数:bool类型,打开输入1;关闭输入0;
*
* 返回数据:none;
*
* 注意:    none;
************************************************************************************/
void Uart1_Enable(unsigned char Flag)
{
	if (Flag)
		T4CON|=0x04;      // 打开Uart1
	else
        T4CON&=~0x04;     // 关闭Uart1
}

/***********************************************************************************
* 函数名称: 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)
{
	 while(!(TI1));				// 等待发送1个字节数据完成
	 SBUF1=value;  				// 发送数据到uart1
     SCON1&=~0x02;              // 清除中断标志
}

/***********************************************************************************
* 函数名称:Uart1_ReceiveData;
*
* 函数功能描述:Uart0初始化;
*              
* 输入参数:none;
*
* 返回数据:unsigned char类型,接收数据;
*
* 注意:    none;
************************************************************************************
unsigned char Uart1_ReceiveData(void)
{
	while(RI1)
	{
		SCON1&=~0x01;   // 清除RI1标志位
		return SBUF1;
	}	
	return 0xff;
}

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

⌨️ 快捷键说明

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