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