;PROGRAM-5) DECFSZ kullanılarak döngü düzenlemeye örnek program.
; A port’unun 0. bit’ine bağlı butona 10 defa bastıktan sonra
; B port’unun 0. bit'ine bağlı olan LED'i yakan program. 
;NOT: PIC’e uygulanan saat frekansı çok yüksek olursa bu program
; istenilen biçimde çalışmayacaktır. Bunun nedeni işlem basamaklarında açıklanmıştır.  

;Şekil 7 – 2 : PROG5.ASM programını deneme devresi.

;===PROG5.ASM====02/05/2005================================
	LIST	P=16F628A
	INCLUDE	"P16F628A.INC"
	__CONFIG _RC_OSC_CLKOUT & _WDT_OFF & _PWRTE_ON & _MCLRE_ON & _BODEN_OFF & _LVP_OFF & _DATA_CP_OFF & _CP_OFF
;----------------------------------------------------------
	CLRF		PORTB
SAYAC	EQU	h'20'		;SAYAC saklayıcısının adresi
	BANKSEL	TRISB		;BANK1'e geç 
	MOVLW	b'11111110'	;W saklayıcıya h'08' yükle
	MOVWF	TRISB		;RB0 çıkış diğerleri giriş
	MOVLW	b'11111111'	;W saklayıcıya h'FF' yükle
	MOVWF	TRISA		;PORTA uçlarının tümü giriş
	BANKSEL	PORTB		;BANK0'a geç
	MOVLW	h'07'		;W saklayıcıya b’00000111’ yükle 
	MOVWF	CMCON		;PORTA girişleri dijital I/O
BASLA
	MOVLW	d'10'		;W'ye desimal 10 sayısını yükle
	MOVWF	SAYAC		;W'deki 10 sayısını SAYAC'a yükle
TEST
	BTFSC	PORTA, 0		;RA0 butonuna basıldı mı?
	GOTO		TEST			;Hayır, tekrar test et
	NOP					;Evet, bir komut çevrimi bekle
	NOP					;		"
	NOP					;		"
	NOP					;		"
	NOP					;		"
	NOP					;		"
	NOP					;		"
	NOP					;		"
	NOP					;		"
	NOP					;		"
	NOP					;		"
	NOP					;		"
	NOP					;		"
	NOP					;		"
	NOP					;		"
	DECFSZ	SAYAC, F		;SAYAC=SAYAC-1, SAYAC=0 mı?
	GOTO	TEST				;Hayır, PortA'yı test et
	BSF	PORTB, 0			;RB0'daki LED'i yak.
DONGU
	GOTO DONGU
	END
;----------------------------------------------------------
