📄 adsample.lst
字号:
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 + -