Assemblyde Gecikme döngüleri

Başlatan Extreme, 29 Ekim 2014, 19:43:04

Extreme

Fkomut = fosc /4
Tkomut = 1/fkomut
Tüm komutlar 1 instruction cycle (komut çevrimi kullanır)
2 instruction cycle kullanan komutlar istisnadır ve listesi aşağıdaki gibidir
GOTO
CALL
RETURN
RETLW
RETFIE
DECFZ SONUCU 0 İSE
INCFZ SONUCU 0 İSE
BTFSC SONUCU 0 İSE
BTFSS SONUCU 1 İSE

Ben örnekler için 10mhz kristal alıyım.
fkomut = 2.5mhz
tkomut= 0.4us

TEK SAYAÇLİ DÖNGÜ
DELAY					
		MOVLW H'FF'(M)				1
		MOVWF SAYAC1				1	
DONGU		
		DECFSZ SAYAC1,F				M+1
		GOTO	DONGU				2M-2
RETURN							        2

Toplam cycle = 3M+3
Toplam cycle= 765cycle
Toplam süre = 765 * 0.4us = 306us



ÇİFT SAYACLİ DÖNGÜ
DELAY					
		MOVLW H'FF'(M)				1
		MOVWF SAYAC1				1
DONGU1					
		MOVLW H'90'(N)				1xN
		MOVWF SAYAC2				1XN
	
DONGU2	
		DECFSZ SAYAC2,F				(M-1+2) .N
		GOTO	DONGU2				2(M-1) . N
		DECFSZ SAYAC1,F				N+1
		GOTO	DONGU1				2(N-1)

RETURN							        2

Toplam cycle = 3+4.N+3.M.N
Toplam cycle= 3 + 360 + 68850
Toplam cycle= 69213
Toplam süre = 69213 * 0.4us = 27ms

Ben burda bazı işlemler yapmaya çalıştım fakat yaklaşık 3-4 sağlam kaynakta hep farklı cyclelar farklı süreler bulunmuş.

Doğru olduğundan emin deyilim yardımcı olur musunuz ?



FEHMİ_ASM

#1
   Mplab'da stopwatch ve breakpoint kullanarak hesaplarınızın doğruluğunu test edebilirsiniz.







Extreme

Fehmi hocam kaç gündür kaç tane code generator kullandıysam hepsi farklı sonuçlar verdi.

En mantıklı en doğru yöntem sizin gösterdiğiniz yöntem .

Denemeye calışıcam anladığım kadarıyla.