kiristale göre komut işlem???

Başlatan digifuzyon, 03 Temmuz 2007, 13:17:14

digifuzyon

herkeze merhaba

Picde kiristal hızına göre komut işlme

örnek kiristal eger 20MHZ ise

her komutun işlneme hızı

20/4 = 5 => 1/5 => 0.2 micro saniyee

peki her komut 0.2 us gecikme ile işleniyorsa

eger ben if yapısı kullanıyosam bunu kaç komut olarak sayıcam her komutmu her satırmı bu konuda bilgisi olanlar sistemin tam olarak nasıl çalıştıgını anlatabilrmi????????

OG

Her komut 0,2usn sözü yanlış bir tanım olur. 20MHz için 1 dahili komut saykılı 0,2usn dir denir. Daha sonra her bir komutun kaç dahili komut saykılında yürütüldüğü incelenir. Kimisi 1, kimisi 2 dahili komut saykılında biter, buna göre hesaplanır. PIC'e ait ASM komut setinden görebilirsiniz. 16 serisi için 35 ayrı komut.

http://ww1.microchip.com/downloads/en/DeviceDoc/40300C.pdf

111. sayfadan itibaren bakınız.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

Prof.EleCTroN

disassembly yapıp if için kaç komut kullanılmış buna bakmalısın.

Logan

@digifuzyon, OG hocanın dediği gibi her komutun bir saykıl sayısı vardır. ASM ile çalışanlar iyi bilirler. Gecikme programı yazarken her komut satırının kaç saykıl harcadığı ve kaç defa tekrar edildiği hesaplanır.Buna göre de kullanılan registerlerde oynamalar yaparak istenilen bekleme süresi elde edilmiş olur. Kullandığın kristale bağlı olarak ve hangi komutun kaç saykıl olduğunu hesaba katarak o satırın ne kadar süre harcadığını bulabilirsin. Mesela goto komutu ASM dilinde 2 saykıl, decfsz komutu 1 saykıl ( koşul gerçekleşmediği sürece), movlw komutu da 1 saykıllık süre harcar. Fakat diğer makrolaşmış dillerde (BASIC, CCS vs.vs.) @Prof.EleCTroN'un dediği bigi disassembler yapmalı ve tek tek satırları tarayarak hesap yapmalısın.Fakat bir aralar siteleri gezerken pbp'de kullanılan bütün komutların ASM açıklamalarını görmüştüm. Eğer bu şekilde birşey bulabilirsen işin kolaylaşır. :)  Umarım açıklayıcı olmuştur...
İmza.

CaFFeiNe

@digifuzyon

hocam işin atomlarına inmeden önce mikrosaniyelik gecikmeleri neden hesaplamanız gerekiyor?
sorunuzu biraz daha açabilirmisiniz? çünkü çoğu zaman bu kadar hassas zamanlamayla uğraşmadanda birçok iş halledilebiliyor obakımdan soruyorum

digifuzyon

Rf data transferi için kullanıcam benzer kodlarda komutlardaki geçikmeyi göz önünde bulundurmuşlar o yüzden

ben pic clite kullanıyorum onun degerlerini bulmaya çalışıyım

cevaplar için herkeze çok teşekkürler

CLR

En güzeli timer kur, overflow bit set olunca gönderirsin veya alırsın, zamanlama ile uğraşmazsın

Timersız yapmak istiyorum diyorsan, zamanlama kısmını asm ile yazarsın olur biter.

Kolay gelsin.
Knowledge and Experience are Power

HEXF2

Dostum eğer RF uygulaması yapıyorsan RF ile ilgili retinlerini asm ile yaz.Bu arada diğer arkadaşlarında dediği gibi bir dilin if ifadesi için kaç asm komutu çalıştırdığını kestirmen biraz güç.Üstelik sen hangi dilde yazıyorsun hangi PIC'i kullanıyorsun yazmamışsın bile.Çünkü 18 serisinden if için iki asm komutu çalıştılıyorsa 16 serisi için 5-6 satır asm çalıştırılır.Üstelik bu derleyiciye göre de değişir.

MICROCEBEL

Bence if ifadesi BTFSS yada BTFSC komutlarına denk geliyo.Yani sorgulamanız uyuyor ise 1 saykıl ama uymuyor ise 2 saykıl.Yanlışta olabilir ama ben bu şekilde olabileceğini düşünüyorum.

HEXF2

Tabii ki o komutlarda kullanılıyor ama daha fazlası var.Bu komutlar denetleyiciye göre değişiyor.Örneğin 18xxx serisi için şöyle bir komut yazılabilir.

if(i == a) a = 0;

ASM:

movf        i, W
cpfseq      a, 0
goto         Son
clrf           a

Bunu 16 serisi için yapacak olursak

movf        i,W
subwf       a, W
btfss        STATUS, Z
goto         Son
clrf          a

Kaç saykıl oldu bu komutlar şimdi derseniz il yazdığımda karşılaştırma sonucuna göre saykıl değişir.İkincisinde de öyle....