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?
RoboticPro
Voor ICT Problemen of Webdesign mail me;) http://www.briansservice.nl
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?
Roches
Domoticz en ESP8266, goede combo!!!
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...