📄 uart.lst
字号:
C51 COMPILER V7.07 UART 11/20/2006 17:50:20 PAGE 1
C51 COMPILER V7.07, COMPILATION OF MODULE UART
OBJECT MODULE PLACED IN uart.OBJ
COMPILER INVOKED BY: D:\Program Files\keil\C51\BIN\C51.EXE uart.c LARGE BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /*
2 *
3 * All rights reserved.
4 *
5 * 文件名称:uart.c
6 * 文件标识:uart
7 * 摘 要:串口通讯的函数实现
8 *
9 * 当前版本:
10 * 作 者:
11 * 完成日期:
12 *
13 *
14 */
15
16 /*--------------------------------------------------------------------------
17 uart.c
18
19 c source file for uart Atmel Atmel AT89C51SND1
20 --------------------------------------------------------------------------*/
21
22 #include "REGSND1.H"
23 #include "uart.h"
24
25 #define AT89C51SND1 1 //如果使用的是AT89C51SND1
26
27
28 /*------------------------------------------------------------------------------
29 ------------------------------------------------------------------------------*/
30 char hex[16] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
31
32 /*------------------------------------------------------------------------------
33 初使化串口
34 ------------------------------------------------------------------------------*/
35 void init_uart(int fre)
36 {
37 1 #if AT89C51SND1
38 1 if (fre == 1200)
39 1 {
40 2 TMOD = 0x20;//设置串口工作模式
41 2 TH1 = 0xa9;//晶振为20M,工作波特率为1200时的溢出寄存器值
42 2 TL1 = 0xa9;
43 2 SCON = 0x50;
44 2 PCON = PCON|0x80;
45 2 TR1 = 1;//开串口中断
46 2 }
47 1 #else
#endif
50 1 }
51
52 /*--------------------------------------------------------------------
53 当输出仅为字符串时可使用
54 ---------------------------------------------------------------------*/
55 void printu(char * c)
C51 COMPILER V7.07 UART 11/20/2006 17:50:20 PAGE 2
56 {
57 1
58 1 int i = 0, j = 0;
59 1 char ct = *c;
60 1 init_uart(1200);
61 1 while (ct != '\0')
62 1 {
63 2 #if AT89C51SND1
64 2 SBUF=ct;
65 2 while (!TI);
66 2
67 2 j++;
68 2 TI = 0;
69 2 ct = *(c + j);
70 2
71 2 #endif
72 2 }
73 1
74 1 }
75
76 /*-------------------------------------------------------------------------------
77 当输出为字符串时可使用或含有一控制符时使用,格式符仅用于16进制输出
78 格式控制符为%x,回车控制符为\n,调用此函数的格式如printuf("Song:%x\n",NumofSong);
79 --------------------------------------------------------------------------------*/
80 void printuf(char * c, unsigned char cb)
81 {
82 1 int i = 0;
83 1 char ct = *c;
84 1 char cx1;
85 1 char cx2;
86 1
87 1 init_uart(1200);
88 1 CKCON = 0x0;
89 1
90 1 #if AT89C51SND1
91 1 while (ct != '\0')
92 1 {
93 2 if (ct == '%')
94 2 {
95 3 if (*(c + i + 1) == 'x')
96 3 {
97 4 i += 2;
98 4 cx1 = cb / 16;
99 4 cx2 = cb % 16;
100 4
101 4 SBUF = hex[cx1];
102 4
103 4 while (!TI);
104 4
105 4 TI = 0;
106 4 SBUF = hex[cx2];
107 4
108 4 while (!TI);
109 4
110 4 TI = 0;
111 4 ct = *(c + i);
112 4 continue;
113 4 }
114 3 if (*(c + i + 1) == 'c')
115 3 {
116 4 i += 2;
117 4
C51 COMPILER V7.07 UART 11/20/2006 17:50:20 PAGE 3
118 4 SBUF = cb;
119 4
120 4 while (!TI);
121 4
122 4 TI = 0;
123 4 ct = *(c + i);
124 4 continue;
125 4 }
126 3
127 3 }
128 2 if (ct == '/')
129 2 {
130 3 if(*(c + i + 1) == 'n')
131 3 {
132 4 i += 2;
133 4
134 4 SBUF = 13;
135 4
136 4 while (!TI);
137 4
138 4 TI = 0;
139 4 SBUF = 10;
140 4
141 4 while (!TI);
142 4
143 4 TI = 0;
144 4 ct = *(c + i);
145 4 continue;
146 4 }
147 3 }
148 2 SBUF = ct;
149 2
150 2 while (!TI);
151 2
152 2 TI = 0;
153 2 i++;
154 2 ct = *(c + i);
155 2 }
156 1 CKCON = 0x1;
157 1
158 1 #endif
159 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 + -