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

📄 current.lst

📁 基于485的51单片机多机通讯程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
 248          void answer_judge()
 249          {
 250   1              unsigned char c_err;
 251   1              c_err=0;
 252   1      resend: if(R_ANSW!=OK)
 253   1              {
 254   2                      c_err++;
 255   2                      if(c_err<3)
 256   2                      {
 257   3                              TR_ans();
 258   3                              goto resend;
 259   3                      }
 260   2                      else
 261   2                      {
 262   3                              err=2;
 263   3      //                      err_operate();
 264   3                      }
 265   2              }
 266   1              else
 267   1                      R_ANSW=0;
 268   1      
 269   1      }
 270          
 271          void start_t2()
 272          {
 273   1              TM2CON=0x8D;    //16位溢出,分频系数8,f/12
 274   1              EA=1;
 275   1              TM2IR=0;
 276   1      }
 277          
 278          void EX0_INT (void) interrupt 0                 //急停
 279          {
 280   1              EX0=0;
 281   1              send_enable=1;
 282   1              if(YOUHU)
 283   1              {
 284   2                      current_enable=0;               //关电源使能
 285   2                      con_hf=1;                       //关高频使能
 286   2              }
 287   1              
 288   1              while(err_ok==0)
 289   1              {
 290   2                      if(called==1)
 291   2                      {
 292   3                              if(current_err==0)
 293   3                              {
 294   4                                      ini_sbuf(M_main,answer,OK,0,0,0,0);
 295   4                                      s_byte_nums=4;
 296   4                                      TR_noans();
 297   4                              }
 298   3                              else
 299   3                              {
 300   4                                      ini_sbuf(M_main,err_infor,M_current,err,0,0,0);
 301   4                                      s_byte_nums=5;
 302   4                                      TR_noans();
 303   4                                      current_err=0;
C51 COMPILER V7.06   CURRENT                                                               06/21/2005 15:24:34 PAGE 6   

 304   4                                      err=0;
 305   4                                      stop=1;
 306   4                              }
 307   3                              called=0;
 308   3                      }
 309   2              }
 310   1              urgent_stop=1;
 311   1      }
 312          
 313          void T0_INT (void) interrupt 1
 314          {
 315   1              c_t0++;
 316   1      }
 317          
 318          void EX1_INT(void) interrupt 2          //错误检测
 319          {
 320   1              unsigned char get_err;
 321   1              EX1=0;
 322   1              
 323   1              get_err=P5;
 324   1              get_err=get_err&0x08;
 325   1              if(get_err=0)
*** WARNING C276 IN LINE 325 OF D:\程序05~1\CURRENT\CURRENT.C: constant in condition expression
 326   1                      err=4;
 327   1              else
 328   1              {
 329   2                      get_err=P5;
 330   2                      get_err=get_err&0x10;
 331   2                      if(get_err==0)
 332   2                              err=5;
 333   2                      else
 334   2                      {
 335   3                              get_err=P5;
 336   3                              get_err=get_err&0x20;
 337   3                              if(get_err==0)
 338   3                                      err=6;
 339   3                              else
 340   3                              {
 341   4                                      get_err=P5;
 342   4                                      get_err=get_err&0x30;
 343   4                                      if(get_err==0)
 344   4                                              err=8;
 345   4                                      else
 346   4                                      {
 347   5                                              get_err=P5;
 348   5                                              get_err=get_err&0x40;
 349   5                                              if(get_err==0)
 350   5                                                      err=7;
 351   5                                      }
 352   4                              }
 353   3                      }
 354   2              }       
 355   1              if(err!=0)
 356   1              {
 357   2                      current_err=1;
 358   2                      stop=0;
 359   2              }
 360   1              else
 361   1                      EX1=1;
 362   1      }
 363          
 364          void T1_INT (void) interrupt 3
C51 COMPILER V7.06   CURRENT                                                               06/21/2005 15:24:34 PAGE 7   

 365          {
 366   1              c_t1++;
 367   1              if(send==1)
 368   1              {
 369   2                      if(c_t1==7)
 370   2                      {
 371   3                              S0BUF=sbuffer[POINTER0];
 372   3                              c_t1=0;
 373   3                      }
 374   2              }
 375   1              else
 376   1              {
 377   2                      if(c_t1==100)
 378   2                      {
 379   3                              TR1=0;
 380   3                              overtime=1;
 381   3                      }
 382   2              }
 383   1      }
 384          
 385          void TR_INT (void) interrupt 4                                  //串行口中断
 386          {
 387   1              EA=0;                                                   //关中断
 388   1              if(TI==1)                                               //发送完成
 389   1              {
 390   2                      TI=0;
 391   2                      POINTER0++;                                     //发送缓冲指针加1
 392   2                      if(POINTER0<s_byte_nums-1)
 393   2                              SSUM=SSUM+sbuffer[POINTER0];    //6个数据字节求和
 394   2                      else
 395   2                              sbuffer[s_byte_nums-1]=SSUM+sbuffer[0]; //数据和加地址生成校验码
 396   2                      if(POINTER0==s_byte_nums)
 397   2                              REN=1;
 398   2              }
 399   1      
 400   1              if(RI==1)                                               //接收完成
 401   1              {
 402   2                      RI=0;
 403   2                      POINTER1++;                             //接收缓冲指针加1
 404   2                      rbuffer[POINTER1-1]=S0BUF;              //从接收缓冲读出数据
 405   2                      if(rbuffer[0]==M_current||rbuffer[0]==M_ALL||rbuffer[0]==M_current_RW)
 406   2                      {
 407   3                              SM2=0;
 408   3                              if(POINTER1==2)                         //获取字节个数
 409   3                                      r_byte_nums=get_byte_nums(rbuffer[1]);
 410   3                              if(POINTER1<r_byte_nums)
 411   3                                      RSUM=RSUM+rbuffer[POINTER1-1];  //生成校验码
 412   3                              else
 413   3                              {
 414   4                                      SM2=1;
 415   4                                      if(RSUM==rbuffer[r_byte_nums-1])
 416   4                                      {
 417   5                                              if(ans==0)
 418   5                                              {
 419   6                                                      POINTER1=0;
 420   6                                                      RSUM=0;
 421   6                                              }
 422   5                                              S_ANSW=OK;
 423   5                                              data_type();
 424   5                                      }
 425   4                                      else
 426   4                                      {
C51 COMPILER V7.06   CURRENT                                                               06/21/2005 15:24:34 PAGE 8   

 427   5                                              S_ANSW=FAIL;
 428   5                                              if(resend==0)
 429   5                                                      resend=1;
 430   5                                      }
 431   4                                      r_byte_nums=4;
 432   4                              }
 433   3                      }
 434   2                      else
 435   2                              POINTER1=0;
 436   2              }
 437   1              EA=1;                                       //开中断
 438   1      }
 439          
 440          void S1_int (void) interrupt 5      //I2C
 441          {
 442   1              ES1=0;
 443   1              if(S1STA==0x00)
 444   1              {
 445   2                      FF=1;
 446   2                      S1CON=0xD5; //STA=0   STO=1    SI=0     AA=1
 447   2              }
 448   1              if(S1STA==0x08)
 449   1              {
 450   2                      S1DAT=SLA;
 451   2                      S1CON=0xC5; //STA=0   STO=0    SI=0     AA=1
 452   2              }
 453   1              if(S1STA==0x10)
 454   1              {
 455   2                      S1DAT=SLA;
 456   2                      S1CON=0xC5; //STA=0   STO=0    SI=0     AA=1
 457   2              }
 458   1              if(S1STA==0x18)
 459   1              {
 460   2                      S1DAT=COMM;
 461   2                      S1CON=0xC5; //STA=0   STO=0    SI=0     AA=1
 462   2              }
 463   1              if(S1STA==0x20)
 464   1              {
 465   2                      FF=1;
 466   2                      S1CON=0xD5; //STA=0   STO=1    SI=0     AA=1
 467   2              }
 468   1              if(S1STA==0x28)
 469   1              {
 470   2                      S1CON=0xD5; //STA=0   STO=1    SI=0     AA=1
 471   2                      FF=1;
 472   2              }
 473   1              if(S1STA==0x30)
 474   1              {
 475   2                      FF=1;
 476   2                      S1CON=0xD5; //STA=0   STO=1    SI=0     AA=1
 477   2              }
 478   1              if(S1STA==0x38)
 479   1                      S1CON=0xE5; //STA=1   STO=0    SI=0     AA=1
 480   1              if(S1STA==0x40)
 481   1                      S1CON=0xC5; //STA=0   STO=0    SI=0     AA=1
 482   1              if(S1STA==0x48)
 483   1              {
 484   2                      FF=1;
 485   2                      S1CON=0xD5; //STA=0   STO=1    SI=0     AA=1
 486   2              }
 487   1              if(S1STA==0x50)
 488   1              {
C51 COMPILER V7.06   CURRENT                                                               06/21/2005 15:24:34 PAGE 9   

 489   2                      GET=S1DAT;
 490   2                      S1CON=0xC1; //STA=0   STO=0    SI=0     AA=0
 491   2              }
 492   1              if(S1STA==0x58)
 493   1              {
 494   2                      FF=1;
 495   2                      S1CON=0xD5; //STA=0   STO=1   SI=0     AA=1
 496   2              }
 497   1              ES1=1;
 498   1      }
 499          
 500          void CT0_int (void) interrupt 6                 //横摆使能输入
 501          {
 502   1              CTI0=0;

⌨️ 快捷键说明

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