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

📄 osc1.lst

📁 基于485的51单片机多机通讯程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
 690   3                              COUNT2=out2%256;
 691   3                              COUNT2=out2/256;
 692   3                              osc_enable=0;
 693   3                              
 694   3                      }
 695   2                      IEN1=IEN1|0X10;                 //允许CM0,边缘停留时间
 696   2              }
 697   1      }
 698          
 699          void CM0_int (void) interrupt 11                //边缘停留时间
 700          {
 701   1              CMI0=0;
 702   1              c_t42++;
 703   1              if(decreased==0)
 704   1              {
 705   2                      if(t_edge==0&&c_t42==c_t42_l||t_edge==1&&c_t42==c_t42_r)                                //左边缘
 706   2                      {
 707   3                              IEN1=IEN1&0XEF;         //禁止CM0
 708   3                              CTCON=CTCON|0x02;       //CT0下降沿
 709   3                              IEN1=IEN1|0X01;         //允许CT0
 710   3                              gate=1;
 711   3                              TR0=1;
 712   3                              osc_out=~osc_out;       //边缘停留时间结束
 713   3                              c_t42=0;
 714   3                      }
 715   2              }
 716   1              else
 717   1              {
 718   2                      if(t_edge==0&&c_t42==c_t42_l||t_edge==1&&c_t42==c_t42_r)                                //左边缘
 719   2                      {
 720   3                              IEN1=IEN1&0XEF;                 //禁止CM0
 721   3                              CTCON=CTCON|0x02;
 722   3                              IEN1=IEN1|0X01;
 723   3                              gate=1;
 724   3                              osc_out=~osc_out;               //边缘停留时间结束
 725   3                              c_t42=0;
 726   3                      }
 727   2              }
 728   1              CML0=TML2+0X20;
 729   1              if(CML0<TML2)
 730   1                      CMH0=TMH2+1+0X4E;
 731   1              else
 732   1                      CMH0=TMH2+0X4E;
 733   1      }
 734          
 735          main()
 736          {
 737   1              TMOD=0x22;                              //定时器1,方式2;定时器0,方式3,两个8位定时器;
C51 COMPILER V7.06   OSC1                                                                  06/23/2005 10:56:30 PAGE 13  

 738   1              TL1=0XFD;                               //波特率19200
 739   1              TH1=0XFD;
 740   1              TR1=1;                                  //启动定时器
 741   1              TMOD=0x23;                              //定时器0,方式3,两个8位定时器;
 742   1              TR1=0;
 743   1              TF1=0;
 744   1              S0CON=0XF8;                             //串口方式3,SM2=1,REN=1,TB8=1,RB8=0,TI=0,RI=0
 745   1      //      IP1=0X03;                               //CT0、CT1高优先级
 746   1              IP0=0X98;                               //S0=1,T1=1
 747   1              ES0=1;                                  //开串口中断
 748   1      //      ET0=1;
 749   1              ET1=1;
 750   1      //      EAD=1;                                  //AD中断允许
 751   1      //      ES1=1;                                  //I2C
 752   1              EA=1;                                   //中断总允许
 753   1              start_t2();
 754   1              urgent_stop=0;
 755   1              osc_err=0;
 756   1              err_ok=0;
 757   1              err=0;
 758   1      BEGIN:
 759   1              if(urgent_stop==1)
 760   1              {
 761   2                      urgent_stop=0;
 762   2                      err_ok=0;
 763   2                      EX1=1;
 764   2                      EX0=1;
 765   2              }
 766   1              CTCON=0x00;
 767   1              IEN1=0x00;
 768   1              COM=0X36;
 769   1              COUNT0=0XA0;
 770   1              COUNT0=0X0F;                                    //启动横摆脉冲 1K
 771   1              COM=0X76;
 772   1              COUNT1=0x00;
 773   1              COUNT1=0x00;
 774   1              COM=0XB6;
 775   1              COUNT2=0x00;
 776   1              COUNT2=0x00;
 777   1              gate=0;                         //关门控
 778   1              osc_enable=1;                           //横摆使能
 779   1              osc_dir=0;                              //横摆方向,0-左,1-右
 780   1              osc_out=1;                              //横摆输出
 781   1              work=0;
 782   1              receive_p_out=0;
 783   1              receive_p_in=0;
 784   1              called=0;
 785   1              start=0;
 786   1              new_sector=0;
 787   1              in_sector=0;
 788   1              nonce_sec=0;
 789   1              sec_center=0;
 790   1              K4=0;
 791   1              start_osc=0;
 792   1              osc_ok=0;
 793   1              first_center=1;
 794   1              t_edge=0;                               //0-左边缘 1-右边缘
 795   1              c_t0=0;
 796   1              c_t42=0;
 797   1              temp_c=0;
 798   1              share=0;                                //启动横摆标志
 799   1              stop_osc=0;
C51 COMPILER V7.06   OSC1                                                                  06/23/2005 10:56:30 PAGE 14  

 800   1              decrease=0;
 801   1              decreased=0;                            //衰减标志
 802   1              decrease_ok=0;
 803   1              to_begin=0;
 804   1      
 805   1              need_para=0;
 806   1              POINTER0=0;
 807   1              SSUM=0;
 808   1              S_ANSW=0;
 809   1              POINTER1=0;
 810   1              RSUM=0;
 811   1              r_byte_nums=4;
 812   1              ans=0;
 813   1              send=0;
 814   1              resend=0;
 815   1      
 816   1              osc_l=0;
 817   1              osc_r=0;
 818   1              center_excursion=0;                     //横摆中心偏移标志(DC41)
 819   1              center_change=0;                        //自动横摆未开时,调整中心
 820   1              breadth_add=0;
 821   1              breadth_dec=0;
 822   1              osc_add=0;                              //摆宽增加次数
 823   1              osc_dec=0;
 824   1              osc=0;
 825   1              judge_ok=0;
 826   1              motor_stop=0;
 827   1      
 828   1              CML0=TML2+0X20;
 829   1              if(CML0<TML2)
 830   1                      CMH0=TMH2+1+0X4E;
 831   1              else
 832   1                      CMH0=TMH2+0X4E;                         //20ms
 833   1              EX1=1;
 834   1              EX0=1;
 835   1              while(start==0)                                 //等待过程中,接受点名和参数
 836   1              {
 837   2                      if(called==1)
 838   2                      {
 839   3                              ini_sbuf(M_main,infor,S_ANSW,cross_machine,0,0);
 840   3                              s_byte_nums=get_byte_nums(infor);
 841   3                              TR_noans();
 842   3                              called=0;
 843   3                      }
 844   2      
 845   2                      if(receive_p_out==1)
 846   2                      {
 847   3                              point=&pp.k4;
 848   3                              for(p_sec=0;p_sec<14;p_sec++)
 849   3                                      *(point+p_sec)=rbuffer[p_sec*2+2]*256+rbuffer[p_sec*2+3];
 850   3                              ini_sbuf(M_main,answer,S_ANSW,0,0,0);
 851   3                              s_byte_nums=4;
 852   3                              TR_noans();
 853   3                              receive_p_out=0;
 854   3                      }
 855   2      
 856   2                      if(receive_p_in==1)
 857   2                      {
 858   3                              point=&pp.x[nonce_sec][0];
 859   3                              for(p_sec=0;p_sec<6;p_sec++)
 860   3                                      *(point+p_sec)=rbuffer[p_sec*2+3]*256+rbuffer[p_sec*2+4];
 861   3      
C51 COMPILER V7.06   OSC1                                                                  06/23/2005 10:56:30 PAGE 15  

 862   3                              ini_sbuf(M_main,answer,S_ANSW,0,0,0);
 863   3                              s_byte_nums=4;
 864   3                              TR_noans();
 865   3                              receive_p_in=0;
 866   3                      }
 867   2      
 868   2                      if(osc_l==1)
 869   2                      {
 870   3                              gate=1;         //给出横摆脉冲
 871   3                              osc_dir=0;              //左
 872   3                              osc_enable=0;           //开使能
 873   3                              osc_l=0;
 874   3                      }
 875   2      
 876   2                      if(osc_r==1)
 877   2                      {
 878   3                              gate=1;         //开8254门控信号
 879   3                              osc_dir=1;              //右
 880   3                              osc_enable=0;           //开使能
 881   3                              osc_r=0;
 882   3                      }
 883   2      
 884   2                      if(motor_stop==1)
 885   2                      {
 886   3                              gate=0;         //关横摆脉冲
 887   3                              osc_enable=1;
 888   3                              motor_stop=0;
 889   3                      }
 890   2      
 891   2                      if(urgent_stop==1)
 892   2                              goto BEGIN;
 893   2              }
 894   1              if(pp.sec_num==0)
 895   1              {
 896   2                      const0=pp.v41*(pp.t42_l+pp.t42_r)/2;
 897   2                      const0=const0+pp.a41*60;
 898   2                      const1=(unsigned long)(pp.v41)*(unsigned long)(pp.t17);
 899   2              }
 900   1              if(pp.k4==ON)
 901   1              {
 902   2                      out0=2400000/pp.v41;                            //横摆脉冲, 时钟4M,4*60*0.01*1000000
 903   2                      out1=10*pp.a41;                                 //横摆半宽脉冲,时钟1K,(A41/10)/(v41/60)*1000
 904   2                      out2=2*out1;                                    //横摆整宽脉冲
 905   2                      c_t42_l=pp.t42_l*5;                             //pp.t42_l/10*1000/50
 906   2                      c_t42_r=pp.t42_r*5;
 907   2                      COM=0X36;
 908   2                      COUNT0=out0%256;
 909   2                      COUNT0=out0/256;
 910   2                      COM=0X76;
 911   2                      COUNT1=out1%256;
 912   2                      COUNT1=out1/256;                                //半个摆宽
 913   2                      COM=0XB6;
 914   2                      COUNT2=out1%256;
 915   2                      COUNT2=out1/256;                                //整个摆宽
 916   2              }
 917   1              work=3;                                 //关8254门控信号
 918   1              nonce_sec=0;
 919   1              do
 920   1              {
 921   2                      if(start_osc==1)                //开始横摆
 922   2                      {
 923   3                              ini_sbuf(M_main,answer,S_ANSW,0,0,0);

⌨️ 快捷键说明

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