?? uart.lst
字號:
C51 COMPILER V8.02 UART 03/20/2008 16:38:57 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE UART
OBJECT MODULE PLACED IN uart.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE uart.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*
2 * Copyright (c) 2006,北京航空航天大學光電研究所
3 * All rights reserved.
4 *
5 * 文件名稱:uart.h
6 * 文件標識:uart
7 * 摘 要:串口通訊的相關定義
8 *
9 * 當前版本:1.0
10 * 作 者:jyduan
11 * 完成日期:2006年3月日
12 *
13 * 取代版本:
14 * 原作者 :
15 * 完成日期:
16 */
17
18 /*--------------------------------------------------------------------------
19 uart.c
20
21 c source file for uart Atmel Atmel AT89S52
22 --------------------------------------------------------------------------*/
23
24 #include "REGX52.H"
25 #include "uart.h"
26 #include "intrins.h"
27
28 #define AT89S52 1 //如果使用的是AT89S52
29 //#define unsigned char uchar
30
31 void init_uart(int fre);
32 //void SerialOut(unsigned char sdata);
33
34 /*------------------------------------------------------------------------------
35 ------------------------------------------------------------------------------*/
36 char hex[16] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
37
38 /*------------------------------------------------------------------------------
39 初使化串口
40 ------------------------------------------------------------------------------*/
41 void init_uart(int fre)
42 {
43 1 #if AT89S52
44 1 if (fre == 1200)
45 1 {
46 2 TMOD = 0x20;//0010 0000 T/c方式2 8 bit auto-loaded pattern
47 2 TH1 = 0xa9;//初值a9 20M晶振 1200波特率時
48 2 TL1 = 0xa9;//
49 2 SCON = 0x50;//0101 0000 串口方式1 10位異步通訊
50 2 PCON = PCON|0x80;//SMOD置1,波特率=溢出率/16
51 2 // TR1 = 1;//開串口中斷
52 2 }
53 1 #else
#endif
C51 COMPILER V8.02 UART 03/20/2008 16:38:57 PAGE 2
56 1 }
57
58 /*--------------------------------------------------------------------
59 當輸出僅為字符串時可使用
60 ---------------------------------------------------------------------*/
61 void printu(char * c)
62 {
63 1
64 1 int i = 0, j = 0;
65 1 char ct = *c;
66 1 // init_uart(1200);
67 1 TR1 = 1;
68 1 while (ct != '\0')
69 1 {
70 2 #if AT89S52
71 2 SBUF = ct;
72 2 while (!TI);
73 2
74 2 j++;
75 2 TI = 0;
76 2 ct = *(c + j);
77 2
78 2 #endif
79 2 }
80 1 TR1 = 0;
81 1 }
82
83 void SerialOut(unsigned char sdata)
84 {
85 1 init_uart(1200);
86 1 SBUF = sdata;
87 1 while (!TI);
88 1 TI = 0;
89 1 }
90
91
92 /*-----------------------------------------------------------------------
93 當輸出為字符串時可使用或含有一控制符時使用,格式符僅用于16進制輸出
94 格式控制符為%x,回車控制符為/n
95 -----------------------------------------------------------------------*/
96 void printuf(char * c, unsigned char cb)
97 {
98 1 int i = 0;
99 1 char ct = *c;
100 1 char cx1;
101 1 char cx2;
102 1
103 1 // init_uart(1200);
104 1 TR1 = 1;
105 1 #if AT89S52
106 1 while (ct != '\0')
107 1 {
108 2 if (ct == '%')
109 2 {
110 3 if (*(c + i + 1) == 'x')
111 3 {
112 4 i += 2;
113 4 cx1 = cb / 16;
114 4 cx2 = cb % 16;
115 4 if (cx1 == 0)
116 4 {
117 5 SBUF = hex[cx2];
C51 COMPILER V8.02 UART 03/20/2008 16:38:57 PAGE 3
118 5 while (!TI);
119 5 TI = 0;
120 5 }
121 4 else
122 4 {
123 5 SBUF = hex[cx1];
124 5 while (!TI);
125 5 TI = 0;
126 5 SBUF = hex[cx2];
127 5 while (!TI);
128 5 TI = 0;
129 5 }
130 4 ct = *(c + i);
131 4 continue;
132 4 }
133 3
134 3 }
135 2 if (ct == '\n')
136 2 {
137 3 if (*(c + i + 1) == 'n')
138 3 {
139 4 i += 2;
140 4 SBUF = 13; ////ASCII瑪,er= enter 回車
141 4 while (!TI);
142 4 {
143 5 TI = 0;
144 5 SBUF = 10; //ASCII瑪,nl = next line 換行
145 5 }
146 4
147 4 while (!TI);
148 4 {
149 5 TI = 0;
150 5 ct = *(c + i);
151 5 }
152 4 continue;
153 4 }
154 3 }
155 2 SBUF = ct;
156 2 while (!TI);
157 2 TI = 0;
158 2 i++;
159 2 ct = *(c + i);
160 2 }
161 1 #endif
162 1 TR1 = 0;
163 1 }
164
165 /*-----------------------------------------------------------------------
166 print sting number 當輸出為字符串時可使用或含有一控制符時使用,格式符僅用于16進制輸出
167 格式控制符為%x,回車控制符為/n
168 -----------------------------------------------------------------------*/
169 /* 該函數已調試正常 */
170 void printsn(char * c, unsigned char* cb)
171 {
172 1 int i = 0, j = 0, k = 0;
173 1 char ct = *c;
174 1 unsigned char cx1;
175 1 unsigned char cx2;
176 1 unsigned char ctn = *cb;
177 1
178 1 // init_uart(1200);
179 1 TR1 = 1;
C51 COMPILER V8.02 UART 03/20/2008 16:38:57 PAGE 4
180 1 #if AT89S52
181 1 while (ct != '\0')
182 1 {
183 2 if (ct == '%')
184 2 {
185 3 if (*(c + i + 1) == 'x')
186 3 {
187 4 i += 2;
188 4 while (ctn != '\0')
189 4 {
190 5 // printuf("ctn = %x\n", ctn);
191 5 // printuf("k = %x\n", k);
192 5 // TR1 = 1;
193 5 // printuf("ctn = %x\n", ctn);
194 5 cx1 = ctn / 16;
195 5 cx2 = ctn % 16;
196 5 // printuf("cx1 = %x\n", cx1);
197 5 // printuf("cx2 = %x\n", cx2);
198 5 // TR1 = 1;
199 5 SBUF = hex[cx1];
200 5 while (!TI);
201 5 TI = 0;
202 5 SBUF = hex[cx2];
203 5 while (!TI);
204 5 TI = 0;
205 5 j++;
206 5 ctn = *(cb + j);
207 5 // k++;
208 5 }
209 4 ct = *(c + i);
210 4 continue;
211 4 }
212 3
213 3 }
214 2 if (ct == '\n')
215 2 {
216 3 if (*(c + i + 1) == 'n')
217 3 {
218 4 i += 2;
219 4 SBUF = 13; ////ASCII瑪,er= enter 回車
220 4 while (!TI);
221 4 {
222 5 TI = 0;
223 5 SBUF = 10; //ASCII瑪,nl = next line 換行
224 5 }
225 4
226 4 while (!TI);
227 4 {
228 5 TI = 0;
229 5 ct = *(c + i);
230 5 }
231 4 continue;
232 4 }
233 3 }
234 2 SBUF = ct;
235 2 while (!TI);
236 2 TI = 0;
237 2 i++;
238 2 ct = *(c + i);
239 2 }
240 1 #endif
241 1 TR1 = 0;
C51 COMPILER V8.02 UART 03/20/2008 16:38:57 PAGE 5
242 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 508 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 16 22
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 + -