;PROGRAM-23)	Çevrim tablosunun kullanılmasına örnek program. 
;Bir step motoru PORTA'nın 0. bit’ine bağlı RA0 butonuna basınca 
;sağa doğru döndüren, RA7 butonu basılı tutularak RA0 butonuna 
;basıldığında da sola döndürür. Step motor uçlarına gönderilecek 
;olan gerilimler PORTB'deki LED'lerde görülür.

;Şekil 11 – 12 : PROG23.ASM programının akış diyagramı.

;===PROG23.ASM====19/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'
ADIM		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
	MOVLW	h'FF'		;W ? h'FF'
	MOVWF	TRISA		;PortA'nın tüm uçları giriş
	BANKSEL	PORTB		;BANK0’a geç
	MOVLW	h'07'		;W ? h'07'
	MOVWF	CMCON		;PORTA dijital giriş
	MOVLW	h'FF'		;W ? h'FF'
	MOVWF	ADIM			;ADIM ? W (h'FF')
BASLA
	BTFSC	PORTA, 0		;RA.0 butonuna basıldı mı?
	GOTO		BASLA		;Hayır, tekrar test et.
	BTFSC	PORTA, 7		;RA.7 butonu basılı mı?
	GOTO 	SAG			;Hayır, sağa döndür.
SOL						;Evet, sola döndür.
	INCF		ADIM, F		;ADIM=ADIM+1(h'FF'+h'01'=h'00')
	MOVF		ADIM, W		;W ? ADIM
	ANDLW	b'00000111'	;W'nin üst 5 bit’ini maskele.
	CALL		ADIMTBL		;Bit paternini seç.
	ANDLW	b'00001111'	;W'nin üst 4 bit’ini maskele.
	MOVWF	PORTB		;Bit paternini PORTB'de göster.
	CALL		GECIKME		;LED'leri bir süre yanık tut.
	GOTO		BASLA		;Yeni bir bit paterni için git.
SAG
	DECF		ADIM, F		;ADIM=ADIM-1(h'FF'-h'01'=h'FE')
	MOVF		ADIM, W		;W ? ADIM
	ANDLW	b'00000111'	;W'nin üst 5 bit’ini maskele.
	CALL		ADIMTBL		;Bit paternini seç.
	ANDLW	b'00001111'	;W'nin üst 4 bit’ini maskele.
	MOVWF	PORTB		;Bit paternini PORTB'de göster.
	CALL		GECIKME		;LED'leri bir süre yanık tut.
	GOTO		BASLA		;Yeni bir bit paterni için git.
ADIMTBL					;Çevrim tablosu
	ADDWF	PCL, F		;PCL=PCL+W
	RETLW	b'0001'
	RETLW	b'1001'
	RETLW	b'1000'
	RETLW	b'1010'
	RETLW	b'0010'
	RETLW	b'0110'
	RETLW	b'0100'
	RETLW	b'0101'
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
;----------------------------------------------------
