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

📄 osc4.lst

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

 737          {
 738   1              CMI0=0;
 739   1              c_t42++;
 740   1              if(t_edge==0&&c_t42==c_t42_l||t_edge==1&&c_t42==c_t42_r)                                //左边缘
 741   1              {
 742   2                      IEN1=IEN1&0XEF;         //禁止CM0
 743   2                      CTCON=CTCON|0x02;       //CT0下降沿
 744   2                      IEN1=IEN1|0X01;         //允许CT0
 745   2                      gate=1;
 746   2                      osc_out=~osc_out;       //边缘停留时间结束
 747   2                      c_t42=0;
 748   2              }
 749   1              CML0=TML2+0X20;
 750   1              if(CML0<TML2)
 751   1                      CMH0=TMH2+1+0X4E;
 752   1              else
 753   1                      CMH0=TMH2+0X4E;
 754   1      }
 755          
 756          main()
 757          {
 758   1              TMOD=0x22;                              //定时器1,方式2;定时器0,方式3,两个8位定时器;
 759   1              TL1=0XFD;                               //波特率19200
 760   1              TH1=0XFD;
 761   1              TR1=1;                                  //启动定时器
 762   1              TMOD=0x23;                              //定时器0,方式3,两个8位定时器;
 763   1              TR1=0;
 764   1              TF1=0;
 765   1              S0CON=0XF8;                             //串口方式3,SM2=1,REN=1,TB8=1,RB8=0,TI=0,RI=0
 766   1      //      IP1=0X03;                               //CT0、CT1高优先级
 767   1              IP0=0X98;                               //S0=1,T1=1
 768   1              ES0=1;                                  //开串口中断
 769   1              ET1=1;
 770   1              EA=1;                                   //中断总允许
 771   1              start_t2();
 772   1              urgent_stop=0;
 773   1              osc_err=0;
 774   1              err_ok=0;
 775   1              err=0;
 776   1      BEGIN:
 777   1              if(urgent_stop==1)
 778   1              {
 779   2                      urgent_stop=0;
 780   2                      err_ok=0;
 781   2                      EX1=1;
 782   2                      EX0=1;
 783   2              }
 784   1              CTCON=0x00;
 785   1              IEN1=0x00;
 786   1              COM=0X36;
 787   1              COUNT0=0XA0;
 788   1              COUNT0=0X0F;                                    //启动横摆脉冲 1K
 789   1              COM=0X76;
 790   1              COUNT1=0x00;
 791   1              COUNT1=0x00;
 792   1              COM=0XB6;
 793   1              COUNT2=0x00;
 794   1              COUNT2=0x00;
 795   1              static_out1=0;
 796   1              static_out0=0;
 797   1              gate=0;                         //关门控
 798   1              osc_enable=1;                           //横摆使能
C51 COMPILER V7.06   OSC4                                                                  09/26/2005 10:14:15 PAGE 14  

 799   1              osc_dir=0;                              //横摆方向,0-左,1-右
 800   1              osc_out=1;                              //横摆输出
 801   1              work=0;
 802   1              receive_p_out=0;
 803   1              receive_p_in=0;
 804   1              called=0;
 805   1              start=0;
 806   1              new_sector=0;
 807   1              in_sector=0;
 808   1              nonce_sec=0;
 809   1              sec_center=0;
 810   1              sec_change=0;                           //区间过渡时调整标志
 811   1              c_change=0;                             //区间过渡时调整次数
 812   1              temp_c_change=0;
 813   1              K4=0;
 814   1              start_osc=0;
 815   1              osc_started=0;
 816   1              osc_ok=0;
 817   1              t_edge=0;                               //0-左边缘 1-右边缘
 818   1              c_t42=0;
 819   1              share=0;                                //启动横摆标志
 820   1              stop_osc=0;
 821   1              decrease=0;
 822   1              decreased=0;                            //衰减标志
 823   1              decrease_ok=0;
 824   1              to_begin=0;
 825   1      
 826   1              need_para=0;
 827   1              POINTER0=0;
 828   1              SSUM=0;
 829   1              S_ANSW=0;
 830   1              POINTER1=0;
 831   1              RSUM=0;
 832   1              r_byte_nums=4;
 833   1              ans=0;
 834   1              send=0;
 835   1              resend=0;
 836   1      
 837   1              osc_l=0;
 838   1              osc_r=0;
 839   1              center_excursion=0;                     //横摆中心偏移标志(DC41)
 840   1              center_change=0;                        //自动横摆未开时,调整中心
 841   1              breadth_add=0;
 842   1              breadth_dec=0;
 843   1              osc_add=0;                              //摆宽增加次数
 844   1              osc_dec=0;
 845   1              osc=0;
 846   1              judge_ok=0;
 847   1              motor_stop=0;
 848   1      
 849   1              CML0=TML2+0X20;
 850   1              if(CML0<TML2)
 851   1                      CMH0=TMH2+1+0X4E;
 852   1              else
 853   1                      CMH0=TMH2+0X4E;                         //20ms
 854   1              EX1=1;
 855   1              EX0=1;
 856   1              while(start==0)                                 //等待过程中,接受点名和参数
 857   1              {
 858   2                      if(called==1)
 859   2                      {
 860   3                              ini_sbuf(M_main,infor,com_calling,S_ANSW,0,0);
C51 COMPILER V7.06   OSC4                                                                  09/26/2005 10:14:15 PAGE 15  

 861   3                              s_byte_nums=get_byte_nums(infor);
 862   3                              TR_noans();
 863   3                              called=0;
 864   3                      }
 865   2      
 866   2                      if(receive_p_out==1)
 867   2                      {
 868   3                              point=&pp.k4;
 869   3                              for(p_sec=0;p_sec<14;p_sec++)
 870   3                                      *(point+p_sec)=rbuffer[p_sec*2+2]*256+rbuffer[p_sec*2+3];
 871   3                              ini_sbuf(M_main,answer,S_ANSW,0,0,0);
 872   3                              s_byte_nums=4;
 873   3                              TR_noans();
 874   3                              receive_p_out=0;
 875   3                      }
 876   2      
 877   2                      if(receive_p_in==1)
 878   2                      {
 879   3                              point=&pp.x[nonce_sec][0];
 880   3                              for(p_sec=0;p_sec<6;p_sec++)
 881   3                                      *(point+p_sec)=rbuffer[p_sec*2+3]*256+rbuffer[p_sec*2+4];
 882   3      
 883   3                              ini_sbuf(M_main,answer,S_ANSW,0,0,0);
 884   3                              s_byte_nums=4;
 885   3                              TR_noans();
 886   3                              receive_p_in=0;
 887   3                      }
 888   2      
 889   2                      if(osc_l==1)
 890   2                      {
 891   3                              gate=1;         //给出横摆脉冲
 892   3                              osc_dir=0;              //左
 893   3                              osc_enable=0;           //开使能
 894   3                              osc_l=0;
 895   3                      }
 896   2      
 897   2                      if(osc_r==1)
 898   2                      {
 899   3                              gate=1;         //开8254门控信号
 900   3                              osc_dir=1;              //右
 901   3                              osc_enable=0;           //开使能
 902   3                              osc_r=0;
 903   3                      }
 904   2      
 905   2                      if(motor_stop==1)
 906   2                      {

⌨️ 快捷键说明

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