;PROGRAM-30) WDT zamanlayıcısının kullanılmasına örnek program. 
;RA0 butonuna 2.3 sn’yi geçmeyen aralıklarla basıldığında RB0’daki 
;bir LED’in devamlı yanmasını sağlar, bu süreden daha uzun aralıklarla 
;basıldığında WDT devreye girerek sistemi reset eder. Sistem reset 
;olduğunda RB3’e bağlı bir buzzer’den uyarı sesi verilir ve program 
;bu noktada sonsuz döngüye girer. Programı tekrar çalıştırmak için 
;MCLR ucundaki butona basmak gerekir.

;===PROG30.ASM====07/06/2005================================
	LIST	P=16F628A
	INCLUDE	"P16F628A.INC"
	__CONFIG _INTRC_OSC_NOCLKOUT & _WDT_ON & _PWRTE_ON & _MCLRE_ON & _BODEN_OFF & _LVP_OFF & _DATA_CP_OFF & _CP_OFF
;-----------------------------------------------------------
	ORG		h'000'	;Reset veya ilk gerilim verildiğinde
SAYAC	EQU	h'20'
PORTLARI_KUR
	CLRF		PORTB	;PORTB'deki LED'leri tüm söndür	
	BANKSEL	TRISB	;BANK1'e geç 
	CLRF		TRISB	;PORTB'nin tüm uçları çıkış
	MOVLW	h'FF'	
	MOVWF	TRISA	;PORTA'nın tüm uçları giriş
	BANKSEL	PORTB	;BANK0’a geç	
	MOVLW	h'07'	
	MOVWF	CMCON	;PORTA'nın uçları normal I/O
WDT_KONT
	BTFSS	STATUS,4	;TO bit'i 0 mı? zaman aşımı var mı?
	GOTO		BUZZER_SES	;Evet, buzzer'den uyarı sesi ver
BASLA				;Hayır, normal program akışına devam
	BANKSEL	OPTION_REG	;BANK1'e geç 
	CLRWDT				;WDT'yi resetle, WDT=0
	MOVLW	b'00001111'	;WDT=ON, prescaler=1/128
	MOVWF	OPTION_REG
	BANKSEL	PORTB		;BANK0’a geç
RA0_TEST
	BTFSC	PORTA,0		;RA0 butonuna basıldı mı?
	GOTO		RA0_TEST		;Hayır, tekrar test et
	CLRWDT				;Evet, WDT'yi resetle
	BANKSEL	TRISB		;BANK1'e geç 
	MOVLW	b'00001111'	;WDT=ON, prescaler=1/128
	MOVWF	OPTION_REG
	BANKSEL	PORTB		;BANK0’a geç
	BSF		PORTB,0		;RB0'daki LED'i yak
	GOTO		RA0_TEST		;RA0'ı tekrar test et.
BUZZER_SES
	CLRWDT				;WDT'yi resetle, WDT=0
	BSF		PORTB,3		;RB3'te BUZZER=ON
	CALL		GECIKME
	BCF		PORTB,3		;RB3'teki BUZZER=OFF
	CALL		GECIKME
	GOTO		BUZZER_SES	;Buzzer'den ses vermeye devam
GECIKME					;Gecikme alt programı
	MOVLW	h'FF'
	MOVWF	SAYAC
DONGU
	DECFSZ	SAYAC, F
	GOTO		DONGU
	RETURN
	END
;------------------------------------------------------------  
