PIC C KOMUT SAYKIL SÜRESİ?

Başlatan kaplan_65, 19 Aralık 2006, 16:14:50

kaplan_65

Slm.
Arkadaşlar; assambly dilinde 10 komut dışında(örneğin call : 2 komut saykılı) dışında diğer komutlar 1 komut saykılı süresince çalışıyor. Bu gecikmeleri de  hesaba katınca hassas zamanlama yapılabiliyor.PIC C dilinde bütün komutlar 1 komut saykılı süresince mi çalışıyor? Ya da PIC C dilinde başka hassas zamanlama yöntemi var mı?
Yardımcı olursanız sevinirim...  8O
KAZIM ASLAN Gazi Üniversitesi Elektrik Elektronik  Mühendisliği...

mahoaga

C için kullanılan bir komutun belli bir cycle olarak belirtilebilmesi zor. Çünkü derleyici yazılan kodalara göre en uygun kombinasyonda asm komutları oluşuruyor.  Buda her C komutu için değişik miktarda cycle tuttuğu söylenebilir. Yani kesin olarak C de şu komut şu kadar cycle diye bir tanım yapmak çok zor. Eğer yazdığınız komutların kaç cycle tuttuğunu öğrenmek istiyorsanız derlenmiş kodu (asm) incelemeniz gerekir. Veya kritik nontalarda asm ile yazmalısınız.

XX_CİHAN_XX

Üst seviye dillerin ortak sorunudur bu...
Kritik noktalarda asm ile yazmanızı tavsiye ederim.
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

kaplan_65

Dedikleriniz çok mantıklı.İlginiz için teşekkür edrim.Hassas zamanlamayı assambly ile yazmaya devam edeceğim...
Kolay gelsin...
KAZIM ASLAN Gazi Üniversitesi Elektrik Elektronik  Mühendisliği...

xenitis

selam
hassas zamanlama uygulamalarını C'de de gerçekleştirebilirsiniz ama bence ister C ister assembly olsun timer kesmeleri kullanın böylece yazılımdan hem daha hassas zamanlama sağlarsınız hem de döngülerle güzelim işlemci boşa çalışmamış olur :)

kaplan_65

SLM
Daha önce timer kullanmaya çalıştım. Fakat döngüde nasıl kullanacağımı bi türlü çözemedim. Bu nedenle gecikmeleri yazılımla yapmaya karar verdim. Fakat bu sefer de komut gecikmelerinden dolayı problem yaşadım. Timer ile gecikme yapılmış örnek bir program nerden bulabirim.Yardımcı olabilir misiniz?(C ya da Assambly olabilir.)
KAZIM ASLAN Gazi Üniversitesi Elektrik Elektronik  Mühendisliği...

klutch

;«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»;
TIMMER_LOW   ; PORTB'den LED'lere gönderilen bilgiyi gösterme süresi. (1,583 mS)          ;
;«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»;

      MOVLW   D'20'      ; W'ye 20 yaz.
      MOVWF   TIMA      ; TIMA register'a gönder.
PAUSE2      MOVLW   D'25'      ; W'ye 25 yaz.
      MOVWF   TIMB      ; TIMB register' gönder.
PAUSE1      DECFSZ   TIMB,F      ; TIMB-1, 0'a ulaştı mı?
      GOTO   PAUSE1      ; Hayır.
      DECFSZ   TIMA,F      ; TIMA-1, 0'a ulaştı mı?
      GOTO   PAUSE2      ; Hayır.
      RETURN         ; Evet, alt programdan çık.

;«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»;
TIMER_HIGH   ; Bu alt program yaklaşık 0.2 saniyelik bir gecikme sağlar.          ;
;«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»;
      
      MOVLW   D'255'      ; W'ye 255 yaz.
      MOVWF   TIMER_H1   ; TIMER_H1 register'a gönder.
      
DONGU1      MOVLW   D'255'      ; W'ye 255 yaz.
      MOVWF   TIMER_H2   ; TIMER_H2 register'a gönder.
      
DONGU2      DECFSZ   TIMER_H2,F   ; TIMER_H2-1, 0 mı?
      GOTO   DONGU2      ; Hayır.
      DECFSZ   TIMER_H1,F   ; TIMER_H1-1, 0 mı?
      GOTO   DONGU1      ; Hayır.
      RETURN         ; Evet, alt programdan çık.