📄 uart.lst
字号:
C51 COMPILER V7.20 UART 03/21/2007 13:33:18 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE UART
OBJECT MODULE PLACED IN uart.OBJ
COMPILER INVOKED BY: C:\Program Files\keil\C51\BIN\C51.EXE uart.c LARGE BROWSE DEBUG OBJECTEXTEND
line level source
1 /*
2 * Copyright (c) 2004,北京博创兴业科技有限公司
3 * All rights reserved.
4 *
5 * 文件名称:uart.c
6 * 文件标识:uart
7 * 摘 要:串口通讯的函数实现
8 *
9 * 当前版本:2.0
10 * 作 者:Kent
11 * 完成日期:2004年5月20日
12 *
13 * 取代版本:1.1
14 * 原作者 :Frank
15 * 完成日期:2003年8月10日
16 */
17
18 /*--------------------------------------------------------------------------
19 uart.c
20
21 c source file for uart Atmel Atmel AT89C51SND1
22 --------------------------------------------------------------------------*/
23
24 #include "REGSND1.H"
25 #include "uart.h"
26
27 #define AT89C51SND1 1 //如果使用的是AT89C51SND1
28
29
30 /*------------------------------------------------------------------------------
31 ------------------------------------------------------------------------------*/
32 char hex[16] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
33
34 /*------------------------------------------------------------------------------
35 初使化串口
36 ------------------------------------------------------------------------------*/
37 void init_uart(int fre)
38 {
39 1 #if AT89C51SND1
40 1 if (fre == 1200)
41 1 {
42 2 TMOD = 0x20;//设置串口工作模式
43 2 TH1 = 0xa9;//晶振为20M,工作波特率为1200时的溢出寄存器值
44 2 TL1 = 0xa9;
45 2 SCON = 0x50;
46 2 PCON = PCON|0x80;
47 2 TR1 = 1;//开串口中断
48 2 }
49 1 #else
#endif
52 1 }
53
54 /*--------------------------------------------------------------------
55 当输出仅为字符串时可使用
C51 COMPILER V7.20 UART 03/21/2007 13:33:18 PAGE 2
56 ---------------------------------------------------------------------*/
57 void printu(char * c)
58 {
59 1
60 1 int i = 0, j = 0;
61 1 char ct = *c;
62 1 init_uart(1200);
63 1 while (ct != '\0')
64 1 {
65 2 #if AT89C51SND1
66 2 SBUF=ct;
67 2 while (!TI);
68 2
69 2 j++;
70 2 TI = 0;
71 2 ct = *(c + j);
72 2
73 2 #endif
74 2 }
75 1
76 1 }
77
78 /*-------------------------------------------------------------------------------
79 当输出为字符串时可使用或含有一控制符时使用,格式符仅用于16进制输出
80 格式控制符为%x,回车控制符为\n,调用此函数的格式如printuf("Song:%x\n",NumofSong);
81 --------------------------------------------------------------------------------*/
82 void printuf(char * c, unsigned char cb)
83 {
84 1 int i = 0;
85 1 char ct = *c;
86 1 char cx1;
87 1 char cx2;
88 1
89 1 init_uart(1200);
90 1 CKCON = 0x0;
91 1
92 1 #if AT89C51SND1
93 1 while (ct != '\0')
94 1 {
95 2 if (ct == '%')
96 2 {
97 3 if (*(c + i + 1) == 'x')
98 3 {
99 4 i += 2;
100 4 cx1 = cb / 16;
101 4 cx2 = cb % 16;
102 4
103 4 SBUF = hex[cx1];
104 4
105 4 while (!TI);
106 4
107 4 TI = 0;
108 4 SBUF = hex[cx2];
109 4
110 4 while (!TI);
111 4
112 4 TI = 0;
113 4 ct = *(c + i);
114 4 continue;
115 4 }
116 3 if (*(c + i + 1) == 'c')
117 3 {
C51 COMPILER V7.20 UART 03/21/2007 13:33:18 PAGE 3
118 4 i += 2;
119 4
120 4 SBUF = cb;
121 4
122 4 while (!TI);
123 4
124 4 TI = 0;
125 4 ct = *(c + i);
126 4 continue;
127 4 }
128 3
129 3 }
130 2 if (ct == '/')
131 2 {
132 3 if(*(c + i + 1) == 'n')
133 3 {
134 4 i += 2;
135 4
136 4 SBUF = 13;
137 4
138 4 while (!TI);
139 4
140 4 TI = 0;
141 4 SBUF = 10;
142 4
143 4 while (!TI);
144 4
145 4 TI = 0;
146 4 ct = *(c + i);
147 4 continue;
148 4 }
149 3 }
150 2 SBUF = ct;
151 2
152 2 while (!TI);
153 2
154 2 TI = 0;
155 2 i++;
156 2 ct = *(c + i);
157 2 }
158 1 CKCON = 0x1;
159 1
160 1 #endif
161 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 397 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 16 12
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -