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;
}
}
1, STC15W408AS, 提高主频到 30MHz
2, 参考下面的程序
神农鼎 发表于 2023-5-4 17:46
1, STC15W408AS, 提高主频到 30MHz
2, 参考下面的程序
谢谢,我明天试下,有问题再请教 试过了没有用,下载器频率设置为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-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]