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

📄 comm.lst

📁 STC12C5410AD模拟串口再现多串口通讯
💻 LST
字号:
C51 COMPILER V7.06   COMM                                                                  12/10/2008 14:07:45 PAGE 1   


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

stmt level    source

   1           #include"include.h"
   2          
   3           /********************************************************************************************************
             -*
   4          ** 函数名称: void Initiate_RS232(void)
   5          ** 功能描述: 串口初始化函数
   6          ** 输   入: 无
   7          ** 输   出: 无
   8          ** 全局变量: 
   9          ** 调用模块: 
  10          **
  11          ** 作   者: 李伟
  12          ** 日   期: 2008年12月09日
  13          **-------------------------------------------------------------------------------------------------------
  14          ** 修 改 人:
  15          ** 日   期:
  16          **-------------------------------------------------------------------------------------------------------
  17          ********************************************************************************************************/
  18          void Initiate_RS232(void)
  19          {
  20   1          ES    = 0;
  21   1          PCON |= 0x80;                   //SMOD=1
  22   1          SCON  = 0x50;                   //0101,0001 8位数据位,无奇偶校验
  23   1          TMOD  = 0x20;                   //设置T1为波特率发生器
  24   1          TH1   = 0xFA;                   //11.0592MHz 晶振,波特率=9600
  25   1          TL1   = 0xFA;
  26   1      //    AUXR |=0x10;
  27   1          ES    = 1;                      //允许串口中断
  28   1          EA    = 1;                      //开总中断
  29   1          TR1   = 1;                      //开定时器1
  30   1      }
  31          /*********************************************************************************************************
  32          ** 函数名称: void Suart_Send_Byte(uint8 Send_Byte)
  33          ** 功能描述: 串口发送函数
  34          ** 输   入: 无
  35          ** 输   出: 无
  36          ** 全局变量: 
  37          ** 调用模块: 
  38          **
  39          ** 作   者: 李伟
  40          ** 日   期: 2008年12月09日
  41          **-------------------------------------------------------------------------------------------------------
  42          ** 修 改 人:
  43          ** 日   期:
  44          **-------------------------------------------------------------------------------------------------------
  45          ********************************************************************************************************/
  46          void Suart_Send_Byte(uint8 Send_Byte)
  47          {
  48   1          ES = 0;                      //关串口中断
  49   1          TI = 0;                      //清零串口发送完成中断请求标志
  50   1          SBUF = Send_Byte;
  51   1          //WDT_CONTR = 0x3c;            /**********************喂狗**********************/
  52   1          while(TI == 0);              //等待发送完成
  53   1          TI = 0;                      //清零串口发送完成中断请求标志
  54   1          ES = 1;                      //允许串口中断
C51 COMPILER V7.06   COMM                                                                  12/10/2008 14:07:45 PAGE 2   

  55   1      
  56   1      }
  57          /*********************************************************************************************************
  58          ** 函数名称: void Comm(void) interrupt 4
  59          ** 功能描述: 串口中断函数
  60          ** 输   入: 无
  61          ** 输   出: 无
  62          ** 全局变量: 
  63          ** 调用模块: 
  64          **
  65          ** 作   者: 李伟
  66          ** 日   期: 2008年12月10日
  67          **-------------------------------------------------------------------------------------------------------
  68          ** 修 改 人:
  69          ** 日   期:
  70          **-------------------------------------------------------------------------------------------------------
  71          ********************************************************************************************************/
  72          void Comm(void) interrupt 4
  73          {
  74   1          uint8 ea_time;
  75   1          ea_time = EA;
  76   1          EA = 0;
  77   1          if(RI == 1)
  78   1          {
  79   2              CommTemp0 = SBUF;
  80   2              if(CommTemp0 == 0x7e)
  81   2              {
  82   3                  CommState     = 0;
  83   3                  CommAscii     = 0;
  84   3                  CommBytehilow = 0;
  85   3              }
  86   2              if(CommState != 0 && CommState != 5 && CommState != 6)
  87   2              {
  88   3                  ComCalculChkSum = ComCalculChkSum + CommTemp0;
  89   3              }
  90   2              if(CommState != 0 && CommState != 5)
  91   2              {
  92   3                  if(CommAscii == 0)
  93   3                  {
  94   4                      CommAscii = 1;
  95   4                      CommTemp1 = CommTemp0;
  96   4                      if(CommTemp1 < 0x3a)
  97   4                          CommTemp1 -= 0x30;
  98   4                      else
  99   4                          CommTemp1 -= 0x37;
 100   4                  }
 101   3                  else
 102   3                  {
 103   4                      CommAscii = 0;
 104   4                      if(CommTemp0 < 0x3a)
 105   4                          CommTemp0 -= 0x30;
 106   4                      else
 107   4                          CommTemp0 -= 0x37;
 108   4                      CommTemp1 <<= 4;
 109   4                      CommTemp1 |= CommTemp0;
 110   4                 }
 111   3              }
 112   2              if(CommAscii == 0)
 113   2              {
 114   3                  switch(CommState)
 115   3                  {
 116   4                      case 0:                    /*SOI*/
C51 COMPILER V7.06   COMM                                                                  12/10/2008 14:07:45 PAGE 3   

 117   4                      {
 118   5                          if(CommTemp0 == 0x7e)
 119   5                          {
 120   6                              CommState++;
 121   6                              ComCalculChkSum = 0;
 122   6                          }
 123   5                      }break;
 124   4                      case 1:                    /*ADD*/
 125   4                      {
 126   5                          if(CommTemp1 == BoardAddress)
 127   5                          {
 128   6                                                      CommState++;
 129   6                                              }
 130   5                                              else 
 131   5                                              {
 132   6                                                      CommState = 0;
 133   6                                              }
 134   5                      }break;
 135   4                      case 2:                    /*CID*/
 136   4                      {
 137   5                          CommCid = CommTemp1;
 138   5                          CommState++;
 139   5                          if(CommCid > 0x10) CommState = 0;
 140   5      
 141   5                      }break;
 142   4                      case 3:                    /*LENGTH*/
 143   4                      {
 144   5                          if(CommBytehilow == 0 )
 145   5                          {
 146   6                              CommLengthH = CommTemp1;
 147   6                              CommBytehilow = 1;
 148   6                          }
 149   5                          else
 150   5                          {
 151   6                              CommState++;
 152   6                              CommLengthL = CommTemp1;
 153   6                              CommBytehilow = 0;
 154   6                              if(CommLengthL > 100)CommState = 0;
 155   6                              CommRxPointer = 0;           //RxBufPointer
 156   6                              if(CommLengthL == 0)CommState++;
 157   6                          }
 158   5                      }break;
 159   4                      case 4:                     /*INFO*/
 160   4                      {
 161   5                          if(CommLengthL != 0)
 162   5                          {
 163   6                              CommRxBuf[CommRxPointer] = CommTemp1;
 164   6                              CommRxPointer++;
 165   6                              CommLengthL--;
 166   6                              CommLengthL--;
 167   6                              if(CommLengthL == 0)CommState++;
 168   6                          }
 169   5                          else
 170   5                              CommState++;
 171   5                      }break;
 172   4                      case 5:                     /*chksum*/
 173   4                      {
 174   5                          if(CommBytehilow == 0)
 175   5                          {
 176   6                              CommLengthH = CommTemp1;
 177   6                              CommBytehilow = 1;
 178   6                          }
C51 COMPILER V7.06   COMM                                                                  12/10/2008 14:07:45 PAGE 4   

 179   5                          else
 180   5                          {
 181   6                              CommBytehilow = 0;
 182   6                              CommChksumL = CommTemp1;
 183   6                              ReComCalculChkSum = CommChksumH;
 184   6                              ReComCalculChkSum = ReComCalculChkSum << 8;
 185   6                              ReComCalculChkSum |= CommChksumL;
 186   6                              ComCalculChkSum= (~ComCalculChkSum)+1;
 187   6                              if(ReComCalculChkSum == ComCalculChkSum)CommState++;
 188   6                              else
 189   6                              {
 190   7                                 goto comrxend;
 191   7                              }
 192   6                          }
 193   5                      }break;
 194   4                      case 6:                     /*EOI */
 195   4                      {
 196   5                       if(CommTemp0 == 0x0D)
 197   5                           {
 198   6                           Massageflag = 1;
 199   6                           }
 200   5                           CommState = 0;
 201   5                      }break;
 202   4                  }
 203   3                  comrxend:
 204   3                  ;
 205   3              }
 206   2              }
 207   1          RI = 0;
 208   1          EA = ea_time;
 209   1      }
 210          /********************************************************************************************************
 211                                                         End of file
 212          ********************************************************************************************************/


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    448    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   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 + -