Sonsuz döngü

Başlatan ziyaretci, 29 Ekim 2013, 11:36:04

ziyaretci

 Merhaba,

Assemblye daha yeni başladım, sonzu döngü mantığını  CCS C bilgimle karıştırdığımı sanıyorum. Misal;

ASM'de
SONSUZ_DONGU

 MOVLW D'255'
 MOVWF DEGISKEN1

GOTO SONSUZ_DONGU 
END


  Şeklinde mi kullanılıyor?  Yani yukarıda sürekli DEGISKEN1 değerine 255 değerimi yükleniyor?

Tagli

Evet. Zaten bir döngünün sonlanabilmesi için sondaki goto'yu bir şekilde atlaman gerekir. Bu ya döngü içindeki bir başka goto ile, ya da sondaki goto'dan önce yazılan btfss veya btfsz (aklımda yanlış kalmadılarsa) komutlarıyla sağlanır.
Gökçe Tağlıoğlu

ziyaretci

Alıntı yapılan: Tagli - 29 Ekim 2013, 11:53:08
Evet. Zaten bir döngünün sonlanabilmesi için sondaki goto'yu bir şekilde atlaman gerekir. Bu ya döngü içindeki bir başka goto ile, ya da sondaki goto'dan önce yazılan btfss veya btfsz (aklımda yanlış kalmadılarsa) komutlarıyla sağlanır.

Evet hakılsınız, birde şunu öğrenebilir miyim sizden;

  Ben belirli bir saniye gecikme yaratmak istiyorum. İnternetten baktım. 2 veya 3 döngüyle 4Mhz ile 1 saniye bir gecikme yaratılabiliryor. Kafama takılan bir kristal hızıyla saykıl hesaplaması, biraz bu konuda bana ayrıntılı bir bilgi verebilir misiniz?

Teşekkür ederim. Bayramınız kutlu olsun bu arada.

Tagli

#3
ASM kullandığım dönemlerde, gecikmeler için internetteki hazır hesap makinelerinden birini kullanıyordum. Kristal değerini ve değişken isimlerini girdikten sonra istenilen gecikme süresi için hazır kod üretiyordu bu site.

Kristal frekansından komut süresine geçmek kolay. Öncelikle kristal frekansının 4'e bölünmesi gerekiyor çünkü 8 bitlik PIC'ler her 4 saat darbesinde bir komut işliyor. Ondan sonra da bulunan değerin tersini almak yeterli. Örneğin kristal 4 MHz ise, komut işleme frekansı 1 MHz oluyor, ya da 1000000 Hz. Saniyede 1 milyon komut işleniyorsa, her bir komut 1 us (mikrosaniye) sürer. Elbette PC'nin değişmesine sebep olan komutlar, yani goto gibi atlama komutları daha uzun sürebiliyor, yanlış hatırlamıyorsam onlar 2 çevrim süresine ihtiyaç duyuyordu.

Bu arada, PIC mimarisine göre bu durum değişebilir. Mesela PIC24H'lar galiba 4 değil 2 saat darbesinde bir komut işliyor.

Aslında bekleme kodlarını timer kullanarak yapmak daha doğru olur. Böylece her seferinde kod ürettirmek de gerekmez. Mesela bir timer 1 ms'de bir kesme üretecek şekilde ayarlanır. Her kesmede bir sayaç 1 arttırılır. Bekleme döngüsü mesela 500 ms bekleyecekse, önce sayaca bakar, sonra bunun üstüne 500 ekleyip hedefini belirler, sonra da sayacı sürekli olarak kontrol ederek hedefe ulaşıp ulaşmadığına bakar. Timer yeterince yavaşlatılırsa veya bekleme süreleri çok küçük değerlerse, kesme kullanmaya gerek kalmayabilir.

Teşekkürler, İyi bayramlar.  :)
Gökçe Tağlıoğlu

ziyaretci

Verdiğiniz bilgiler için teşekkür ederim.