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

📄 print.c

📁 nrf905开发板:AT89S52单片机与NRF905实现无线通信
💻 C
字号:
/****************************************************************
* print Lite for 51 (#fal)
* printf51简化版(编译后代码体积小)
	void print_init(void);				//串口初始化
	void print_Str(const char*p);		//串口输出字符串
	void print_Char(unsigned char c);	//串口输出单个字符
	void print_Dec(unsigned char n,unsigned char flag);	//n:需要转换的数  flag:是否加回车
	void print_Hex(unsigned char n,unsigned char flag);	//串口输出16进数
* 占用串行口中断
*  http://www.newmsg.com/bbs
****************************************************************/

#include "print.h"
#include "nRF905\nRF905.h"

#ifdef PRINT_USE
	
	char *pUART;	//字符串指针
	unsigned char uRxUART;

	void UART_INT(void) interrupt 4
	{
		if (RI)
		{								//无线串口代码
			uRxUART = SBUF;
			TxRxBuf[0] = 0x01;
			TxRxBuf[1] = uRxUART;
			SetTxMode();
			TxPacket();
			SetRxMode();
P0=P0>>1;
if (P0==0x00) P0=0xff;

			SBUF = uRxUART;
			uRxUART = '\0';
		    pUART=&uRxUART;
			RI = 0;
		}
		else	//TI
		{
			TI=0;	//发送中断标志位(SCON)
			if (*pUART != '\0')
			{
				SBUF = *pUART;
				pUART++;
			}
			else pUART=0;	//不会启动下一次发送
		}
	}
	
	void print_Str(const char*p)
	{
		pUART=p;
		TI=1;
		while (pUART!=0);	//遇到 '\0',输出完毕
	}
	
	#ifdef PRINT_CHAR
	void print_Char(unsigned char c)
	{
		SBUF = c;
		c = '\0';
	    pUART=&c;
		while (pUART!=0);
	}
	#endif
		
	#define DEC_MAX  6
	#ifdef PRINT_DEC
	void print_Dec(unsigned char n,unsigned char flag)	//n:需要转换的数  flag:回车标志符
	{
		unsigned char c[DEC_MAX+1];
		unsigned char i;
		c[DEC_MAX] = '\0';
		i=DEC_MAX-1;
		do
		{
				c[i]=n%10+48;
				i--;
				n=n/10;
		}while (n!=0);
		print_Str(c+i+1);
		print_Str(" ");	
		if (flag!=0) print_Str("\n\r");
	}
	#endif

	#ifdef PRINT_HEX
	void print_Hex(unsigned char n,unsigned char flag)
	{
		unsigned char c[DEC_MAX+1];
		unsigned char i;
		c[DEC_MAX] = '\0';
		i=DEC_MAX-1;
		do
		{
				c[i]= (n&0x0f) >9? (n&0x0f)+87 : (n&0x0f)+48;
				i--;
				n=n>>4;
		}while(n!=0);
		if (i==DEC_MAX-2)
		{
			c[i]='0';
			i--;
		}
		c[i]='x';
		c[i-1]='0';
		print_Str(c+i-1);
		print_Str(" ");	
		if (flag!=0) print_Str("\n\r");
	}
	#endif
	
	
	//<--串口初始化-->	
	void print_init(void)
	{
		SCON = 0x40;	//串行口控制寄存器SCON   工作方式1: 10位UART 以定时器T1作为波特率发生器
		TMOD = 0x21;	//定时/计数控制器 T1:自动重装          T0:16位定时器
		TH1  = 0xfd;	//波特率9600
		TL1  = 0xfd;
		ET1  = 0;		//T1 中断禁用
		ES   = 1;		//串行中断允许
		EA   = 1;		//所有中断允许
		PS	 = 1;		//串口中断高优先
		REN  = 1;
		TR1  = 1;			//T1启动
	}
#endif //PRINT_USE

⌨️ 快捷键说明

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