📄 avc.lst
字号:
467 void CT2_int (void) interrupt 8 //电压采样保持脉冲
468 {
469 1 CTI2=0;
470 1 CTCON=CTCON&0xCF;
471 1 if(decrease==0)
472 1 {
473 2 // IEN1=IEN1&0XFB; //禁止CT2
474 2 ad_finish=0; //AD转换及处理过程
475 2 ADCON=0X08; //启动AD采样
476 2 }
477 1 }
478
479 void CT3_int (void) interrupt 9 //电流脉冲
480 {
481 1 CTI3=0;
482 1 pulse_base=~pulse_base;
483 1 CTCON=CTCON&0X3F;
484 1
485 1 if(avc_ok==0) //开始弧长
486 1 {
487 2 avc_ok=1;
488 2 CTCON=CTCON|0x20; //CT2下降沿
C51 COMPILER V7.06 AVC 06/10/2005 14:33:44 PAGE 9
489 2 IEN1=IEN1|0X04; //允许CT2,采样保持脉冲
490 2 }
491 1 else
492 1 {
493 2 if(pp.avc_type==SP)
494 2 {
495 3 if(pulse_base==0) //进入基值
496 3 {
497 4 gate=0;
498 4 CTCON=CTCON&0xCF;
499 4 }
500 3 else
501 3 {
502 4 c_sample=0;
503 4 CTCON=CTCON|0x20;
504 4 }
505 3 }
506 2 else if(pp.avc_type==SB)
507 2 {
508 3 if(pulse_base==1)
509 3 {
510 4 gate=0;
511 4 CTCON=CTCON&0xCF;
512 4 }
513 3 else
514 3 {
515 4 c_sample=0;
516 4 CTCON=CTCON|0x20;
517 4 }
518 3 }
519 2 else
520 2 {
521 3 gate=0;
522 3 CTCON=CTCON&0xCC;
523 3 AD1=0;
524 3 AD2=0;
525 3 AD3=0;
526 3 AD4=0;
527 3 AD5=0;
528 3 new_circle=1;
529 3 if(pulse_base==1)
530 3 {
531 4 vc5=vc1;
532 4 vc6=vc2;
533 4 }
534 3 else
535 3 {
536 4 vc5=vc3;
537 4 vc6=vc4;
538 4 }
539 3 CTCON=CTCON|0x20;
540 3 }
541 2 }
542 1
543 1
544 1 if(pulse_base==1)
545 1 CTCON=CTCON|0X80; //CT3下降沿
546 1 else
547 1 CTCON=CTCON|0X40; //CT3上升沿
548 1 }
549
550 void ADC_int (void) interrupt 10
C51 COMPILER V7.06 AVC 06/10/2005 14:33:44 PAGE 10
551 {
552 1 ADCON=ADCON&0xEF; //清ADC中断标志
553 1 c_sample++; //2005-3-3
554 1 adh=ADCH;
555 1 adl=ADCON&0xC0;
556 1 adh=adh<<2;
557 1 adl=adl>>6;
558 1 ad=adh+adl;
559 1 da=ad;
560 1 AD5=(da*5000)/0x3FF;
561 1 if(new_circle==1)
562 1 {
563 2 new_circle=0;
564 2 AD1=AD5;
565 2 AD2=AD5;
566 2 AD3=AD5;
567 2 AD4=AD5;
568 2 }
569 1 else
570 1 {
571 2 AD5=(AD5+AD1+AD2+AD3+AD4)/5;
572 2 AD1=AD2;
573 2 AD2=AD3;
574 2 AD3=AD4;
575 2 AD4=AD5;
576 2 }
577 1 AD5=AD5*6/100; //AD5*30/5
578 1
579 1 if(c_sample%5==0&&(AD5>vc5||AD5<vc6))
580 1 {
581 2 c_sample=0; //2005-3-3
582 2 if(AD5>vc5)
583 2 avc_dir=0;
584 2 if(AD5<vc6)
585 2 avc_dir=1; //弧长方向——上
586 2 avc_enable=0;
587 2 gate=1;
588 2 CTCON=CTCON|0x02;
589 2 IEN1=IEN1|0X01; //允许CT0,弧长调整长度
590 2 }
591 1 else
592 1 {
593 2 if(pp.k1==DC||(pp.k1==PDC&&pp.avc_type==SP&&pulse_base==1))//(pp.avc_type==SP&&pulse_base==1||pp.avc_typ
-e==SPB||pp.avc_type==SB&&pulse_base==0)))
594 2 {
595 3 CTCON=CTCON|0x20;
596 3 // IEN1=IEN1|0X04; //允许CT2
597 3 }
598 2 }
599 1 ad_finish=1; //AD转换及处理完成
600 1 }
601
602 main()
603 {
604 1 TMOD=0x22; //定时器1,方式2;定时器0,方式3,两个8位定时器;
605 1 TL1=0XFD; //波特率9600
606 1 TH1=0XFD;
607 1 TR1=1; //启动定时器
608 1 TMOD=0x23; //定时器0,方式3,两个8位定时器;
609 1 TR1=0;
610 1 TF1=0;
611 1 S0CON=0XF8; //串口方式3,SM2=1,REN=1,TB8=1,RB8=0,TI=0,RI=0
C51 COMPILER V7.06 AVC 06/10/2005 14:33:44 PAGE 11
612 1 IP1=0X01; //CT0高优先级
613 1 IP0=0X98; //S0=1,T1=1
614 1 EX0=1;
615 1 ES0=1; //开串口中断
616 1 ET1=1;
617 1 EAD=1; //AD中断允许
618 1 EA=1; //中断总允许
619 1 start_t2();
620 1
621 1 externel_voltage=0;
622 1 COM=0XB6;
623 1 COUNT2=0x00;
624 1 COUNT2=0x00;
625 1 AD1=0;
626 1 AD2=0;
627 1 AD3=0;
628 1 AD4=0;
629 1 AD5=0;
630 1 U51=0;
631 1
632 1 BEGIN: CTCON=0X00;
633 1 IEN1=0x00;
634 1 stop=1;
635 1 avc_err=0;
636 1 EX0=1;
637 1 urgent_stop=0;
638 1 COM=0x36;
639 1 COUNT0=0x00;
640 1 COUNT0=0x00;
641 1 COM=0X76;
642 1 COUNT1=0x00;
643 1 COUNT1=0x00;
644 1 gate=0; //关门控
645 1 avc_enable=1;
646 1 avc_dir=1;
647 1 work=0;
648 1 called=0;
649 1 start=0;
650 1 pgj=0;
651 1 sector=0;
652 1 in_sector=0;
653 1 start_avc=0;
654 1 avc_ok=0;
655 1 new_circle=1;
656 1 c_sample=0;
657 1 ad_finish=1; //AD转换及处理完成标志
658 1 pulse_base=0; //峰、基值标志 0-基值、1-峰值
659 1 stop_avc=0;
660 1 decrease=0;
661 1 lift=0;
662 1 ask_lift_ok=0;
663 1 lift_ok=0;
664 1 lift_complete=0;
665 1 to_begin=0;
666 1
667 1 need_para=0;
668 1 POINTER0=0;
669 1 SSUM=0;
670 1 S_ANSW=0;
671 1 POINTER1=0;
672 1 RSUM=0;
673 1 ans=0;
C51 COMPILER V7.06 AVC 06/10/2005 14:33:44 PAGE 12
674 1 // R_ANSW=0;
675 1 send=0;
676 1 resend=0;
677 1 r_byte_nums=4;
678 1 demand=0;
679 1
680 1 avc=0;
681 1 avc_up=0;
682 1 avc_down=0;
683 1 motor_stop=0;
684 1 avc_err=0; //弧长脉冲计数
685 1
686 1
687 1 PWMP=12; //采样保持脉冲,2K
688 1 PWM0=127;
689 1 COM=0X36; //弧长点动速度,1K
690 1 COUNT0=8000%256;
691 1 COUNT0=8000/256; //弧长采样脉冲,1K
692 1 CML0=TML2+0X20;
693 1 if(CML0<TML2)
694 1 CMH0=TMH2+1+0X4E;
695 1 else
696 1 CMH0=TMH2+0X4E; //20ms
697 1
698 1 while(start==0) //等待过程中,接受点名和参数
699 1 {
700 2 if(called==1)
701 2 {
702 3 ini_sbuf(M_main,infor,S_ANSW,cross_machine,0,0);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -