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

📄 adsample.lst

📁 该程序完成了c8051外围电路的驱动和串口协议的编写。希望能给大家学习51单片机带来帮助
💻 LST
📖 第 1 页 / 共 5 页
字号:
 452          //返    回:无
 453          //作    者:佟文杰
 454          //---------------------------------------------------------- 
 455          void SetDCADZero(unsigned char uchChannel,unsigned int uiDCADZero)
 456          {       
 457   1          AD.uiDCADZero[uchChannel - 1] = uiDCADZero;
 458   1      }
 459          
 460          //--------------------------------------------------------
 461          //函数名称:void SetDCADFull(unsigned char uchChannel,unsigned int uiDCADFull)
 462          //功    能:设置直流通道满度数据
 463          //输入参数:通道号,直流通道满度数据
 464          //返    回:无
 465          //作    者:佟文杰
 466          //----------------------------------------------------------  
 467          void SetDCADFull(unsigned char uchChannel,unsigned int uiDCADFull)
 468          {       
 469   1              AD.uiDCADSpan[uchChannel - 1] = uiDCADFull;     
 470   1      }
 471          
 472          //--------------------------------------------------------
 473          //函数名称:void SetLittleRangeADZero(unsigned char uchChannel,unsigned int uiLittleRangeADZero)
 474          //功    能:设置小量程通道零点数据
 475          //输入参数:通道号,小量程通道零点数据
 476          //返    回:无
 477          //作    者:佟文杰
 478          //---------------------------------------------------------- 
 479          void SetLittleRangeADZero(unsigned char uchChannel,unsigned int uiLittleRangeADZero)
 480          {       
 481   1          AD.uiLittleRangeADZero[uchChannel - 1] = uiLittleRangeADZero;
 482   1      }
 483          
 484          //--------------------------------------------------------
 485          //函数名称:void SetLittleRangeADFull(unsigned char uchChannel,unsigned int uiLittleRangeADFull)
 486          //功    能:设置小量程通道满度数据
 487          //输入参数:通道号,小量程通道满度数据
C51 COMPILER V7.10   ADSAMPLE                                                              09/18/2008 14:09:32 PAGE 9   

 488          //返    回:无
 489          //作    者:佟文杰
 490          //----------------------------------------------------------  
 491          void SetLittleRangeADFull(unsigned char uchChannel,unsigned int uiLittleRangeADFull)
 492          {       
 493   1              AD.uiLittleRangeADSpan[uchChannel - 1] = uiLittleRangeADFull;   
 494   1      }
 495          
 496          //--------------------------------------------------------
 497          //函数名称:void SetGAPADZero(unsigned char uchChannel,unsigned int uiGAPADZero)
 498          //功    能:设置间隙电压的零点AD值
 499          //输入参数:通道号,GAP零点对应的AD值
 500          //返    回:无
 501          //作    者:佟文杰
 502          //----------------------------------------------------------  
 503          void SetGAPADZero(unsigned char uchChannel,unsigned int uiGAPADZero)
 504          {       
 505   1              AD.uiGAPADZero[uchChannel - 1] = uiGAPADZero;   
 506   1      }
 507          
 508          //--------------------------------------------------------
 509          //函数名称:void SetGAPADFull(unsigned char uchChannel,unsigned int uiGAPADFull)
 510          //功    能:设置间隙电压满度对应的AD值
 511          //输入参数:通道号,间隙电压满度对应的AD值
 512          //返    回:无
 513          //作    者:佟文杰
 514          //----------------------------------------------------------  
 515          void SetGAPADFull(unsigned char uchChannel,unsigned int uiGAPADFull)
 516          {       
 517   1              AD.uiGAPADFull[uchChannel - 1] = uiGAPADFull;   
 518   1      }
 519          
 520          //--------------------------------------------------------
 521          //函数名称:void SetSampleLocationStatus(unsigned char uchSampleLocationFlag)
 522          //功    能:从硬件模块将采样位置的标志设置到采样计算模块
 523          //输入参数:采样位置标志
 524          //返    回:无
 525          //作    者:佟文杰
 526          //----------------------------------------------------------  
 527          void SetSampleLocationStatus(unsigned char uchSampleLocationFlag)
 528          {
 529   1              uchSampleLocationNumber = uchSampleLocationFlag;
 530   1      }
 531          
 532          
 533          
 534          
 535          
 536          /*
 537          有效值计算方法:
 538          1)     初始化平均值;
 539          2)     取1024个采样数据为一组进行有效值计算,以平均值为基准线,寻找过基准线的前一个和后一个采集点(两个采集点
             -反相);
 540          3)     以第二个过基准线的后一个采集点开始计算过基准线的个数,并且记录这个采样点的位置及采样点的个数,直至最后
             -一个过基准线的两个采集点中的前一个采集点,如果过基准线的个数为奇数,则需要向前去掉一个过基准线的采样点,得到过基准线的个
             -数为偶数个,除以2则得到采样点的周期个数(及采样点的整周期);
 541          4)     计算上面的整周期内采样点数据的平均值,此平均值即为基准线数值;
 542          5)     在整周期内由下面的公式计算有效值
 543           有效值 = SQRT{ SUM[(采集点-平均值)^2]/(整周期内的采集点数量)}
 544          */
 545          //--------------------------------------------------------
 546          //函数名称:void CaculateRMSValue(unsigned char uchChannel,unsigned int xdata *SrcData,unsigned int uiSamp
C51 COMPILER V7.10   ADSAMPLE                                                              09/18/2008 14:09:32 PAGE 10  

             -leLocation,unsigned int uiGroupLength)
 547          //功    能:计算两个通道的有效值
 548          //输入参数:通道号,缓存起始地址,当前采样位置,数组长度
 549          //返    回:无
 550          //作    者:佟文杰
 551          //----------------------------------------------------------  
 552          void CaculateRMSValue(unsigned char uchChannel,unsigned int xdata *SrcData,unsigned int uiSampleLocation,u
             -nsigned int uiGroupLength)
 553          {
 554   1              unsigned long xdata ulDataSum;
 555   1              int           xdata iDataSum;
 556   1              long          idata lDataCorrect;
 557   1      //      float         xdata fDataAverageSum;
 558   1              unsigned int  xdata i,j;
 559   1              unsigned int  xdata uiTempData;
 560   1              bit                 bCountFlag;
 561   1              bit                 bCountFlagBAK;
 562   1              unsigned int idata  uiDataOffsetAddress;
 563   1              unsigned int idata  uiAverageValue;
 564   1      
 565   1              unsigned long idata ulDataADSum;           //20080708
 566   1      
 567   1              float idata fTempValue;
 568   1              bit                 bCycleFlag;
 569   1              float idata fADDataSum;
 570   1      
 571   1      
 572   1      
 573   1      //      float mmmm , nnnn;
 574   1      
 575   1      
 576   1      
 577   1      //      unsigned char idata mmm;
 578   1      
 579   1              iDataSum = 0;
 580   1              lDataCorrect = 0;
 581   1              bCountFlag = 1;
 582   1              bCountFlagBAK = 1;
 583   1              AD.uiRMSCountNumber = 0;
 584   1              ulDataSum = 0;
 585   1              ulDataADSum = 0;
 586   1                                              
 587   1      //      uiSampleLocation = uiSampleLocation + 0x100;
 588   1              FeedDog();
 589   1              if (uiSampleLocation >= 0x400)
 590   1              {
 591   2                      uiSampleLocation = uiSampleLocation - 0x400;
 592   2              }
 593   1              else
 594   1              {
 595   2                      uiSampleLocation = uiSampleLocation + 0x400;
 596   2              }
 597   1      
 598   1      
 599   1              uiAverageValue = AD.uiDataAverage[uchChannel - 1];
 600   1      
 601   1      
 602   1              iDataSum = SrcData[uiSampleLocation] - uiAverageValue;
 603   1      
 604   1              if (iDataSum > 10)
 605   1              {
 606   2                      bCountFlag = 1;
C51 COMPILER V7.10   ADSAMPLE                                                              09/18/2008 14:09:32 PAGE 11  

 607   2                      bCountFlagBAK = 1;
 608   2              }
 609   1              else
 610   1              {
 611   2                      bCountFlag = 0;
 612   2                      bCountFlagBAK = 0;
 613   2              }
 614   1              
 615   1              j = uiGroupLength*4;
 616   1               
 617   1              for (i=0; i<j; i++)
 618   1              {                       
 619   2                      iDataSum = SrcData[(uiSampleLocation + i)&0x7ff] - uiAverageValue;   //20080324
 620   2      
 621   2                      if (iDataSum > 10)
 622   2                      {
 623   3                              bCountFlag = 1; 
 624   3                      }
 625   2                      else if (iDataSum < -10)                //20080707
 626   2                      {
 627   3                              bCountFlag = 0; 
 628   3                      }
 629   2                      if (bCountFlagBAK != bCountFlag)
 630   2                      {               
 631   3                              AD.uiRMSCountNumber++;
 632   3                              bCountFlagBAK = bCountFlag;
 633   3                              if (AD.uiRMSCountNumber <= 1)           //2                                               
 634   3                              {
 635   4                                      AD.uiRMSampleCountSomeCycleBAK = i;
 636   4                              }       
 637   3                              else if ((AD.uiRMSCountNumber & 0x01) == 1)              //0                                                                    
 638   3                              {
 639   4                                      AD.uiRMSampleCountSomeCycle = i;
 640   4                              }                                       
 641   3                      }                                                                  
 642   2              }
 643   1      
 644   1              if (AD.uiRMSCountNumber <= 2)            //3
 645   1              {
 646   2                      AD.uiRMSampleCountSomeCycleBAK = 0;     
 647   2                      AD.uiRMSampleCountSomeCycle = 1023;     
 648   2              }
 649   1              if(AD.uiRMSampleCountSomeCycle > AD.uiRMSampleCountSomeCycleBAK)
 650   1              {
 651   2                      uiTempData = AD.uiRMSampleCountSomeCycle - AD.uiRMSampleCountSomeCycleBAK + 1;
 652   2              }
 653   1              else
 654   1              {
 655   2                      uiTempData = 1024;      
 656   2              }       
 657   1                                 
 658   1              uiDataOffsetAddress = uiSampleLocation + AD.uiRMSampleCountSomeCycleBAK;   //20080708
 659   1      
 660   1              FeedDog();  
 661   1              ulDataSum = 0;
 662   1              for (j=0; j<uiTempData; j++)
 663   1              {
 664   2                      ulDataSum = ulDataSum + SrcData[(uiDataOffsetAddress + j) & 0x7FF];
 665   2              }
 666   1      
 667   1              AD.uiDataAverage[uchChannel - 1] = ulDataSum/uiTempData;
 668   1      
C51 COMPILER V7.10   ADSAMPLE                                                              09/18/2008 14:09:32 PAGE 12  

 669   1              if (uchChannel == 1)
 670   1              {
 671   2      /*              AD.uiDataAverageBAK[0][AD.uchCountNumber1] = AD.uiDataAverage[0];
 672   2                      AD.uchCountNumber1++;
 673   2                      if (AD.uchCountNumber1 >= 15)
 674   2                      {
 675   2                              AD.uchCountNumber1 = 0;
 676   2                      }                               */

⌨️ 快捷键说明

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