;PROGRAM-28) TMR1 sayıcısının kullanılmasına örnek program. Prog26.asm’de 
;TMR0 ile yaptığımız programı bu defa TMR1 zamanlayıcısıyla yapılması. 
;Timer-1 16 bit’lik bir sayıcı olduğundan önceki programda yaptığımız 
;sapma hatasını bu programda sıfıra indirebileceğimizi göreceksiniz. Şimdi 
;10 mS’de bir kesme oluşması için TMR1’in hangi sayıdan başlatılacağını 
;bulduktan sonra 8 bit’lik TMRH ve TMRL saklayıcılarına bu sayının program 
;içerisinde nasıl yükleneceğini görelim. Programın akış diyagramı prog26.asm ile aynıdır. 

;===PROG28.ASM====03/06/2005================================
	LIST	P=16F628A
	INCLUDE	"P16F628A.INC"
	__CONFIG _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_ON & _MCLRE_ON & _BODEN_OFF & _LVP_OFF & _DATA_CP_OFF & _CP_OFF
;-----------------------------------------------------------
SAY_10mS	EQU	h'20' ;10 mS'leri sayma değişkeni
	ORG	h'000'		;Reset veya gerilim verildiğinde
	GOTO	BASLA		;Ana program başlangıcına git.
	ORG	h'004'		;Kesme oluştuğunda
	GOTO	KESME_ALT_PROG	;Kesme alt programına dallan
BASLA				;Ana program başlangıcı
	CLRF	PORTB		;PORTB'deki tüm LED'leri söndür	
	BANKSEL	TRISB		;BANK1'e geç 
	CLRF	TRISB		;PORTB'nin tüm uçları çıkış
	BSF	PIE1,0		;TMR1 kesmesini hazırla
	BANKSEL	PORTB		;BANK0’a geç
	BSF	INTCON,7		;Tüm kesmeler izin ver.
	BSF	INTCON,6		;Çevresel kesmelere izin ver
	BCF	T1CON,1	;Timer-1 dahili saat işareti (Fosc/4)
	BSF	T1CON,0		;Timer-1'i çalıştır
	BSF	PORTB,0		;RB0 LED'ini yak
	BCF	PORTB,1		;RB1 LED'ini yak
DONGU			;Ana program bu sonsuz döngü içerisinde
	GOTO	DONGU		;devamlı olarak çalışır.
KESME_ALT_PROG
	BCF	PIR1,0	;TMR1 kesmesini sonrakilere hazırla
	MOVWF	h'D8'		;h’D8F0’ sayısını TMR1H ve TMR1L
	MOVWF	TMR1H		;saklayıcılarına yükle
	MOVLW	h'F0'
	MOVWF	TMR1L
	INCF	SAY_10mS,F	;10 mS'leri tutan sayacı 1 arttır
	MOVLW	d'100'		; W ? d'100'
	SUBWF	SAY_10mS,W	; W = SAY_10mS - W
	BTFSS	STATUS,Z		; SAY_10mS=100 oldu mu?
	GOTO	KESME_SONU	; Hayır, ana programa git.
	CLRF	SAY_10mS		;Evet,10 mS'leri tutan sayacı sıfırla
	MOVLW	b'00000011'	; Terslenecek bit’leri W'ye yükle
	XORWF	PORTB,F		; RB0 ve RB1'i LED'leri terslendi
KESME_SONU
	RETFIE				; ana programa dön.
	END
;-----------------------------------------------------------
