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

📄 temposc2.lst

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

 737   3                              osc_enable=0;
 738   3                              
 739   3                      }
 740   2                      IEN1=IEN1|0X10;                 //允许CM0,边缘停留时间
 741   2              }
 742   1      }
 743          
 744          void CM0_int (void) interrupt 11                //边缘停留时间
 745          {
 746   1              CMI0=0;
 747   1              c_t42++;
 748   1      //      if(decreased==0)
 749   1      //      {
 750   1                      if(t_edge==0&&c_t42==c_t42_l||t_edge==1&&c_t42==c_t42_r)                                //左边缘
 751   1                      {
 752   2                              IEN1=IEN1&0XEF;         //禁止CM0
 753   2                              CTCON=CTCON|0x02;       //CT0下降沿
 754   2                              IEN1=IEN1|0X01;         //允许CT0
 755   2                              gate=1;
 756   2                              osc_out=~osc_out;       //边缘停留时间结束
 757   2                              c_t42=0;
 758   2                      }
 759   1      //      }
 760   1      /*
 761   1              else
 762   1              {
 763   1                      if(t_edge==0&&c_t42==c_t42_l||t_edge==1&&c_t42==c_t42_r)                                //左边缘
 764   1                      {
 765   1                              IEN1=IEN1&0XEF;                 //禁止CM0
 766   1                              CTCON=CTCON|0x02;
 767   1                              IEN1=IEN1|0X01;
 768   1                              gate=1;
 769   1                              osc_out=~osc_out;               //边缘停留时间结束
 770   1                              c_t42=0;
 771   1                      }
 772   1              }
 773   1      */
 774   1              CML0=TML2+0X20;
 775   1              if(CML0<TML2)
 776   1                      CMH0=TMH2+1+0X4E;
 777   1              else
 778   1                      CMH0=TMH2+0X4E;
 779   1      }
 780          
 781          main()
 782          {
 783   1              TMOD=0x22;                              //定时器1,方式2;定时器0,方式3,两个8位定时器;
 784   1              TL1=0XFD;                               //波特率19200
 785   1              TH1=0XFD;
 786   1              TR1=1;                                  //启动定时器
 787   1              TMOD=0x23;                              //定时器0,方式3,两个8位定时器;
 788   1              TR1=0;
 789   1              TF1=0;
 790   1              S0CON=0XF8;                             //串口方式3,SM2=1,REN=1,TB8=1,RB8=0,TI=0,RI=0
 791   1      //      IP1=0X03;                               //CT0、CT1高优先级
 792   1              IP0=0X98;                               //S0=1,T1=1
 793   1              ES0=1;                                  //开串口中断
 794   1      //      ET0=1;
 795   1              ET1=1;
 796   1      //      EAD=1;                                  //AD中断允许
 797   1      //      ES1=1;                                  //I2C
 798   1              EA=1;                                   //中断总允许
C51 COMPILER V7.06   TEMPOSC2                                                              07/11/2005 13:44:54 PAGE 14  

 799   1              start_t2();
 800   1              urgent_stop=0;
 801   1              osc_err=0;
 802   1              err_ok=0;
 803   1              err=0;
 804   1      BEGIN:
 805   1              if(urgent_stop==1)
 806   1              {
 807   2                      urgent_stop=0;
 808   2                      err_ok=0;
 809   2                      EX1=1;
 810   2                      EX0=1;
 811   2              }
 812   1              CTCON=0x00;
 813   1              IEN1=0x00;
 814   1              COM=0X36;
 815   1              COUNT0=0XA0;
 816   1              COUNT0=0X0F;                                    //启动横摆脉冲 1K
 817   1              COM=0X76;
 818   1              COUNT1=0x00;
 819   1              COUNT1=0x00;
 820   1              COM=0XB6;
 821   1              COUNT2=0x00;
 822   1              COUNT2=0x00;
 823   1              static_out1=0;
 824   1              static_out0=0;
 825   1              gate=0;                         //关门控
 826   1              osc_enable=1;                           //横摆使能
 827   1              osc_dir=0;                              //横摆方向,0-左,1-右
 828   1              osc_out=1;                              //横摆输出
 829   1              work=0;
 830   1              receive_p_out=0;
 831   1              receive_p_in=0;
 832   1              called=0;
 833   1              start=0;
 834   1              new_sector=0;
 835   1              in_sector=0;
 836   1              nonce_sec=0;
 837   1              sec_center=0;
 838   1              sec_change=0;                           //区间过渡时调整标志
 839   1              c_change=0;                             //区间过渡时调整次数
 840   1              temp_c_change=0;
 841   1              K4=0;
 842   1              start_osc=0;
 843   1              osc_started=0;
 844   1              osc_ok=0;
 845   1              t_edge=0;                               //0-左边缘 1-右边缘
 846   1              c_t42=0;
 847   1              share=0;                                //启动横摆标志
 848   1              stop_osc=0;
 849   1              decrease=0;
 850   1              decreased=0;                            //衰减标志
 851   1              decrease_ok=0;
 852   1              to_begin=0;
 853   1      
 854   1              need_para=0;
 855   1              POINTER0=0;
 856   1              SSUM=0;
 857   1              S_ANSW=0;
 858   1              POINTER1=0;
 859   1              RSUM=0;
 860   1              r_byte_nums=4;
C51 COMPILER V7.06   TEMPOSC2                                                              07/11/2005 13:44:54 PAGE 15  

 861   1              ans=0;
 862   1              send=0;
 863   1              resend=0;
 864   1      
 865   1              osc_l=0;
 866   1              osc_r=0;
 867   1              center_excursion=0;                     //横摆中心偏移标志(DC41)
 868   1              center_change=0;                        //自动横摆未开时,调整中心
 869   1              breadth_add=0;
 870   1              breadth_dec=0;
 871   1              osc_add=0;                              //摆宽增加次数
 872   1              osc_dec=0;
 873   1              osc=0;
 874   1              judge_ok=0;
 875   1              motor_stop=0;
 876   1      
 877   1              CML0=TML2+0X20;
 878   1              if(CML0<TML2)
 879   1                      CMH0=TMH2+1+0X4E;
 880   1              else
 881   1                      CMH0=TMH2+0X4E;                         //20ms
 882   1              EX1=1;
 883   1              EX0=1;
 884   1              while(start==0)                                 //等待过程中,接受点名和参数
 885   1              {
 886   2                      if(called==1)
 887   2                      {
 888   3                              ini_sbuf(M_main,infor,S_ANSW,cross_machine,0,0);
 889   3                              s_byte_nums=get_byte_nums(infor);
 890   3                              TR_noans();
 891   3                              called=0;
 892   3                      }
 893   2      
 894   2                      if(receive_p_out==1)
 895   2                      {
 896   3                              point=&pp.k4;
 897   3                              for(p_sec=0;p_sec<14;p_sec++)
 898   3                                      *(point+p_sec)=rbuffer[p_sec*2+2]*256+rbuffer[p_sec*2+3];
 899   3                              ini_sbuf(M_main,answer,S_ANSW,0,0,0);
 900   3                              s_byte_nums=4;
 901   3                              TR_noans();
 902   3                              receive_p_out=0;
 903   3                      }
 904   2      
 905   2                      if(receive_p_in==1)
 906   2                      {
 907   3                              point=&pp.x[nonce_sec][0];
 908   3                              for(p_sec=0;p_sec<6;p_sec++)
 909   3                                      *(point+p_sec)=rbuffer[p_sec*2+3]*256+rbuffer[p_sec*2+4];
 910   3      

⌨️ 快捷键说明

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