在PIC24F中使能外部中断(PIC24F32KA302)

时间:2014-04-15 10:25:33

标签: pic microchip

我试图将PIC的pin23作为输入来触发外部中断。 我想将pin23设置为INT2以在上升沿触发,并且输入配置有下拉电阻。 这是我想要做的代码:

void EnableINT2IE()
{
    PORTBbits.RB12=1;            //RB12, pin23 is an input.
    //CNPD1bits.CN14PDE = 0;     //pull down resistor
    //CNEN1bits.CN14IE=1;        //enable change notification.
    IFS1bits.INT2IF = 0;         //clear interrupt flag.
    INTCON2bits.INT2EP =0;       //Interrupt iNT2E is on the positive edge
    IPC7bits.INT2IP =7;          //set highest interrupt priority to INT2
    IEC1bits.INT2IE=1;           //Enable INT2IE interruption
}

我已尝试使用和不使用两条注释线(用于配置下拉电阻)。 中断向量看起来像这样。它调用一些现有功能并打开/关闭LED。

void __attribute__((interrupt,auto_psv)) _INT2Interrupt(void) //External Interrupt 2
{
  PORTBbits.RB3 = 1;  //turn on an led,
  RafraichirPTH();    
  RafraichirE();
  LogAppend();
  SfopAppend();
  IFS1bits.INT2IF=0; //clearing INT2 bit
  PORTBbits.RB3 = 0; //turn off led 
}

问题是永远不会触发中断(我将3.3V的电缆连接到输入)。我不确定中断是否正确设置。

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

来自PIC24FV32KA304数据表:

  

使用CNPD1和CNPD2分别启用下拉功能   寄存器,包含每个CN引脚的控制位。   设置任何控制位都可以实现弱下拉   相应的引脚。

因此,由于您实际上从未实际启用弱下拉,因此如果您没有从外部拉下它,您的引脚可能永远不会降至零状态(或至少不在合理的时间范围内)。您的代码的以下更改将启用弱下拉并希望解决您的问题:

--- //CNPD1bits.CN14PDE = 0;     //pull down resistor
+++ CNPD1bits.CN14PDE = 1;     //pull down resistor

此外,正如epichorns所述,TRISB寄存器是将端口设置为输入/输出的寄存器,但默认是输入,因此它不应该是您发出的原因。

答案 1 :(得分:1)

我认为您正在尝试错误的PIN码。

如果查看Family Data Sheet第4页,您会注意到PIC24 FV xxK302器件在PIN 23(RB12)上具有INT2,但PIC24 F PIN 20上的xxK302( RA6 )。

相关问题