⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 aaa.lst

📁 用51单片机编译成的频率计的源程序
💻 LST
📖 第 1 页 / 共 4 页
字号:
 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 + -