;PROGRAM-22) Bipolar (4 uçlu) bir step motoru bir yöne doğru RA0 
;butonuna bastıkça adım adım döndüren program. Step motor uçlarına 
;gönderilecek gerilimler PORTB'deki RB0~RB3 uçlarına bağlanan LED'lerde görülür.

;===PROG22.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ş
BASLA
	MOVLW	h'FF'	;W ? h'FF'
	MOVWF	ADIM	;ADIM ? W (h'FF')
SONRAKI_ADIM
TEST_PORTA
	BTFSC	PORTA,0	;RA.0 butonuna basıldı mı?
	GOTO		TEST_PORTA	;Hayır, butonu tekrar test et. 
	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		SONRAKI_ADIM	;Yeni bir bit paterni için git.
ADIMTBL
	ADDWF	PCL, F	;PCL=PCL+ADIM
	RETLW	b'0001'	;0.adım
	RETLW	b'1001'	;1.adım
	RETLW	b'1000'	;2.adım
	RETLW	b'1010'	;3.adım
	RETLW	b'0010'	;4.adım
	RETLW	b'0110'	;5.adım
	RETLW	b'0100'	;6.adım
	RETLW	b'0101'	;7.adım
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
;-----------------------------------------------------------
