uart.c
来自「基于单片机的32M U盘程序」· C语言 代码 · 共 123 行
C
123 行
#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) //波特率为1200bps
{
TMOD = 0x20; ////下面几句用来产生波特率8-bit Auto-ReloadTimer/Counter using timer 1
TH1 = 0xa9;
TL1 = 0xa9;
SCON = 0x50; //8 BIT UART, BAUD RATE VARIABLE
PCON = PCON | 0x80; //SMOD = 1, Double baud rate bit k=2
TR1 = 1; //Timer 1 run control bit. Set/ckared by softwareto turn Timer/Counter 1 ON/OFF.
}
#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); //Transmit interrupt tlag. Set by hardware at the end of the 8th bit time in mode O,or at the
//beginningof the stop bit in the other modes.Must be cleared by software.
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 + =
减小字号Ctrl + -
显示快捷键?