小弟也在写类似的应用程序,但是一开始是进不了中断,挣扎可很久,后来进去了却没法读取数据,不懂为什么,希望楼主帮帮忙。谢谢啦
//功能:实现捕捉完成频率测量功能
//具体设置:ccp1con=00000101上升沿捕捉;
#include<pic.h>
#include<math.h>
#define uchar unsigned char;
#define uint unsigned int;
void init();
void interrupt int_ccp();//中断
unsigned int hz;//频率
unsigned char n1,n2,n3,n4,n5;
void disp();//显示
void delay(int n);
unsigned int p,q,tm,count,flag=0;
const int table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void main()
{
init();
while(1)
{
disp();//delay(1);
}
}
void init()//初始化
{
TRISC=0;PORTC=0;
TRISC2=1;TRISB=0;TRISD=0;
TMR1L=0X00;
TMR1H=0X00;
CCPR1L=0;
CCPR1H=0;
CCP1CON=0B00000111;//16个采样一次
PIR1=0;//标志位清零
PIE1=0X05;//使能
INTCON=0XC0;//总中断打开
T1CON=0X01;
//PORTC=0X01;
}
void interrupt int_ccp()
{
GIE=0;
if(TMR1IF==1)
{
TMR1IF=0;
TMR1L=0;
TMR1H=0;
count++;
}
if(CCP1IF==1);
{
CCP1IF=0;
flag=!flag;
if(flag==1)
{
TMR1L=0;
TMR1H=0;
count=0;
}
else
{
PORTC=0X01;
tm=CCPR1H<<8|CCPR1L;
hz=(count*65534+tm)/4000000;
hz=15/hz;
}
}
TMR1ON=1;
GIE=1;
}
void disp()
{
n1=hz/10000;
n2=hz%10000/1000;
n3=hz%1000/100;
n4=hz%100/10;
n5=hz%10;
PORTB=0xff;
PORTD=table[n1];
RB1=0;
delay(5);
PORTD=table[n2];
RB1=1;
RB2=0;
delay(5);
PORTD=table[n3];
RB2=1;
RB3=0;
delay(5);
PORTD=table[n4];
RB3=1;
RB4=0;
delay(5);
PORTD=table[n5];
RB4=1;
RB5=0;
delay(5);
}
void delay(int n)
{
uint p,q;
for(p=n;p>0;p--)
for(q=110;q>0;q--);
}
|