take a look at this page http://www.micahcarrick.com/04-26-2005/pic-interrupts-gpsim.html
--- Jean-Paul <[EMAIL PROTECTED]> escribió: > Hello Ivan, > > The task you are describing is as simple as RA1 = > !RB0. > > To use interrupts in any controller (so in PICs > too), you have several things > to configure: > - choose whether the interrupt routine will react to > a state or to an edge; > - choose that an ISR will react at all, i.e. allow > interrupts in general, the > one you use in particular, once before entering the > main loop. > > In the interrupt service routine itself, two cases > are possible according to > the type and model of controller: > - the flag that is set by the interrupting event > gets reset by hardware upon > execution of the ISR; > or > - you have to explicitly reset the flag yourself > inside the ISR. > Either way, the flag has to be reset. > > You'll want to check all that in the specs of your > controller, then code your > program so that: > - interrupts are allowed for both edges on RB0 > (startup); > - RA1 = 0 upon a trailing (falling) edge (ISR) > - RA1 = 1 upon a leading (rising) edge (ISR) > - The main loop will do nothing, that's the idea > with interrupts. > > It's not that terrible, Ivan ;-) > > Regards > JP > > Le Lundi 28 Janvier 2008 19:06, Ivan Petrushev a > écrit : > > Hello, > > I'm new to SDCC and microcontrollers - my first > two very simple > > programs burned into PIC16F88 and working! :) > > Now I'm trying something little harder than just > lighting LEDs - I > > want to try the interrupt system. > > PIC16F88 has one external interrupt - on pin RB0. > > I'm trying the following very simple program, but > something is wrong: > > #define __16f88 > > #include"pic/pic16f88.h" > > > > typedef unsigned int word; > > word at 0x2007 __CONFIG = 0x3f70; > > > > void isr_high(void) interrupt 1 { > > if (RB0 == 1) RA1 = 0; > > } > > void main(void) { > > TRISA = 0; > > while(1) { > > RA1 = 1; > > } > > } > > > > I expect when I run this to have pin RA1 '1', > untill RB0 is pulled > > '1'. Then RA1 should go '0' untill RB0 is > released. > > I'm running that at gpsim and there RA1 is always > '1'. When I run the > > program step by step I see it never enters the > interrupt code section. > > So, how can I define an interrupt? I've searched a > lot through the > > documentation of SDCC and the only piece of value > I've found is the > > 'void isr_high interrupt 1' function I'm using. > > > > Is there a more complicated/simplified way to code > an interrupt? > > > > Thanks, > > Ivan. > > > > > ------------------------------------------------------------------------- > > This SF.net email is sponsored by: Microsoft > > Defy all challenges. Microsoft(R) Visual Studio > 2008. > > > http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ > > _______________________________________________ > > Sdcc-user mailing list > > Sdcc-user@lists.sourceforge.net > > > https://lists.sourceforge.net/lists/listinfo/sdcc-user > > -- > Never jump into a loop! > > ------------------------------------------------------------------------- > This SF.net email is sponsored by: Microsoft > Defy all challenges. Microsoft(R) Visual Studio > 2008. > http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ > _______________________________________________ > Sdcc-user mailing list > Sdcc-user@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/sdcc-user > Tarjeta de crédito Yahoo! de Banco Supervielle. Solicitá tu nueva Tarjeta de crédito. De tu PC directo a tu casa. www.tuprimeratarjeta.com.ar ------------------------------------------------------------------------- This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008. http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ _______________________________________________ Sdcc-user mailing list Sdcc-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/sdcc-user