⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 f06x_uarts_stdio_polled_2uarts.lst

📁 // This program demonstrates how to configure the C8051F060 to write to and read // from the UART i
💻 LST
📖 第 1 页 / 共 2 页
字号:
 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 + -