Я пытаюсь проверить функцию прерывания дома без доски для нажатия кнопок и т. Д. Я разочаровался в своем коде и скопировал пример, но все еще не могу заставить его работать. Ниже приведен пример кода.
В цикле 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)
}
}
}