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.
void interrupt(){
if(INTCON.RBIF){
.........
INTCON.RBIF=0;
}
if(INTCON.INTF){
..........
INTCON.INTF=0;
}
}
şeklinde dene. konu ile ilgili blogumda çalışmalar mevcut.
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.
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.
(https://lh3.googleusercontent.com/l1ENkuqNYXDemHATqH1G22s1aTPTuaW1nj7majgorXxGXfbijS9W3pZKbJgfH-wQsZQo3d3LepkUOMHfipaEXs7pqKGq6fNeGbcvVedTWAukq4sJXpMmtAd0gCp0EWk_Pm7pQE0uxX6wwl4KW6Oc1rnt4ib6UY2BxHp8bA2_vPZ2TXF93psPfrtAm0NsFaGEgfetl208ExCDrzuzrH3n8H0xMsznAftWylcgDdLrTRcTGMeYHI2RckGdyJFNhqw77ZPvGRSrNqXj5J8rBHCzYZXbrf8fsGYuZbDqeuTe0vYtgX8jNuNfYLQTxq2UN7K3nzEbzF_RRqz27wDhaikTcK7F-KQ4biFc58oyZUcsQaTVghCEfGdci-F5wBO19aBpkh8dZQ23AFHg9oIbL1aL4VEZ0fqiDb9qF3Ahox8F3SYgmAqFCa_tICCOF9YvbcOGp2c8c2GiFeOnAQAxUxa5j8Lktm4Lolu540EK1swqVcycC_Rmq9Uw70RMxiDRjfm9_mhiJ_XS2PJ_HM3x3PlXlZxjf6Ns6KelkDYob1a-NgxW9xNX8GoTyyZt71p2FlbgNY9S3D_DeyDLygpEcu_5HF6ugNNciWMmw_C8YkvS_YCBRXKmJq4K=w844-h494-no)
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.
B1 kesmesini kullanınız diger encoder için
Boşta bıraktığın pinleri (B5-B7) "output low" olarak bırak.
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.