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

📄 osc.lst

📁 基于485的51单片机多机通讯程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
 466   1         if (S1STA==0x30)
 467   1                 {
 468   2                  FF=1;
 469   2                  S1CON=0xD5; //STA=0   STO=1    SI=0     AA=1
 470   2                 }
 471   1         if (S1STA==0x38)
 472   1                 {
 473   2                  S1CON=0xE5; //STA=1   STO=0    SI=0     AA=1
 474   2                 }
 475   1         if (S1STA==0x40)
 476   1                 {
 477   2                  S1CON=0xC5; //STA=0   STO=0    SI=0     AA=1
 478   2                 }
 479   1         if (S1STA==0x48)
 480   1                 {
 481   2                  FF=1;
 482   2                  S1CON=0xD5; //STA=0   STO=1    SI=0     AA=1
 483   2                 }
 484   1         if (S1STA==0x50)
 485   1                 {
 486   2                  GET=S1DAT;
 487   2                  S1CON=0xC1; //STA=0   STO=0    SI=0     AA=0
 488   2                 }
 489   1         if (S1STA==0x58)
C51 COMPILER V7.06   OSC                                                                   06/22/2005 15:49:12 PAGE 9   

 490   1                 {
 491   2                      FF=1;
 492   2                      S1CON=0xD5; //STA=0   STO=1   SI=0     AA=1
 493   2                 }
 494   1      }
 495          
 496          void CT0_int (void) interrupt 6                 //横摆中心
 497          {
 498   1              CTI0=0;
 499   1              CTCON=CTCON&0xFC;
 500   1              if(pp.k4==OFF)
 501   1              {
 502   2                      IEN1=IEN1&0XFE;
 503   2                      gate=0;
 504   2                      osc_enable=1;
 505   2                      center_excursion=0;
 506   2              }
 507   1              else
 508   1              {
 509   2                      if(decrease==1)
 510   2                      {
 511   3                              gate=0;
 512   3                              if(pp.v41>800)
 513   3                                      delay(3);
 514   3                              temp_c++;
 515   3      
 516   3                              if(share+1+osc_adjudge<c_decrease)
 517   3                              {
 518   4                                      CTCON=CTCON|0x08;               //CT1下降沿
 519   4                                      if(temp_c%2==0||first_center==1)
 520   4                                      {
 521   5                                              share++;
 522   5                                              c_t42_l=pp.t42_l*5*(c_decrease-share)/c_decrease;
 523   5                                              c_t42_r=pp.t42_r*5*(c_decrease-share)/c_decrease;
 524   5                                              out1=last_out1*(c_decrease-share)/c_decrease;
 525   5                                              out2=out1;
 526   5      
 527   5                                              COM=0X76;
 528   5                                              COUNT1=out1%256;
 529   5                                              COUNT1=out1/256;
 530   5                                              COM=0XB6;
 531   5                                              COUNT2=out2%256;
 532   5                                              COUNT2=out2/256;
 533   5                                              IEN1=IEN1|0X02;
 534   5                                              gate=1;
 535   5                                              temp_c=0;
 536   5                                              if(first_center==1)
 537   5                                                      first_center=0;
 538   5                                      }
 539   4                                      else
 540   4                                      {
 541   5                                              IEN1=IEN1|0x02;
 542   5                                              gate=1;
 543   5                                      }
 544   4                              }
 545   3                              else
 546   3                              {
 547   4                                      if(temp_c!=2)
 548   4                                      {
 549   5                                              CTCON=CTCON|0x08;               //CT1下降沿
 550   5                                              COM=0X76;
 551   5                                              COUNT1=out1%256;
C51 COMPILER V7.06   OSC                                                                   06/22/2005 15:49:12 PAGE 10  

 552   5                                              COUNT1=out1/256;
 553   5                                              COM=0XB6;
 554   5                                              COUNT2=out2%256;
 555   5                                              COUNT2=out2/256;
 556   5                                              IEN1=IEN1|0X02;
 557   5                                              gate=1;
 558   5                                      }
 559   4                                      else
 560   4                                      {
 561   5                                              gate=0;                 //关8254门控信号
 562   5                                              CTCON=CTCON&0XF0;
 563   5                                              IEN1=IEN1&0XFC;         //禁止CT0,CT1
 564   5                                              decrease_ok=1;
 565   5                                      }
 566   4                              }
 567   3                              if(decreased==0)
 568   3                                      decreased=1;
 569   3                      }
 570   2                      else
 571   2                      {
 572   3                              if(osc==1)
 573   3                              {
 574   4                                      gate=0;                 //关8254门控信号
 575   4                                      delay(15);
 576   4                                      if(osc_change==1)
 577   4                                      {
 578   5                                              out1=out1+pp.da41*10;
 579   5                                              osc_add++;
 580   5                                      }
 581   4                                      else
 582   4                                      {
 583   5                                              out1=out1-pp.da41*10;
 584   5                                              osc_dec++;
 585   5                                      }
 586   4                                      out2=out1;
 587   4                                      CTCON=CTCON|0X08;
 588   4                                      COM=0X76;
 589   4                                      COUNT1=out1%256;
 590   4                                      COUNT1=out1/256;
 591   4                                      COM=0XB6;
 592   4                                      COUNT2=out2%256;
 593   4                                      COUNT2=out2/256;
 594   4                                      IEN1=IEN1|0X02;
 595   4                                      gate=1;
 596   4                                      osc=0;
 597   4                              }
 598   3                              CTCON=CTCON|0x08;
 599   3                              IEN1=IEN1|0x02;
 600   3                      }
 601   2              }
 602   1      }
 603          
 604          void CT1_int (void) interrupt 7                 //整个摆宽
 605          {
 606   1              CTI1=0;
 607   1              gate=0;                         //out1、out2门控信号
 608   1              CTCON=CTCON&0xF3;
 609   1              if(osc_ok==0)
 610   1              {
 611   2                      COM=0XB6;
 612   2                      COUNT2=out2%256;
 613   2                      COUNT2=out2/256;
C51 COMPILER V7.06   OSC                                                                   06/22/2005 15:49:12 PAGE 11  

 614   2                      osc_ok=1;
 615   2              }
 616   1              osc_dir=~osc_dir;                       //换横摆方向
 617   1              t_edge=~t_edge;                         //换边缘标志
 618   1              osc_out=~osc_out;                       //横摆输出
 619   1              if(decreased==1)
 620   1              {
 621   2                      if(c_t42_l<1)
 622   2                              c_t42_l=1;
 623   2                      if(c_t42_r<1)
 624   2                              c_t42_r=1;
 625   2                      IEN1=IEN1|0X10;
 626   2              }
 627   1              else
 628   1              {
 629   2                      if(center_excursion==1&&judge_ok==0)
 630   2                      {
 631   3                              if(center_excursion==1&&judge_ok==0)
 632   3                              {
 633   4                                      if(t_edge==0&&excursion_dir==1||t_edge==1&&excursion_dir==0)//左边缘、向右偏或右边缘、向左偏
 634   4                                      {
 635   5                                                      out1=out1+pp.dc41*10;
 636   5                                                      judge_ok=1;
 637   5                                                      center_excursion=0;
 638   5                                      }
 639   4                              }
 640   3                              else if(judge_ok==1)
 641   3                              {
 642   4                                      out1=out1-pp.dc41*10;
 643   4                                      judge_ok=0;
 644   4                              }
 645   3                              out2=2*out1;
 646   3                              COM=0X76;
 647   3                              COUNT1=out1%256;
 648   3                              COUNT1=out1/256;
 649   3                              COM=0XB6;
 650   3                              COUNT2=out2%256;
 651   3                              COUNT2=out2/256;
 652   3                              osc_enable=0;
 653   3                              
 654   3                      }
 655   2                      IEN1=IEN1|0X10;                 //允许CM0,边缘停留时间
 656   2              }
 657   1      }
 658          
 659          void CM0_int (void) interrupt 11                //边缘停留时间
 660          {
 661   1              CMI0=0;
 662   1              c_t42++;
 663   1              if(decreased==0)
 664   1              {
 665   2                      if(t_edge==0&&c_t42==c_t42_l||t_edge==1&&c_t42==c_t42_r)                                //左边缘
 666   2                      {
 667   3                              IEN1=IEN1&0XEF;         //禁止CM0
 668   3                              CTCON=CTCON|0x02;       //CT0下降沿
 669   3                              IEN1=IEN1|0X01;         //允许CT0
 670   3                              gate=1;
 671   3                              TR0=1;
 672   3                              osc_out=~osc_out;       //边缘停留时间结束
 673   3                              c_t42=0;
 674   3                      }
 675   2              }
C51 COMPILER V7.06   OSC                                                                   06/22/2005 15:49:12 PAGE 12  

 676   1              else
 677   1              {
 678   2                      if(t_edge==0&&c_t42==c_t42_l||t_edge==1&&c_t42==c_t42_r)                                //左边缘
 679   2                      {
 680   3                              IEN1=IEN1&0XEF;                 //禁止CM0
 681   3                              CTCON=CTCON|0x02;
 682   3                              IEN1=IEN1|0X01;
 683   3                              gate=1;
 684   3                              osc_out=~osc_out;               //边缘停留时间结束
 685   3                              c_t42=0;
 686   3                      }
 687   2              }
 688   1              CML0=TML2+0X20;
 689   1              if(CML0<TML2)
 690   1                      CMH0=TMH2+1+0X4E;
 691   1              else
 692   1                      CMH0=TMH2+0X4E;
 693   1      }
 694          
 695          main()
 696          {
 697   1              TMOD=0x22;                              //定时器1,方式2;定时器0,方式3,两个8位定时器;
 698   1              TL1=0XFD;                               //波特率19200
 699   1              TH1=0XFD;
 700   1              TR1=1;                                  //启动定时器
 701   1              TMOD=0x23;                              //定时器0,方式3,两个8位定时器;

⌨️ 快捷键说明

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