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

📄 osc3.lst

📁 基于485的51单片机多机通讯程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
 687          
 688          void CT1_int (void) interrupt 7                 //整个摆宽
 689          {
 690   1              CTI1=0;
 691   1              gate=0;                         //out1、out2门控信号
 692   1              IEN1=IEN1&0XFD;                 //CT1
 693   1              CTCON=CTCON&0xF3;
 694   1              if(sec_center==1)
 695   1              {
 696   2      //              COM=0XB6;
 697   2      //              COUNT2=out2%256;
 698   2      //              COUNT2=out2/256;
 699   2                      sec_center=0;
 700   2                      if(new_sector==1)
 701   2                      {
 702   3                              new_sector=0;
 703   3                              sec_change=1;
 704   3                      }
 705   2              }
 706   1              osc_dir=~osc_dir;                       //换横摆方向
 707   1              t_edge=~t_edge;                         //换边缘标志
 708   1              osc_out=~osc_out;                       //横摆输出
 709   1              if(decreased==0)
 710   1              {
 711   2                      if(center_excursion==1&&judge_ok==0)
 712   2                      {
 713   3                              if(center_excursion==1&&judge_ok==0)
 714   3                              {
 715   4                                      if(t_edge==0&&excursion_dir==1||t_edge==1&&excursion_dir==0)//左边缘、向右偏或右边缘、向左偏
 716   4                                      {
 717   5                                                      out1=out1+pp.dc41*80/3;
 718   5                                                      judge_ok=1;
 719   5                                                      center_excursion=0;
 720   5                                      }
 721   4                              }
 722   3                              else if(judge_ok==1)
 723   3                              {
 724   4                                      out1=out1-pp.dc41*80/3;
 725   4                                      judge_ok=0;
 726   4                              }
 727   3                              out2=2*out1;
 728   3                              COM=0X76;
 729   3                              COUNT1=out1%256;
 730   3                              COUNT1=out1/256;
 731   3                              COM=0XB6;
 732   3                              COUNT2=out2%256;
 733   3                              COUNT2=out2/256;
 734   3                              osc_enable=0;
 735   3                              
 736   3                      }
 737   2                      CML0=TML2+0X20;
C51 COMPILER V7.06   OSC3                                                                  09/27/2005 14:37:42 PAGE 13  

 738   2                      if(CML0<TML2)
 739   2                              CMH0=TMH2+1+0X4E;
 740   2                      else
 741   2                              CMH0=TMH2+0X4E;                         //20ms
 742   2                      
 743   2              }
 744   1              IEN1=IEN1|0X10;                 //允许CM0,边缘停留时间
 745   1      }
 746          
 747          void CT2_int (void) interrupt 8
 748          {
 749   1              CTI2=0;
 750   1              c_t2++;
 751   1      
 752   1              if(c_t2==temp_c_t2)
 753   1              {
 754   2                      IEN1=IEN1&0XFB;                 //禁止CT2
 755   2      //              CTCON=CTCON|0x02;       //CT0下降沿
 756   2      //              IEN1=IEN1|0X01;         //允许CT0
 757   2                      out0=temp_out0;
 758   2                      COM=0X36;
 759   2                      COUNT0=out0%256;
 760   2                      COUNT0=out0/256;        
 761   2                      c_t2=0;
 762   2      //              gate=1;
 763   2              }
 764   1      //      if(c_t2==100)
 765   1      //              over_i_enable=1;
 766   1      }
 767                          
 768          void CM0_int (void) interrupt 11                //边缘停留时间
 769          {
 770   1              CMI0=0; 
 771   1              c_t42++;
 772   1              if(t_edge==0&&c_t42==c_t42_l||t_edge==1&&c_t42==c_t42_r)                                //左边缘
 773   1              {
 774   2                      IEN1=IEN1&0XEF;         //禁止CM0       
 775   2                      CTCON=CTCON|0x0A;       //CT0,CT1下降沿
 776   2                      IEN1=IEN1|0X03;         //允许CT,CT1
 777   2                      if(sec_change==0)               //2005-09-22
 778   2                      {
 779   3      
 780   3                              out0=900000/start_v;
 781   3                              c_t2=0;
 782   3                              temp_c_t2=out1/12;
 783   3      
 784   3      //                      over_i_enable=0;
 785   3                              CTCON=CTCON|0X20;       //CT2下降沿
 786   3                              IEN1=IEN1|0X04;
 787   3      
 788   3                      }
 789   2                      COM=0X36;
 790   2                      COUNT0=out0%256;
 791   2                      COUNT0=out0/256;
 792   2      //              COM=0X76;
 793   2      //              COUNT1=out1%256;
 794   2      //              COUNT1=out1/256;
 795   2      //              COM=0XB6;
 796   2      //              COUNT2=out2%256;
 797   2      //              COUNT2=out2/256;
 798   2                      
 799   2                      osc_out=~osc_out;       //边缘停留时间结束
C51 COMPILER V7.06   OSC3                                                                  09/27/2005 14:37:42 PAGE 14  

 800   2                      c_t42=0;
 801   2                      gate=1;
 802   2      
 803   2              }
 804   1              else
 805   1              {
 806   2                      CML0=TML2+0X20;
 807   2                      if(CML0<TML2)
 808   2                              CMH0=TMH2+1+0X4E;
 809   2                      else
 810   2                              CMH0=TMH2+0X4E;
 811   2              }
 812   1      }
 813          
 814          main()
 815          {
 816   1              TMOD=0x22;                              //定时器1,方式2;定时器0,方式3,两个8位定时器;
 817   1              TL1=0XFD;                               //波特率19200
 818   1              TH1=0XFD;
 819   1              TR1=1;                                  //启动定时器
 820   1              TMOD=0x23;                              //定时器0,方式3,两个8位定时器;
 821   1              TR1=0;
 822   1              TF1=0;
 823   1              S0CON=0XF8;                             //串口方式3,SM2=1,REN=1,TB8=1,RB8=0,TI=0,RI=0
 824   1      //      IP1=0X03;                               //CT0、CT1高优先级
 825   1              IP0=0X98;                               //S0=1,T1=1
 826   1              ES0=1;                                  //开串口中断
 827   1              ET0=1;
 828   1              ET1=1;
 829   1              EA=1;                                   //中断总允许
 830   1              start_t2();
 831   1              urgent_stop=0;
 832   1              osc_err=0;
 833   1              err_ok=0;
 834   1              err=0;
 835   1      BEGIN:
 836   1              if(urgent_stop==1)
 837   1              {
 838   2                      urgent_stop=0;
 839   2                      err_ok=0;
 840   2                      EX1=1;
 841   2                      EX0=1;
 842   2              }
 843   1              CTCON=0x00;
 844   1              IEN1=0x00;
 845   1              COM=0X36;
 846   1              COUNT0=0XA0;
 847   1              COUNT0=0X0F;                                    //启动横摆脉冲 1K
 848   1              COM=0X76;
 849   1              COUNT1=0x00;
 850   1              COUNT1=0x00;
 851   1              COM=0XB6;
 852   1              COUNT2=0x00;
 853   1              COUNT2=0x00;
 854   1              static_out1=0;
 855   1              static_out0=0;
 856   1              gate=0;                         //关门控
 857   1              osc_enable=1;                           //横摆使能
 858   1              osc_dir=0;                              //横摆方向,0-左,1-右
 859   1              osc_out=1;                              //横摆输出
 860   1              over_i_enable=0;
 861   1              work=0;
C51 COMPILER V7.06   OSC3                                                                  09/27/2005 14:37:42 PAGE 15  

 862   1              receive_p_out=0;
 863   1              receive_p_in=0;
 864   1              called=0;
 865   1              start=0;
 866   1              new_sector=0;
 867   1              in_sector=0;
 868   1              nonce_sec=0;
 869   1              sec_center=0;
 870   1              sec_change=0;                           //区间过渡时调整标志
 871   1              c_change=0;                             //区间过渡时调整次数
 872   1              temp_c_change=0;
 873   1              K4=0;
 874   1              start_osc=0;
 875   1              osc_started=0;
 876   1              osc_ok=0;
 877   1              t_edge=0;                               //0-左边缘 1-右边缘
 878   1              c_t42=0;
 879   1              share=0;                                //启动横摆标志
 880   1              stop_osc=0;
 881   1              decrease=0;
 882   1              decreased=0;                            //衰减标志
 883   1              decrease_ok=0;
 884   1              to_begin=0;
 885   1      
 886   1              need_para=0;
 887   1              POINTER0=0;
 888   1              SSUM=0;
 889   1              S_ANSW=0;
 890   1              POINTER1=0;
 891   1              RSUM=0;
 892   1              r_byte_nums=4;
 893   1              ans=0;
 894   1              send=0;
 895   1              resend=0;
 896   1      
 897   1              osc_l=0;
 898   1              osc_r=0;
 899   1              center_excursion=0;                     //横摆中心偏移标志(DC41)
 900   1              center_change=0;                        //自动横摆未开时,调整中心
 901   1              breadth_add=0;
 902   1              breadth_dec=0;
 903   1              osc_add=0;                              //摆宽增加次数
 904   1              osc_dec=0;
 905   1              osc=0;
 906   1              judge_ok=0;
 907   1              motor_stop=0;
 908   1      
 909   1              
 910   1              EX1=1;
 911   1              EX0=1;
 912   1              while(start==0)                                 //等待过程中,接受点名和参数
 913   1              {
 914   2                      if(called==1)
 915   2                      {
 916   3                              ini_sbuf(M_main,infor,com_calling,S_ANSW,0,0);
 917   3                              s_byte_nums=get_byte_nums(infor);
 918   3                              TR_noans();
 919   3                              called=0;

⌨️ 快捷键说明

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