18F ile ilgili yaptığım çalışmada dış RB0 kesmesi kullanıyorum. INTCON Aşağıdaki şekilde tanımlı
INT0IF =0x00; // RB0/INT kesme bayrağı temizleniyor
INT0IE =0x00; // RB0/INT izni KAPALI
PEIE = 0x00; // Yardımcı kesme KAPALI (INTCON,6. biti)
GIE = 0x00; // Genel kesme KAPALI (INTCON,7. biti)
Bu kodlara rağmen INT0IF bayrağı "1" oluyor. Başka bir kesme için(örneğin RCIF için) kesme döngüsüne gittiğimde INT0IF=1 olduğu için onun içinede giriyor.
RB0 kesmesi açık olmadığı halde bayrağın 1 olmasının sebebi nedir ?
Teşekkürler.
Kesme bayraklarının 1 olması, ilgili kesmelerin ve/veya global kesmenin açık olmasına bağlı değildir. Katalogların "Interrupts" bölümlerinin girişinde bu uyarıyı bulabilirsiniz.
Bu sebeple döngü içindeki karşılaştırmalarda şart ifadesi şu şekilde yazılır:
if (INT0IF == 1 && INT0IE == 1)
evet fonksiyonu az önce o hale getirmiştim. hiç dikkatimi çekmemişti bu durum :)