#include
#include
#include
__CONFIG(0X3F3A);
const char seg[]={0xc0,0xf9,0xa4,0xb0,0x92,0x82,0xd8,0x80,0x90,0xff};
bank3 int cplz[11];//定義一個(gè)數(shù)組,用于存放各次的捕捉值
union cp1{int y1;
unsigned char cple[2];
}cplu;
unsigned char count,data;//測(cè)量脈沖個(gè)數(shù)寄存器
int T5;
double RE5;
double puad5;
char s1,s2,s3,s4;
//ccp模塊工作于捕捉方式初始化子程序
void ccpint()
{CCP1CON=0X05;//設(shè)置捕捉上升沿
T1CON=0X00;//關(guān)閉T1振蕩器
PEIE=1;
CCP1IE=1;
TRISC2=1;
}
//系統(tǒng)其他部分初始化子程序
void initial()
{
count=0x0b;
TRISB=0X00;
TRISD=0X00;
}
void delay(int x)
{
int y,ms;
for(y=0;y
for(ms=0;ms<200;ms++);
}
//數(shù)碼管顯示函數(shù)
void display(char num1,char num2,char num3,char num4)
{
PORTB=0b11110001;
PORTD=seg[num1];
delay(1);
PORTB=0b11110010;
PORTD=seg[num2];
delay(1);
PORTB=0b11110100;
PORTD=seg[num3];
delay(1);
PORTB=0b11111000;
PORTD=seg[num4];
}
//中斷服務(wù)程序
void interrupt cp()
{
CCP1IF=0;
cplu.cple[0]=TMR1L;
cplu.cple[1]=TMR1H;
cplz[data]=cplu.y1;
CCP1CON=CCP1CON^0X01;
data++;
count--;
}
void freq()
{
T5=cplz[10]-cplz[0];
RE5=(double)T5;
RE5=RE5/5;
T5=1000000/RE5;
}
void main()
{
while(1)
{
ccpint();
initial();
display(s1,s2,s3,s4);
data=0x00;
TMR1H=0;
TMR1L=0;
CCP1IF=0;
PEIE=1;
ei();
TMR1ON=1;
while(1)
{
if(count==0)break;
}
di();
PEIE=0;
TMR1ON=0;
freq();
display(s1,s2,s3,s4);
}
}
如上是一個(gè)捕捉方波然后在數(shù)碼管上顯示出頻率的一個(gè)程序。編譯沒(méi)什么問(wèn)題,能通過(guò),可是顯示屏始終只顯示0。
看看那里設(shè)置的不對(duì)。