我试图将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的电缆连接到输入)。我不确定中断是否正确设置。
提前感谢您的帮助。
答案 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 )。