ARKADAŞLAR LÜTFEN YARDIM İnterrupt

Başlatan husam685, 15 Aralık 2011, 21:12:36

husam685

arkadaşlar  ccs c de daha yeniyim kafam cok karıstı bu kesme olaylarında nasıl belirliyoruz nasıl anlıyoruz kesmenin olacagını ve ayrıca tüm lcd menu yapımında kesme oluyormu kafayı yiyecem offff  :'(

örneğin lcd de menu yapıyoruz devre de ds18b20 sıcaklık sensörü var ayrıca menulerden işlemde yapmamız gerekiyor kesme olayı bu tür seylerde mi oluşuyor ve nerde hangi kesmenin olacagını nasıl bilecem lütfen bu konuda yardım edin bir türlü anlamadım.

justice_for_all

Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

husam685

#2
calısmadı kardeş zaten eger program yazıyosan mutlaka döngu oluşturman gerekiyor yoksa program çalışmaz

skara1214

Alıntı yapılan: husam685 - 15 Aralık 2011, 22:13:57
calısmadı kardeş zaten eger program yazıyosan mutlaka döngu oluşturman gerekiyor yoksa program çalışmaz
senin böyle yorum yaptıgın sahısın 700 küsür mesajı var yani adam emin ol kodun nasıl yazıldığını çok iyi biliyordur.Senin meselene gelince ,öyle kafana göre interrupt yapamazsın zaten interrupt tanımlamaları yapılmıştır picin modeline göre .Mesele rx interruptu en çok kullanılanlardandır.Sen bu interruptı aktif edersin sonra rs232 haberleşmesinde rx'e veri gelince interrupta yapmasını istediğin işi yapar ve kod kaldığı yere döner . bu sana sistemi sürekli bekletmeyip sadece belli durumlar olduğunda o işi yapmanı diğer zamanlarda kodu koşturmanı sağlar .Ben ccs de basit olarak menü yazdım genel olarak goto deyimi kullanılıyor.Senin uygulaman ne bilmiyorum.
bu basit bir rda(rx) kesmesi rutini buna bakıp fikir edinebilirsin takıldığın yer olursa elimden geldiğince yardımcı olmaya çalışırım
#include <16F877A.h>     // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.
#fuses HS,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay (clock=20000000) // Gecikme fonksiyonu için kullanılacak osilatör frekansı belirtiliyor.
#use rs232 (baud=9600,xmit=PIN_C6, rcv=PIN_C7, parity=N, stop=1) // RS232 protokolünün 9600 bit/sn baud hızında olacağını ve
char klavye[80];
#int_rda   // RX ucuna veri gelince meydane gelen kesme
void serihaberlesme_kesmesi ()
{
   disable_interrupts(int_rda); // int_rda kesmesini pasif yap
   gets(klavye); // String ifadeyi al ve "klavye" adlı dizi değişkenine aktar.
   printf("yazdiginiz metin %s\n\r",klavye);
}

void main ( )
{
   setup_psp(PSP_DISABLED);        // PSP birimi devre dışı
   setup_spi(SPI_SS_DISABLED);     // SPI birimi devre dışı
   setup_timer_1(T1_DISABLED);     // T1 zamanlayıcısı devre dışı
   setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
   setup_adc_ports(NO_ANALOGS);    // ANALOG giriş yok
   setup_adc(ADC_OFF);             // ADC birimi devre dışı
   setup_CCP1(CCP_OFF);            // CCP1 birimi devre dışı
   setup_CCP2(CCP_OFF);            // CCP2 birimi devre dışı
   enable_interrupts(GLOBAL);  // Aktif edilen tüm kesmelere izin ver
   
    while(1) // Sonsuz döngü
   {
      enable_interrupts(int_rda); // int_rda kesmesi aktif
      
   }
}
Herkes ölür ama herkes gerçekten yaşamaz