PIC16F877A CCP输入捕捉问题

2019-03-25 19:47发布

大伙,帮我看看程序错在哪里?
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;”就正常,为什么?不是两次上升沿捕捉的是两个周期的吗? 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
llmdd
1楼-- · 2019-03-26 05:18
怎么没人知道?
hahazhenxin
2楼-- · 2019-03-26 07:20
两次上升沿中间 间隔的时间是1个周期吧
虾段
3楼-- · 2019-03-26 08:22
G_Period=(NewCaptureData+LastCaptureData)/2??是啥意思?

G_Period=NewCaptureData-LastCaptureData;
第二次上升沿 -  第一次上升沿 就是两个上升沿中间间隔的时间吧
gsypuma
4楼-- · 2019-03-26 13:07
我家里有对应的源代码, 晚上回去给你吧

我也是用16F877。

QQ:604914729
andrewlzj
5楼-- · 2019-03-26 14:35
 精彩回答 2  元偷偷看……
xtechman
6楼-- · 2019-03-26 20:28
CCPR1H和CCPR1L没有清零啊,保留原来的值嘛
第二次上升沿CCPR1H和CCPR1L被读取给NewCaptureData后,NewCaptureData累计的是两次的值

一周热门 更多>