hi tech pic c de kesme

Başlatan deserteagle, 23 Nisan 2007, 10:59:20

PARSIC

dediklerinizin hepsini denedim fakat işin içinden çıkamadım bayraklara da müdahele ettim yine olmadı...kesmelere nasıl öncelik verebilirim peki
ccs c deki #priority tarzı bir olay yapabilir miyiz hi-tech de..
********************************************************************HI-TECH*******************************************************************

X-Fi

#16
hitech de derleyiciye has vektörel atama mevcut değil programın akışını değiştirerek çözüm bulabilirsiniz main döngüsünü kullanmamışsınız onu kullanıp sadece zaman saatini timer1 kesmesine gerçekleştirin.

bir hata daha gördüm kodunda timer1 kesmesi gelsede gelmesede TMR1H=32768/256; TMR1L=32768%256; satırlarını işliyorsun bu satırları timer1 bayrağının içine al sorun düzelir büyük ihtimalle.
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

PARSIC

teşekkür ederim.. benim main bölümünü boş bırakma nedenim programda birden fazla kesme uygulamasına bir temel atabilmekti.. son dediğiniz kısmı deneyim sonucu yazıcam tekrar teşekkürler..
********************************************************************HI-TECH*******************************************************************

PARSIC

X-FI ;

çok teşekkür ederim yardımlarınız için sorunum büyük ölçüde düzeldi...
********************************************************************HI-TECH*******************************************************************

sigmoid

Alıntı yapılan: X-Fi - 28 Aralık 2010, 20:48:45
hitech de kesmeler main altına yazılır.

ayrıca

static void interrupt KESME()
{
}



ben hep kesmeleri main'in üstünda yazıyorum ve herhangi bir sorunlada karşılaşmadım.

birde


void interruprt kesme()
{
           if(T0IF && T0IE)
           {
                      // işlenecek kod
                      T0IF=0;
           }

           if(TMR1IF && TMR1IE)
           {
                         // işlenecek kod
                        TMR1IF=0;
           }

           if(TMR2IF && TMR2IE)
           { 
                        // işlenecek kod
                       TMR2IF=0;
            }


}


şeklinde flag ve enable bayraklarını beraber kontrol etmelisiniz. Örneğin programı bir yerinde timer0 interrupını kapattığınızı varsayalım. eğer IE bitini kontrol etmezseniz, timer1 kesmesi oluştuğunda timer0'ın kesme kodlarıda çalışacaktır. Çünkü timer0 sürekli çalışır ve her başa döndüğünde IF bitini 1 yapar.


X-Fi

hocam mainin altına yazılabilme ayrıcalığı var böylece rom hafızasında alt programlarının arasına yerleştirmez kesme opcode'larını kesme içerisinde alt program çağırıyorsanız sorun çıkabilir çıkmasa bile derleyici warning hatası verecektir.

bu IE kontrolleri programı yavaşlatmak dışında gerekli olursa kullanılabilir iyi bir hatırlatma oldu teşekkürler :)
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

sigmoid

mümkün olduğunca kesme içinde altprogram çağırmamaya çalışıyorum. Kesme main üstüne yazıldığında ve alt program çağırldığında nasıl sorunlar çıkartıyor. Şu an kadar  hiç warning almadım.

program başında Interrupı bir kez açıp hiç ellenmiyorsa IE bitlerinin kontrol edilmesine gerek yok. Eğer program içinde arada interruptlar kısmi olarak kapatılıp açılıyorsa IEler mutlaka kontrol edilmeli.

X-Fi

retfie return farkından iç içe dallanmalarda stack taşmaları oluşuyor alt programlara doğru şekilde ulaşamıyorsunuz warning vermemesi versiyondan kaynaklanabilir hi-tech bu konuda çok karışık.
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

PARSIC

evet dediklerinizi yazdığım programa uyarladım şu an program gayet düzgün çalışıyor kesmelerdeki sorunum halledildi...yalnız kafama birşey takıldı acaba kesmelerin önceliği kesme alt programında yazdığımız sıraya göre mi oluşuyor ..mesela ilk olarak timer0 kesmesi devamında da timer1 kesmesi için alt programı yazdık burada öncelik timer0 ın mı ?
********************************************************************HI-TECH*******************************************************************