I am working with a PIC16F877A on a simulator on MPLABX 5.35 with XC8 compiler ver 2.32. I am trying to understand and work with the external interrupt, I am facing a few issues while debugging.
#include <xc.h>
#define _XTAL_FREQ 1000000
void __interrupt() check(void){
__delay_ms(4);
INTCONbits.INTF = 0;
return;
}
void main(void){
TRISBbits.TRISB0 = 1; //setting RB0 for input
OPTION_REGbits.INTEDG = 0; //setting falling edge trigger
INTCONbits.INTE = 1; //setting external interrupt (RBO) to on
INTCONbits.GIE = 1; //setting enabling global interrupts
INTCONbits.INTF = 0; //setting external interrupts flags to off
while(1){
}
}
I'm looping a while loop and fire check()
when there is a change in RB0
.
I am using stimulus to change the RB0 value to fire the ISR. To check whether it's firing I placed a breakpoint at __delay_ms(4
). But when I debug, for some reason it does not fire the ISR. During debug mode, it just seems to be stuck in the while loop. I tried to use the SLEEP();
macro but that did not work as it would just go to the end of the main function (I am not sure if that is sleep macro, I am assuming that it's the end of the program).
When I fire the low pulse through the stimulus, it does not change to the check function, its just stuck in the while loop. What am is supposed to do the debug the interrupt so I can get seeable output.
1 Answer 1
In MPLAB, open from the menu: Windows->Simulator->IOPin. Then select to see RB0 in the I/O pins tab. On RESET RB0 will be zero (0). On the stimulus click RB0 (set High) at least once, and verify that in the IOPin tab that RB0 is high. Then in the stimulus tab click the RB0 (pulse low), and you should get an interrupt. (Remember to set a breakpoint in the interrupt code to break your code in the interrupt). Because you have selected falling edge trigger, the signal has to go from a high to a low to be able to trigger the interrupt.
-
1\$\begingroup\$ Well, I did as you said, I checked the I/O pins, the set high is working fine but when I try to pulse low it's not working. Is there any alternative to pulsing low? \$\endgroup\$karthikkk– karthikkk2021年04月17日 13:03:02 +00:00Commented Apr 17, 2021 at 13:03
-
\$\begingroup\$ never mind, I just used clock stimulus instead of pulsing low manually and safe to say it works. \$\endgroup\$karthikkk– karthikkk2021年04月17日 13:09:34 +00:00Commented Apr 17, 2021 at 13:09
Explore related questions
See similar questions with these tags.