📄 current1.lst
字号:
508 2 S1DAT=COMM;
509 2 S1CON=0xC5; //STA=0 STO=0 SI=0 AA=1
510 2 }
511 1 if(S1STA==0x20)
512 1 {
513 2 FF=1;
514 2 S1CON=0xD5; //STA=0 STO=1 SI=0 AA=1
515 2 }
516 1 if(S1STA==0x28)
517 1 {
518 2 S1CON=0xD5; //STA=0 STO=1 SI=0 AA=1
519 2 FF=1;
520 2 }
521 1 if(S1STA==0x30)
522 1 {
523 2 FF=1;
524 2 S1CON=0xD5; //STA=0 STO=1 SI=0 AA=1
525 2 }
526 1 if(S1STA==0x38)
527 1 S1CON=0xE5; //STA=1 STO=0 SI=0 AA=1
528 1 if(S1STA==0x40)
529 1 S1CON=0xC5; //STA=0 STO=0 SI=0 AA=1
530 1 if(S1STA==0x48)
531 1 {
532 2 FF=1;
533 2 S1CON=0xD5; //STA=0 STO=1 SI=0 AA=1
534 2 }
535 1 if(S1STA==0x50)
536 1 {
537 2 GET=S1DAT;
538 2 S1CON=0xC1; //STA=0 STO=0 SI=0 AA=0
539 2 }
540 1 if(S1STA==0x58)
541 1 {
542 2 FF=1;
543 2 S1CON=0xD5; //STA=0 STO=1 SI=0 AA=1
544 2 }
545 1 ES1=1;
546 1 }
547
548 void CT0_int (void) interrupt 6 //横摆使能输入
549 {
550 1 CTI0=0;
551 1 CTCON=CTCON&0XFC; //禁止上升、下降
C51 COMPILER V7.06 CURRENT1 07/15/2005 11:04:46 PAGE 10
552 1 if(edge==0)
553 1 {
554 2 current_out=1; //峰值
555 2 if(ahf_ok==1)
556 2 {
557 3 TR0=0;
558 3 IM=(unsigned int)(I1*0.41);
559 3 IM8=IM%256;
560 3 IM4=IM/256;
561 3 UPD=0X00;
562 3 }
563 2 IEN1=IEN1&0XDF; //禁止CM1,停峰、基时间
564 2 edge=1;
565 2 CTCON=CTCON|0X01; //CT0上升沿
566 2 }
567 1 else
568 1 {
569 2 edge=0;
570 2 current_out=0;
571 2 if(ahf_ok==1)
572 2 {
573 3 IM=(unsigned int)(I11*0.41);
574 3 TR0=1;
575 3 }
576 2 CTCON=CTCON|0X02; //CT0下降沿
577 2 CML1=TML2+0XE2; //峰值时间
578 2 if(CML1<TML2)
579 2 CMH1=(TMH2+1)+0X04;
580 2 else
581 2 CMH1=TMH2+0X04;
582 2 c_cm1=0;
583 2 IEN1=IEN1|0X20; //允许CM1,峰、基时间
584 2 }
585 1 }
586
587 void CT2_int (void) interrupt 8 //采样保持脉冲
588 {
589 1 CTI2=0;
590 1 if(current_out==1&&ad_finish==1)
591 1 {
592 2 ad_finish=0; //采样进行标志
593 2 if(i_v==0)
594 2 ADCON=0x09; //启动电流采样
595 2 else
596 2 ADCON=0X08; //启动电压采样
597 2 }
598 1 }
599
600 void ADC_int (void) interrupt 10 //AD采样中断
601 {
602 1 ADCON=ADCON&0xEF; //清ADC中断标志
603 1 CTCON=CTCON&0XCF;
604 1 IEN1=IEN1&0XFB; //禁止CT2
605 1 c_adc++;
606 1 adh=ADCH;
607 1 adl=ADCON&0xC0;
608 1 adh=adh<<2;
609 1 adl=adl>>6;
610 1 ad=adh+adl;
611 1 da=ad;
612 1 AD5=(da*5000)/0x3FF;
613 1
C51 COMPILER V7.06 CURRENT1 07/15/2005 11:04:46 PAGE 11
614 1 if(i_v==0) //电流采样
615 1 {
616 2 ad_i=10000*AD5/4920;
617 2 if(ad_i<50) //电流小于5.0A
618 2 tab2++;
619 2 if(c_adc==1)
620 2 {
621 3 AD1=ad_i;
622 3 AD2=ad_i;
623 3 AD3=ad_i;
624 3 AD4=ad_i;
625 3 }
626 2 else
627 2 {
628 3 ad_i=(ad_i+AD1+AD2+AD3+AD4)/5;
629 3 AD1=AD2;
630 3 AD2=AD3;
631 3 AD3=AD4;
632 3 AD4=ad_i;
633 3 }
634 2 }
635 1 else //电压采样
636 1 {
637 2
638 2 ad_v=1000*AD5/4920;
639 2 if(ad_v<25)
640 2 tab3++;
641 2 if(c_adc==6)
642 2 {
643 3 AD1=ad_v;
644 3 AD2=ad_v;
645 3 AD3=ad_v;
646 3 AD4=ad_v;
647 3 }
648 2 else
649 2 {
650 3 ad_v=(ad_v+AD1+AD2+AD3+AD4)/5;
651 3 AD1=AD2;
652 3 AD2=AD3;
653 3 AD3=AD4;
654 3 AD4=ad_v;
655 3 } //电压小于2.5V
656 2 }
657 1
658 1 /*
659 1 if((tab2>=5||tab3>=5)&&work==3)
660 1 {
661 1 // err_operate();
662 1 }
663 1 else
664 1 {
665 1 */
666 1 if(c_adc<=5) //电流采样
667 1 {
668 2 if(c_adc==5) //电流——电压
669 2 {
670 3 i_v=1; //电压采样标志
671 3 AD1=0;
672 3 AD2=0;
673 3 AD3=0;
674 3 AD4=0;
675 3 tab2=0;
C51 COMPILER V7.06 CURRENT1 07/15/2005 11:04:46 PAGE 12
676 3 }
677 2 ad_finish=1;
678 2 CTCON=CTCON|0X20;
679 2 IEN1=IEN1|0X04; //允许CT2
680 2 }
681 1 if(c_adc>5&&c_adc<=10)
682 1 {
683 2 if(c_adc==10) //电压——电流
684 2 {
685 3 i_v=0; //电流采样标志
686 3 c_adc=0;
687 3 AD1=0;
688 3 AD2=0;
689 3 AD3=0;
690 3 AD4=0;
691 3 tab3=0;
692 3 }
693 2 ad_finish=1;
694 2 CTCON=CTCON|0X20;
695 2 IEN1=IEN1|0X04; //允许CT2
696 2 }
697 1 // }
698 1 }
699
700 void CM1_int (void) interrupt 12 //电流脉冲输出(峰、基值时间)
701 {
702 1 CMI1=0;
703 1 c_cm1++;
704 1 if(current_out==1&&c_cm1==n_pulse||current_out==0&&c_cm1==n_base)
705 1 {
706 2 current_out=~current_out;
707 2 c_cm1=0;
708 2 }
709 1 CML1=TML2+0XE2; //峰值时间
710 1 if(CML1<TML2)
711 1 CMH1=(TMH2+1)+0X04;
712 1 else
713 1 CMH1=TMH2+0X04;
714 1 }
715
716 void CM2_int (void) interrupt 13 //关水计时
717 {
718 1 CMI2=0;
719 1 c_cm2++;
720 1 if(c_cm2==240)
721 1 {
722 2 con_water=1; //关水
723 2 IEN1=IEN1&0xDF; //禁止CM1
724 2 c_cm2=0;
725 2 }
726 1 CML2=TML2+0x24;
727 1 if(CML2<TML2)
728 1 CMH2=TMH2+1+0xF4;
729 1 else
730 1 CMH2=TMH2+0xF4;
731 1 }
732
733 main()
734 {
735 1 unsigned char k,k1,k2;
736 1 unsigned int temp_delt_p,temp_delt_b;
737 1
C51 COMPILER V7.06 CURRENT1 07/15/2005 11:04:46 PAGE 13
738 1 current_enable=0;
739 1 TMOD=0x22; //定时器1,方式2;
740 1 TL1=0XFD; //波特率9600
741 1 TH1=0XFD;
742 1 TR1=1; //启动定时器
743 1 PCON=0X00; //SMOD=1
744 1 TMOD=0x23; //定时器0,方式3,两个8位定时器;
745 1 TR1=0;
746 1 TF1=0;
747 1 S0CON=0XF8; //串口方式3,SM2=0,REN=1,TB8=1,RB8=0,TI=0,RI=0
748 1 IP0=0X98; //S0=1
749 1 IP1=IP1|0X20;
750 1 ES0=1; //开串口中断
751 1 ET0=1;
752 1 ET1=1;
753 1 ES1=1; //I2C
754 1 EAD=1; //AD中断允许
755 1 EA=1; //中断总允许
756 1 start_t2();
757 1
758 1 urgent_stop=0;
759 1 current_err=0;
760 1 err_ok=0;
761 1 err=0;
762 1 BEGIN:
763 1 if(urgent_stop==1)
764 1 {
765 2 urgent_stop=0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -