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

📄 rs232.lst

📁 一个LCD TV的源程序, 用的是realtek的IC
💻 LST
字号:
C51 COMPILER V7.07   RS232                                                                 09/26/2006 08:56:40 PAGE 1   


C51 COMPILER V7.07, COMPILATION OF MODULE RS232
OBJECT MODULE PLACED IN rs232.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE rs232.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          /********************************************************************
   2          
   3                COPYRIGHT  (C)  Himax Technologies, Inc.
   4          
   5                File name     : rs232.c
   6          
   7                Description   : Implement rs232 relative function
   8          
   9                Author        : Taylor
  10          
  11                Create date   : 2004.10.04
  12          
  13                Modifications :
  14          
  15          *********************************************************************/
  16          
  17          #define _RS232_C
  18          
  19          
  20          /********************** Include Section *****************************/
  21          
  22          #include "rs232.h"
  23          #include "main.h"
  24          
  25          /**************** Function Implement Section ************************/
  26          
  27          /* ================================================================
  28              Name    : Init_UART
  29              Purpose : Initial UART
  30              Passed  : None
  31              Notes   : None
  32             ================================================================ */
  33          
  34          void Init_UART(void)
  35          {
  36   1              SCON = 0x41;                                            /* set SCON to mode 1 8/N/1 disable REN */
  37   1              TMOD |= 0x20;                                           /* set T1 to 8 bits auto reload */
  38   1              TL1 = TH1 = TH_RELOAD;
  39   1              /* init UART RX buf */
  40   1          UART_Rx.Buf         = UART_Rx_BUF;
  41   1          UART_Rx.Head        = 0;
  42   1              UART_Rx.Tail    = 0;
  43   1          UART_Rx.Count   = 0;
  44   1          /* init UART TX buf */
  45   1          UART_Tx.Buf         = UART_Tx_BUF;
  46   1          UART_Tx.Head        = 0;
  47   1              UART_Tx.Tail    = 0;
  48   1          UART_Tx.Count   = 0;
  49   1          /* run it */
  50   1          TR1                         = 1;
  51   1          /* Enable Receive */
  52   1          REN             = 1;
  53   1          /* Serial port enable Timer 1 */
  54   1          ES                      = 1;
  55   1      }
C51 COMPILER V7.07   RS232                                                                 09/26/2006 08:56:40 PAGE 2   

  56          
  57          
  58          /* ================================================================
  59              Name    : Puts_UART
  60              Purpose : Output One String
  61              Passed  : None
  62              Notes   : None
  63             ================================================================ */
  64          
  65          void Puts_UART(char *s)
  66          {
  67   1              Byte  i;
  68   1      
  69   1              for(i=0; s[i] != '\0'; i++)
  70   1                      while(!Put_UART(s[i]));
  71   1      }
  72          
  73          
  74          /* ================================================================
  75              Name    : Put_UART
  76              Purpose : Output One Char
  77              Passed  : None
  78              Notes   : None
  79             ================================================================ */
  80          
  81          bit Put_UART(Byte  c)
  82          {
  83   1              if(UART_Tx.Count < SIZE_OF_UART_TX_BUF - 1){            /* TX QUEUE is full? */
  84   2              UART_Tx.Buf[UART_Tx.Tail++] = c;                    /* if no, put data into TX QUEUE */
  85   2              if(UART_Tx.Tail >= SIZE_OF_UART_TX_BUF)             /* roll over? */
  86   2                      UART_Tx.Tail = 0;
  87   2              ES = 0;                                             /* enter critical section */
  88   2                              if(UART_Tx.Count++ == 0)                            /* if UART TX stop, retrigger it */
  89   2                                      SBUF = UART_Tx.Buf[UART_Tx.Head];
  90   2              ES = 1;                                             /* leave critical section */
  91   2              return TRUE;                                        /* process is OK */
  92   2              }
  93   1              else
  94   1              return FALSE;                                       /* buffer is full */
  95   1      }
  96          
  97          /* ================================================================
  98              Name    : HexTobyStr
  99              Purpose : Change HEX Number to String on RS232
 100              Passed  : None
 101              Notes   : None
 102             ================================================================ */
 103          
 104          void HexTobyStr(Byte  c)
 105          {
 106   1              Byte  byData;
 107   1      
 108   1              /* transfer HIGH nibble */
 109   1              byData = c >> 4;
 110   1              if(byData <= 9)
 111   1                      byStr[0] = byData + 0x30;
 112   1              else
 113   1                      byStr[0] = byData + 55;
 114   1      
 115   1              /* transfer LOW nibble */
 116   1              byData = c & 0x0F;
 117   1              if(byData <= 9)
C51 COMPILER V7.07   RS232                                                                 09/26/2006 08:56:40 PAGE 3   

 118   1                      byStr[1] = byData + 0x30;
 119   1              else
 120   1                      byStr[1] = byData + 55;
 121   1              byStr[2] = '\0';
 122   1      }
 123          
 124          
 125          /* ================================================================
 126              Name    : UART_ISR
 127              Purpose : RS232 ISR
 128              Passed  : None
 129              Notes   : None
 130             ================================================================ */
 131          
 132          void UART_ISR (void) interrupt 4
 133          {
 134   1              /* TX */
 135   1              if(TI){                                                 /* previous data sended is finished */
 136   2              TI = 0;                                             /* clear TX INT flag */
 137   2                      if(++UART_Tx.Head >= SIZE_OF_UART_TX_BUF)           /* advanced header pointer */
 138   2                              UART_Tx.Head = 0;
 139   2              if(--UART_Tx.Count != 0)                            /* still has data need to send? */
 140   2                                      SBUF = UART_Tx.Buf[UART_Tx.Head];           /* if yes. put data into TX BUF */
 141   2              }
 142   1              /* RX */
 143   1              else{                                                   /* received one data */
 144   2                      RI = 0;
 145   2              UART_Rx.Buf[UART_Rx.Tail] = SBUF;                   /* insert data into queue */
 146   2              if(++UART_Rx.Tail >= SIZE_OF_UART_RX_BUF)           /* advanced tailer pointer */
 147   2                      UART_Rx.Tail = 0;
 148   2              bUart_rx_event=TRUE;
 149   2              UART_Rx.Count++;                                    /* increment data counter of RX QUEUE */
 150   2              }
 151   1      }
 152          
 153          
 154          /* ================================================================
 155              Name    : Get_UART
 156              Purpose : Receive String From PC
 157              Passed  : None
 158              Notes   : None
 159             ================================================================ */
 160          
 161          Byte Get_UART(void)
 162          {
 163   1              Byte  Temp;
 164   1              Temp = UART_Rx.Buf[UART_Rx.Head++];                     /* get data into temperate storage */
 165   1              if(UART_Rx.Head >= SIZE_OF_UART_RX_BUF)                 /* roll over ? */
 166   1                      UART_Rx.Head = 0;
 167   1              ES = 0;                                                 /* enter CS */
 168   1              if(--UART_Rx.Count == 0)                                /* dec counter of RX QUEUE */
 169   1                      bUart_rx_event = 0;                                 /* disable rx event */
 170   1              ES = 1;                                                 /* leave CS */
 171   1              return Temp;                                            /* return data */
 172   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    288    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
C51 COMPILER V7.07   RS232                                                                 09/26/2006 08:56:40 PAGE 4   

   DATA SIZE        =      8       4
   IDATA SIZE       =      4    ----
   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 + -