LOZHEN 发表于 2023-5-4 16:38:19

PCA检测输入脉冲频率求教

本人用15W404AS的P1.1口作为输入来检测输入脉冲的频率,现在同样的输入频率,其显示的值都是不同,不知道问题出在哪里,请帮忙指导一下


#define CCP_S0 0x10               //P_SW1.4
#define CCP_S1 0x20               //P_SW1.5

bit flag;
BYTE count;//Âö³åÊý
DWORD count_L,count_H,count0,count1,length;
BYTE over_count; //PCA¼ÆÊýÆ÷Òç³ö´ÎÊý
float Fre;

//BYTE count1;


void PCA_InitConfig(void)
{
   ACC = P_SW1;
    ACC &= ~(CCP_S0 | CCP_S1);      //CCP_S0=0 CCP_S1=0
    P_SW1 = ACC;                  //(P1.2/ECI, P1.1/CCP0, P1.0/CCP1, P3.7/CCP2)

        CMOD = 0x09;//0000 1001,Ñ¡ÔñϵͳʱÖÓ£¬ÔÊÐíCFÖжÏ
        //CCAPM0 = 0x21;//0010 0001,ÉèÖÃÉÏÉýÑØ²¶»ñ£¬¿ªÆô²¶»ñÖжÏ
        CCAPM0 = 0x11;//0001 0001,ÉèÖÃϽµÑز¶»ñ£¬¿ªÆô²¶»ñÖжÏ
        CCON = 0x40;//0100 0000,¿ªÆôPCA¼ÆÊýÆ÷
}

void PCA(void) interrupt 7using 1
{
        if(CCF0 == 1)
        {
                CCF0 = 0;
               
                count0=count1;
                ((BYTE*)&count1)=CCAP0L;
                ((BYTE*)&count1)=CCAP0H;
                ((BYTE*)&count1)=over_count;
                ((BYTE*)&count1)=0;
                length=count1-count0;
               
                t5=(1105920000/length)/10000;
                over_count=0;
        }
        if(CF == 1)
        {
                CF = 0;
                over_count++;
        }
}


void main()
{

    P1M0 = 0x00;        //1.01234567 power put
    P1M1 = 0x00;

    P3M0 = 0x7F;        //3.23456 power put       
    P3M1 = 0x80;

       
    P36 = 1;//CS
    P33 = 1;// DATA
        P32 = 1;// WR
        P37 = 0; //TSS1


PCA_InitConfig();
   over_count = 0;
       
               CL = 0;                         //??PCA???
    CH = 0;
    CCAP0L = 0;
    CCAP0H = 0;
               
                CR = 1;                         //PCA???????
                       EA = 1;
    while (OK)

    {
          displaydata(t5,0,0,0,0);
               
      delay6();
                                                delay6();
                                                delay6();
                       t5=0;
                          
       
    }
       
}


神农鼎 发表于 2023-5-4 17:46:05

1, STC15W408AS, 提高主频到 30MHz

2, 参考下面的程序


LOZHEN 发表于 2023-5-4 18:36:32

神农鼎 发表于 2023-5-4 17:46
1, STC15W408AS, 提高主频到 30MHz

2, 参考下面的程序

谢谢,我明天试下,有问题再请教

LOZHEN 发表于 2023-5-5 08:48:44

试过了没有用,下载器频率设置为30M
void PCA(void) interrupt 7using 1
{
        if(CCF0 == 1)
        {
                CCF0 = 0;
                if (CF && ((CCAP0H & 0x80) == 0))
      {
            CF = 0;
            cnt++;
      }
                count0=count1;
                ((BYTE*)&count1)=CCAP0L;
                ((BYTE*)&count1)=CCAP0H;
                ((BYTE*)&count1)=cnt;
                ((BYTE*)&count1)=0;
                length=count1-count0;
               
                t5=(3000000000/length)/10000;
                ((BYTE *)&length) = 0;
                cnt=0;       
                //over_count=0;
        }
        if(CF == 1)
        {
                CF = 0;
                cnt++;
        }
}

oid main()
{
    P1M0 = 0x00;        //1.01234567 power put
    P1M1 = 0x00;
   P3M0 = 0x7F;        //3.23456 power put       
    P3M1 = 0x80;
   P36 = 1;//CS
    P33 = 1;// DATA
        P32 = 1;// WR
        P37 = 0; //TSS1

       
    ACC = P_SW1;
    ACC &= ~(CCP_S0 | CCP_S1);      //CCP_S0=0 CCP_S1=0
    P_SW1 = ACC;                  //(P1.2/ECI, P1.1/CCP0, P1.0/CCP1, P3.7/CCP2)
    CCON = 0;   
          CMOD = 0x09;
          CCAPM0 = 0x11;
       
               CL = 0;                         //??PCA???
    CH = 0;
    CCAP0L = 0;
    CCAP0H = 0;
                cnt = 0;
               count0 = 0;
    count1 = 0;
                CR = 1;                         //PCA???????
                       EA = 1;
                       
    while (OK)

    {
          displaydata(t5,0,0,0,0);
               
   // delay6();
                        //                        delay6();
                                                delay6();
          }
       
}

LOZHEN 发表于 2023-5-5 08:49:30

LOZHEN 发表于 2023-5-4 18:36
谢谢,我明天试下,有问题再请教

试过了没有用,下载器频率设置为30M
void PCA(void) interrupt 7using 1
{
      if(CCF0 == 1)
      {
                CCF0 = 0;
                if (CF && ((CCAP0H & 0x80) == 0))
      {
            CF = 0;
            cnt++;
      }
                count0=count1;
                ((BYTE*)&count1)=CCAP0L;
                ((BYTE*)&count1)=CCAP0H;
                ((BYTE*)&count1)=cnt;
                ((BYTE*)&count1)=0;
                length=count1-count0;
               
                t5=(3000000000/length)/10000;
                ((BYTE *)&length) = 0;
                cnt=0;      
                //over_count=0;
      }
      if(CF == 1)
      {
                CF = 0;
                cnt++;
      }
}

oid main()
{
    P1M0 = 0x00;      //1.01234567 power put
    P1M1 = 0x00;
   P3M0 = 0x7F;      //3.23456 power put         
    P3M1 = 0x80;
   P36 = 1;//CS
    P33 = 1;// DATA
      P32 = 1;// WR
          P37 = 0; //TSS1

      
    ACC = P_SW1;
    ACC &= ~(CCP_S0 | CCP_S1);      //CCP_S0=0 CCP_S1=0
    P_SW1 = ACC;                  //(P1.2/ECI, P1.1/CCP0, P1.0/CCP1, P3.7/CCP2)
    CCON = 0;   
          CMOD = 0x09;
          CCAPM0 = 0x11;
      
               CL = 0;                         //??PCA???
    CH = 0;
    CCAP0L = 0;
    CCAP0H = 0;
                cnt = 0;
               count0 = 0;
    count1 = 0;
                CR = 1;                         //PCA???????
                         EA = 1;
                     
    while (OK)

    {
            displaydata(t5,0,0,0,0);
               
   // delay6();
                        //                        delay6();
                                                delay6();
          }
      
}
页: [1]
查看完整版本: PCA检测输入脉冲频率求教