çift döngülü zaman geciktirme

Başlatan x-tol, 23 Ağustos 2007, 17:03:54

x-tol

GECIKME					;1. satır
		MOVLW	H'FF'		;2.satır
		MOVWF	SAYAC1		;3
GECIKME2				;4
		MOVLW	H'FF'		;5
		MOVWF	SAYAC2		;6
ISLEM					;7
		DECFSZ	SAYAC2, F	;8
		GOTO	ISLEM		;9
		DECFSZ	SAYAC1, F	;10
		GOTO	GECIKME2	;11
		RETURN			;12.satır


bu kodlarla yaklaşık 197 ms'lik zaman gecikmesi elde ediliyor. burada bir sorunum yok fakat kodların sıralanışında
birşey kafama takıldı. 11.satırda "goto gecikme" komutu bana pek mantıklı gelmiyor. 11. satırdan
4.satıra gönderiyoruz programı. gecikme 2'de de sayac2'ye tekrar "ff" değeri yükleniyor. yani decfsz
komutunun yaptığı işlem(sayı-1 yapar yani sonuç 0 olmuşsa bir sonraki komutu atlar, 1 ise sıradaki komuta geçer) başa dönmüş oluyor.
sizce mantıklımı bu? çalışmasında problem yok ama birşeyler ters gibi geliyor bana.

stlg

10.satırdaki DECFSZ   SAYAC1, F komutu her seferinde bir azaldıgından sayac1 registeri sıfır oldugunda program sonlanır yani bu yazılımda bir sorun yok sayac1 deki sayı kadar ff den sıfıra kadar sayar
ALLAHA EMANET OLUNUZ Hoştur bana senden gelen,  Ya gonca gül yahut diken,  Ya kaftandır yahut kefen,  Kereminde hoş lütfunda hoş.

bigbey

Evet SAYAC1 * SAYAC2 kadar gecikme döngüsü oluşturulmuş.
SAYAC2, SAYAC1 sayısı kadar (kez) sıfıra düşürülüyor.
TA6R

x-tol

Alıntı yapılan: "bigbey"SAYAC2, SAYAC1 sayısı kadar (kez) sıfıra düşürülüyor.
evet şimdi anladım, teşekkür ederim