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

📄 putchar.c

📁 单片机实现消息队列的例子
💻 C
字号:
/***********************************************************************/
/*  This file is part of the C51 Compiler package                      */
/*  Copyright KEIL ELEKTRONIK GmbH 1990 - 2002                         */
/***********************************************************************/
/*                                                                     */
/*  PUTCHAR.C:  This routine is the general character output of C51.   */
/*  You may add this file to a uVision2 project.                       */
/*                                                                     */
/*  To translate this file use C51 with the following invocation:      */
/*     C51 PUTCHAR.C <memory model>                                    */
/*                                                                     */
/*  To link the modified PUTCHAR.OBJ file to your application use the  */
/*  following Lx51 invocation:                                         */
/*     Lx51 <your object file list>, PUTCHAR.OBJ <controls>            */
/*                                                                     */
/***********************************************************************/

#include <reg51.h>

#define XON  0x11
#define XOFF 0x13


/*
 * putchar (full version):  expands '\n' into CR LF and handles
 *                          XON/XOFF (Ctrl+S/Ctrl+Q) protocol
 */
 #if 0						/*原为此函数*/
 TI=1;
char putchar (char c)  
{
if (c == '\n')  
	{
    	if (RI)  
    		{
      		if (SBUF == XOFF)  
      			{
        		while (SBUF != XON) 
        			{
          			RI = 0;
         			 while (!RI);
        			}
        		RI = 0; 
      			}
    		}
    while (!TI);
    TI = 0;
    SBUF = 0x0d;                         /* output CR  */
  	}
if (RI)  
	{
    	if (SBUF == XOFF)  
    		{
      		while (SBUF != XON)
      			{
       		RI = 0;
        		while (!RI);
      			}
      		RI = 0; 
    		}
  	}
while (!TI);
TI = 0;
return (SBUF = c);
}
#endif


#if 0         /* comment out versions below	老版本,已不用*/

/*
 * putchar (basic version): expands '\n' into CR LF
 */
char putchar (char c)  
{
  if (c == '\n')  
  	{
    	while (!TI);
    	TI = 0;
    	SBUF = 0x0d;                         /* output CR  */
  	}
  while (!TI);
  TI = 0;
  return (SBUF = c);
}


/*
 * putchar (mini version): outputs charcter only
 */
char putchar (char c)  
{
  while (!TI);
  TI = 0;
  return (SBUF = c);
}
#endif

#if 1						
/******************************************************************************************
*函数名:		putchar
*参数:			c
*返回值:		无
*描述:			为配合UART中断接收而修改的函数,主要修改TI和ES
*编写:			王绍伟
*版本信息:		V1.0			2003年8月15日
******************************************************************************************/
char putchar (char c)
{
	bit bES;
	bES=ES;			/*r暂存ES内容*/
	ES=0;			/*r若 想利用TI标志位,就必须先禁止串口中断,否则会冲突*/
	if (c == '\n') 	/*r如果c为换行*/ 	
	{
		SBUF = 0x0d;
		while(!TI);	/*r当TI为0时一直在循环*/
		TI=0;	/*r当TI为1时跳出循环,再将TI置为0*/
	}
	SBUF = c;
	while(!TI);
	TI=0;
	ES=bES;			/*待字符发送完毕后,再恢复串口中断允许*/
	return(1);
}
#else
char putchar (char c)		/*控制PLD输出为57.6K,在6个clock下*/
{

	unsigned char data i;
	unsigned char data j;
	j = c;


	EA = 0;

	UART_OUT = 1;

	UART_OUT = 0;		/*START*/
	i = 3;
	while(i--);
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	_nop_();

	UART_OUT = j >> 0;  	/*D0*/	//35

	i = 3;
	while(i--);
	_nop_();
	_nop_();
	_nop_();

	UART_OUT = j >> 1;  	/*D1*/	//35

	i = 3;
	while(i--);
	_nop_();

	UART_OUT = j >> 2;  	/*D2*/	//34

	i = 3;
	while(i--);
	_nop_();

	UART_OUT = j >> 3;  	/*D3*/	//35

	i = 3;
	while(i--);
	_nop_();
	_nop_();
	_nop_();

	UART_OUT = j >> 4;  	/*D4*/	//35

	i = 3;
	while(i--);
	_nop_();

	UART_OUT = j >> 5;  	/*D5*/	//34

	i = 3;
	while(i--);
	_nop_();

	UART_OUT = j >> 6;  	/*D6*/	//35

	i = 3;
	while(i--);

	UART_OUT = j >> 7;  	/*D7*/	//35

	i = 3;
	while(i--);
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	_nop_();

	UART_OUT = 1;  	/*STOP*/	//35

	delay(10);
	EA =1;
	return(1);

}
#endif

⌨️ 快捷键说明

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