Går inte att "nolla" avbrottsflaggor
Postat: 31 maj 2007, 16:50:55
Det gäller en PIC16F870 som snurrar med en ICD2 i MPLAB med C-kompilatorn CC5X. Programmet startar TIMER1 och väntar på OF-avbrott samt incapture på CCP1 från signal utifrån. Jag har valt rätt device och configurationbitsen ska vara satta som sig bör.
i main() ligger jag i en evighetsloop och väntar på avbrott och de kommer men jag kan inte släcka avbrottsflaggorna, varken för TMR1IF eller CCP1IF. Jag har även provat att skriva direkt till hela PIR1 men ingen skillnad. Vad kan det vara för fel??
MVH Robert
i main() ligger jag i en evighetsloop och väntar på avbrott och de kommer men jag kan inte släcka avbrottsflaggorna, varken för TMR1IF eller CCP1IF. Jag har även provat att skriva direkt till hela PIR1 men ingen skillnad. Vad kan det vara för fel??
MVH Robert
Kod: Markera allt
#pragma origin 4
extern interrupt isr (void)
{
clrwdt();
char save_FSR;
int_save_registers //Spara viktiga register
save_FSR = FSR;
byte i, a; //ändrat från char till byte (byte = unsigned char).
if(TMR1IF)
{
TMR1IF = 0;
overflow = ++overflow;
if(overflow > 100)
{
main(); //Starta om
}
}
if(CCP1IF)
{
PIR1 = (0b11111011 & PIR1);
tidh[period] = CCPR1H; //Spara räknarens höga register.
tidl[period] = CCPR1L; //Spara räknarens låga register.
uti = 1; //Flagga för UTI-avbrott.
CCP1IF = 0; //Viktig! Annars kan avbrott ligga och vänta och genereras osynkront med flanken.
}
FSR = save_FSR;
int_restore_registers //Hämta sparade register
}