RB0 ve RB4-7 değişiklik kesmesinin aynı programda kullanılması

Başlatan topuz, 15 Ağustos 2017, 12:52:39

topuz

Herkese merhaba
Şuan üzerinde çalıştığım bir projem var. Projede iki tane enkoder okumam gerekiyo. Enkoderin birini RB0 kesmesi ile okudum burada sorun yok. ama diğer enkoderi RB4-7 değişiklk kesmesi ile okumaya çalıştım ama sorun çıktı. Pic kilitleniyor. Bunu neden yapabilir. Kullandığım pic 16f876a 28 pin  20 mHz osc ,sadece RB4 ü giriş olarak tanımladım. 5-6-7 yi boşta bıraktım. ve kesmenin içi de şu şekilde :

void interrupt(){
if(INTCON.RBIF){

.........

}
if(INTCON.INTF){

..........

}
INTCON.INTF=0;
INTCON.RBIF=0;
}



Teşekkürler.

selimkoc

void interrupt(){
if(INTCON.RBIF){

.........
INTCON.RBIF=0;
}
if(INTCON.INTF){

..........
INTCON.INTF=0;
}


}


şeklinde dene. konu ile ilgili blogumda çalışmalar mevcut.

topuz

Dediğiniz gibi yaptım düzelmedi.  Güç verilir verilmez pic kilitleniyor. Değişiklik kesmesine dair yazdığım bütün kodları // ile yorum satırı yapınca tek encoder çok iyi çalışıyor. Nerede sorun var anlamadım.

RaMu

Kodlar senin önünde,
sorunu bizim çözmemizi bekliyorsun,
yani yeterli bilgi yok.

Genel olarak:
Her kesme bayrağını ancak o kesme fonksiyonu temizlemeli
yani:

void interrupt(){
if(INTCON.RBIF){

.........

INTCON.RBIF=0;
}
if(INTCON.INTF){

..........

INTCON.INTF=0;
}

}

SADECE RBIF = 0 yapmanın bir manası yoktur,

RB4~7 kesme bayrağının silinebilmesinin tek yolu
ÖNCE PORTB yi okumaktır,
ardından RBIF = 0 yapılmak zorundadır,

degisken_x = PORTB; 
RBIF = 0;

kullanmayacak olsan dahi okumak zorundasın.




Bu kesmenin nasıl kullanıldığını anlatan örnekleri incelemen ve
kullanmak istediğin iki kesmeyide önce
ayrı ayrı çalışır halde görebileceğin örnekler yapman
işleri hızlandırır.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

Okan AKÇA


XX_CİHAN_XX

Boşta bıraktığın pinleri (B5-B7) "output low" olarak bırak.
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

topuz

Anca bugün yazabildim kusura bakmayın. Dediklerinizi yaptım . Şuan çok iyi çalışıyor.
Kesme bayrağını  portb yi bir değiskene atadıktan sonra  sıfırladım.  Portb.4 ü giriş  5.6.7 yi çıkış  yapıp portb yi sıfırladım.