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

📄 uart.c

📁 单片机实现MP3播放```程序简单实用
💻 C
字号:

/*********************************************************************************************************
**                                        
**                                  MP3 and U Disk Source Code
**                           Copyright (c) 2005,北京博创兴业科技有限公司
**                                      All Rights Reserved
**                                           V3.00.0
**
**--------------文件信息--------------------------------------------------------------------------------
**文   件   名:	 UART.C
**创   建   人:	 Frank   Wang Xiao Jun
**创 建  日 期:  2003.12
**描        述:  ATMEL AT89C51SND1 串口通讯
**
**--------------历史版本信息----------------------------------------------------------------------------
** 创建人: 	Frank   Wang Xiao Jun
** 版  本:	V1.00.0
** 日 期: 	2003.12
** 描 述:  ATMEL AT89C51SND1 串口通讯
**
**------------------------------------------------------------------------------------------------------
** 修改人:	Kent   Zou Ying
** 版  本:  V2.00.0
** 日 期:	2004. 5
** 描 述:	ATMEL AT89C51SND1 串口通讯
**
**--------------当前版本修订------------------------------------------------------------------------------
** 修改人: 	Phoenix    Hua Yue Guang
** 版  本:  V3.00.0
** 日 期:	2005.3
** 描 述:	ATMEL AT89C51SND1 串口通讯
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/

#include "REGSND1.H"
#include "uart.h"

#define AT89C51SND1 1	                                                  //如果使用的是AT89C51SND1


/*------------------------------------------------------------------------------
------------------------------------------------------------------------------*/
char hex[16]  = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};

/*******************************************************************************************************
** 函数名称:  init_uart
** 功能描述:  串口通讯功能初始化
** 输 入: 	  int fre
** 输 出: 	  无
** 作 者: 
** 日 期: 
**------------------------------------------------------------------------------------------------------
** 修改人: 
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void init_uart(int fre)
{
#if AT89C51SND1 
	if (fre == 1200)
	{
		TMOD = 0x20;                                                      //设置串口工作模式
		TH1  = 0xa9;                                                      //晶振为20M,工作波特率为1200时的溢出寄存器值
		TL1  = 0xa9;
		SCON = 0x50;
		PCON = PCON|0x80;
		TR1  = 1;                                                         //开串口中断
 	}
#else

#endif
}

/*******************************************************************************************************
** 函数名称:  printu
** 功能描述:  通过串口打印字符
** 输 入: 	  char * c  要打印的字符
** 输 出: 	  无
** 作 者: 
** 日 期: 
**------------------------------------------------------------------------------------------------------
** 修改人: 
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void printu(char * c)	
{

    int i = 0, j = 0;
	char ct = *c;
    init_uart(1200);
	while (ct != '\0')
	{
#if AT89C51SND1
		SBUF=ct;
		while (!TI);
		
		j++;
		TI = 0;
		ct = *(c + j);
		
#endif
	}

}

/*******************************************************************************************************
** 函数名称:  printuf
** 功能描述:  通过串口打印16进制数据  功能类似ANSI C中的printf函数
** 输 入: 	  char * c, unsigned char cb
** 输 出: 	  无
** 作 者: 
** 日 期: 
**------------------------------------------------------------------------------------------------------
** 修改人: 
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void printuf(char * c, unsigned char cb) 
{
	int i = 0;
	char ct = *c;
	char cx1;
	char cx2;
    
	init_uart(1200);
	CKCON = 0x0;

#if AT89C51SND1
	while (ct != '\0')
	{
		if (ct == '%')
		{	
			if (*(c + i + 1) == 'x')              
			{
				i += 2;
				cx1 = cb / 16;
				cx2 = cb % 16;

				SBUF = hex[cx1];

				while (!TI);

				TI = 0;
				SBUF = hex[cx2];

				while (!TI);

				TI = 0;
				ct = *(c + i);
				continue;
			}
			if (*(c + i + 1) == 'c')              
			{
				i += 2;

				SBUF = cb;

				while (!TI);

				TI = 0;
				ct = *(c + i);
				continue;
			}
			
		}
		if (ct == '/')
		{
			if(*(c + i + 1) == 'n')
			{
				i += 2;

				SBUF = 13;

				while (!TI);

				TI = 0;
				SBUF = 10;

				while (!TI);

				TI = 0;
				ct = *(c + i);
				continue;
			}
		}
		SBUF = ct;

		while (!TI);

		TI = 0;
		i++;
		ct = *(c + i);
	}
	CKCON = 0x1;

#endif
}

⌨️ 快捷键说明

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