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

📄 uart.c

📁 flash_download.C8051中的应用
💻 C
字号:
/************************************************************************************
*  Copyright (c) 2004,西安铭朗电子科技有限责任公司
*            All rights reserved.
*
* 文件名称: Uart.c
* 文件标识: none
* 适用器件: C8051F040
* 
* 摘 要: 本文件是串口0、1子程序;使用外部22.1184MHz晶振. Uart驱动程序,包括初始化、
*	  波特率设置,单字节发送接收、字符串发送接受等。将跳线器JP7、短接。
* 	  使用外部22.1184MHz晶振。
* 
* 当前版本:1.2
* 作 者:张宁强
* 完成日期:2006年1月10日
*
* 历史版本:1.0 
* 原作者 : 李林利 卢阳
* 完成日期:2005年6月1日
*************************************************************************************/

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

#include "c8051F040.h"
#include "const.h"
#include "uart.h"

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

/************************************************************************************
// 常量及全局变量定义
*************************************************************************************/

/************************************************************************************
*  Uart子程序
*************************************************************************************/

/***********************************************************************************
* 函数名称:Uart0_Init;
*
* 函数功能描述:Uart0初始化;
*              
* 输入参数:unsigned char类型,发送数据波特率;
*
* 返回数据:none;
*
* 注意:    none;
************************************************************************************/
void Uart0_Init(unsigned long BaudRate)    //Uart0初始化                             
{   
	char data SFRPAGE_SAVE = SFRPAGE;     // Save Current SFR page
	SFRPAGE = SFR_PAGE_0;// set SFR page 0
 
	 
	 SCON0  = 0x50;                      // SCON0: 模式1, 8位UART, 使能RX
 
	 SSTA0 = 0x1a;					  // // SMOD00 = 1
	 ES0=0;             			  // 关闭串口Uart0中断
	 PS=0;             				  // 关闭串口Uart0中断优先权
	 TI0  = 1;                        // Indicate TX0 ready
     RI0  = 0;                        // Indicate RX0 ready


	 SFRPAGE = SFR_PAGE_1;// set SFR page 1
	 TMR3CN&=~0x04;        // 关闭定时器Timer3
	 RCAP3H =(65536-(SYSCLK/(BaudRate*16)))/256;
	 RCAP3L =(65536-(SYSCLK/(BaudRate*16)))%256;
	 					  // 设置定时器Timer3重载值, Uart1_CLK=SYSCLK
	 TMR3CF=0x08; 		  // clk = SYS_CLK;
	 TMR3CN=0x04; 		  // 工作模式2: TX,RX 波特率模式
	 
	SFRPAGE = SFRPAGE_SAVE;          // Restore SFR page
}

/***********************************************************************************
* 函数名称:Uart0_Enable;
*
* 函数功能描述:Uart0初始化;
*              
* 输入参数:bool类型,打开输入1;关闭输入0;
*
* 返回数据:none;
*
* 注意:    none;
************************************************************************************/

void Uart0_Enable(bool 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

	while(!RI0);
	SCON0&=~0x01;   // 清除RI1标志位
	return SBUF0;
	SFRPAGE = SFRPAGE_SAVE;          // Restore SFR page
}

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

	
	char data SFRPAGE_SAVE = SFRPAGE;     // Save Current SFR page
	SFRPAGE = SFR_PAGE_0;           // set SFR page 0

	TR1=0;                              // 关闭定时器Timer1
	ET1=0;                              // 关闭定时器Timer1中断 
	PT1=0;                              // 关闭定时器Timer1中断优先权
	TMOD&= 0x0f;                        // TMOD: 定时器1, 模式2, 8位重载 
	TMOD|= 0x20;                        // TMOD: 定时器1, 模式2, 8位重载 
 
    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重载值
	}
   
	ES0=0;             				 // 关闭串口Uart0中断
	PS=0;             				 // 关闭串口Uart0中断优先权
    TR1=1;							 // 打开串口Uart1
		
	
	SFRPAGE = SFR_PAGE_1;// set SFR page 1
	SCON1=0x52;		  // SCON0:模式1, 8字节UART, 打开RX, TI1=1,RI1=0
	SFRPAGE = SFRPAGE_SAVE;          // Restore SFR page
}

/***********************************************************************************
* 函数名称:Uart1_Enable;
*
* 函数功能描述:Uart0初始化;
*              
* 输入参数:bool类型,打开输入1;关闭输入0;
*
* 返回数据:none;
*
* 注意:    none;
************************************************************************************/

void Uart1_Enable(bool Flag)
{
	char data SFRPAGE_SAVE = SFRPAGE;     // Save Current SFR page
	SFRPAGE = SFR_PAGE_2;      

	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 = SFR_PAGE_1;      
	
	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 = SFR_PAGE_1;      

	while(!RI1);
	SCON1&=~0x01;   // 清除RI1标志位
	return SBUF1;
	SFRPAGE = SFRPAGE_SAVE;          // Restore SFR page
}

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

⌨️ 快捷键说明

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