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

📄 current1.lst

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

 304   2              }
 305   1              urgent_stop=1;
 306   1      }
 307          
 308          void T0_INT (void) interrupt 1
 309          {       
 310   1              c_t0++;
 311   1              if(ahf_ok==1)
 312   1              {
 313   2                      
 314   2                      if(c_t0==c_ahf_p||c_t0==c_ahf_b)
 315   2                      {
 316   3                              if(current_out==1)
 317   3                              {
 318   4                                      if(ahf_p_b==1&&c_t0==c_ahf_p)
 319   4                                      {
 320   5                                              TR0=0;
 321   5                                              ahf_p_b=0;
 322   5                                              c_t0=0;
 323   5                                              IM8=IMM%256;
 324   5                                              IM4=IMM/256;
 325   5                                              UPD=0X00;
 326   5                                              TR0=1;
 327   5                                      }
 328   4                                      else if(ahf_p_b==0&&c_t0==c_ahf_b)
 329   4                                      {
 330   5                                              TR0=0;
 331   5                                              ahf_p_b=1;
 332   5                                              c_t0=0;
 333   5                                              IM8=IM%256;
 334   5                                              IM4=IM/256;
 335   5                                              UPD=0X00;
 336   5                                              TR0=1;
 337   5                                      }
 338   4                              }
 339   3                              else if(current_out==0)
 340   3                              {
 341   4                                      if(ahf_p_b==1&&c_t0==c_ahf_p)
 342   4                                      {
 343   5                                              TR0=0;
 344   5                                              ahf_p_b=0;
 345   5                                              c_t0=0;
 346   5                                              IB8=IBB%256;
 347   5                                              IB4=IBB/256;
 348   5                                              UPD=0X00;
 349   5                                              TR0=1;
 350   5                                      }
 351   4                                      else if(ahf_p_b==0&&c_t0==c_ahf_b)
 352   4                                      {
 353   5                                              TR0=0;
 354   5                                              ahf_p_b=1;
 355   5                                              c_t0=0;
 356   5                                              IB8=IB%256;
 357   5                                              IB4=IB/256;
 358   5                                              UPD=0X00;
 359   5                                              TR0=1;
 360   5                                      }
 361   4                              }
 362   3                      }
 363   2              }
 364   1      }
 365          
C51 COMPILER V7.06   CURRENT1                                                              07/15/2005 11:04:46 PAGE 7   

 366          void EX1_INT(void) interrupt 2          //错误检测
 367          {
 368   1              unsigned char get_err;
 369   1              EX1=0;
 370   1              
 371   1              get_err=P5;
 372   1              get_err=get_err&0x08;
 373   1              if(get_err==0)
 374   1                      err=4;
 375   1              else
 376   1              {
 377   2                      get_err=P5;
 378   2                      get_err=get_err&0x10;
 379   2                      if(get_err==0)
 380   2                              err=5;
 381   2                      else
 382   2                      {
 383   3                              get_err=P5;
 384   3                              get_err=get_err&0x20;
 385   3                              if(get_err==0)
 386   3                                      err=6;
 387   3                              else
 388   3                              {
 389   4                                      get_err=P5;
 390   4                                      get_err=get_err&0x30;
 391   4                                      if(get_err==0)
 392   4                                              err=8;
 393   4                                      else
 394   4                                      {
 395   5                                              get_err=P5;
 396   5                                              get_err=get_err&0x40;
 397   5                                              if(get_err==0)
 398   5                                                      err=7;
 399   5                                      }
 400   4                              }
 401   3                      }
 402   2              }       
 403   1              if(err!=0)
 404   1              {
 405   2                      current_err=1;
 406   2                      stop=0;
 407   2              }
 408   1              else
 409   1                      EX1=1;
 410   1      }
 411          
 412          void T1_INT (void) interrupt 3
 413          {
 414   1              c_t1++;
 415   1              if(send==1)
 416   1              {
 417   2                      if(c_t1==7)
 418   2                      {
 419   3                              S0BUF=sbuffer[POINTER0];
 420   3                              c_t1=0;
 421   3                      }
 422   2              }
 423   1              else
 424   1              {
 425   2                      if(c_t1==100)
 426   2                      {
 427   3                              TR1=0;
C51 COMPILER V7.06   CURRENT1                                                              07/15/2005 11:04:46 PAGE 8   

 428   3                              overtime=1;
 429   3                      }
 430   2              }
 431   1      }
 432          
 433          void TR_INT (void) interrupt 4                                  //串行口中断
 434          {
 435   1              EA=0;                                                   //关中断
 436   1              if(TI==1)                                               //发送完成
 437   1              {
 438   2                      TI=0;
 439   2                      POINTER0++;                                     //发送缓冲指针加1
 440   2                      if(POINTER0<s_byte_nums-1)
 441   2                              SSUM=SSUM+sbuffer[POINTER0];    //6个数据字节求和
 442   2                      else
 443   2                              sbuffer[s_byte_nums-1]=SSUM+sbuffer[0]; //数据和加地址生成校验码
 444   2                      if(POINTER0==s_byte_nums)
 445   2                              REN=1;
 446   2              }
 447   1      
 448   1              if(RI==1)                                               //接收完成
 449   1              {
 450   2                      RI=0;
 451   2                      POINTER1++;                             //接收缓冲指针加1
 452   2                      rbuffer[POINTER1-1]=S0BUF;              //从接收缓冲读出数据
 453   2                      if(rbuffer[0]==M_current||rbuffer[0]==M_ALL||rbuffer[0]==M_current_RW)
 454   2                      {
 455   3                              SM2=0;
 456   3                              if(POINTER1==2)                         //获取字节个数
 457   3                                      r_byte_nums=get_byte_nums(rbuffer[1]);
 458   3                              if(POINTER1<r_byte_nums)
 459   3                                      RSUM=RSUM+rbuffer[POINTER1-1];  //生成校验码
 460   3                              else
 461   3                              {
 462   4                                      SM2=1;
 463   4                                      if(RSUM==rbuffer[r_byte_nums-1])
 464   4                                      {
 465   5                                              if(ans==0)
 466   5                                              {
 467   6                                                      POINTER1=0;
 468   6                                                      RSUM=0;
 469   6                                              }
 470   5                                              S_ANSW=OK;
 471   5                                              data_type();
 472   5                                      }
 473   4                                      else
 474   4                                      {
 475   5                                              S_ANSW=FAIL;
 476   5                                              if(resend==0)
 477   5                                                      resend=1;
 478   5                                      }
 479   4                                      r_byte_nums=4;
 480   4                              }
 481   3                      }
 482   2                      else
 483   2                              POINTER1=0;
 484   2              }
 485   1              EA=1;                                       //开中断
 486   1      }
 487          
 488          void S1_int (void) interrupt 5      //I2C
 489          {
C51 COMPILER V7.06   CURRENT1                                                              07/15/2005 11:04:46 PAGE 9   

 490   1              ES1=0;
 491   1              if(S1STA==0x00)
 492   1              {
 493   2                      FF=1;
 494   2                      S1CON=0xD5; //STA=0   STO=1    SI=0     AA=1
 495   2              }
 496   1              if(S1STA==0x08)
 497   1              {
 498   2                      S1DAT=SLA;
 499   2                      S1CON=0xC5; //STA=0   STO=0    SI=0     AA=1
 500   2              }
 501   1              if(S1STA==0x10)
 502   1              {
 503   2                      S1DAT=SLA;
 504   2                      S1CON=0xC5; //STA=0   STO=0    SI=0     AA=1
 505   2              }
 506   1              if(S1STA==0x18)
 507   1              {

⌨️ 快捷键说明

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