Триггерное прерывание в компиляторе 18F452 - PullRequest
0 голосов
/ 08 ноября 2018

Я пытаюсь проверить функцию прерывания дома без доски для нажатия кнопок и т. Д. Я разочаровался в своем коде и скопировал пример, но все еще не могу заставить его работать. Ниже приведен пример кода.

В цикле while он устанавливает биты, но прерывание не вызывается. У меня установлен перерыв в прерывании. Может быть, это невозможно проверить?

Мой конечный результат - мне нужно проверить, нажаты ли кнопки 1 и 2. Я знаю, как это сделать без прерывания, но нужно следовать уроку.

Профессор хочет, чтобы мы использовали прерывание. Спасибо за помощь!

P18F452

unsigned short sync_flag;
char bad_synch;            // variable for detecting bad synchronization
int cnt = 0;               // Global variable cnt

void Interrupt() {
  // This is external INT0 interrupt (for sync start)
  //   - once we get falling edge on RB0 we are disabling INT0 interrupt

  if (INT0IF_bit && INT0IE_bit) {
     cnt = 0;
     sync_flag = 1;
     INT0IF_bit = 0;
     INT0IE_bit = 0;
     PORTD = 0xFF;
   }
}

void main() {

  ADCON1 = 0x0F;           // AD converter off
  CMCON = 7;
  sync_flag = 0;           // sync_flag is set when falling edge on RB0 is detected

  while(1){

  TRISB = 0xFF;            // Set PB0 as input
  TRISD = 0x00;            // Set PortD as output
  PORTD = 0x00;            // Starting value for PortD

  INTEDG0_bit = 0;         // Interrupt on falling edge on RB0
  INT0IF_bit = 0;          // Clear INT0IF
  INT0IE_bit = 0;          // turn OFF interrupt on INT0
  GIE_bit = 1;             // enable GIE

  while(1){
      bad_synch = 0;       // set bad synchronization variable to zero
      sync_flag = 0;       // reseting sync flag
      INT0IF_bit = 1;
      INT0IE_bit = 1;      // enable external interrupt on RB0 (start sync procedure)
    }
  }
}
...