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

📄 serial.lst

📁 64输入32输出单片机程序
💻 LST
字号:
C51 COMPILER V7.06   SERIAL                                                                01/26/2004 20:24:42 PAGE 1   


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

stmt level    source

   1          //-------------------------------------------------------------------------
   2          //      Filename :  Serial.C
   3          //      Language :  C for AT89S8252
   4          //      Revision :  1.0
   5          //  Initial Date :  07/10/2000
   6          //   Last Modify :
   7          //  System clock :  24.00MHZ
   8          //   Description :  Panel controller serial communication Plc64i32o
   9          //-------------------------------------------------------------------------
  10          #define _SERIAL_H_
  11          #include <reg52.h>
  12          #include "serial.h"
  13          #undef _SERIAL_H_
  14          //-------------------------------------------------------------------------
  15          bit TransOK;
  16          bit ReceEnd;
  17          bit ReceData;
  18          bit SerialMode;
  19          unsigned char out_proc;
  20          unsigned char in_proc;
  21          unsigned char reply_wait;
  22          sbit DE_RE = P3^2;
  23          //-------------------------------------------------------------------------
  24          void _init_serial (unsigned baud)
  25          {
  26   1          RCAP2H = baud/256;
  27   1          RCAP2L = baud%256;
  28   1          T2CON = 0x34;
  29   1          SCON = 0x70;                // serial port mothed 1
  30   1          ES = ON;                    // open serial port interrupt
  31   1          ReceData = TRUE;
  32   1          DE_RE = RXENABL;            // enable receive
  33   1          SerialMode = RXENABL;
  34   1          in_proc = RECE_STFLAG;
  35   1      }
  36          //-------------------------------------------------------------------------
  37          void _trf_msge (char a,char c,char l)
  38          {
  39   1          TransOK = FALSE;
  40   1          TranStream.address = a;
  41   1          TranStream.command = c;
  42   1          TranStream.length = l;
  43   1          SerialMode = TXENABL;
  44   1          DE_RE = TXENABL;
  45   1          SBUF = 0x7e;
  46   1          out_proc = SEND_ADDRESS;
  47   1      }
  48          //-------------------------------------------------------------------------
  49          void _out_comm(void)    using 3
  50          {
  51   1          if (TI == 1){
  52   2              TI = 0;
  53   2              if (SerialMode == TXENABL){
  54   3                  switch (out_proc){
  55   4                      case SEND_ADDRESS :
C51 COMPILER V7.06   SERIAL                                                                01/26/2004 20:24:42 PAGE 2   

  56   4                          SBUF=TranStream.address;
  57   4                          out_proc++;
  58   4                          break;
  59   4                      case SEND_COMMAND :
  60   4                          SBUF=TranStream.command;
  61   4                          out_proc++;
  62   4                          break;
  63   4                      case SEND_LENGTH :
  64   4                          SBUF=TranStream.length;
  65   4                          if (!TranStream.length)
  66   4                              out_proc = SEND_WAIT;
  67   4                          else{
  68   5                              out_proc++;
  69   5                              TranStream.data_ptr = 0;
  70   5                              TranStream.checksum = 0;}
  71   4                          break;
  72   4                      case SEND_DATABLK :
  73   4                          SBUF = TranStream.datablk[TranStream.data_ptr];
  74   4                          TranStream.checksum += TranStream.datablk[TranStream.data_ptr];
  75   4                          if (++TranStream.data_ptr == TranStream.length)
  76   4                              out_proc++;
  77   4                          break;
  78   4                      case SEND_CHKSUM :
  79   4                          SBUF = TranStream.checksum;
  80   4                          out_proc++;
  81   4                          break;
  82   4                      case SEND_WAIT :
  83   4                          DE_RE = RXENABL;
  84   4                          out_proc++;
  85   4                          reply_wait = RECENABL;
  86   4                          break;
  87   4                      case SEND_END :
  88   4                          DE_RE = RXENABL;
  89   4                          SerialMode = RXENABL;
  90   4                          out_proc = SEND_ADDRESS;
  91   4                  }
  92   3              }
  93   2              else
  94   2                  DE_RE = RXENABL;
  95   2          }
  96   1      }
  97          //-------------------------------------------------------------------------
  98          void _in_comm (void)    using 3
  99          {
 100   1          if (RI == 1){
 101   2              RI = 0;
 102   2              if (reply_wait == RECENABL){
 103   3                  if(SBUF == 0x66)
 104   3                      TransOK=PASS;
 105   3                  else
 106   3                      TransOK=FALSE;
 107   3                  reply_wait = OFF;
 108   3                  DE_RE = TXENABL;
 109   3                  SBUF = 0x3c;
 110   3              }
 111   2              if (SerialMode == RXENABL){
 112   3                  switch (in_proc){
 113   4                      case RECE_STFLAG :
 114   4                          if (SBUF == 0x7e)
 115   4                              in_proc++;
 116   4                          break;
 117   4                      case RECE_ADDRESS :
C51 COMPILER V7.06   SERIAL                                                                01/26/2004 20:24:42 PAGE 3   

 118   4                          if (SBUF == ReceStream.address)
 119   4                              in_proc++;
 120   4                          else
 121   4                              in_proc = RECE_STFLAG;
 122   4                          break;
 123   4                      case RECE_COMMAND :
 124   4                          ReceStream.command = SBUF;
 125   4                          in_proc++;
 126   4                          break;
 127   4                      case RECE_LENGTH :
 128   4                          ReceStream.length = SBUF;
 129   4                          if (!ReceStream.length){
 130   5                              in_proc = RECE_END;
 131   5                              DE_RE = TXENABL;
 132   5                              SBUF = 0x66;}
 133   4                          else{
 134   5                              in_proc++;
 135   5                              ReceStream.data_ptr = 0;
 136   5                              ReceStream.checksum = 0;}
 137   4                          break;
 138   4                      case RECE_DATABLK :
 139   4                          ReceStream.datablk[ReceStream.data_ptr++] = SBUF;
 140   4                          ReceStream.checksum += SBUF;
 141   4                          if (ReceStream.data_ptr == ReceStream.length)
 142   4                              in_proc++;
 143   4                          break;
 144   4                      case RECE_CHKSUM :
 145   4                          DE_RE = TXENABL;
 146   4                          if (ReceStream.checksum == SBUF){
 147   5                              SBUF = 0x66;
 148   5                              ReceData = TRUE;}
 149   4                          else{
 150   5                              SBUF = 0xff;
 151   5                              ReceData = WRONG;}
 152   4                          in_proc++;
 153   4                          break;
 154   4                      case RECE_END :
 155   4                          if (SBUF == 0x3c)
 156   4                              ReceEnd = FINISH;
 157   4                          else
 158   4                              ReceEnd = FAILURE;
 159   4                          DE_RE = RXENABL;
 160   4                          SerialMode = RXENABL;
 161   4                          in_proc = RECE_STFLAG;
 162   4                  }
 163   3              }
 164   2          }
 165   1      }
 166          //-------------------------------------------------------------------------
 167          //       serial:  serial receiver / transmitter interrupt
 168          //-------------------------------------------------------------------------
 169          serial () interrupt 4   using 3         // use registerbank 3 for interrupt
 170          {
 171   1          unsigned char i;
 172   1          unsigned char length;
 173   1          _in_comm();
 174   1          _out_comm();
 175   1          if (ReceEnd == FINISH){
 176   2              if (ReceData == TRUE){
 177   3                  rece_com = ReceStream.command;
 178   3                  ReceEnd = OFF;
 179   3                  if (ReceStream.length){
C51 COMPILER V7.06   SERIAL                                                                01/26/2004 20:24:42 PAGE 4   

 180   4                      length = ReceStream.length + 1;
 181   4                      for (i=0; i<length; i++){
 182   5                          rece_data[i] = ReceStream.datablk[i];
 183   5                      }
 184   4                  }
 185   3              }
 186   2          }
 187   1      }
 188          //-------------------------------------------------------------------------


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    465    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      3    ----
   IDATA SIZE       =     41    ----
   BIT SIZE         =      4    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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