📄 uart.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 + -