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