📄 putchar.lst
字号:
C51 COMPILER V7.10 PUTCHAR 12/14/2004 00:05:37 PAGE 1
C51 COMPILER V7.10, COMPILATION OF MODULE PUTCHAR
OBJECT MODULE PLACED IN .\PUTCHAR.obj
COMPILER INVOKED BY: C:\Program Files\Keil\C51\BIN\C51.EXE ..\SourceFile\PUTCHAR.C LARGE BROWSE DEBUG OBJECTEXTEND PRINT
-(.\PUTCHAR.lst) OBJECT(.\PUTCHAR.obj)
line level source
1 /***********************************************************************/
2 /* This file is part of the C51 Compiler package */
3 /* Copyright KEIL ELEKTRONIK GmbH 1990 - 2002 */
4 /***********************************************************************/
5 /* */
6 /* PUTCHAR.C: This routine is the general character output of C51. */
7 /* You may add this file to a uVision2 project. */
8 /* */
9 /* To translate this file use C51 with the following invocation: */
10 /* C51 PUTCHAR.C <memory model> */
11 /* */
12 /* To link the modified PUTCHAR.OBJ file to your application use the */
13 /* following Lx51 invocation: */
14 /* Lx51 <your object file list>, PUTCHAR.OBJ <controls> */
15 /* */
16 /***********************************************************************/
17
18 #include <reg51.h>
19
20 #define XON 0x11
21 #define XOFF 0x13
22
23
24 /*
25 * putchar (full version): expands '\n' into CR LF and handles
26 * XON/XOFF (Ctrl+S/Ctrl+Q) protocol
27 */
28 #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)
C51 COMPILER V7.10 PUTCHAR 12/14/2004 00:05:37 PAGE 2
{
RI = 0;
while (!RI);
}
RI = 0;
}
}
while (!TI);
TI = 0;
return (SBUF = c);
}
#endif
67
68
69 #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
98
99 #if 1
100 /******************************************************************************************
101 *函数名: putchar
102 *参数: c
103 *返回值: 无
104 *描述: 为配合UART中断接收而修改的函数,主要修改TI和ES
105 *编写: 王绍伟
106 *版本信息: V1.0 2003年8月15日
107 ******************************************************************************************/
108 char putchar (char c)
109 {
110 1 bit bES;
111 1 bES=ES; /*r暂存ES内容*/
112 1 ES=0; /*r若 想利用TI标志位,就必须先禁止串口中断,否则会冲突*/
113 1 if (c == '\n') /*r如果c为换行*/
114 1 {
115 2 SBUF = 0x0d;
116 2 while(!TI); /*r当TI为0时一直在循环*/
C51 COMPILER V7.10 PUTCHAR 12/14/2004 00:05:37 PAGE 3
117 2 TI=0; /*r当TI为1时跳出循环,再将TI置为0*/
118 2 }
119 1 SBUF = c;
120 1 while(!TI);
121 1 TI=0;
122 1 ES=bES; /*待字符发送完毕后,再恢复串口中断允许*/
123 1 return(1);
124 1 }
125 #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--);
C51 COMPILER V7.10 PUTCHAR 12/14/2004 00:05:37 PAGE 4
_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
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 32 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -