pcbway

program rs kesmesinden çıkmıyor

Başlatan fm, 22 Aralık 2012, 00:01:32

fm

Program rs kesmesinden çıkmıyor. Hiçbir kaynakta bulamadım. Yardım edebilir misiniz?

yazici67

Elbette yardım etmek isteriz fakat;
Hangi denetleyici? Hangi programlama dili? Hangi geliştirme ortamı? Nasıl RS iletişimi?...
Neye göre yardım edelim? ;)

fm

Haklısınız. Hemen programı ve tasarımı ekliyorum. Tekrar teşekkür ederim.

fm

Tasarımıda bu şekilde yapmaya çalıştım..

neural

27 Aralık 2012, 11:14:51 #4 Son düzenlenme: 27 Aralık 2012, 11:15:02 neural
Yazdığınız programda herhangi bir kesme kullanılmamış. Dolayısıyla kesmeye girmesi mümkün görünmüyor.
Yapmak istediğiniz tam olarak nedir?

fm

Hocam rs232 kesmesi kullanmak amacım. Her iki denetleyicide aynı işi yapacak. Birinci denetleyicide butona basıldığı anda ikinci denetleyiciye bağlı led yanıp sönecek. Aynı işin 2. denetleyiciyede bağlı buton ilede yapılması gerekiyor. programda #int_rda satırı rs kesmesi değil mi?

fm

Hocam kusura bakma yanlış programı upload etmişim. Program ekteki gibi..

neural

30 Aralık 2012, 13:38:36 #7 Son düzenlenme: 30 Aralık 2012, 13:50:06 neural
Merhaba, ccs derleyicisi sistemimde olmadığı için programı derleyemiyorum.
Ancak size yazmış olduğunuz program hakkında yardımcı olmaya çalışayım.

Program işleyişinde birkaç hata var, bunlar;

1. Kesme içerisinde gecikme yapmışsınız. Genel olarak kesme içesinde gecikme işlemleri yaptırmamak gerekir. Programın hatasız çalıştığını varsayarsak, bu durum sonucunda yollamış olduğunuz \"\\f MERHABA \\r\\n\" dizesi, siz butona bastığınız anda gönderilmeye başlıyor. Alıcı tarafta her karakter için bir kesme oluşuyor. Bunun sonucunda her kesme içesinde 200ms gecikme toplamda yollamış olduğunuz karakter yani 12 defa kadar bekleme süresi yapıyor.
(200ms x 12 = 2.4 sn)

2. Normal durumda iki taraf içinde ilk enerji verilme durumunda her denetleyicide pin_b0 pininin 1 olmasını beklemektedir. İki taraf için de herhangi butona basıldığında alıcı konumundaki denetleyici ilk kesmeyi aldıktan sonra kesme içerisinde int_rda kesmesi devre dışı kalıyor ve bundan sonra kaldığı yer olan buton kontrol bloğu, if döngüsünde bekleyeme başlıyor. İkinci veri paketi gelse bile kesme oluşmuyor çünkü kesme ana döngü içerisinde ( while(1) ) enable_interrupts(int_rda) satırına alıcı tarafın butonuna basılana kadar gelemiyor.


Programın kesme bloğunu şu şekilde
#int_rda
void seri_haberlesmekesmesi()
{
   if (getc() == \"A\") { // hangi karakteri gönderince aktif olacağını tırnaklar arasındaki belirler, burada \"A\"
     bayrak = 1;
   }
}

Ana döngüyü şu şekilde
enable_interrupts(int_rda);
 enable_interrupts(GLOBAL);
 bayrak = 0;    // Bayrak değişkeni tanımlanmalıdır.
 output_low(pin_b1);
 while(1)
   {
     if(input(pin_b0))
      {
         putc(\"A\");
         delay_ms(200);
      }
    if(bayrak == 1)
      {
         output_high(pin_b1);
         delay_ms(200);
         output_low(pin_b1);
         bayrak = 0;
      }
 }

yapabilirsiniz. Program yazım hatası verebilir, siz düzeltebilirsiniz.
Kolay gelsin.

fm

Hocam teşekkür ederim programı dediğiniz gibi düzenledim. Yalnız anlamadığım bir şekilde program tek seferlik çalışıyor. Tekrar denetleyiciler aynı işi yapmıyorlar..

neural

01 Ocak 2013, 12:44:28 #9 Son düzenlenme: 01 Ocak 2013, 12:45:29 neural
Merhaba, dediğim gibi programı deneyemedim. Çalışma ortamınızda hata ayıklama imkanı varsa sizde neden ikinci sefer olmadığını bulabilirsiniz.
CCS derleyicisi kesme işlemlerini nasıl yürütüyor bilmiyorum. ASM ile yaptığımızda kesme dönüşünde ilgili kesmenin bayrak bitini \"0\" yapmak gerekiyordu. CCS bunu otomatik yapıyor olması gerekiyor, sanırım kesmeden çıkarken ilgili kesmeyi tekrar aktif yapıp kesme bayrak bitini 0 yapmak için aşağıdaki gibi yapılabilir.
#int_rda
void seri_haberlesmekesmesi()
{
   if (getc() == \"A\") { // hangi karakteri gönderince aktif olacağını tırnaklar arasındaki belirler, burada \"A\"
     bayrak = 1;
   }
   enable_interrupts(int_rda); // Kesme tekrar aktif, kesme bayrak biti \"0\"
}

Kolay gelsin.

yazici67

CCS de kesme rutinleri otomatik bağlatılıp bitirilir. Yani bayrakları CCS ayarlar. Sorunu başka bir noktada aramak lazım. ISIS simülasyonunda PIC programını COFF dosyası ile tanıtırsanız kodu adım adım takip edebilirsiniz. Kilitlendikleri noktayı böylece tesbit edebilirsiniz.