B4-B7 Kesme sorunu

Başlatan _MeRKeZ_, 21 Aralık 2013, 11:36:34

_MeRKeZ_

Merhaba arkadaşlar,

Programımda B4-B7 kesmesini kullanıyorum (Daha doğrusu sadece B6 ve B7 girişlerini). Sistem istediğim gibi çalışmıyor.



#int_RB
void Ayarla()
{
   if(input(PIN_B6))
   {
      delay_ms(20);
      while(input(PIN_B6));
     
      Sayi++;
     
      if(Sayi>5)
         Sayi=5;
   }
   
   else if(input(PIN_B7))
   {
      delay_ms(20);
      while(input(PIN_B7));
     
      Sayi--;
     
      if(Sayi<1)
         Sayi=1;
   }
}

..
   set_tris_b(0xC0);
   output_b(0x00);

   enable_interrupts(int_rb);
   enable_interrupts(GLOBAL);




Sayı değişkenini LCD üzerinde gösteriyorum. Örneğin, sayı değeri 1 iken B6 butonuna basıyorum. Bir anda 3 oluyor,5 oluyor. Aynı durum B7 için de geçerli. Bir anda 2-3 sayı birden azaltıyor. Bazen düzgün çalışıyorlar ama çoğunlukla dengesiz.



      delay_ms(20);
      while(input());



kısımlarını silerek de çalıştırdım ama daha da kötüleşti.

Sizce ne yapmalıyım? Hata nerededir?

Teşekkürler

karbal656

Kesmeye girdiğinizde kesmeleri kapatın, çıkışta tekrar açın.

ete

PortB.4-7 kesmesi sistemi ilgili pinlerin konumlarında değişiklik algılanması esasına dayanır.
Bu nedenle kesmeden çıkmadan evvel ilgili pinler okunarak işlemcinin onların konumunu bir yerde saklaması sağlanmalıdır.
Daha sonra işlemci saklanan değerle kontrol anındaki değerleri karşılaştırarak farklılık varsa  kesme oluşturulmasına karar verir.
Senin kesme kısmında pinlerin okunması kısmını göremedim. 
Ete

Powered by EzPortal