📄 uart.c
字号:
/*
* Copyright (c) 2004,北京博创兴业科技有限公司
* All rights reserved.
*
* 文件名称:uart.c
* 文件标识:uart
* 摘 要:串口通讯的函数实现
*
* 当前版本:2.0
* 作 者:Kent
* 完成日期:2004年5月20日
*
* 取代版本:1.1
* 原作者 :Frank
* 完成日期:2003年8月10日
*/
#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'};
/*------------------------------------------------------------------------------
初使化串口
------------------------------------------------------------------------------*/
void init_uart(int fre)
{
#if AT89C51SND1
if (fre == 1200)
{
TMOD = 0x20;
TH1 = 0xa9;
TL1 = 0xa9;
SCON = 0x50;
PCON = PCON | 0x80;
TR1 = 1;
}
#else
#endif
}
/*--------------------------------------------------------------------
当输出仅为字符串时可使用
---------------------------------------------------------------------*/
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
}
}
/*-----------------------------------------------------------------------
当输出为字符串时可使用或含有一控制符时使用,格式符仅用于16进制输出
格式控制符为%x,回车控制符为/n
-----------------------------------------------------------------------*/
void printuf(char * c, unsigned char cb)
{
int i = 0;
char ct = *c;
char cx1;
char cx2;
init_uart(1200);
#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 (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);
}
#endif
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -