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

📄 serial.lst

📁 VB与单片机通信实现智能照明温度控制示例 包括Vb代码和C代码
💻 LST
字号:
C51 COMPILER V8.02   SERIAL                                                                11/20/2007 19:40:01 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE SERIAL
OBJECT MODULE PLACED IN serial.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE serial.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include <at89x51.h>
   2          #include "serial.h"
   3          #include "function.h"
   4          #define MAXCMDSIZE 20
   5          
   6          typedef unsigned char uchar; 
   7          typedef unsigned int uint;  
   8           
   9          unsigned char SerialCmd[20],SerialRet[10];
  10          bit SerialReq;
  11          
  12          void Send(unsigned char * s,int len)
  13          {
  14   1              int i;
  15   1              ES=0;
  16   1              REN=0;
  17   1              for(i=0;i<len;i++)
  18   1              {
  19   2                      SBUF=s[i];
  20   2                      while(!TI){}
  21   2                      TI=0;
  22   2              }
  23   1              REN=1;
  24   1              ES=1;
  25   1      }
  26          void SendAddr(bit success)
  27          {
  28   1              ES=0;
  29   1              REN=0;
  30   1              if(success)
  31   1                      SBUF=DEVICE_ID;
  32   1              else
  33   1                      SBUF=0;
  34   1              while(!TI){}
  35   1              TI=0;
  36   1              REN=1;
  37   1              ES=1;
  38   1      }
  39          unsigned char CheckSum(unsigned char * c)
  40          {
  41   1              unsigned char len,checksum,i;
  42   1              len=c[0];
  43   1              checksum=0;
  44   1              for(i=0;i<len;i++)
  45   1                        checksum=checksum^c[i];
  46   1              if(checksum==0xff)
  47   1                      checksum=0xfe;
  48   1              return checksum;
  49   1      }
  50          
  51          bit ProcessCmd()
  52          {
  53   1              bit success=1;
  54   1              ES=0;
  55   1              if(CheckSum(SerialCmd)!=SerialCmd[SerialCmd[0]])
C51 COMPILER V8.02   SERIAL                                                                11/20/2007 19:40:01 PAGE 2   

  56   1              {
  57   2                      SendAddr(0);
  58   2                      SerialReq=0;
  59   2                      ES=1;
  60   2                      return 0;
  61   2              }
  62   1              switch (SerialCmd[1])
  63   1              {
  64   2                      case CMD_PING:
  65   2                                      SerialRet[0]=0;
  66   2                                      break;
  67   2                      case CMD_ENABLE_MANUAL_CON:
  68   2                                      if(!SetManCon(1)) success=0;
  69   2                                      break;
  70   2                      case CMD_DISABLE_MANUAL_CON:
  71   2                                      if(!SetManCon(0)) success=0;
  72   2                                      break;
  73   2                      case CMD_QUERY_ROOM:
  74   2                                      if(!GetRoom()) success=0;
  75   2                                      break;
  76   2                      case CMD_QUERY_DATA:
  77   2                                      if(!GetData()) success=0;
  78   2                                      break;
  79   2                      case CMD_SET_MANUAL_CON_TIME:
  80   2                                      if(!SetManTime()) success=0;
  81   2                                      break;
  82   2                      case CMD_CON_LIGHT:
  83   2                                      if(!SetLight()) success=0;
  84   2                                      break;
  85   2                      case CMD_CON_AIRCON:
  86   2                                      if(!SetAirCon()) success=0;
  87   2                                      break;
  88   2                      case CMD_ADJ_TIMER:  
  89   2                                      if(!SetTime()) success=0;
  90   2                                      break;
  91   2                      case CMD_SETTIMER_LIGHT:  break;
  92   2                      case CMD_SETTIMER_AIRCON:  break;
  93   2                      case CMD_SETTIMER_POWER:  break;
  94   2              }
  95   1              if(success)
  96   1              {
  97   2                      SendAddr(1);
  98   2                      if(SerialRet[0]>0)
  99   2                      {
 100   3                              Send(SerialRet,SerialRet[0]+1);
 101   3                      }
 102   2              }
 103   1              else
 104   1              {
 105   2                      SendAddr(0);
 106   2                      SerialReq=0;
 107   2                      ES=1;
 108   2                      return 0;
 109   2              }
 110   1              SerialReq=0;
 111   1              ES=1;
 112   1              return 1;
 113   1      }
 114          
 115          
 116          
 117          void Serial_ISR () interrupt 4
C51 COMPILER V8.02   SERIAL                                                                11/20/2007 19:40:01 PAGE 3   

 118          {
 119   1              static unsigned char tlen,len,state;
 120   1              if (!RI) {RI=0;TI=0;return;}
 121   1              if(SBUF==0xff && SerialReq==0)
 122   1              {
 123   2                      state=1;
 124   2                      tlen=0;
 125   2                      len=0;
 126   2                      RI=0;TI=0;
 127   2                      return; 
 128   2              }
 129   1              switch (state)
 130   1              {
 131   2                      case 0:
 132   2                              break;
 133   2                      case 1:
 134   2                              if(SBUF==DEVICE_ID)
 135   2                                      state=2;
 136   2                              else
 137   2                                      state=0;
 138   2                              break;
 139   2                      case 2:
 140   2                              len=0;
 141   2                              tlen=SBUF;
 142   2                              if(tlen>MAXCMDSIZE)
 143   2                                      tlen=MAXCMDSIZE;
 144   2                              SerialCmd[0]=tlen;
 145   2                              state=3;
 146   2                              break;
 147   2                      case 3:
 148   2                              len++;
 149   2                              SerialCmd[len]=SBUF;
 150   2                              if(len>=tlen)
 151   2                              {
 152   3                                      tlen=0;
 153   3                                      len=0;
 154   3                                      state=0;
 155   3                                      SerialReq=1;
 156   3                              }
 157   2              }
 158   1              RI=0;TI=0;
 159   1      }
 160          
 161          


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


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

⌨️ 快捷键说明

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