可能是因为你没有在中断服务函数中清除中断标志位导致的。当外部中断发生时,CPU会自动将相应的中断标志位置1,在中断服务函数中应该手动清除这个标志位。如果没有清除,下一个中断发生时会覆盖上一个中断的标志位,导致ISRC寄存器一直为0。你可以尝试添加清除中断标志位的代码,例如:
```c
void __attribute__((interrupt, no_auto_psv)) _INT0Interrupt(void) {
// 具体的中断处理代码
IFS0bits.INT0IF = 0; // 清除INT0中断标志位
}
```
同样的,如果你使用了多个外部中断,也需要在相应的中断服务函数中清除标志位。
可能是因为你没有在中断服务函数中清除中断标志位导致的。当外部中断发生时,CPU会自动将相应的中断标志位置1,在中断服务函数中应该手动清除这个标志位。如果没有清除,下一个中断发生时会覆盖上一个中断的标志位,导致ISRC寄存器一直为0。你可以尝试添加清除中断标志位的代码,例如:
```c
void __attribute__((interrupt, no_auto_psv)) _INT0Interrupt(void) {
// 具体的中断处理代码
IFS0bits.INT0IF = 0; // 清除INT0中断标志位
}
```
同样的,如果你使用了多个外部中断,也需要在相应的中断服务函数中清除标志位。
举报