我正在尝试使用外部中断源,我写了一个小程序来测试中断。当我启动程序时,RB0设置为低电平,RB1设置为高电平。如果我将RB7设置为高电平,则必须产生一个中断,以反转RB0和RB1的逻辑状态。 我不知道为什么中断不起作用。我配置了所有寄存器,还缺少什么?编译器是xc16。
感谢。
以下是代码:
#include <xc.h>
#include "setup.h"
void main(void) {
AD1PCFG = 0xFFFF;
TRISBbits.TRISB7=1;
TRISBbits.TRISB0=0;
TRISBbits.TRISB1=0;
PORTBbits.RB0=0;
PORTBbits.RB1=0;
_INT0IE= 1; //enable interrupt on RB7
_INT0IF = 0; //clear status flag interrupt on RB7
_INT0IP = 0b010; /priority level 2 for INT0
while(1) {
_RB0=0;
_RB1=1;
}
}
void _ISR _INT0Interrupt(void) {
if(_INT0IF) {
_INT0IF = 0;
_RB0=1;
_RB1=0;
}
}
答案 0 :(得分:1)
根据需要在ISR中写下以下代码简单地反转RB0&amp;的状态RB1和你必须启用全局和外设中断,即GIE&amp; PIE
void_ISR_INT0Interrupt(void){
if(_INT0IF){
_INT0IF=0;
_RB0=~_RB0;
_RB1=~_RB1;
}
}
答案 1 :(得分:1)
通常最好写入锁存寄存器而不是端口。执行写操作时,实际上是在读取端口,修改位,然后执行写操作。根据电路的不同,您的端口读取可能与您认为的值不同。通过写入锁存寄存器,您将读取所需的输出状态并将其写回端口(通过锁存器)