📄 f06x_uarts_stdio_polled_2uarts.lst
字号:
198 {
199 1 char SFRPAGE_SAVE = SFRPAGE; // Save Current SFR page
200 1
201 1 SFRPAGE = CONFIG_PAGE; // Set SFR page
202 1
203 1 XBR0 = 0x00;
204 1 XBR1 = 0x00;
205 1 XBR2 = 0x44; // Enable crossbar and weak pull-up
206 1 // Enable UART1
207 1
208 1 P0MDOUT |= 0x01; // Set TX pin to push-pull
209 1 P1MDOUT |= 0x40; // Set P1.6(LED) to push-pull
210 1
211 1 SFRPAGE = SFRPAGE_SAVE; // Restore SFR page
212 1 }
213
214 //-----------------------------------------------------------------------------
215 // UART0_Init Variable baud rate, Timer 2, 8-N-1
216 //-----------------------------------------------------------------------------
217 //
218 // Return Value : None
219 // Parameters : None
220 //
221 // Configure UART0 for operation at <BAUDRATE> 8-N-1 using Timer2 as
222 // baud rate source.
223 //
224 //-----------------------------------------------------------------------------
225 void UART0_Init (void)
226 {
227 1 char SFRPAGE_SAVE;
228 1
229 1 SFRPAGE_SAVE = SFRPAGE; // Preserve SFRPAGE
230 1
231 1 SFRPAGE = TMR2_PAGE;
232 1
233 1 TMR2CN = 0x00; // Timer in 16-bit auto-reload up timer
234 1 // mode
235 1 TMR2CF = 0x08; // SYSCLK is time base; no output;
236 1 // up count only
237 1 RCAP2 = - ((long) SYSCLK/BAUDRATE/16);
238 1 TMR2 = RCAP2;
239 1 TR2= 1; // Start Timer2
240 1
241 1 SFRPAGE = UART0_PAGE;
C51 COMPILER V8.08 F06X_UARTS_STDIO_POLLED_2UARTS 02/14/2008 09:52:44 PAGE 5
242 1
243 1 SCON0 = 0x50; // 8-bit variable baud rate;
244 1 // 9th bit ignored; RX enabled
245 1 // clear all flags
246 1 SSTA0 = 0x15; // Clear all flags; enable baud rate
247 1 // doubler (not relevant for these
248 1 // timers);
249 1 // Use Timer2 as RX and TX baud rate
250 1 // source;
251 1 TI0 = 1; // Indicate TX0 ready
252 1
253 1 SFRPAGE = SFRPAGE_SAVE; // Restore SFRPAGE
254 1 }
255
256
257 //-----------------------------------------------------------------------------
258 // UART1_Init
259 //-----------------------------------------------------------------------------
260 //
261 // Return Value : None
262 // Parameters : None
263 //
264 // Configure the UART1 using Timer1, for <BAUDRATE> and 8-N-1.
265 //
266 //-----------------------------------------------------------------------------
267 void UART1_Init (void)
268 {
269 1 char SFRPAGE_SAVE = SFRPAGE; // Save Current SFR page
270 1
271 1 SFRPAGE = UART1_PAGE;
272 1 SCON1 = 0x10; // SCON1: mode 0, 8-bit UART, enable RX
273 1
274 1 SFRPAGE = TIMER01_PAGE;
275 1 TMOD &= ~0xF0;
276 1 TMOD |= 0x20; // TMOD: timer 1, mode 2, 8-bit reload
277 1
278 1
279 1 if (SYSCLK/BAUDRATE/2/256 < 1) {
280 2 TH1 = -(SYSCLK/BAUDRATE/2);
281 2 CKCON |= 0x10; // T1M = 1; SCA1:0 = xx
282 2 } else if (SYSCLK/BAUDRATE/2/256 < 4) {
283 2 TH1 = -(SYSCLK/BAUDRATE/2/4);
284 2 CKCON &= ~0x13; // Clear all T1 related bits
285 2 CKCON |= 0x01; // T1M = 0; SCA1:0 = 01
286 2 } else if (SYSCLK/BAUDRATE/2/256 < 12) {
287 2 TH1 = -(SYSCLK/BAUDRATE/2/12);
288 2 CKCON &= ~0x13; // T1M = 0; SCA1:0 = 00
289 2 } else {
290 2 TH1 = -(SYSCLK/BAUDRATE/2/48);
291 2 CKCON &= ~0x13; // Clear all T1 related bits
292 2 CKCON |= 0x02; // T1M = 0; SCA1:0 = 10
293 2 }
294 1
295 1 TL1 = TH1; // Initialize Timer1
296 1 TR1 = 1; // Start Timer1
297 1
298 1 SFRPAGE = UART1_PAGE;
299 1 TI1 = 1; // Indicate TX1 ready
300 1
301 1 SFRPAGE = SFRPAGE_SAVE; // Restore SFR page
302 1
303 1 }
C51 COMPILER V8.08 F06X_UARTS_STDIO_POLLED_2UARTS 02/14/2008 09:52:44 PAGE 6
304
305 //-----------------------------------------------------------------------------
306 // Support Subroutines
307 //-----------------------------------------------------------------------------
308
309 //-----------------------------------------------------------------------------
310 // putchar
311 //-----------------------------------------------------------------------------
312 //
313 /* Copyright KEIL ELEKTRONIK GmbH 1990 - 2002 */
314 /*
315 * putchar (basic version): expands '\n' into CR LF
316 */
317 // Modified by BW
318 //
319 // This routine overloads the standard putchar() library function to support
320 // either UART0 or UART1, depending on the state of the global variable
321 // <Uart>.
322 //
323 char putchar (char c)
324 {
325 1 char SFRPAGE_SAVE = SFRPAGE;
326 1
327 1 if (Uart == 0)
328 1 {
329 2 SFRPAGE = UART0_PAGE;
330 2 }
331 1 else if (Uart == 1)
332 1 {
333 2 SFRPAGE = UART1_PAGE;
334 2 }
335 1
336 1 if (c == '\n') // If carriage return
337 1 {
338 2 while (!TI0);
339 2 TI0 = 0;
340 2 SBUF0 = 0x0d; // Output CR
341 2 }
342 1
343 1 while (!TI0); // Wait for transmit complete
344 1 TI0 = 0;
345 1
346 1 SBUF0 = c; // Send character
347 1
348 1 SFRPAGE = SFRPAGE_SAVE;
349 1
350 1 return c;
351 1 }
352
353 //-----------------------------------------------------------------------------
354 // _getkey
355 //-----------------------------------------------------------------------------
356 //
357 /* Copyright KEIL ELEKTRONIK GmbH 1990 - 2002 */
358 // Modified by BW
359 //
360 // This routine overloads the standard _getkey() library function to support
361 // either UART0 or UART1, depending on the state of the global variable
362 // <Uart>.
363 //
364 char _getkey ()
365 {
C51 COMPILER V8.08 F06X_UARTS_STDIO_POLLED_2UARTS 02/14/2008 09:52:44 PAGE 7
366 1 char c;
367 1 char SFRPAGE_SAVE = SFRPAGE;
368 1
369 1 if (Uart == 0)
370 1 {
371 2 SFRPAGE = UART0_PAGE;
372 2 }
373 1 else if (Uart == 1)
374 1 {
375 2 SFRPAGE = UART1_PAGE;
376 2 }
377 1
378 1 while (!RI0); // Wait for byte to be received
379 1 c = SBUF0; // Read the byte
380 1
381 1 SFRPAGE = SFRPAGE_SAVE;
382 1
383 1 return (c);
384 1 }
385
386 //-----------------------------------------------------------------------------
387 // End Of File
388 //-----------------------------------------------------------------------------
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 278 ----
CONSTANT SIZE = 18 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 ----
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 + -