ASM ile pic programları yazanlar için faydalı olabilecek bir araç asm için “delay” geçikme kodlarını verilen değere (cycles) göre otomatik olarak hesaplayıp görüntülüyor program kurulum gerektirmiyor buyutu 320kb
PIC Delay ekran görüntüsü;
Bu program, PIC için sürekli olarak çeşitli tam bekleme döngüleri yazma ihtiyacından doğmuştur, özellikle komut yürütme süresinin hesaplandığı ve sürenin ya da döngülerini tam olarak tamamlamak ya da programın bireysel dallarını tamamlamak için gerekli olduğu uygulamalar içindir.
Programı zip dosyasından çıkarmanız ve çalıştırmanız yeterlidir. Win32 (örn. Win95/98) için tasarlanmıştır. Gecikme kelimesinden sonraki düzenleme penceresinde, ortaya çıkan kodun kaç döngü alması gerektiğini yazın. Ardından istediğiniz düğmeye basın, yani belirlediğiniz süreye kadar beklemeniz gerekiyorsa, Gecikme <= Giriş düğmelerinden birine basın. Sonucu beğenmezseniz, ikinci düğmeyi deneyebilirsiniz. Her zaman tam olarak bu şekilde üretilemeyeceği açıktır, bu nedenle biraz daha kısa yürütme süresi olan bir çözüm alabilir ve onu bir döngü uzatmak için NOP komutları veya 2 uzatmak için GOTO $+1 ekleyerek tamamlayabilirsiniz. döngüler. Daha uzun bir yürütme süresi tercih ederseniz, Gecikme >= Girdi’ye basın. 3 çözüm penceresi vardır.Birincisi tek döngülü çözüm için, ikincisi iki döngülü çözüm için ve üçüncüsü üç döngülü çözüm içindir. Program, programda önceden tanımlanmış yollarla çözülebilen girdinize en yakın değeri pencerelere yazacaktır. Örneğin, Gecikme <= Girişi ile 500000 döngülük bir bekleme oluşturmaya çalışırsanız, tek döngü çözümünün önemli bir sapmaya sahip olacağı açıktır, çünkü bu kod içinde elde edilebilecek maksimum olası değeri yazdıracaktır ve eğer Gecikme >= Girdi çözümü gerektirir, ardından ilgili pencerede bunun mümkün olmadığını yazdırır.
Kodunuza nasıl koyabilirsiniz?
Oluşturulanları editörünüze ihtiyacınız olan yere kopyalarsınız. Çözümün bulunduğu her pencerede, döngünün ne kadar süreceği ve ayrıca programda kullandığınız herhangi bir kaydın üzerine yazmamanız için evrensel olarak uygulanabilir bazı kayıtlarda tanımlanması gereken TMPx değişkenleri not olarak belirtilir. Bence bu açık.
Kod yazmanın en iyi yolu nedir?
Burada prosedürü, nasıl yaptığımı, yani nasıl alıştığımı anlatacağım. Ne, nerede ve ne kadar zaman alacağını düşünmeden sadece programı yazıyorum ve farklı şubelere yapılan tüm atlamaları, her şubeyi zamanında aramak veya beklemek için bir kod yazarak mümkün olacak şekilde çözüyorum. veya kısa ve net bir yapıysa hemen yaparım. Sonra her dalın nerede ne kadar zaman aldığını hesaplarım ve tüm kod dallarını dengeleyerek her yerde aynı süreyi alırım. Bunun için bu programdan kod oluşturmayı kullanabilirsiniz yani tamamlamanız gerektiğini fark ettiğinizde örneğin 5000 devir o değeri girip butona basıyorsunuz ve oluşturulan kodu kodunuza ek olarak alıyorsunuz.
Basit bir örnek.
Tam olarak yarım saniye sonra açılıp kapanması gereken LED’in yanıp sönmesi için bir program yapmak isteyeceğiz. Uygulamada, PIC için 2us atlamalar için 1us başına 1 talimat döngüsü anlamına gelen dahili bir 4MHz osilatör kullanacağız. Tabii ki, 4MHz kristal kullanılarak daha iyi doğruluk elde edilebilir, ancak şimdi bununla ilgilenmeyeceğiz. Böylece programın iskeletini yazacağız ve PIC’i ayarladıktan sonra, LED’in söneceği, LED’in açılacağı ve LED’i kapatmak için GOTO atlayacağı programın ana döngüsünü içerecektir.
Şimdi hala süreleri doldurmamız gerekiyor. Yani LED söndükten sonra LED’in 500.000 döngüde yanması gerekir. Sönmesi 1 döngü sürer, bu nedenle söndükten sonra hala 499999 döngü beklememiz gerekir, bu nedenle bu duraklamayı oluşturur ve LED söndükten sonra yerleştiririz. Delay <= Input (v.1) butonu ile tam bize göre çalışıyor yani başka bir şey eklememize gerek yok. Şimdi LED yandıktan sonraki süreyi eklememiz gerekiyor. GOTO'nun kapanması iki döngü ve birinin kapanması gerekir, bu nedenle 499997 döngüye kadar ekleriz. Üçüncü pencerede, öncekiyle aynı düğmeyi kullanabiliriz, bu nedenle LED yandığında ve program tamamlandığında ve zamanlama doğru olduğunda üçüncü pencereden kodu giriyoruz, böylece frekansla bir zaman tabanı oluşturduk. 1Hz ve mükemmel bir şekilde 1:1 oranında değişirler. Daha iyi bir fikir olması için, şu şekilde görüntülemek için program kodunu da ekliyorum:onehz.asm . Deneyimli bir programcının bu görev için daha kısa bir üslupla yazacağı benim için açık, ancak bu yeni başlayanlar için de net bir örnek olmalı, bu yüzden bu şeylere genel bir bakışa gerek olmayan tamamen açıklayıcı bir örneği tercih ettim. Osilatörler ve puls üreteçleri.
Bu basit yöntemle tek bir çipten belirli bir frekansta osilatör yapmanın mümkün olduğunu örnekten her yeni başlayanın anladığını düşünüyorum ve CZK 50 civarında (Nisan 2002’de) fiyatını hesaba katarsak. PIC12C508A için KDV dahil perakende satış mağazası, örneğin belirli bir pin ile frekans değiştirme gibi diğer işlevlerin kolayca atanabilmesi gerçeğine bakılmaksızın, finansal olarak da kesinlikle kötü değildir. Dahili osilatörlü bağlantı yerine kristalli bağlantı kullanırsanız, PIC’in çalışmasına uygun bir frekans seçmek mümkündür ve zamanlama da kristal hassasiyetinde olacaktır. Yani, gerçekten hassas bir frekansın gerekli olduğu durumlarda, kristal veya kristal osilatör kullanmak en uygunudur. Giriş pinlerinin durumuna göre çıkış olarak ayarlanmış bir pin üzerinde farklı dalga formları (darbeler) üretmeniz gerekiyorsa,
Bekleyen alt programlar ve program optimizasyonu.
Bekleme döngüsünü programda birden çok kez kullanacaksanız, kullanılan program bellek alanı açısından, onu bir alt program olarak yazmak ve CALL kullanarak çağırmak kesinlikle daha iyidir. Bu durumda, bekleme programını kullanarak ihtiyaç duyduğunuzdan daha kısa 4 döngü oluşturun, çünkü programın sonunda CALL çağırmak ve RETURN döndürmek tam olarak 4 ekstra döngü alır. Bazen görebileceğiniz ve yeni başlayan birinin bazen hemen düşünmediği bir başka şey de, bir alt program yazdığında, programın her yerinden aramak zorunda olmaması, ancak ortasında bir yerden arayabilir. gerektiğinde Bir örnek vereceğim.
CEKEJ9 GOTO $+1 NOP CEKEJ6 GOTO $+1 RETURN
Burada CALL CEKEJ9’un CEKEJ9’dan RETURN’e kadar her şeyi yapacağı ve CALL ve RETURN ile bile 9 döngü alacağı açıktır. GOTO $+1, programın bir sonraki satırına yalnızca bir sıçramadır, bu nedenle aslında NOP ile aynı şeyi yapar, ancak bir yerine 2 döngü sürer. CALL CEKEJ6’yı çağırmak muhtemelen açıktır ve ayrıca her bir alt programa ayrı ayrı sahip olmaya kıyasla yerden tasarruf edildiği de açıktır.
Herhangi bir alt programdan biraz GERİ DÖNÜŞ ÇAĞRIMAK için 4 döngü beklemeniz gereken noktada da güzel, bu nedenle 4 döngü uzunluğundaki bir duraklama için yalnızca bir bellek konumu daha. Eğer program her zaman çıktıda sadece pin indirmeye dayalı olarak bir tür dalga formu üretecekse, bunu ekonomik olarak nasıl yapacağınız hakkında çok fazla düşünmenize bile gerek yok, çünkü eğer bunu PIC’e sığdırabilirseniz, hiç kimse programın tüm belleğe kıyasla yalnızca örneğin 50 bayt alması arasındaki farkı anlayacaktır,
Lisans.
Programı herhangi bir değişiklik yapmadan bırakırsanız, onu kullanabilir, yaygınlaştırabilir, web sitenize koyabilir ve aklınıza ne geliyorsa onu yapabilirsiniz. Bu program için herhangi bir ödül talep edilemez, bu nedenle sadece ücretsiz olarak dağıtılabilir. Herhangi bir kısıtlama olmaksızın uygulamalarınızı oluşturmak için tamamen ücretsiz ve ticari olarak kullanabilirsiniz.
Kaynak: http://bezstarosti.cz/soft/picdelay/picdelay.htm
Şifre-Pass: 320volt.com
Yayım tarihi: 2011/05/17 Etiketler: asm delay, delay cycles, pic delay, variables tmp1 tmp0
Hocam, alternatif olarak şu programı kullanabilirsiniz.
daha derli toplu sade kod üretiyor ve değişik osilatör değerleri girebiliyorsunuz.
windows için:
http://ikarab.narod.ru/PIC_Delay_1_8_Windows.rar
linux için:
http://ikarab.narod.ru/PIC_Delay_1_8_Linux.zip
program dili: İngilizce ve Rusca. isteyenler .Lng dosyasını açıp Türkçe’ye çevirebilirler.
türkçeye nasıl çeviriyoruz
Çok teşekkür ederim
teşekkürler @Nazmi verdiğiniz dosyalar için alternatif linkde benden olsun
PIC_Delay_1_8_Linux_windows.ZIP