0

我正在尝试使用外部中断源,我编写了一个小程序来测试中断。当我启动程序时,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;
    }   

}
4

2 回答 2

1

根据需要在 ISR 中编写以下代码只需反转 RB0 和 RB1 的状态,您必须启用全局和外围中断,即 GIE 和 PIE

    void_ISR_INT0Interrupt(void){
    if(_INT0IF){
    _INT0IF=0;
    _RB0=~_RB0;
    _RB1=~_RB1;
    }
}
于 2018-03-21T08:58:46.527 回答
1

写入锁存寄存器而不是端口通常是一个好主意。当您执行写入时,您实际上是在读取端口,修改位,然后是写入。根据电路的不同,您的端口读取可能与您想象的不同。通过写入锁存寄存器,您将读取所需的输出状态并将其写回端口(通过锁存器)

于 2018-03-24T18:34:04.783 回答