📄 current_1027.lst
字号:
522 1 {
523 2 S1CON=0xD5; //STA=0 STO=1 SI=0 AA=1
524 2 FF=1;
525 2 }
526 1 if(S1STA==0x30)
527 1 {
528 2 FF=1;
529 2 S1CON=0xD5; //STA=0 STO=1 SI=0 AA=1
530 2 }
531 1 if(S1STA==0x38)
532 1 S1CON=0xE5; //STA=1 STO=0 SI=0 AA=1
533 1 if(S1STA==0x40)
534 1 S1CON=0xC5; //STA=0 STO=0 SI=0 AA=1
535 1 if(S1STA==0x48)
536 1 {
537 2 FF=1;
538 2 S1CON=0xD5; //STA=0 STO=1 SI=0 AA=1
539 2 }
540 1 if(S1STA==0x50)
541 1 {
542 2 GET=S1DAT;
543 2 S1CON=0xC1; //STA=0 STO=0 SI=0 AA=0
544 2 }
545 1 if(S1STA==0x58)
546 1 {
547 2 FF=1;
548 2 S1CON=0xD5; //STA=0 STO=1 SI=0 AA=1
549 2 }
550 1 ES1=1;
551 1 }
C51 COMPILER V7.06 CURRENT_1027 01/13/2006 15:18:05 PAGE 10
552
553 void CT0_int (void) interrupt 6 //横摆使能输入
554 {
555 1 CTI0=0;
556 1 CTCON=CTCON&0XFC; //禁止上升、下降
557 1 if(edge==0)
558 1 {
559 2 current_out=1; //峰值
560 2 IEN1=IEN1&0XDF; //禁止CM1,停峰、基时间
561 2 if(ahf_ok==1)
562 2 {
563 3 IM8=IML_ahf;
564 3 IM4=IMH_ahf;
565 3 IB8=IMML_ahf;
566 3 IB4=IMMH_ahf;
567 3 UPD=0X00;
568 3 }
569 2 else
570 2 {
571 3 IM8=IML;
572 3 IM4=IMH;
573 3 IB8=IML;
574 3 IB4=IMH;
575 3 UPD=0X00;
576 3 }
577 2 edge=1;
578 2 CTCON=CTCON|0X01; //CT0上升沿
579 2 }
580 1 else
581 1 {
582 2 edge=0;
583 2 current_out=0;
584 2 CTCON=CTCON|0X02; //CT0下降沿
585 2 CML1=TML2+0XE2; //峰值时间
586 2 if(CML1<TML2)
587 2 CMH1=(TMH2+1)+0X04;
588 2 else
589 2 CMH1=TMH2+0X04;
590 2 c_cm1=0;
591 2 IEN1=IEN1|0X20; //允许CM1,峰、基时间
592 2 }
593 1 }
594
595 void CT2_int (void) interrupt 8 //采样保持脉冲
596 {
597 1 CTI2=0;
598 1 if(current_out==1&&ad_finish==1)
599 1 {
600 2 ad_finish=0; //采样进行标志
601 2 if(i_v==0)
602 2 ADCON=0x09; //启动电流采样
603 2 else
604 2 ADCON=0X08; //启动电压采样
605 2 }
606 1 }
607
608 void ADC_int (void) interrupt 10 //AD采样中断
609 {
610 1 ADCON=ADCON&0xEF; //清ADC中断标志
611 1 CTCON=CTCON&0XCF;
612 1 IEN1=IEN1&0XFB; //禁止CT2
613 1 c_adc++;
C51 COMPILER V7.06 CURRENT_1027 01/13/2006 15:18:05 PAGE 11
614 1 adh=ADCH;
615 1 adl=ADCON&0xC0;
616 1 adh=adh<<2;
617 1 adl=adl>>6;
618 1 ad=adh+adl;
619 1 da=ad;
620 1 AD5=(da*5000)/0x3FF;
621 1
622 1 if(i_v==0) //电流采样
623 1 {
624 2 ad_i=10000*AD5/4920;
625 2 if(ad_i<50) //电流小于5.0A
626 2 tab2++;
627 2 if(c_adc==1)
628 2 {
629 3 AD1=ad_i;
630 3 AD2=ad_i;
631 3 AD3=ad_i;
632 3 AD4=ad_i;
633 3 }
634 2 else
635 2 {
636 3 ad_i=(ad_i+AD1+AD2+AD3+AD4)/5;
637 3 AD1=AD2;
638 3 AD2=AD3;
639 3 AD3=AD4;
640 3 AD4=ad_i;
641 3 }
642 2 }
643 1 else //电压采样
644 1 {
645 2
646 2 ad_v=1000*AD5/4920;
647 2 if(ad_v<25)
648 2 tab3++;
649 2 if(c_adc==6)
650 2 {
651 3 AD1=ad_v;
652 3 AD2=ad_v;
653 3 AD3=ad_v;
654 3 AD4=ad_v;
655 3 }
656 2 else
657 2 {
658 3 ad_v=(ad_v+AD1+AD2+AD3+AD4)/5;
659 3 AD1=AD2;
660 3 AD2=AD3;
661 3 AD3=AD4;
662 3 AD4=ad_v;
663 3 } //电压小于2.5V
664 2 }
665 1 if(c_adc<=5) //电流采样
666 1 {
667 2 if(c_adc==5) //电流——电压
668 2 {
669 3 i_v=1; //电压采样标志
670 3 AD1=0;
671 3 AD2=0;
672 3 AD3=0;
673 3 AD4=0;
674 3 tab2=0;
675 3 }
C51 COMPILER V7.06 CURRENT_1027 01/13/2006 15:18:05 PAGE 12
676 2 ad_finish=1;
677 2 CTCON=CTCON|0X20;
678 2 IEN1=IEN1|0X04; //允许CT2
679 2 }
680 1 if(c_adc>5&&c_adc<=10)
681 1 {
682 2 if(c_adc==10) //电压——电流
683 2 {
684 3 i_v=0; //电流采样标志
685 3 c_adc=0;
686 3 AD1=0;
687 3 AD2=0;
688 3 AD3=0;
689 3 AD4=0;
690 3 tab3=0;
691 3 }
692 2 ad_finish=1;
693 2 CTCON=CTCON|0X20;
694 2 IEN1=IEN1|0X04; //允许CT2
695 2 }
696 1 }
697
698 void CM1_int (void) interrupt 12 //电流脉冲输出(峰、基值时间)
699 {
700 1 CMI1=0;
701 1 c_cm1++;
702 1 if(current_out==1&&c_cm1==n_pulse||current_out==0&&c_cm1==n_base)
703 1 {
704 2 if(decrease==1||ahf_ok==0)
705 2 {
706 3 if(current_out==1)
707 3 {
708 4 IM8=IBL;
709 4 IM4=IBH;
710 4 IB8=IBL;
711 4 IB4=IBH;
712 4 UPD=0X00;
713 4 }
714 3 else
715 3 {
716 4 IM8=IML;
717 4 IM4=IMH;
718 4 IB8=IML;
719 4 IB4=IMH;
720 4 UPD=0X00;
721 4 }
722 3 }
723 2 else
724 2 {
725 3 if(current_out==1)
726 3 {
727 4 IM8=IBL_ahf;
728 4 IM4=IBH_ahf;
729 4 IB8=IBBL_ahf;
730 4 IB4=IBBH_ahf;
731 4 UPD=0X00;
732 4 }
733 3 else
734 3 {
735 4 IM8=IML_ahf;
736 4 IM4=IMH_ahf;
737 4 IB8=IMML_ahf;
C51 COMPILER V7.06 CURRENT_1027 01/13/2006 15:18:05 PAGE 13
738 4 IB4=IMMH_ahf;
739 4 UPD=0X00;
740 4 }
741 3 }
742 2 current_out=~current_out;
743 2 c_cm1=0;
744 2 }
745 1 CML1=TML2+0XE2; //峰值时间
746 1 if(CML1<TML2)
747 1 CMH1=(TMH2+1)+0X04;
748 1 else
749 1 CMH1=TMH2+0X04;
750 1 }
751
752 void CM2_int (void) interrupt 13 //关水计时
753 {
754 1 CMI2=0;
755 1 IEN1=IEN1&0XBF; //CM2
756 1 if(gas_stop==1)
757 1 {
758 2 c_cm21++;
759 2 if(c_cm21==20)
760 2 {
761 3 con_gas1=1;
762 3 gas_stop=0;
763 3 c_cm21=0;
764 3 }
765 2 }
766 1 if(con_water!=1)
767 1 {
768 2 c_cm2++;
769 2 if(c_cm2==240)
770 2 {
771 3 con_water=1; //关水
772 3 IEN1=IEN1&0xDF; //禁止CM1
773 3 c_cm2=0;
774 3 }
775 2 }
776 1
777 1 if(gas_stop==1||con_water!=1)
778 1 {
779 2 CML2=TML2+0x24;
780 2 if(CML2<TML2)
781 2 CMH2=TMH2+1+0xF4;
782 2 else
783 2 CMH2=TMH2+0xF4;
784 2 IEN1=IEN1|0X40; //CM2
785 2 }
786 1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -