CCSPic

Tam Versiyon: kesme
Şu anda tam olmayan bir versiyonun içeriğine bakıyorsunuz. Tam versiyona bakınız.
Merhaba,
lcd'ye bir şeyler yazdırırken (pic 16f8777 ile) rb0 pininden ve rb4 pininden iki tane kesme kullandım. Proteus'ta sağlıklı bir şekilde çalışıyor, derleyicide altta görülen uyarıları veriyor. Ne demek istediğini anlayamadım. Yardımcı olursanız sevinirim.
proteus uygulamasına bakmak isterseniz :
http://rapidshare.com/files/263371686/kesme.rar

Alıntı:
interrupts disabled during call to prevent re-entrancy: (lcd_init)
interrupts disabled during call to prevent re-entrancy: (lcd_putc)
interrupts disabled during call to prevent re-entrancy: (@delay_ms1)

Kod:
#include <16f877.h>
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD

#use delay(clock=4000000)

#use fast_io(b)


#include <lcd.c>

#int_ext

void kesme()
{
   lcd_init();
  
   printf(lcd_putc,"kesme");
   printf(lcd_putc,"\n.............");
   delay_ms(1000);
}

#int_rb
void bportu()
{
   if(input(pin_b4))
   {
      lcd_init();
  
      printf(lcd_putc,"kesme");
      printf(lcd_putc,"\n b portu");
  
      delay_ms(1000);
   }
}

void main()
{
   setup_psp(PSP_DISABLED);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_CCP1(CCP_OFF);
   setup_CCP2(CCP_OFF);
  
   set_tris_d(0x00);
   set_tris_b(0xff);
  
   ext_int_edge(h_to_l);
  
   enable_interrupts(int_ext);
   enable_interrupts(int_rb);
   enable_interrupts(global);
  
   lcd_init();
  
   while(1)
   {
      printf(lcd_putc,"\f dongu");
      delay_ms(500);
      printf(lcd_putc,"\n devam");
      delay_ms(500);
      printf(lcd_putc,"\f ediyor");
      delay_ms(500);
      
   }
}

kesme fonksiyonları içerisinde delya_ms(); fonksiyonları kullanılmaz
o zaman kesme fonksiyonunun uygulama süresini belirleyen nedir? (yani lcd'de çıkan "kesme" yazısının ekranda kalma süresini belirleyen.)
printf fonksiyonları gibi uzun zaman harcayan fonksiyonlar kesmede kullanılmaz. Kesme rutini içinde işlemini hemen bitirip çıkman gerekir
Anladım... Çok teşekkür ederim.
Merhaba.

Bende bu konuda bilgi almak istiyorum, ccs c'de henüz yeniyim.

Bir encoder'dan gelecek palsleri sürekli saymam gerekiyor, bunun için rb0 harici kesmesini kullanmayı düşündüm, yani encoderin pulse üreten bacağını bu pine, yön bilgisini alabileceğin bacağını başka mesela rb1 pinine bağlayıp kesme yordamında değişkeni artırmak yada eksiltmeyi düşünüyorum.

Tercih ettiğim yöntem sağlıklı mı sizce?

Bu ilk aşamayı geçtikten sonra değişkeni seri porttan bilgisayara gönderip bilgisayardan girilen değere göre de pwm sinyali üretmem gerekiyor.

Böyle bir projede encoder pulselerini saymak için bu harici kesmeyi kullanmak sizce nasıl bir fikir?

Kullanacağım pic f628a olacak.
Cevaplar için şimdiden teşekkürler.
Referans URL