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

📄 serial.lst

📁 基于Keil RTX51Tiny的远程监控采集系统从设备开发
💻 LST
字号:
C51 COMPILER V7.02b   SERIAL                                                               01/18/2005 21:45:42 PAGE 1   


C51 COMPILER V7.02b, COMPILATION OF MODULE SERIAL
OBJECT MODULE PLACED IN SERIAL.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE SERIAL.C DEBUG OBJECTEXTEND

stmt level    source

   1          /****************************************/
   2          /* Copyright (c) 2004, 63研究所 苗龙    */
   3          /* All rights reserved.                 */
   4          /* 作    者:苗龙                       */
   5          /****************************************/
   6          
   7          /******************************************************************************/
   8          /*                                                                            */
   9          /*       SERIAL.C:  Interrupt Controlled Serial Interface for RTX-51 tiny     */
  10          /*                                                                            */
  11          /******************************************************************************/
  12          
  13          
  14          #include <reg52.h>                    /* special function register 8052       */
  15          #include <rtx51tny.h>                 /* RTX-51 tiny functions & defines      */
  16          
  17          #define  OLEN  8                      /* size of serial transmission buffer   */
  18          unsigned char  ostart=0;                /* transmission buffer start index      */
  19          unsigned char  oend=0;                  /* transmission buffer end index        */
  20          char  outbuf[OLEN];          /* storage for transmission buffer      */
  21          unsigned char  otask = 0xff;          /* task number of output task           */
  22          
  23          #define  ILEN  8                      /* size of serial receiving buffer      */
  24          unsigned char  istart=0;                /* receiving buffer start index         */
  25          unsigned char  iend=0;                  /* receiving buffer end index           */
  26          char  inbuf[ILEN];           /* storage for receiving buffer         */
  27          unsigned char  itask = 0xff;          /* task number of output task           */
  28          
  29          
  30          bit   sendfull=0;                       /* flag: marks transmit buffer full     */
  31          bit   sendactive=0;                     /* flag: marks transmitter active       */
  32          
  33          /******************************************************************************/
  34          /*       putbuf:  write a character to SBUF or transmission buffer            */
  35          /******************************************************************************/
  36          void putbuf (char c)  {
  37   1        if (!sendfull)  {                   /* transmit only if buffer not full     */
  38   2          if (!sendactive)  {  /* if transmitter not active:           */
  39   3            sendactive = 1;                 /* transfer the first character direct  */
  40   3            SBUF = c;                       /* to SBUF to start transmission        */
  41   3          }
  42   2          else  {                           /* otherwize:                           */
  43   3                outbuf[ostart++ % OLEN] = c;
  44   3                ostart=ostart% OLEN;
  45   3              if (((ostart+1)%OLEN)==oend)  sendfull = 1;
  46   3          }                               
  47   2        }
  48   1      }
  49          
  50          
  51          /******************************************************************************/
  52          /*       putchar:  interrupt controlled putchar function                      */
  53          /******************************************************************************/
  54          char putchar (char c)  {
  55   1      
C51 COMPILER V7.02b   SERIAL                                                               01/18/2005 21:45:42 PAGE 2   

  56   1        while (sendfull)  {                 
  57   2          otask = os_running_task_id ();   
  58   2          os_wait (K_SIG, 0, 0);            
  59   2          otask = 0xff;                     
  60   2        }
  61   1        putbuf (c);                         /* send character                       */
  62   1        return (c);                         /* return character: ANSI requirement   */
  63   1      }
  64          
  65          
  66          /******************************************************************************/
  67          /*       _getkey:  interrupt controlled _getkey                               */
  68          /******************************************************************************/
  69          char _getkey (void)  {
  70   1        char tmp;
  71   1        while  (iend == istart)  {
  72   2          itask = os_running_task_id ();    /* set input task number                */
  73   2          os_wait (K_SIG, 0, 0);            /* RTX-51 call: wait for signal         */
  74   2          itask = 0xff;                     /* clear input task number              */
  75   2        }
  76   1        tmp=inbuf[iend++% ILEN];
  77   1        iend=iend% ILEN;
  78   1        return (tmp);
  79   1      }
  80          
  81          
  82          /******************************************************************************/
  83          /*       serial:  serial receiver / transmitter interrupt                     */
  84          /******************************************************************************/
  85          serial () interrupt 4 using 2  {     /* use registerbank 2 for interrupt      */
  86   1        unsigned char c;
  87   1        bit   start_trans = 0;
  88   1      
  89   1        if (RI)  {                         /* if receiver interrupt                 */
  90   2          c = SBUF;                        /* read character                        */
  91   2          RI = 0;                          /* clear interrupt request flag          */
  92   2                      if(((istart+1)%ILEN)!=iend){
  93   3                        inbuf[istart++ % ILEN] = c;
  94   3                        istart=istart % ILEN;
  95   3              }
  96   2              if (itask != 0xFF) isr_send_signal (itask);
  97   2        }
  98   1      
  99   1        if (TI || start_trans)  { 
 100   2          TI = 0;                     
 101   2                if(ostart!=oend){
 102   3                      SBUF = outbuf[oend++ %OLEN]; 
 103   3                      oend=oend%OLEN;
 104   3              sendfull = 0; 
 105   3              if (otask != 0xFF)  isr_send_signal (otask);
 106   3          }
 107   2          else sendactive = 0;            
 108   2        }
 109   1      
 110   1      }
 111          /******************************************************************************/
 112          /*       serial_init: initialize serial interface                             */
 113          /******************************************************************************/
 114          void serial_init (void)  {
 115   1        SCON  = 0x50;                      /* mode 1: 8-bit UART, enable receiver   */
 116   1        TMOD |= 0x20;                      /* timer 1 mode 2: 8-Bit reload          */
 117   1        TH1   = 0xf4;                      /* reload value 2400 baud                */
C51 COMPILER V7.02b   SERIAL                                                               01/18/2005 21:45:42 PAGE 3   

 118   1        TR1   = 1;                         /* timer 1 run                           */
 119   1        ES    = 1;                         /* enable serial port interrupt          */
 120   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    236    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     22       1
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      2       1
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -