Я пытаюсь работать с внешним источником прерывания и написал небольшую программу для проверки прерывания. Когда я запускаю программу, 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;
}
}
_INT0IP
? Вы также должны были установить его для структуры/объединенияIPC0bits
, точно так же, как вы установили отдельные биты, то есть:IPC0bits.INT0IP = 2
. - person Groo   schedule 21.03.2018