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

📄 main1_0928.lst

📁 基于485的51单片机多机通讯程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
 461   3                              if(s_p==0)
 462   3                                      SBUF=sbuffer[POINTER0];
 463   3                              else
 464   3                                      SBUF=sbuffer1[POINTER0];
 465   3                              c_t1=0;
 466   3                      }
 467   2              }
 468   1              else
 469   1              {
 470   2                      if(c_t1==100)
 471   2                      {
 472   3                              TR1=0;
 473   3                              overtime=1;
 474   3                      }
 475   2              }
 476   1      //      EA=1;
 477   1      }
 478          
 479          void TR_INT (void) interrupt 4                                  //串行口中断
 480          {
 481   1              EA=0;                                                   //关中断
 482   1              if(TI==1)                                               //发送完成
 483   1              {
 484   2                      TI=0;
 485   2                      POINTER0++;                                     //发送缓冲指针加1
 486   2      //              if(POINTER0==1)
 487   2      //                      TB8=0;
 488   2                      if(POINTER0<s_byte_nums)
C51 COMPILER V7.06   MAIN1_0928                                                            10/12/2005 16:13:25 PAGE 9   

 489   2                      {
 490   3                              if(POINTER0<s_byte_nums-1)
 491   3                              {
 492   4                                      if(s_p==1)
 493   4                                              SSUM=SSUM+sbuffer1[POINTER0];
 494   4                                      else
 495   4                                              SSUM=SSUM+sbuffer[POINTER0];    //6个数据字节求和
 496   4                              }
 497   3                              else
 498   3                              {
 499   4                                      if(s_p==1)
 500   4                                              sbuffer1[s_byte_nums-1]=SSUM+sbuffer1[0];
 501   4                                      else
 502   4                                              sbuffer[s_byte_nums-1]=SSUM+sbuffer[0]; //数据和加地址生成校验码
 503   4                              }
 504   3                      }
 505   2              }
 506   1      
 507   1              if(RI==1)                                               //接收完成
 508   1              {
 509   2                      RI=0;
 510   2                      POINTER1++;                             //接收缓冲指针加1
 511   2                      rbuffer[POINTER1-1]=SBUF;               //从接收缓冲读出数据
 512   2                      if(POINTER1==2)
 513   2                              r_byte_nums=get_byte_nums(rbuffer[1]);
 514   2                      if(POINTER1<r_byte_nums)
 515   2                              RSUM=RSUM+rbuffer[POINTER1-1];  //生成校验码
 516   2                      else
 517   2                      {
 518   3                              if(rbuffer[r_byte_nums-1]==RSUM)
 519   3                              {
 520   4                                      if(ans==0)
 521   4                                      {
 522   5                                              POINTER1=0;
 523   5                                              RSUM=0;
 524   5                                      }
 525   4                                      S_ANSW=OK;
 526   4                                      data_type();
 527   4                              }
 528   3                              else
 529   3                              {
 530   4                                      S_ANSW=FAIL;
 531   4                                      if(resend==0)
 532   4                                              resend=1;
 533   4                              }
 534   3                      }
 535   2              }
 536   1              EA=1;                                       //开中断
 537   1      }
 538          
 539          main()
 540          {
 541   1      uchar i,j,delt;
 542   1      
 543   1              TMOD=0x22;                      //定时器1,方式2;
 544   1              TL1=0XFD;                       //波特率9600
 545   1              TH1=0XFD;
 546   1              TR1=1;                          //启动定时器
 547   1      //      PCON=0X80;                      //SMOD=1;
 548   1              TMOD=0x23;                      //定时器0,方式3,两个8位定时器;
 549   1              TR1=0;
 550   1              TF1=0;
C51 COMPILER V7.06   MAIN1_0928                                                            10/12/2005 16:13:25 PAGE 10  

 551   1              SCON=0X50;                      //串口方式1,SM2=0,REN=1,TB8=1,RB8=0,TI=0,RI=0
 552   1              IP=0X98;                        //S0=1,T1=1
 553   1      //      EX0=1;                          //急停
 554   1              ES=1;                           //开串口中断
 555   1              ET1=1;
 556   1              EX0=1;
 557   1              EA=1;                           //中断总允许
 558   1              
 559   1              temp_c=0;
 560   1      
 561   1              pc_ok=0;
 562   1              urgent_stop=0;
 563   1              main1_err=0;
 564   1      
 565   1      BEGIN:
 566   1              if(urgent_stop==1)
 567   1              {               
 568   2                      urgent_stop=0;
 569   2                      EX0=1;
 570   2              }
 571   1      
 572   1              pc_stop=0;
 573   1              urgent_stop=0;
 574   1              err_ok=1;
 575   1              work=0;
 576   1              start=0;
 577   1              err=0;                          //错误编号
 578   1              editing=0;                      //正在编程
 579   1              edit_finish=0;                  //编程结束
 580   1              p_received=0;
 581   1              change_prg=0;
 582   1              connect=0;
 583   1              break_connect=0;
 584   1              in_sector=0;
 585   1              nonce_sec=0;                    //当前区间号
 586   1              FINISH=0;
 587   1              CURRENT=0;
 588   1              VOLTAGE=0;
 589   1              AVC=0;
 590   1              decrease=0;
 591   1              rot_front=0;
 592   1              rot_reverse=0;
 593   1              wire_add=0;
 594   1              wire_dec=0;
 595   1              osc_l=0;
 596   1              osc_r=0;
 597   1              avc_up=0;
 598   1              avc_down=0;
 599   1              temp_motor_stop=0;
 600   1      //      motor_stop=0;
 601   1              new_switch1=0;
 602   1              new_switch2=0;
 603   1              new_switch3=0;
 604   1              start_again=0;
 605   1              need_para=0;
 606   1              p_changed=0;
 607   1              edited=0;
 608   1      
 609   1              POINTER0=0;
 610   1              SSUM=0;
 611   1              S_ANSW=0;
 612   1              POINTER1=0;
C51 COMPILER V7.06   MAIN1_0928                                                            10/12/2005 16:13:25 PAGE 11  

 613   1              RSUM=0;
 614   1              ans=0;
 615   1              R_ANSW=0;
 616   1              r_byte_nums=4;
 617   1              noans_ok=1;
 618   1              overtime=0;
 619   1              s_p=0;                          //1,发送参数
 620   1      
 621   1      
 622   1      //      rc_forbided=1;
 623   1      
 624   1              while(start==0)
 625   1              {
 626   2                      if(urgent_stop==1)
 627   2                      {
 628   3                              if(pc_stop==1)
 629   3                              {
 630   4                                      ini_sbuf(M_PC,answer,S_ANSW,0,0);
 631   4                                      s_byte_nums=4;
 632   4                                      TR_noans();
 633   4                                      stop=0;
 634   4                                      while(err_ok==0);
 635   4                              }
 636   3                              goto BEGIN;
 637   3                      }
 638   2                      if(connect==1)
 639   2                      {
 640   3                              ini_sbuf(M_PC,answer,OK,0,0);
 641   3                              s_byte_nums=4;
 642   3                              TR_noans();
 643   3                              pc_ok=1;
 644   3                              connect=0;
 645   3                      }
 646   2                      if(break_connect==1)
 647   2                      {
 648   3                              ini_sbuf(M_PC,answer,OK,0,0);
 649   3                              s_byte_nums=4;
 650   3                              TR_noans();
 651   3                              pc_ok=0;
 652   3                              break_connect=0;
 653   3                      }
 654   2      /*
 655   2                      if(p_forbid==1)
 656   2                      {
 657   2                              ini_sbuf(M_PC,answer,S_ANSW,0,0);
 658   2                              s_byte_nums=4;
 659   2                              TR_noans();
 660   2                              p_forbided=1;
 661   2                              p_actived=0;
 662   2                              p_forbid=0;
 663   2                      }
 664   2                      if(rc_forbid==1)
 665   2                      {
 666   2                              ini_sbuf(M_PC,answer,S_ANSW,0,0);
 667   2                              s_byte_nums=4;
 668   2                              TR_noans();
 669   2                              rc_forbided=1;
 670   2                              rc_actived=0;
 671   2                              rc_forbid=0;
 672   2                      }
 673   2      */
 674   2                      if(temp_motor_stop==1)
C51 COMPILER V7.06   MAIN1_0928                                                            10/12/2005 16:13:25 PAGE 12  

 675   2                      {
 676   3                              ini_sbuf(M_PC,answer,S_ANSW,0,0);
 677   3                              s_byte_nums=4;
 678   3                              TR_noans();
 679   3                              motor_stop=1;
 680   3                              temp_motor_stop=0;
 681   3                      }
 682   2                      if(editing==1)
 683   2                      {
 684   3                              ini_sbuf(M_PC,answer,S_ANSW,0,0);
 685   3                              s_byte_nums=4;
 686   3                              TR_noans();
 687   3      
 688   3                              while(p_received==0)
 689   3                              {
 690   4                                      if(urgent_stop==1)
 691   4                                      {
 692   5                                              if(pc_stop==1)
 693   5                                              {
 694   6                                                      ini_sbuf(M_PC,answer,S_ANSW,0,0);

⌨️ 快捷键说明

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