📄 aaa.lst
字号:
601 2
602 2 CAPCOML1 = (V_Ton & 0x00FF);
603 2 CAPCOMH1 = (V_Ton >> 8);
604 2
605 2 CAPCOML2 = (W_Ton & 0x00FF);
606 2 CAPCOMH2 = (W_Ton >> 8);
607 2 } //66
608 1
609 1 ////////////////////////////////////////////
610 1
611 1 //下一个采样点
612 1
C51 COMPILER V7.50 AAA 09/12/2005 06:33:21 PAGE 11
613 1
614 1 P_flag = ~P_flag; //奇偶点变换
615 1
616 1 K++; //下一个采样点值
617 1
618 1 Tm++;
619 1 U_angle = K*180/N;
620 1 V_angle = U_angle + 120;
621 1 W_angle = U_angle + 240;
622 1
623 1
624 1
625 1
626 1 if (P_flag == 0)
627 1 {
628 2 // U_Toff =k1* ((Half_Ts * (0xffff - M*(sin_angle(U_angle))))>>16);
629 2 // V_Toff =k1* ((Half_Ts * (0xffff - M*(sin_angle(V_angle))))>>16);
630 2 // W_Toff =k1* ((Half_Ts * (0xffff - M*(sin_angle(W_angle))))>>16);
631 2 U_Toff =((Half_Ts * (0xffff - M*(sin_angle(U_angle))))>>16);
632 2 V_Toff =((Half_Ts * (0xffff - M*(sin_angle(V_angle))))>>16);
633 2 W_Toff =((Half_Ts * (0xffff - M*(sin_angle(W_angle))))>>16);
634 2 }
635 1 else
636 1 {
637 2 U_Ton =((Half_Ts * (0xffff + M*(sin_angle(U_angle))))>>16);
638 2 V_Ton =((Half_Ts * (0xffff + M*(sin_angle(V_angle))))>>16);
639 2 W_Ton =((Half_Ts * (0xffff + M*(sin_angle(W_angle))))>>16);
640 2
641 2
642 2 }
643 1
644 1 // if (P_flag == 0)
645 1 // {
646 1 // U_Toff = (417 * (0x400000 - M*(sin_angle(U_angle))))>>22;
647 1 // V_Toff = (417 * (0x400000 - M*(sin_angle(V_angle))))>>22;
648 1 // W_Toff = (417 * (0x400000 - M*(sin_angle(W_angle))))>>22;
649 1 // }
650 1 // else
651 1 // {
652 1 // U_Ton = (417 * (0x400000 + M*(sin_angle(U_angle))))>>22;
653 1 // V_Ton = (417 * (0x400000 + M*(sin_angle(V_angle))))>>22;
654 1 // W_Ton = (417 * (0x400000 + M*(sin_angle(W_angle))))>>22;
655 1 //
656 1 //
657 1 // }
658 1 // aa=0;
659 1
660 1
661 1 if ( K==2*N )
662 1 { K=0;
663 2
664 2 // P_flag = 0;
665 2 }
666 1
667 1
668 1 }
669
670 /****************************************************************************
671 *死区指令延时,应实测,要考虑中断影响
672 * 10个temp 延时约6us
673 ****************************************************************************/
674 void delay1()
C51 COMPILER V7.50 AAA 09/12/2005 06:33:21 PAGE 12
675 {
676 1 char temp;
677 1
678 1 EA=0;
679 1 temp = 0;
680 1 temp = 0;
681 1 temp = 0;
682 1 temp = 0;
683 1 temp = 0;
684 1 temp = 0;
685 1 temp = 0;
686 1 temp = 0;
687 1 temp = 0;
688 1 temp = 0;
689 1 temp = 0;
690 1 temp = 0;
691 1 temp = 0;
692 1 temp = 0;
693 1 temp = 0;
694 1 temp = 0;
695 1 temp = 0;
696 1 temp = 0;
697 1
698 1 EA=1;
699 1
700 1 }
701 /***************************************************************************
702 *定时器0初始化
703 ***************************************************************************/
704 void timer0_init (void)
705 {
706 1 EA = 0; /* disable interrupts */
707 1
708 1 TR0 = 0; /* stop timer 0 */
709 1 TMOD &= 0xF0; /* clear timer 0 mode bits - bottom 4 bits */
710 1 TMOD |= 0x01; /* put timer 0 into 16-bit no prescale */
711 1
712 1 timer0_value = 0x10000-Ts; //采样周期=1/2载波周期
713 1 TL0 = (timer0_value & 0x00FF);
714 1 TH0 = (timer0_value >> 8);
715 1
716 1 // PT0 = 1; /* set high priority interrupt for timer 0 */
717 1 PT0 = 0;
718 1 ET0 = 1; /* enable timer 0 interrupt */
719 1 TR0 = 1; /* start timer 0 */
720 1 EA = 1; /* enable interrupts */
721 1 }
722
723
724
725 /***************************************************************************
726 *PCA中断服务程序
727 ***************************************************************************/
728 static void PCA_isr (void) interrupt PCA_VECTOR using 1
729
730 {
731 1 unsigned char PCA_status;
732 1
733 1
734 1 PCA_status = PCASTA; //读PCA中断状态
735 1
736 1
C51 COMPILER V7.50 AAA 09/12/2005 06:33:21 PAGE 13
737 1 if ( PCA_status & 0x01) //TCM0中断,U相
738 1 {
739 2
740 2 if (P_flag==0)
741 2 {
742 3 P4_3 = 1; //偶数采样中断到,关V4 延时 开V1
743 3 delay1();
744 3 P4_0 = 0;
745 3 }
746 2 else
747 2 {
748 3 P4_0 = 1; //奇数采样中断到,关V1 延时 开V4
749 3 delay1();
750 3 P4_3 = 0;
751 3 }
752 2 PCASTA &= 0xFE;
753 2
754 2 }
755 1
756 1 if ( PCA_status & 0x02) //TCM1中断,V相
757 1 {
758 2
759 2 if (P_flag==0)
760 2 {
761 3 P4_5 = 1; //偶数采样中断到,关V6 延时 开V3
762 3 delay1();
763 3 P4_2 = 0;
764 3 }
765 2 else
766 2 {
767 3 P4_2 = 1; //奇数采样中断到,关V3 延时 开V6
768 3 delay1();
769 3 P4_5 = 0;
770 3 }
771 2 PCASTA &= 0xFD;
772 2 }
773 1
774 1 if ( PCA_status & 0x04) //TCM2中断,W相
775 1 {
776 2
777 2 if (P_flag==0)
778 2 {
779 3 P4_4 = 1; //偶数采样中断到,关V5 延时 开V2
780 3 delay1();
781 3 P4_1 = 0;
782 3 }
783 2 else
784 2 {
785 3 P4_1 = 1; //奇数采样中断到,关V2 延时 开V5
786 3 delay1();
787 3 P4_4 = 0;
788 3 }
789 2 PCASTA &= 0xFB;
790 2 }
791 1
792 1
793 1 // PCASTA &= 0x00; //清PCA中断状态
794 1
795 1 }
796
797 //PCA0初始化
798 void PCA_init()
C51 COMPILER V7.50 AAA 09/12/2005 06:33:21 PAGE 14
799 {
800 1
801 1 unsigned int PCA0;
802 1 //0.1 Configure pins as PCA function
803 1 // P4SFS0=0xff;
804 1 // P4SFS1=0;
805 1
806 1 //0.2 initialize PCA0 counter
807 1 PCACL0=PCACH0=0;
808 1 PCACL1=PCACH1=0;
809 1
810 1 //1.2 select PCA0CLK as PCA0 clock source
811 1 //PCA0时钟为fosc,timer0_isr中Toff,Ton计数值*12 再写入比较寄存器
812 1 // CCON2=0x10;
813 1 CCON2=0x12; //fosc/4
814 1
815 1 //Stop PCA0 counter
816 1 PCACON0=0x00;
817 1
818 1 //3. Set TCM0 operationg mode,16bit soft timer , enable softimer interrupt
819 1 // TCMMODE0=0x48;
820 1 TCMMODE0=0xC8;
821 1 TCMMODE1=0xC8;
822 1
823 1 TCMMODE2=0xC8;
824 1
825 1
826 1 CAPCOML0 = (PCA0 & 0x00FF);
827 1 CAPCOMH0 = (PCA0 >> 8);
828 1
829 1
830 1 // 开PCA中断
831 1 IEA |= 0x20;
832 1 IPA |= 0X20; // set high priority interrupt for PCA0
833 1
834 1 //5. Start PCA0 counter
835 1 PCACON0|=0x40;
836 1
837 1 }
838
839
840 /******************************************************************************
841 * uint getVA(channel)
842 *功能描述:读取输出电压,电流值
843 *参 数:channel,选择读取通道
844 *****************************************************/
845
846
847 void getVA (uchar channel)
848 {
849 1 code uchar str_v[] = {"The V and A is:"};
850 1 //uchar temp1;
851 1 uint temp;
852 1 unsigned long int value;
853 1 uchar vv[3];
854 1
855 1
856 1 // ADC_EnableAll();
857 1
858 1 ADC_Init(channel);
859 1
860 1
C51 COMPILER V7.50 AAA 09/12/2005 06:33:21 PAGE 15
861 1 clrlcd();
862 1 printchar(1,1,'v');
863 1 printstr(0,0,str_v);
864 1 printchar(2,1,0x3a);
865 1 printchar(4,1,0x2e) ; //"."
866 1 printchar(7,1,'V') ;
867 1
868 1 value = ADC_Read(channel);
869 1
870 1 temp = value*150; //或者88.temp = (value*2.5/1023)*1000*k
871 1 // temp1 = value % 51;
872 1 // if(temp1 >= 26)temp++;
873 1
874 1 vv[3] = temp%10; //小数点后第3位
875 1 vv[2] = (temp/10)%10; //小数点后第2位
876 1 vv[1] = temp/100; //小数点后第1位
877 1
878 1
879 1 // clrlcd();
880 1 // printchar(1,1,'v');
881 1 // printchar(2,1,0x3a);
882 1 printchar(3,1,vv[0]+48);
883 1 printchar(4,1,vv[1]+48);
884 1 printchar(5,1,0x2e) ; //"."
885 1 ;
886 1 printchar(6,1,vv[2]+48);
887 1 //printchar(7,1,vv[3]+48);
888 1 //printchar(8,1,'V') ;
889 1
890 1 printchar(10,1,'I') ;
891 1 printchar(11,1,0x3a) ; //":"
892 1 printchar(15,1,'A') ; //"."
893 1 //keyv=getkey();}while(keyv == 0x0e);
894 1 }
895
896 /**************************************************************
897 * getPf()
898 *进入算功率,读频率程序
899 ***************************************************************/
900 void getPf (void)
901 { code uchar str_pf[] = {"The f and P is:"};
902 1 clrlcd();
903 1 printstr(0,0,str_pf);
904 1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -