Merhaba arkadaşlar;
Bir projemde bilgisayardan parametre almak için seri haberleşme kullanıyorum. Problemim PIC programında başlangıçta RDA kesmesini aktif ediyorum. Benim bildiğim bilgisayardan veriler gelmeye başladığında kesmeye girmesi gerekiyor. Ama ne hikmetse bilgisayar bağlantısı yokken enerji verir vermez kesmeye giriyor ve getc() komutunda kalıyor veri gelmediği için.
#int_rda // RX ucuna veri gelince meydane gelen kesme
void PCBaglanti(){
disable_interrupts(int_rda); // int_rda kesmesini pasif yap
Yukleniyor(GelenVeri/4); // Veri yükleme ilerleme çubuğu animasyonu
PCConnect=1; // Bilgisayara bağlı
Veri=getc(); // Gelen bilgi Veri değişkenine alındı
Veri=Veri-48; // ASCII HEX dönüşümü yapıldı
VeriKontrol();
GelenVeri++; // Her gelen byte veri için GelenVeri sayacını 1 arttır
if(GelenVeri==44){ // GelenVeri sayacı 44 ise veri gönderimi bitmiştir
GelenVeri=0; // GelenVeri sayacını sıfırla
EEPROMKayit=1; // Gelen verileri EEPROM'a kaydet
PCConnect=0; // Bilgisayar bağlantısı kesildi
}
enable_interrupts(int_rda); // int_rda kesmesini aktif yap
}
Kesme içinde ki kod bu, kesmeyi main fonksiyonu içinde aktif ediyorum. Forumda epey arama yaptım ama benzer bir problem göremedim. RDA kesmesi dışında kesme kullanmıyorum.
Seripırtun rx ucu boşta kaldığı için interrupt rutinine giriyor. Veri gelmediği için de okuma yapamıyor. Bunun için boşta kalınca kilştlenme olma ası için 100k yada 120k direnç ile pull up yap. Seri port kablo bağlı olnadığı zaman rx ucunu lojik 1 seviyede tutar ve kilitlenme ortadan kalkar.
İşlemci içerisinde Pull Up direnci var mı acaba herhangi bir register ile kontrol edebileceğimiz. Şu an için 100k Pull Up direnci ile problemim çözüldü teşekkür ederim.