稳定可靠增量EC11程序

2020-02-06 10:24发布

稳定可靠增量EC11程序
CPU是PIC24FJ64GA006,占用RF4、RF5,其中CN18(RF5)边缘中断,返回全局变量EC11_VAL,用定时器TMR3 计数两个脉冲之间小于5MS就每次加减20,如果调节范围不大可不用定时器。

#define EC11_A  _RF5
#define EC11_B  _RF4

void __attribute__((__interrupt__,no_auto_psv)) _CNInterrupt(void)        //外部中断(DS3231,1秒)
{
static uchar m_RF5,int_nu,int_nu1;
extern int EC11_VAL;

  _CNIF=0;

  if(m_RF5!=_RF5)     //CN18(RF5)中断
  
      {
         
         if(EC11_A==0 && EC11_B==0 && int_nu==0)
           {
               int_nu=1;
               TMR3=0;
           }
         if(EC11_A==1 && EC11_B==1 && int_nu==1)
           {
             ++EC11_VAL;
              int_nu=0;
               int_nu1=0;
             if( TMR3<300)   EC11_VAL=EC11_VAL+20; //0.0625*256*300=4800us
            
           }

        if(EC11_A==0 && EC11_B==1 && int_nu1==0)
           {
               int_nu1=1;
                TMR3=0;
           }
         if(EC11_A==1 && EC11_B==0 && int_nu1==1)
           {
             --EC11_VAL;
              int_nu1=0;
              int_nu=0;
               if( TMR3<600)   EC11_VAL=EC11_VAL-20; //0.0625*256*600=9600us
           }
__delay32(4800);  //300Us
     m_RF5=_RF5;
        
      }
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
14条回答
lyl3257
2020-02-07 04:28
本帖最后由 lyl3257 于 2014-11-13 12:01 编辑
wwwdege 发表于 2014-11-13 11:42
楼主你的是上升沿下降沿一起触发,还是其中一种?


只中断一相,上升沿下降沿都中断,另一相中断后读取,最好用示波器或逻辑分析仪看一下,中断的前沿有不规则的抖动。倒数第二句延时就是消抖动的(不让进来的太快)

一周热门 更多>