大伙,帮我看看程序错在哪里?
CCP输入捕捉的
void interrupt CCP1INT (void)
{
if(CCP1IF==1)
{
CCP1IF=0;
if(LastCaptureData==0) // 捕捉到第一个上升沿
{
LastCaptureData=CCPR1H;
LastCaptureData=(LastCaptureData<<8)+CCPR1L;
}
else // 捕捉到第二个上升沿
{
NewCaptureData=CCPR1H;
NewCaptureData=(NewCaptureData<<8)+CCPR1L;
G_Period=(NewCaptureData+LastCaptureData)/2;
Rec_Temp1=1000000/G_Period;
Rec_Temp =Rec_Temp1;
LastCaptureData=0;
}
}
}
该程序的“G_Period=(NewCaptureData+LastCaptureData)/2;”改为“G_Period=NewCaptureData-LastCaptureData;”就正常,为什么?不是两次上升沿捕捉的是两个周期的吗?
此帖出自
小平头技术问答
G_Period=NewCaptureData-LastCaptureData;
第二次上升沿 - 第一次上升沿 就是两个上升沿中间间隔的时间吧
我也是用16F877。
QQ:604914729
第二次上升沿CCPR1H和CCPR1L被读取给NewCaptureData后,NewCaptureData累计的是两次的值
一周热门 更多>