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 + -
显示快捷键?