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

📄 comm232.lst

📁 STC12C5410AD模拟串口再现多串口通讯
💻 LST
📖 第 1 页 / 共 2 页
字号:
 154          ** 日   期:
 155          **-------------------------------------------------------------------------------------------------------
 156          ********************************************************************************************************/
 157          void Comm(void) interrupt 4
 158          {
 159   1          uint8 ea_time;
 160   1          ea_time = EA;
 161   1          EA = 0;
 162   1          if(RI == 1)
 163   1          {
 164   2              CommTemp0 = SBUF;
 165   2                      if(CommRxPointer > 10)CommRxPointer = 0; 
 166   2              if(CommTemp0 == 0x7e)
 167   2              {
 168   3                  CommState     = 0;
 169   3                  CommAscii     = 0;
 170   3                  CommBytehilow = 0;
 171   3              }
 172   2              if(CommState != 0 && CommState != 5 && CommState != 6)
 173   2              {
 174   3                  ComCalculChkSum = ComCalculChkSum + CommTemp0;
 175   3              }
 176   2              if(CommState != 0 && CommState != 5)
 177   2              {
 178   3                  if(CommAscii == 0)
C51 COMPILER V7.06   COMM232                                                               12/15/2008 11:13:24 PAGE 4   

 179   3                  {
 180   4                      CommAscii = 1;
 181   4                      CommTemp1 = CommTemp0;
 182   4                      if(CommTemp1 < 0x3a)
 183   4                          CommTemp1 -= 0x30;
 184   4                      else
 185   4                          CommTemp1 -= 0x37;
 186   4                  }
 187   3                  else
 188   3                  {
 189   4                      CommAscii = 0;
 190   4                      if(CommTemp0 < 0x3a)
 191   4                          CommTemp0 -= 0x30;
 192   4                      else
 193   4                          CommTemp0 -= 0x37;
 194   4                      CommTemp1 <<= 4;
 195   4                      CommTemp1 |= CommTemp0;
 196   4                 }
 197   3              }
 198   2              if(CommAscii == 0)
 199   2              {
 200   3                  switch(CommState)
 201   3                  {
 202   4                      case 0:                    /*SOI*/
 203   4                      {
 204   5                          if(CommTemp0 == 0x7e)
 205   5                          {
 206   6                              CommState++;
 207   6                              ComCalculChkSum = 0;
 208   6                          }
 209   5                      }break;
 210   4                      case 1:                    /*ADD*/
 211   4                      {
 212   5                          if(CommTemp1 == BoardAddress)
 213   5                          {
 214   6                                                      CommState++;
 215   6                                              }
 216   5                                              else 
 217   5                                              {
 218   6                                                      CommState = 0;
 219   6                                              }
 220   5                      }break;
 221   4                      case 2:                    /*CID*/
 222   4                      {
 223   5                          CommCid = CommTemp1;
 224   5                          CommState++;
 225   5                          if(CommCid > 0x10) CommState = 0;
 226   5      
 227   5                      }break;
 228   4                      case 3:                    /*LENGTH*/
 229   4                      {
 230   5                          if(CommBytehilow == 0 )
 231   5                          {
 232   6                              CommLengthH = CommTemp1;
 233   6                              CommBytehilow = 1;
 234   6                          }
 235   5                          else
 236   5                          {
 237   6                              CommState++;
 238   6                              CommLengthL = CommTemp1;
 239   6                              CommBytehilow = 0;
 240   6                              if(CommLengthL > 100)CommState = 0;
C51 COMPILER V7.06   COMM232                                                               12/15/2008 11:13:24 PAGE 5   

 241   6                              CommRxPointer = 0;           //RxBufPointer
 242   6                              if(CommLengthL == 0)CommState++;
 243   6                          }
 244   5                      }break;
 245   4                      case 4:                     /*INFO*/
 246   4                      {
 247   5                          if(CommLengthL != 0)
 248   5                          {
 249   6                              CommRxBuf[CommRxPointer] = CommTemp1;
 250   6                              CommRxPointer++;
 251   6                              CommLengthL--;
 252   6                              CommLengthL--;
 253   6                              if(CommLengthL == 0)CommState++;
 254   6                          }
 255   5                          else
 256   5                              CommState++;
 257   5                      }break;
 258   4                      case 5:                     /*chksum*/
 259   4                      {
 260   5                          if(CommBytehilow == 0)
 261   5                          {
 262   6                              CommLengthH = CommTemp1;
 263   6                              CommBytehilow = 1;
 264   6                          }
 265   5                          else
 266   5                          {
 267   6                              CommBytehilow = 0;
 268   6                              CommChksumL = CommTemp1;
 269   6                              ReComCalculChkSum = CommChksumH;
 270   6                              ReComCalculChkSum = ReComCalculChkSum << 8;
 271   6                              ReComCalculChkSum |= CommChksumL;
 272   6                              ComCalculChkSum= (~ComCalculChkSum)+1;
 273   6                              if(ReComCalculChkSum == ComCalculChkSum)CommState++;
 274   6                              else
 275   6                              {
 276   7                                 goto comrxend;
 277   7                              }
 278   6                          }
 279   5                      }break;
 280   4                      case 6:                     /*EOI */
 281   4                      {
 282   5                       if(CommTemp0 == 0x0D)
 283   5                           {
 284   6                           Massageflag = 1;
 285   6                           }
 286   5                           CommState = 0;
 287   5                      }break;
 288   4                  }
 289   3                  comrxend:
 290   3                  ;
 291   3              }
 292   2              }
 293   1          RI = 0;
 294   1          EA = ea_time;
 295   1      }
 296          /********************************************************************************************************
 297                                                         End of file
 298          ********************************************************************************************************/


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    601    ----
C51 COMPILER V7.06   COMM232                                                               12/15/2008 11:13:24 PAGE 6   

   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 + -