Chief Delphi

Chief Delphi (http://www.chiefdelphi.com/forums/index.php)
-   Programming (http://www.chiefdelphi.com/forums/forumdisplay.php?f=51)
-   -   Help with Timers on PIC18F in C18 (what the 2004-2008 RCs had) (http://www.chiefdelphi.com/forums/showthread.php?t=71503)

Racer26 07-01-2009 16:27

Help with Timers on PIC18F in C18 (what the 2004-2008 RCs had)
 
I'm having trouble with this piece of code.

Code:

          if(sManualUp == 0 && oldManualUp == 1){
                mZEnable = 0;
                mZSleep = 0;
                mXSleep = 1;
                mXEnable = 1;
                mDirection = 1;
                OpenTimer0( TIMER_INT_ON & T0_16BIT & T0_SOURCE_INT & T0_PS_1_1 );
                INTCON2bits.TMR0IP = 1;
                INTCONbits.TMR0IE = 1;
                INTCONbits.GIE = 1;
                INTCONbits.PEIE = 1;
                WriteTimer0(45535);

        }else if(sManualUp == 1 && oldManualUp == 0){
                INTCONbits.GIE = 0;
                INTCONbits.PEIE = 0;
                INTCONbits.TMR0IE = 0;       
               
        }
        oldManualUp = sManualUp;

If I replace the else if with a while(sManualUp == 0){} it works. As soon as I do this, my code runs away. Any ideas? This is on a PIC18F4550, it IS using the USB interface on it.

OScubed 07-01-2009 17:33

Re: Help with Timers on PIC18F in C18 (what the 2004-2008 RCs had)
 
Are you sure oldManualUp is intialized? Did you check for nulls? Neither will be true if oldManualUp is uninitialized. sManualUp must be initialized since evaluating it to zero works. Remember that:

variable == Value (any value in cluding zero) will only work if variable is intialized to a value and is non-null.

Racer26 08-01-2009 00:54

Re: Help with Timers on PIC18F in C18 (what the 2004-2008 RCs had)
 
Yeah, thats definitely not the issue, it seems that its somehow running away with the interrupts and jumping to strange spots in the code that it manifestly shouldn't be. Its like the program counter (which gets stored when the interrupt service routine is called) is getting corrupted, and then when it goes to exit the interrupt, it jumps to some invalid location.


All times are GMT -5. The time now is 00:11.

Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Copyright © Chief Delphi