;PROGRAM-21) PORTB'nin uçlarına bağlı 7 segment display'de 
;0~F arasında saydıran program. Sayılar arasındaki 
;duruş GECIKME alt programı tarafından sağlanmıştır.  
	
;===PROG21.ASM====18/05/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
;-----------------------------------------------------------
SAYAC1	EQU	h'20'
SAYAC2	EQU	h'21'
DALLAN	EQU	h'22'		
	ORG	h'00'	;Program kodlarının başlangıcı
	CLRF	PORTB	;PORTB'ye bağlı LED'leri söndür
	BANKSEL	TRISB	;BANK1'e geç 
	CLRF	TRISB	;PORTB'nin uçlarını çıkış yap
	BANKSEL	PORTB	;BANK0’a geç
BASLA
	MOVLW	h'00'		;b'00000000' sayısını W'ye yükle
	MOVWF	DALLAN		;DALLAN ? W
DONGU
	MOVF	DALLAN, W		;W ? DALLAN
	ANDLW	B'00001111'	;W'nin üst dört bit’ini sıfırla
	CALL	CEV7SEG	;Kod çevirme alt programını çağır.
	MOVWF	PORTB		;Kodu 7 segment display’de göster
	INCF	DALLAN, F		;DALLAN = DALLAN + 1
	CALL	GECIKME		;Gecikme yap
	GOTO	DONGU		;Yeni bir sayı için başa dön.
CEV7SEG
	ADDWF	PCL,F	;PCL=PCL+W(DALLAN)
	RETLW	h'3F'	;0
	RETLW	h'06'	;1
	RETLW	h'5B'	;2
	RETLW	h'4F'	;3
	RETLW	h'66'	;4
	RETLW	h'6D'	;5
	RETLW	h'7D'	;6
	RETLW	h'07'	;7
	RETLW	h'7F'	;8
	RETLW	h'6F'	;9
	RETLW	h'77'	;A
	RETLW	h'7C'	;b
	RETLW	h'39'	;C
	RETLW	h'5E'	;d
	RETLW	h'79'	;E
	RETLW	h'71'	;F
GECIKME				;Gecikme alt programı
	MOVLW	h'FF'
	MOVWF	SAYAC1
DONGU1
	MOVLW	h'FF'
	MOVWF	SAYAC2
DONGU2
	DECFSZ	SAYAC2, F
	GOTO	DONGU2
	DECFSZ	SAYAC1, F
	GOTO	DONGU1
	RETURN
	END
;-----------------------------------------------------------
