Nochtans maar 3 magere blz uit de datasheet (PIC18F25K20)... dat kan niet fout gaan denk je dan:


GIE = 1;
PEIE = 1;
TMR0IF = 0;
TMR0IE = 1;
TMR0ON = 1;

while(1)
{
	__delay_s(1);
	softserialwriteshort(timer0count100ms);
}

ISR:


	// TIMER0 OVERFLOW
	if ((TMR0IE) && (TMR0IF))
	{
		timer0count100ms++;
		TMR0IF = 0;
	}

De timer0count100ms var wordt nooit geupdate, en als ik simuleer komt hij ook nooit in de ISR... Idee?

ik weet niet veel van pic programmeren laat staan in andere talen behalve basic

maar van c toch wel wat en ik zie dat jij

TMR0IF op 0 zet moet die niet 1 zijn voordat hij naar de ISR gaat?

Anee in de ISR reset je de flag toch?

Nee, TMR0IF is de interruptflag van de Timer, deze wordt op 1 gezet zodra er een Timer0 over de vastgestelde waarde gaat.

TMR0IF moet je zelf in de interrupt weer op 0 zetten.

[EDIT]
Je was me net voor..

Zet je de TMR0 wel?

[Bericht gewijzigd door Roches op (17%)]

De interrupt bron moet de flag setten, en dan zelf de flag resetten.

Als je geen priority gebruikt moet je de IPEN ook op 0 zetten.

Geef je hele interrupt routine is. Weet je zeker dat de compiler snapt naar welke routine hij moet gaan bij een interrupt?

De interruptroutine wordt geroepen omdat mijn timer1 wel mooi elke 2 seconden interrupt.


void interrupt ISR_HP()
{
	// HW FLOW CONTROL
	unsigned char rtsstate = PORT_OUT_RTS;
	PORT_OUT_RTS = 1;

	// TIMER0 OVERFLOW
	if ((TMR0IE) && (TMR0IF))
	{
		Timer0Tick();
		TMR0IF = 0;
	}

	// TIMER1 OVERFLOW
	if ((TMR1IE) && (TMR1IF))
	{
		TMR1IF = 0;
		timer1tick();
	}

	// RESET HW FLOW CONTROL STATE
	PORT_OUT_RTS = (bit)rtsstate;
}

Probleem gevonden, het moet een fout in de hi-tech compiler definities geweest zijn. De timer opzetten met TMR0ON werkt niet, het werkt wel als je heel de byte T0CON schrijft...