|
本人用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 7 using 1
{
if(CCF0 == 1)
{
CCF0 = 0;
count0=count1;
((BYTE*)&count1)[3]=CCAP0L;
((BYTE*)&count1)[2]=CCAP0H;
((BYTE*)&count1)[1]=over_count;
((BYTE*)&count1)[0]=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;
}
}
|
|