Dear Néstor, > your answer is very appreciated. I have refactored the code as you > told, I put all the global variables in a header file, called > "defs.h". I have also taken out all the calls to functions from the > interrupt. Now, interrupt handler routine is a lot simpler. Just one > thing: I haven't been able to disable the interrupt and save the stack > with the code you gave me. Apparently, it should work, since I'm using > a PIC 16F877, which seems to have 16 stack bytes. Am I missing > something from your explanation?
What do you mean with you "haven't been able to disable interrupts and save the stack" --- could you do either but not both, or none? How did you find out that you did not succeed in performing the task?!? Do you get compile time errors? Run-time errors? What precisely are the symptoms/error indications? To make stack saving a bit more efficient, this afternoon I tried (something like) static void Intr(void) __interrupt(0) { char int_status; char int_stack[16]; __data char *src; __data char *dst; unsigned char u; // disable interrupts (same as the macro) int_status = INTCON & 0xC0; INTCON &= 0x3F; // GIE = PIE = 0; // save pseudo stack src = (__data char *)0x70; // &STK00 dst = &int_stack[0]; for (u = 0; u < 16; u++) { *dst++ = *src++; } // handle timer interrupt if (T0IF) { T0IF = 0; // re-arm for next interrupt // --- more handler code --- } end: // restore stack src = &int_stack[0]; dst = (__data char *)0x70; // &STK00 for (u = 0; u < 16; u++) { *dst++ = *src++; } // restore/re-enable interrupts INTCON |= int_status; // restore GIE and PIE } ... and the .asm looks good (did not test on real hardware, though). No meddling with GIE/PIE or T0IF/T0IE should be required in the interrupt handler iff INTCON is masked and restored as shown. Of course, you will have to enable GIE/PIE and T0IE at some point in your program to enter the interrupt handler, but this seems to be done in the menu handling code (if I recall correctly). Rather puzzled, Raphael ------------------------------------------------------------------------------ The NEW KODAK i700 Series Scanners deliver under ANY circumstances! Your production scanning environment may not be a perfect world - but thanks to Kodak, there's a perfect scanner to get the job done! With the NEW KODAK i700 Series Scanner you'll get full speed at 300 dpi even with all image processing features enabled. http://p.sf.net/sfu/kodak-com _______________________________________________ Sdcc-user mailing list Sdcc-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/sdcc-user