📄 putchar.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 + -