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

📄 acus.lst

📁 一个针灸治疗仪源代码,包括记时,显示AD采样程序,开发环境keil.使用的芯片PLC89C935
💻 LST
📖 第 1 页 / 共 5 页
字号:
 474   3                    case 1:
 475   3                    {
 476   4                                 P2=*(i+1);
 477   4                                 P10=0;
 478   4                                 P11=1;
 479   4                                 P04=0;
 480   4                                 P05=0;
 481   4                     os_wait(K_TMO,1,0);
 482   4                                 watchdog();  
 483   4                                 j++;
 484   4                                 break;
 485   4                     }
 486   3                    case 2:
 487   3                   { P2=*(i+2);
 488   4                                 P10=0;
 489   4                                 P11=0;
C51 COMPILER V7.01  ACUS                                                                   11/24/2004 13:33:22 PAGE 9   

 490   4                                 P04=1;
 491   4                                 P05=0;
 492   4                     os_wait(K_TMO,1,0);
 493   4                                 watchdog();  
 494   4                                 j++;
 495   4                                 break;
 496   4                    }
 497   3                case 3:
 498   3                    {P2=*(i+3);
 499   4                                  
 500   4                                 P10=0;
 501   4                                 P11=0;
 502   4                                 P04=0;
 503   4                                 P05=1;
 504   4                     os_wait(K_TMO,1,0);
 505   4                                 watchdog();  
 506   4                                 j=0;
 507   4                                 break;
 508   4                     }
 509   3                default:
 510   3                            {j&=4;
 511   4                                 break;
 512   4                         }
 513   3              }
 514   2             
 515   2         }
 516   1       }       
 517          /*********************************************************
 518          *名称:ADinit()
 519          *功能:A/D转换器初始化
 520          *入口参数:no   
 521          *出口参数:无
 522          *********************************************************/
 523          
 524          void   AD_init(void)
 525          {       P0M1=0x0b;                      //P00,P01,设置为仅为输入状态,P02,设置为双向
 526   1                                  //P06,P07,P03,P04,P05,设置为推挽。
 527   1              P0M2=0xf0;
 528   1              //------------------------
 529   1              ADINS=0x52;                 //0101 0010, 选择ad0l和 ad10 ad12
 530   1              ADMODA=0x11;            //0001 0001, 选择转换工作模式:固定通道单次转换模式
 531   1              ADMODB=0x00;            //500Khz < ADC CLK < 3.3Mhz,,
 532   1         //------------------------
 533   1         p = id_buff;
 534   1              ReadID();           //读18B20ID
 535   1              Config18b20();      //18b20初始化 */     
 536   1      
 537   1      }
 538          /*********************************************************
 539          *名称:MeilanFilter()
 540          *功能:中值滤波
 541          *入口参数:channel 通道选择
 542          *出口参数:result  转换结果
 543          *********************************************************/
 544          /*uchar MeilanFilter(uchar channel)
 545          {uchar i,j,k,addata;
 546           uchar xdata temp[5];
 547            for(k=0;k<=5;k++)
 548                   { addata=AD_start(channel);
 549                      for(j=0;j<=5;j++)
 550                        {if(addata>temp[j])
 551                           {for(i=5;i>j;i--)
C51 COMPILER V7.01  ACUS                                                                   11/24/2004 13:33:22 PAGE 10  

 552                                temp[i]=temp[i-1] ;
 553                                    temp[j]=addata;
 554                                     watchdog();
 555                                    break;
 556                           }
 557                                  else{}
 558                        }
 559                }
 560                  return(temp[3]);
 561          }
 562          
 563          /*********************************************************
 564          *名称:ADstart()
 565          *功能:A/D转换器启动
 566          *入口参数:channel 通道选择
 567          *出口参数:result  转换结果
 568          *********************************************************/
 569           uchar AD_start(uchar channel)
 570           {      uchar  result;
 571   1              switch (channel )
 572   1                 {case  0x01 :
 573   2                      {ADCON0=0x05;               //ad01温度设定采样
 574   3                                              //选择转换触发模式;并立即启动
 575   3                       result=AD0DAT1;                //将AD转换获得的数据存入result
 576   3                       ADCON0&=0xF7;                  //清除中断完成标志
 577   3                       break;
 578   3                       }
 579   2                  case  0x02  :
 580   2                      {ADCON1=0x05;               //ad10温度传感器采样
 581   3                                              //选择转换触发模式;并立即启动
 582   3                       result=AD1DAT0;                //将AD转换获得的数据存入result
 583   3                       ADCON0&=0xF7;                  //清除中断完成标志
 584   3                       break;
 585   3                       }
 586   2                       case  0x03      :      
 587   2                       {ADCON1=0x05;              //ad12温度传感器采样
 588   3                                              //选择转换触发模式;并立即启动
 589   3                       result=AD1DAT2;                //将AD转换获得的数据存入result
 590   3                       ADCON1&=0xF7;                  //清除中断完成标志
 591   3                       break;
 592   3                       }
 593   2              }
 594   1         return  result ;
 595   1        }
 596          /*********************************************************
 597          *名称:CCU_init(void)
 598          *功能:CCU初始化
 599          *入口参数:无
 600          *出口参数:无
 601          *********************************************************/
 602          void CCU_init(void)
 603          {
 604   1              OCB=1;                  // 设置P1.6为PWM输出
 605   1      
 606   1              TPCR2H=0x00;    // 设置 CCU 预分频控制器:
 607   1              TPCR2L=0x63;    // divide by 100 (99+1)
 608   1                                              
 609   1              TCR21=0x07;             // Prescaler for Phase Locked Loop:
 610   1                                              // Input frequency must be in range of 0.5-1Mhz
 611   1                                              // InpFrq=PCLK/(PLLDIV+1)=(CCLK/2)/(PLLDIV+1)
 612   1                                              // using the internal RC oscillator: CCLK=7.373MHz 
 613   1                                              //              PLLDiv=6, 6+1=7      => 0.526 MHz
C51 COMPILER V7.01  ACUS                                                                   11/24/2004 13:33:22 PAGE 11  

 614   1                                              // using Crystal 11.0592 MHz => 0.789 MHz
 615   1      
 616   1              CCCRB=0x01;             // non-inverted PWM output on channel B B通道非反相输出PWM      
 617   1              
 618   1              
 619   1              TCR20|=0x80;            // Start PLL, OutputMode: stop
 620   1              OCB=1;                      // wait a machine cycle
 621   1              while(PLLEN ==0);// wait until PLL locked
 622   1      
 623   1              TOR2H=0xff;             // Reload Value 0x00FF=255      装载映像寄存器
 624   1              TOR2L=0x7f;             // -> PWM period                        PWM周期
 625   1              TCR21|=0x80;    // update reload value      使映像寄存器在下次CCU溢出时自动更新
 626   1      
 627   1              OCRBH=0x00;             // initialize Duty-Cycle channel A 0x0100 => 50%
 628   1              OCRBL=0x3f;                     
 629   1              TCR21|=0x80;    // update duty cycle
 630   1      
 631   1              
 632   1              TCR20=0x86;             // Set output mode: asymmetrical PWM非对称模式
 633   1              HLTEN=1;
 634   1          HLTRN=1;
 635   1      }
 636          /*********************************************************
 637          *名称:PWM_start(void)
 638          *功能:脉冲控制开始
 639          *入口参数:无
 640          *出口参数:无
 641          *********************************************************/              
 642          void PWM_start(uint freq,uchar mod) 
 643                  {
 644   1                                      TOR2H= HIGH(freq)       ;               // Reload Value 0x00FF=255      装载映像寄存器
 645   1                          TOR2L= LOW(freq)    ;               // -> PWM period                        PWM周期
 646   1                              OCRBH= HIGH(freq)/mod   ;
 647   1                                      OCRBL= LOW(freq)/mod;        //占空比为50%
 648   1                                  TCR21|=0x80;                   // update reload value           使映像寄存器在下次CCU溢出时自动更新 
 649   1                                      watchdog();
 650   1              } 
 651          
 652          /*********************************************************
 653          *名称:CPU_init(void)
 654          *功能:CPU初始化
 655          *入口参数:无
 656          *出口参数:无
 657          *********************************************************/      
 658          void CPU_init(void)
 659          {   uchar deca,first;
 660   1          P1M1 = 0x1c;                                // P12,P13,P14,P15,输入P10,P11,P16,P17输出
 661   1              P1M2 = 0xc3;
 662   1              P2M1 = 0x00;                            //全为输出
 663   1              P2M2 = 0xFF;
 664   1              
 665   1          ALAME=0;
 666   1          timeled=0;
 667   1          templed=0;
 668   1          CCU_init();
 669   1              AD_init();
 670   1              ACC=WDCON;
 671   1          ACC|=0x04;
 672   1          WDL=0x08;                  //装入8位倒计数的新值
 673   1          EA=0;
 674   1              WDCON=ACC;                             //设置WD_RUN=1
 675   1              WFEED1=0xA5;                       //执行清零第一部份
C51 COMPILER V7.01  ACUS                                                                   11/24/2004 13:33:22 PAGE 12  

 676   1              WFEED2=0x5A;               //执行清零第二部分  
 677   1              TRIM|=0xc0;
 678   1          EA=1; 
 679   1          TimeLimit=  EEPROMread(TIMEADDR);
 680   1          if(TimeLimit>0&&TimeLimit<=60)
 681   1            { end.hour=TimeLimit/60+ctime.hour;   //记录结束时间
 682   2                  end.min= TimeLimit%60+ctime.min;
 683   2                  end.sec= 0;
 684   2                  deca =TimeLimit/10;
 685   2                  first=TimeLimit%10;
 686   2                  WriteDisp(0,deca);
 687   2                  WriteDisp(1,first); 
 688   2                      os_create_task (TIMECON);
 689   2                      if(P13==0)
 690   2              {TempLimit=EEPROMread(TEMPADDR);
 691   3                       if(TempLimit>0)
 692   3                          os_create_task(TEMPCON);
 693   3                       else TempLimit=0;
 694   3                       }
 695   2                      }              //开始诊病任务
 696   1          else TimeLimit=0;}
 697           /**************************************************
 698          *原型:void PushNews(void)
 699          *功能:将消息压入堆栈
 700          *说明:但是没有将其置为有效
 701          *参数:无
 702          *返回:无
 703          **************************************************/
 704          void PushNews(void) {
 705   1          uchar ch,i;
 706   1          ch=NewsStr[0];
 707   1          ch++;
 708   1              i=(P1|0xf3);
 709   1              NewsStr[ch]=_cror_ (i,2);
 710   1      }
 711          /**************************************************
 712          *原型:uchar PopNews(void)
 713          *功能:弹出最老消息

⌨️ 快捷键说明

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