PIC24F 电平变化中断求助

2020-02-09 11:37发布

为什么我的程序一直进不了中断,自我感觉很简单的程序没什么问题,麻烦大虾帮我看看,谢谢



   单片机采用PIC24FJ128GA010 ,用信号发生器产生方波信号至RD13,   程序如下:



void __attribute__((interrupt, auto_psv)) _CNInterrupt(void)      //各种电平变化中断     
{
  unsigned char temp=0;
  
  Delay_ms(10);ClrWdt();
  if(_RD13 == 1)
  {
        temp =  1;
  }
  else

  {
         temp =  2;   
  }
  _RD13 = _RD13;
  _CNIF = 0;

}

void CN_Init()  //电平变化初始化
{

_TRISD13 = 1;
_CN19IE= 1;

_CN19PUE = 1;
_CNIF = 0;
_CNIP = 6;       
}



void main()      

{
      unsigned char temp;



      CN_Init();
      while(1);

}

输入信号变化时,_CNIF标志能正常置位,就是不能进入中断服务程序,我想请教一下,到底是怎么回事?不胜感激。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
clyon
1楼-- · 2020-02-09 15:30
看看Microchip官方的程序就知道错在哪里了。
呵呵,中断没打开。
void CN_init(void)
{
        /* RD6/CN15 is S3 */
        TRISDbits.TRISD6 = 1;        // make the port as input
        CNEN1bits.CN15IE = 1;        // enable interrupt
        CNPU1bits.CN15PUE = 0;        // disable pull-up resistor
        IFS1bits.CNIF = 0;                // clear IF
        IPC4bits.CNIP = 7;                // set IP as 7
        IEC1bits.CNIE = 1;                // enable CN
}

void __attribute__((interrupt, no_auto_psv)) _CNInterrupt(void)
{
        __builtin_btg((unsigned int *)&LATA, 1);        // toggle the LED
        IFS1bits.CNIF = 0;                // clear IF
        _temp16 = PORTD;                // read for next interrupt
}
headwolf_83
2楼-- · 2020-02-09 17:02
总的CNIE要开,另外,中断服务程序记得读一下相应的口。在中断中延时10个MS,写写测试程序就随意了,实际中不要这么搞

一周热门 更多>