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

📄 osc.lst

📁 基于485的51单片机多机通讯程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
 702   1              TR1=0;
 703   1              TF1=0;
 704   1              S0CON=0XF8;                             //串口方式3,SM2=1,REN=1,TB8=1,RB8=0,TI=0,RI=0
 705   1              IP1=0X03;                               //CT0、CT1高优先级
 706   1              IP0=0X98;                               //S0=1,T1=1
 707   1              ES0=1;                                  //开串口中断
 708   1      //      ET0=1;
 709   1              ET1=1;
 710   1      //      EAD=1;                                  //AD中断允许
 711   1      //      ES1=1;                                  //I2C
 712   1              EA=1;                                   //中断总允许
 713   1              start_t2();
 714   1              urgent_stop=0;
 715   1              osc_err=0;
 716   1              err_ok=0;
 717   1              err=0;
 718   1      BEGIN:
 719   1              if(urgent_stop==1)
 720   1              {
 721   2                      urgent_stop=0;
 722   2                      err_ok=0;
 723   2                      EX1=1;
 724   2                      EX0=1;
 725   2              }
 726   1              CTCON=0x00;
 727   1              IEN1=0x00;
 728   1              COM=0X36;
 729   1              COUNT0=0XA0;
 730   1              COUNT0=0X0F;                                    //启动横摆脉冲 1K
 731   1              COM=0X76;
 732   1              COUNT1=0x00;
 733   1              COUNT1=0x00;
 734   1              COM=0XB6;
 735   1              COUNT2=0x00;
 736   1              COUNT2=0x00;
 737   1              gate=0;                         //关门控
C51 COMPILER V7.06   OSC                                                                   06/22/2005 15:49:12 PAGE 13  

 738   1              osc_enable=1;                           //横摆使能
 739   1              osc_dir=0;                              //横摆方向,0-左,1-右
 740   1              osc_out=1;                              //横摆输出
 741   1              work=0;
 742   1              called=0;
 743   1              start=0;
 744   1              sector=0;
 745   1              in_sector=0;
 746   1              start_osc=0;
 747   1              osc_ok=0;
 748   1              first_center=1;
 749   1              t_edge=0;                               //0-左边缘 1-右边缘
 750   1              c_t0=0;
 751   1              c_t42=0;
 752   1              temp_c=0;
 753   1              share=0;                                //启动横摆标志
 754   1              stop_osc=0;
 755   1              decrease=0;
 756   1              decreased=0;                            //衰减标志
 757   1              decrease_ok=0;
 758   1              to_begin=0;
 759   1      
 760   1              need_para=0;
 761   1              POINTER0=0;
 762   1              SSUM=0;
 763   1              S_ANSW=0;
 764   1              POINTER1=0;
 765   1              RSUM=0;
 766   1              r_byte_nums=4;
 767   1              ans=0;
 768   1              send=0;
 769   1              resend=0;
 770   1              demand=0;
 771   1      
 772   1              osc_l=0;
 773   1              osc_r=0;
 774   1              center_excursion=0;                     //横摆中心偏移标志(DC41)
 775   1              breadth_add=0;
 776   1              breadth_dec=0;
 777   1              osc_add=0;                              //摆宽增加次数
 778   1              osc_dec=0;
 779   1              osc=0;
 780   1              judge_ok=0;
 781   1              motor_stop=0;
 782   1      
 783   1              CML0=TML2+0X20;
 784   1              if(CML0<TML2)
 785   1                      CMH0=TMH2+1+0X4E;
 786   1              else
 787   1                      CMH0=TMH2+0X4E;                         //20ms
 788   1              EX1=1;
 789   1              EX0=1;
 790   1              while(start==0)                                 //等待过程中,接受点名和参数
 791   1              {
 792   2                      if(called==1)
 793   2                      {
 794   3                              ini_sbuf(M_main,infor,S_ANSW,cross_machine,0,0);
 795   3                              s_byte_nums=get_byte_nums(infor);
 796   3                              TR_noans();
 797   3                              called=0;
 798   3                      }
 799   2      
C51 COMPILER V7.06   OSC                                                                   06/22/2005 15:49:12 PAGE 14  

 800   2                      if(receive_p_out==1)
 801   2                      {
 802   3                              point=&pp.k4;
 803   3                              for(p_sec=0;p_sec<13;p_sec++)
 804   3                                      *(point+p_sec)=rbuffer[p_sec*2+2]*256+rbuffer[p_sec*2+3];
 805   3                              ini_sbuf(M_main,answer,S_ANSW,0,0,0);
 806   3                              s_byte_nums=4;
 807   3                              TR_noans();
 808   3      //                      demand=0;
 809   3                              receive_p_out=0;
 810   3                      }
 811   2      
 812   2                      if(receive_p_in==1)
 813   2                      {
 814   3                              point=&pp.x[nonce_sec][0];
 815   3                              for(p_sec=0;p_sec<6;p_sec++)
 816   3                                      *(point+p_sec)=rbuffer[p_sec*2+3]*256+rbuffer[p_sec*2+4];
 817   3      
 818   3                              ini_sbuf(M_main,answer,S_ANSW,0,0,0);
 819   3                              s_byte_nums=4;
 820   3                              TR_noans();
 821   3      //                      demand=0;
 822   3                              receive_p_in=0;
 823   3                      }
 824   2      
 825   2                      if(osc_l==1)
 826   2                      {
 827   3                              gate=1;         //给出横摆脉冲
 828   3                              osc_dir=0;              //左
 829   3                              osc_enable=0;           //开使能
 830   3                              osc_l=0;
 831   3                      }
 832   2      
 833   2                      if(osc_r==1)
 834   2                      {
 835   3                              gate=1;         //开8254门控信号
 836   3                              osc_dir=1;              //右
 837   3                              osc_enable=0;           //开使能
 838   3                              osc_r=0;
 839   3                      }
 840   2      
 841   2                      if(motor_stop==1)
 842   2                      {
 843   3                              gate=0;         //关横摆脉冲
 844   3                              osc_enable=1;
 845   3                              motor_stop=0;
 846   3                      }
 847   2      
 848   2                      if(urgent_stop==1)
 849   2                              goto BEGIN;
 850   2              }
 851   1              K4=pp.k4&0x01;
 852   1              const0=pp.v41*(pp.t42_l+pp.t42_r)/2;
 853   1              const0=const0+pp.a41*60;
 854   1      //      const0=pp.a41*60;
 855   1              const1=(unsigned long)(pp.v41)*(unsigned long)(pp.t17);
 856   1              out0=2400000/pp.v41;                            //横摆脉冲, 时钟4M,4*60*0.01*1000000
 857   1              out1=10*pp.a41;                                 //横摆半宽脉冲,时钟1K,(A41/10)/(v41/60)*1000
 858   1              out2=2*out1;                                    //横摆整宽脉冲
 859   1              c_t42_l=pp.t42_l*5;                             //pp.t42_l/10*1000/50
 860   1              c_t42_r=pp.t42_r*5;
 861   1              COM=0X36;
C51 COMPILER V7.06   OSC                                                                   06/22/2005 15:49:12 PAGE 15  

 862   1              COUNT0=out0%256;
 863   1              COUNT0=out0/256;
 864   1              COM=0X76;
 865   1              COUNT1=out1%256;
 866   1              COUNT1=out1/256;                                //半个摆宽
 867   1              COM=0XB6;
 868   1              COUNT2=out1%256;
 869   1              COUNT2=out1/256;                                //整个摆宽
 870   1              work=3;                                 //关8254门控信号
 871   1              do
 872   1              {
 873   2                      if(start_osc==1)                //开始横摆
 874   2                      {
 875   3                              ini_sbuf(M_main,answer,S_ANSW,0,0,0);
 876   3                              s_byte_nums=4;
 877   3                              TR_noans();
 878   3                              osc_dir=0;              //方向——左
 879   3                              osc_enable=0;           //开横摆使能
 880   3                              CTCON=CTCON|0x08;       //CT1下降沿
 881   3                              IEN1=IEN1|0X02;         //允许CT1
 882   3                              gate=1;
 883   3                              osc_out=1;
 884   3      //                      TR0=1;
 885   3                              start_osc=0;
 886   3                      }
 887   2      
 888   2                      if(urgent_stop==1)
 889   2                              goto BEGIN;
 890   2                              
 891   2                      if(pp.k4==OFF&&center_excursion==1)
 892   2                      {
 893   3                              if(excursion_dir==0)
 894   3                                      osc_dir=0;              //左
 895   3                              else
 896   3                                      osc_dir=1;
 897   3                              CTCON=CTCON|0X02;
 898   3                              COM=0X76;
 899   3                              COUNT1=10;
 900   3                              COUNT1=0;
 901   3                              IEN1=IEN1|0X01;
 902   3                              gate=1;
 903   3                              osc_enable=0;           //开横摆使能
 904   3                              center_excursion=0;
 905   3                      }
 906   2      
 907   2                      if(urgent_stop==1)
 908   2                              goto BEGIN;
 909   2                              
 910   2                      if(sector==1)                   //进入新区间
 911   2                      {
 912   3                              if(osc_ok==1)
 913   3                              {
 914   4                                      K4=pp.x[nonce_sector][19];
 915   4                                      if(K4==1)
 916   4                                      {
 917   5                                      }
 918   4                                      else
 919   4                                      {
 920   5                                              stop_osc=1;
 921   5                                      }
 922   4                              }
 923   3                              sector=0;
C51 COMPILER V7.06   OSC                                                                   06/22/2005 15:49:12 PAGE 16  

 924   3                      }
 925   2      /*
 926   2                      if(resend==1)
 927   2                      {
 928   2                              POINTER1=0;
 929   2                              RSUM=0;
 930   2                              ini_sbuf(M_main,answer,S_ANSW,0,0,0);
 931   2                              s_byte_nums=get_byte_nums(answer);
 932   2                      }
 933   2      */
 934   2                      if(urgent_stop==1)
 935   2                              goto BEGIN;
 936   2              }while(decrease==0);
 937   1      /*

⌨️ 快捷键说明

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