Elektronik / Mikrodenetleyici Projeleri/

2×20 LCD Display Göstergeli Adım Motor Kontrollü Lazer

Sponsorlu Bağlantılar

Hazırlayanlar: Halit Tokmak ve Recep Emeği geçen Kişilere Teşekkürler

Proje Hakkında Genel Bilgi : Devrenin görevi lazer ışığının küresel koordinat sisteminde istenilen açılara otomatik olarak konumlandırmaktır. Bu konumlandırma işlemi için küresel koordinat sistemini X ve Z açısal düzlemleri olarak iki açısal bölgeye böldük. X ve Z açılarını ayarlamak üzere 2 step motor kullandık. Step motorlardan ilki 15 derecelik adımlarla hareket etmekte olup bunu X Stepperi diye adlandırdık. X stepperi yüksek torka sahip olup bu motorun dönen aksamına dişlilerden oluşan mekanik bir sistemi monte ettik. Bu mekanik sistem içerisinede torku düşük olan ve 20 derecelik adımlara sahip olan Z stepperi vardır. Z stepperi denetleyicinin yazılımı ile 5’er derece olarak sınırlandırılmıştır. Halbuki 0,225 derecelik açılarla hareket etmektedir. 20 adıma düşen adım açısı dişliler vasıtasıyla düşürülür.

Projenin Devre Şeması
2x20lcd-pic16f877-adim-motor-lazer

Biz devremizde orjin belirlendikten sonra X düzleminde +60 derece ile – 60 derece arasında toplam 120 derecelik görüş açısıyla 15’er derece arttırılıp azaltılabilir. Z düzleminde +90 derece ile -90 derece arasında toplam 180 derece görüş mesafesinde ayarlanabilir.

Devrede koordinat belirlemek için 4*4 tuş takımı kullanılmıştır. Devreye enerji verildiğinde orjin ayar modunda başlayan sistem koordinat belirlemek için sadece sağa-sola ve yukarı-aşağı giriş bekler ve başka tuşa basıldığı anda hatalı tuş girişi diyerek de LCD ekrandan uyarı verir. Orjin noktası belirlendiğinde artık sıra koordinat seçimine gelir ve ekrandan kullanıcıyı yönlendiren program koordinatları girdikten sonra gerekli hesaplamaları yaparak step motorları gerekli konumuna gelecek biçimde yönlendirerek IŞINI istediğimiz noktaya odaklar..

Projenin ASM Programı : .ASM Programı oldukça modüler bir tarzda hazırlandı ve içerisindeki program parçaları oldukça popüler olup alıntı yapılarak her türlü programda kullanıma uygundur. Yaklaşık bir haftalık bir çalışmanın ürünü olan programda klavye entegresi kullanılmadan direk okunan tuş takımı programının yanı sıra LCD’ye veri yazma, komut gönderme, LCD BF bayrağı kontrolü ve açılışta yürüyen yazılar şeklinde show yapan modüler programlar; ve stepper kontrol programları, açısal değeri adım değerine dönüştüren programlar gibi daha bir çok program parçaları ile assembly dili en güzel biçimde kullanılmıştır.

Program yaklaşık 1400 satırdan oluşmakta ve derlendiğinde 1,3 Kbyte .HEX dosyası olmaktadır

Program 2×20 LCD Display Göstergeli Adım Motor Kontrollü Lazer

Dosya indirme LINK listesi (TXT formatında) link-4144.zip şifre-pass: 320volt.com

Program asm

;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
	
	TITLE "LAZER.ASM" 	;PROGRAMA İSİM VERİLDİ
	LIST P=16F877		;16F877 DERLEYİCİYE TANITILDI
	#INCLUDE "P16F877.INC"	;ÖZEL KAYITÇILAR TANITILDI
	
	__CONFIG  _XT_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF 

;"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
;TANIMLAMALAR.....
;**************************************************************************************************

KEY1 EQU H'20'		;GECİKME SÜRESİ İÇİN
KEY2 EQU H'21'			;GECİKME SÜRESİ İÇİN
CURSOR EQU H'22' 
TUSMOD EQU H'38'		;TUSKONTROLÜNDE NELER BAZ ALINACAK'
XKONUM_E EQU H'23'
XBIRLER EQU H'24'
XKONUM_Y EQU H'25'
XONLAR EQU H'26'
ZKONUM_E EQU H'27'
ZBIRLER EQU H'28'
ZKONUM_Y EQU H'29'
ZONLAR EQU H'2A'
XADIM EQU H'2B'
XACISI EQU H'2C'
ZADIM EQU H'2D'
ZACISI EQU H'2E'
GIDEN EQU H'2F'
ZSAYACI EQU H'30'

#DEFINE RS PORTE, 0		
#DEFINE RW PORTE, 1
#DEFINE EN PORTE, 2	

;****************************************************************************************************	
	
	ORG 0X000
	GOTO START
        	ORG 0X004
INTERRUPT
        RETFIE
START			 ; BAŞLANGIÇ PROGRAMI	
	BCF STATUS, RP1
	BSF STATUS, RP0	;BANK1
	CLRF TRISC	;PORTC7..4=AX,BX,CX,DX;PORTC3..0=AZ,BZ,CZ,DZ
	MOVLW H'0F'
	IORWF ADCON1, 1	;E PORTU DİJİTAL GİRİŞ ÇIKIŞ SEÇİLDİ.
	CLRF TRISE	;E PORTU ÇIKIŞ LCD RS,RW,E
	CLRF TRISD
	BSF OPTION_REG, 7	;WEAK PULL-UP'LAR PASİF
	BCF INTCON, 7
	MOVLW B'00010111'
	MOVWF TRISB		;SATIRLAR ÇIKIŞ SEÇİLDİ
	BCF STATUS, RP0		;BANK0 AKTIF
	CLRF PORTE		;LCD_RS= PORTE.0, LCD_RW= PORTE.1, LCD_E= PORTE.2,
	CLRF TUSMOD		;ACILIS ORJIN MODDA
	MOVLW B'10011000'	;İLK STEPPER KONUMLARI
	MOVWF PORTC		;STEPPERLER ÇALIŞTI
	MOVLW D'04'
	MOVWF XKONUM_E
	MOVLW D'18'
	MOVWF ZKONUM_E
	CALL LCD_START		;LCD_RESET+INITIAL+SHOW 
	GOTO RUTIN		;START VERİLDİ...
;*********************************************************
TUSMOD050		;XAYAR3 DEMİ?
	MOVF TUSMOD, 0	;TUSMOD AKÜDE
	XORLW H'04'	;XAYAR3 MÜ?
	BTFSS STATUS, 2	;EVETSE ATLA
	GOTO TUSMOD051	;HAYIRSA DALLAN
	MOVF XONLAR, 0	;AKÜDE ONLAR X DEĞERİNİN YENİSİ 
	ADDWF PCL, 1	;
	GOTO HATALI	;YENİSİ 0 İSE 05 OLAMAZ
	GOTO TUSMOD502	;15 OLUR
	GOTO HATALI	;25 DERECE DE OLMAZ
	GOTO HATALI	;35 DERECE OLMAZ.
	GOTO TUSMOD502	;45 DERECE OLUR
	GOTO HATALI	;55 DERECE OLMAZ
	GOTO HATALI		;ZATEN 60 TIR.
;*************************************************
TABLO1
	ADDWF PCL, 1	
MSJ1	DT "HALIT TOKMAK", 0
	MOVF PCL, 0
	RETURN
TABLO2
	ADDWF PCL, 1	
MSJ2	DT "RECEP OCAL", 0
	MOVF PCL, 0
	RETURN
TABLO3	
	ADDWF PCL, 1	
MSJ3	DT "OTOMATIK LAZER", 0
	MOVF PCL, 0
	RETURN
TABLO4
	ADDWF PCL, 1	
MSJ4	DT "KONTROL", 0
	MOVF PCL, 0
	RETURN
TABLO5
	ADDWF PCL, 1	
MSJ5	DT "X ICIN 4,6 TUSLARI  ", 0
	MOVF PCL, 0
	RETURN
TABLO6
	ADDWF PCL, 1	
MSJ6	DT "Z ICIN 2,8 TUSLARI", 0
	MOVF PCL, 0
	RETURN
TABLO7
	ADDWF PCL, 1	
MS7	DT "X:*, Z:#, ORJIN:H/R", 0
	MOVF PCL, 0
	RETURN
TABLO8
	ADDWF PCL, 1	
MSJ8	DT "I", "S", "I", "N", "=", " ", "X", ",", "Z", "(", "+", "0", "0", H'DF', "," "+", "0", "0", H'DF', ")", 0
	MOVF PCL, 0
	RETURN
TABLO9
	ADDWF PCL, 1	
MSJ9	DT "   HATALI TUS !!!  ", 0
	MOVF PCL, 0
	RETURN
RUTIN	;TEKRARLAMALI PROGRAMLAR KONTROLÜ	
	CALL TMK		;TUS MANTIĞI KONTROL EDİLİR
	ADDWF PCL, 1 
	GOTO TUS00
	GOTO TUS01
	GOTO TUS02
	GOTO TUS03
	GOTO TUS04
	GOTO TUS05
	GOTO TUS06
	GOTO TUS07
	GOTO TUS08
	GOTO TUS09
	GOTO TUS10	;*
	GOTO TUS11	;#
	GOTO TUS12	;AU
	GOTO TUS13	;H/R
	GOTO TUS14	;RD
	GOTO TUS15	;ENTER
	GOTO TUS16	;TUS BASILI DEĞİL
;*********************************************************
TUSMOD000 	;KONTROLE DEVAM
	MOVF TUSMOD, 0	;TUSMOD AKÜDE
	XORLW H'04'	;TUSMOD 04H MI?
	BTFSS STATUS, 2	;EVETSE ATLA
	GOTO TUSMOD001	;HAYIRSA DALLAN
	MOVF XONLAR, 0	;AKÜDE ONLAR X DEĞERİNİN YENİSİ TABİKİ
	ADDWF PCL, 1	;
	GOTO TUSMOD002	;YENİSİ 0 İSE
	GOTO HATALI	;ONLARBASAMAĞI 1 İSE 10 DERECE OLMAYACAĞINDAN
			;HATA VERMESİ GEREKİYOR..
	GOTO HATALI	;20 DERECE DE OLMAZ
	GOTO TUSMOD002	;30 DERECE OLUR.
	GOTO HATALI	;40 DERECE OLMAZ
	GOTO HATALI	;50 DERECE OLMAZ
	GOTO TUSMOD002		;ZATEN 60 TIR.
TUS00	;0 BASILDI
	MOVF TUSMOD, 0	;TUSMOD AKÜDE
	XORLW H'03'	;XAYAR2 MOD MU?
	BTFSS STATUS, 2	;EVETSE Z=1 DİR
	GOTO TUSMOD000	;HAYIRSA DALLAN
	INCF TUSMOD, 1	;XAYAR3 E GEÇTİ	
	MOVLW H'00'
	MOVWF XONLAR		;YENİ DEĞER 00H OLDU
	MOVLW "0"
	CALL GONDER	;XONLARA 0 YAZILDI CURSOR BİR KAYDI
	INCF CURSOR, 1
	MOVLW D'250'	;500 MİLİSANİYE
	MOVWF KEY2
	CALL WAIT	;BİRAZ MOLA..
	GOTO RUTIN	;RUTIN İŞLERE DEVAM EDİLİR.

HATALI		;HATAYI ÇAĞIRAN ARA PROGRAMDIR..
	CALL HATA
	GOTO RUTIN
TUSMOD002	;BİRLER BASAMAĞI 0 OLABİLİR DURUMLARI İÇİN..
	MOVLW H'01'
	MOVWF TUSMOD	;STATİK MODA GEÇTİ
	CLRF XBIRLER
	MOVLW "0"
	CALL GONDER	;XBIRLERE 0 YAZILDI
	MOVLW H'0C'
	CALL KOMUT	;CURSOR SAKLANDI
	GOTO XCTRL	;X İN YENİ DEĞERLERİ KONTROL EDİLMELİ
TUSMOD001	;HANGİ MODDA? SORUSUNA DEVAM..
	MOVF TUSMOD, 0	;TUSMOD AKÜDE
	XORLW H'06'	;ZAYAR 2 Mİ?
	BTFSS STATUS, 2	;EVETSE ATLA
	GOTO TUSMOD003	;HAYIRSA DALLAN
	MOVLW H'07'
	MOVWF TUSMOD	;ZAYAR3 MODA GEÇTİ
	CLRF ZONLAR
	MOVLW "0"
	CALL GONDER
	INCF CURSOR, 1
	MOVLW D'250'	;500 MİLİSANİYE
	MOVWF KEY2
	CALL WAIT	;BİRAZ MOLA..
	GOTO RUTIN	;RUTIN İŞLERE DEVAM EDİLİR.
TUSMOD003	;HANGİ MODDA CEVAP ARANIYOR	
	MOVF TUSMOD, 0	;TUSMOD AKÜDE
	XORLW H'07'	;ZAYAR1 Mİ?
	BTFSS STATUS, 2	;EVETSE ATLA
	GOTO HATALI	;HAYIRSA DALLAN
	MOVLW H'01'
	MOVWF TUSMOD	;STATIK MODA GEÇTİ
	MOVLW H'00'
	MOVWF ZBIRLER
	MOVLW "0"
	CALL GONDER	;ZBIRLERE 0 YAZILDI
	MOVLW H'0C'
	CALL KOMUT	;CURSOR SAKLANDI
	GOTO ZCTRL	;Z İN YENİ DEĞERLERİ KONTROL EDİLMELİ	
;*****************************************************
TUS01	;1 BASILDI
	MOVF TUSMOD, 0	;TUSMOD AKÜDE
	XORLW H'03'	;TUSMOD XAYAR2 Mİ?
	BTFSS STATUS, 2	;EVETSE Z=1 DİR
	GOTO TUSMOD010	;HAYIRSA DALLAN
	MOVLW H'01'
	MOVWF XONLAR
	INCF TUSMOD, 1	;XAYAR3 MODUNA GEÇTİ
	MOVLW "1"
	CALL GONDER	;XONLARA 1 YAZILDI CURSOR BİR KAYDI
	INCF CURSOR, 1
	MOVLW D'250'	;500 MS
	MOVWF KEY2
	CALL WAIT	;BİRAZ MOLA..	
	GOTO RUTIN	;RUTIN İŞLERE DEVAM EDİLİR.
TUSMOD010	;ZAYAR2 DEMİ?
	MOVF TUSMOD, 0	;TUSMOD AKÜDE
	XORLW H'06'	;TUSMOD 06H MI?
	BTFSS STATUS, 2	;EVETSE Z=1 DİR
	GOTO HATALI	;HAYIRSA DALLAN
	MOVLW H'01'
	MOVWF ZONLAR
	INCF TUSMOD, 1	;ZAYAR3 MODUNA GEÇTİ
	MOVLW "1"
	CALL GONDER	;ZONLARA 1 YAZILDI CURSOR BİR KAYDI
	INCF CURSOR, 1
	MOVLW D'250'	;500 MS
	MOVWF KEY2
	CALL WAIT	;BİRAZ MOLA..
	GOTO RUTIN	;RUTIN İŞLERE DEVAM EDİLİR.	
;**************************************************
TUS02	;2 BASILDI
	MOVF TUSMOD, 0	;TUSMOD AKÜDE
	XORLW H'00'	;TUSMOD 00H MI?
	BTFSS STATUS, 2	;EVETSE Z=1 DİR
	GOTO TUSMOD020	;HAYIRSA DALLAN
	CALL BAIZ22	;BİR ADIM YUKARI +5 DERECE Z
	GOTO RUTIN
TUSMOD020	;ZAYAR2 DEMİ?
	MOVF TUSMOD, 0	;TUSMOD AKÜDE
	XORLW H'06'	;ZAYAR2 Mİ?
	BTFSS STATUS, 2	;EVETSE Z=1 DİR
	GOTO HATALI	;HAYIRSA DALLAN
	MOVLW H'02'
	MOVWF ZONLAR
	INCF TUSMOD, 1	;ZAYAR3 MODUNA GEÇTİ
	MOVLW "2"
	CALL GONDER	;ZONLARA 2 YAZILDI CURSOR BİR KAYDI
	INCF CURSOR, 1
	MOVLW D'250'	;500 MS
	MOVWF KEY2
	CALL WAIT	;BİRAZ MOLA..
	GOTO RUTIN	;RUTIN İŞLERE DEVAM EDİLİR.	
;**************************************************
TUS03	;3 BASILDI
	MOVF TUSMOD, 0	;TUSMOD AKÜDE
	XORLW H'03'	;XAYAR2 Mİ?
	BTFSS STATUS, 2	;EVETSE Z=1 DİR
	GOTO TUSMOD030	;HAYIRSA DALLAN
	MOVLW H'03'
	MOVWF XONLAR
	INCF TUSMOD, 1	;XAYAR3 MODUNA GEÇTİ
	MOVLW "3"
	CALL GONDER	;XONLARA 3 YAZILDI CURSOR BİR KAYDI
	INCF CURSOR, 1
	MOVLW D'250'	;500 MS
	MOVWF KEY2
	CALL WAIT	;BİRAZ MOLA..
	GOTO RUTIN	;RUTIN İŞLERE DEVAM EDİLİR.
TUSMOD030	;ZAYAR2 DEMİ?
	MOVF TUSMOD, 0	;TUSMOD AKÜDE
	XORLW H'06'	;ZAYAR2 Mİ?
	BTFSS STATUS, 2	;EVETSE Z=1 DİR
	GOTO HATALI	;HAYIRSA DALLAN
	MOVLW H'03'
	MOVWF ZONLAR
	INCF TUSMOD, 1	;ZAYAR3 MODUNA GEÇTİ
	MOVLW "3"
	CALL GONDER	;ZONLARA 3 YAZILDI CURSOR BİR KAYDI
	INCF CURSOR, 1
	MOVLW D'250'
	MOVWF KEY2
	CALL WAIT	;BİRAZ MOLA..
	GOTO RUTIN	;RUTIN İŞLERE DEVAM EDİLİR.
;**************************************************
TUS04	;4 BASILDI
	MOVF TUSMOD, 0	;TUSMOD AKÜDE
	XORLW H'03'	;XAYAR2 Mİ?
	BTFSS STATUS, 2	;EVETSE Z=1 DİR
	GOTO TUSMOD040	;HAYIRSA DALLAN
	MOVLW H'04'
	MOVWF XONLAR
	INCF TUSMOD, 1	;XAYAR3 MODUNA GEÇTİ
	MOVLW "4"
	CALL GONDER	;XONLARA 4 YAZILDI CURSOR BİR KAYDI
	INCF CURSOR, 1
	MOVLW D'250'
	MOVWF KEY2
	CALL WAIT	;BİRAZ MOLA..
	GOTO RUTIN	;RUTIN İŞLERE DEVAM EDİLİR.
TUSMOD040	;ZAYAR2 DEMİ?
	MOVF TUSMOD, 0	;TUSMOD AKÜDE
	XORLW H'06'	;ZAYAR2 Mİ?
	BTFSS STATUS, 2	;EVETSE Z=1 DİR
	GOTO TUSMOD041	;HAYIRSA DALLAN
	MOVLW H'04'
	MOVWF ZONLAR
	INCF TUSMOD, 1	;ZAYAR3 MODUNA GEÇTİ
	MOVLW "4"
	CALL GONDER	;ZONLARA 4 YAZILDI CURSOR BİR KAYDI
	INCF CURSOR, 1
	MOVLW D'250'
	MOVWF KEY2
	CALL WAIT	;BİRAZ MOLA..
	GOTO RUTIN	;RUTIN İŞLERE DEVAM EDİLİR.	
TUSMOD041	;ORJİN MODDA MI?
	MOVF TUSMOD, 0	;TUSMOD AKÜDE
	XORLW H'00'	;ORJİN MOD MU?
	BTFSS STATUS, 2	;EVETSE Z=1 DİR
	GOTO HATALI	;HAYIRSA DALLAN
	CALL BAGX	;BİR ADIM SOLA
	MOVLW D'150'	;300 MS ADIM ARASI GECİKMESİ
	MOVWF KEY2
	CALL WAIT
	GOTO RUTIN
;*************************************************
TUS05	;5 BASILDI
	MOVF TUSMOD, 0	;TUSMOD AKÜDE
	XORLW H'06'	;ZAYAR2 Mİ?
	BTFSS STATUS, 2	;EVETSE Z=1 DİR
	GOTO TUSMOD050	;HAYIRSA DALLAN
	MOVLW H'05'
	MOVWF ZONLAR
	INCF TUSMOD, 1	;ZAYAR3 MODUNA GEÇTİ
	MOVLW "5"
	CALL GONDER	;ZONLARA 5 YAZILDI CURSOR BİR KAYDI
	INCF CURSOR, 1
	MOVLW D'250'
	MOVWF KEY2
	CALL WAIT	;BİRAZ MOLA..
	GOTO RUTIN	;RUTIN İŞLERE DEVAM EDİLİR.
TUSMOD502	;XBIRLER YAZMACINA 5 YÜKLEYEN PROGRAMDIR
	MOVLW H'05'
	MOVWF XBIRLER
	MOVLW H'01'
	MOVWF TUSMOD	;STATIK MODDA
	MOVLW "5"
	CALL GONDER	;XBIRLERE 5 YAZILDI
	MOVLW H'0C'
	CALL KOMUT	;CURSOR SAKLANDI
	GOTO XCTRL	;X İN YENİ DEĞERLERİ KONTROL EDİLMELİ
TUSMOD051	;ZBIRLER MODUNDAMI?
	MOVF TUSMOD, 0		;TUSMOD AKÜDE
	XORLW H'07'		;ZBIRLER MODU MU?
	BTFSS STATUS, 2		;EVETSE Z=1 DİR
	GOTO HATALI	;HAYIRSA DALLAN
	MOVF ZONLAR, 0
	XORLW H'09'	;ONLAR 09H MI?
	BTFSC STATUS, 2	
	GOTO HATALI
	MOVLW H'05'
	MOVWF ZBIRLER
	MOVLW H'01'
	MOVWF TUSMOD	;STATIK MODDA
	MOVLW "5"
	CALL GONDER	;ZBIRLERE 5 YAZILDI 
	MOVLW H'0C'
	CALL KOMUT	;CURSOR SAKLANDI..
	GOTO ZCTRL	;Z İN YENİ DEĞERLERİ İŞLENMELİ..
;**********************************************
TUS06	;6 BASILDI
	MOVF TUSMOD, 0	;TUSMOD AKÜDE
	XORLW H'03'	;XAYAR2 Mİ?
	BTFSS STATUS, 2	;EVETSE Z=1 DİR
	GOTO TUSMOD060	;HAYIRSA DALLAN
	MOVLW H'06'
	MOVWF XONLAR
	INCF TUSMOD, 1	;XAYAR3 MODUNA GEÇTİ
	MOVLW "6"
	CALL GONDER	;XONLARA 6 YAZILDI CURSOR BİR KAYDI
	INCF CURSOR, 1
	MOVLW D'250'
	MOVWF KEY2
	CALL WAIT	;BİRAZ MOLA..
	GOTO RUTIN	;RUTIN İŞLERE DEVAM EDİLİR.
TUSMOD060	;ZAYAR2 DEMİ?
	MOVF TUSMOD, 0	;TUSMOD AKÜDE
	XORLW H'06'	;ZAYAR2 Mİ?
	BTFSS STATUS, 2	;EVETSE Z=1 DİR
	GOTO TUSMOD061	;HAYIRSA DALLAN
	MOVLW H'06'
	MOVWF ZONLAR
	INCF TUSMOD, 1	;ZAYAR3 MODUNA GEÇTİ
	MOVLW "6"
	CALL GONDER	;ZONLARA 6 YAZILDI CURSOR BİR KAYDI
	INCF CURSOR, 1
	MOVLW D'250'
	MOVWF KEY2
	CALL WAIT	;BİRAZ MOLA..
	GOTO RUTIN	;RUTIN İŞLERE DEVAM EDİLİR.	
TUSMOD061	;ORJİN MODDA MI?
	MOVF TUSMOD, 0	;TUSMOD AKÜDE
	XORLW H'00'	;TUSMOD 00H MI?
	BTFSS STATUS, 2	;EVETSE Z=1 DİR
	GOTO HATALI	;HAYIRSA DALLAN
	CALL BAIX	;BİR ADIM SAĞA
	MOVLW D'150'	;300 MS ADIM ARASI GECİKME
	MOVWF KEY2
	CALL WAIT
	GOTO RUTIN
;*******************************************************
TUS07	;7 BASILDI
	MOVF TUSMOD, 0
	XORLW H'06'	;ZAYAR2 Mİ?
	BTFSS STATUS, 2
	GOTO HATALI
	MOVLW H'07'
	MOVWF ZONLAR
	INCF TUSMOD, 1
	MOVLW "7"
	CALL GONDER	;ZONLARA 7 YAZILDI CURSOR BİR KAYDI
	INCF CURSOR, 1
	MOVLW D'250'
	MOVWF KEY2
	CALL WAIT	;BİRAZ MOLA..
	GOTO RUTIN	;RUTIN İŞLERE DEVAM EDİLİR.	
;**************************************************
TUS08	;8 BASILDI
	MOVF TUSMOD, 0
	XORLW H'06'
	BTFSS STATUS, 2
	GOTO TUSMOD080
	MOVLW H'08'
	MOVWF ZONLAR
	INCF TUSMOD, 1
	MOVLW "8"
	CALL GONDER	;ZONLARA 8 YAZILDI CURSOR BİR KAYDI
	INCF CURSOR, 1
	MOVLW D'250'
	MOVWF KEY2
	CALL WAIT	;BİRAZ MOLA..
	GOTO RUTIN	;RUTIN İŞLERE DEVAM EDİLİR.	
TUSMOD080	;ORJİN MODDA MI?
	MOVF TUSMOD, 0	;TUSMOD AKÜDE
	XORLW H'00'	;ORJİN MODDA MI?
	BTFSS STATUS, 2	;EVETSE Z=1 DİR
	GOTO HATALI	;HAYIRSA DALLAN
	CALL BAGZ22	;22 ADIM AŞAĞI YANİ -5 DERECE Z
	GOTO RUTIN
;************************************************
TUS09	;9 BASILDI
	MOVF TUSMOD, 0
	XORLW H'06'
	BTFSS STATUS, 2
	GOTO HATALI
	MOVLW H'09'
	MOVWF ZONLAR
	INCF TUSMOD, 1
	MOVLW "9"
	CALL GONDER	;ZONLARA 9 YAZILDI CURSOR BİR KAYDI
	INCF CURSOR, 1
	MOVLW D'250'
	MOVWF KEY2
	CALL WAIT	;BİRAZ MOLA..
	GOTO RUTIN	;RUTIN İŞLERE DEVAM EDİLİR.	
;****************************************************
TUS10	;* BASILDI
	MOVF TUSMOD, 0	;TUSMOD AKÜDE
	XORLW H'01'	;STATIK MODDA İSE
	BTFSS STATUS, 2	;TUSMOD 01H İSE ATLA
	GOTO HATALI	;YANLIŞ TUŞA BASILDI..
	MOVLW H'02'	;XAYAR1 MODUNA GEÇTİ..
	MOVWF TUSMOD	;GEÇİŞ TAMAM... ;BURADAN SONRA +,- YANIP SÖNER VE AU BEKLENİR..
	MOVLW H'CA'
	MOVWF CURSOR
	CALL KOMUT
	MOVLW H'0F'	;KURSÖR AÇIK, DISPLAY ON, BLINK ON
	CALL KOMUT
	MOVLW D'250'
	MOVWF KEY2
	CALL WAIT	;BİRAZ MOLA..
	GOTO RUTIN	;RUTIN İŞLERE DEVAM EDİLİR.
;*************************************************
TUS11	;# BASILDI
	MOVF TUSMOD, 0	;TUSMOD AKÜDE
	XORLW H'01'	;STATIK MODDA İSE
	BTFSS STATUS, 2	;TUSMOD 01H İSE ATLA
	GOTO HATALI	;YANLIŞ TUŞA BASILDI..
	MOVLW H'05'	;ZAYAR1 MODUNA GEÇTİ..
	MOVWF TUSMOD	;GEÇİŞ TAMAM... ;BURADAN SONRA +,- YANIP SÖNER VE AU BEKLENİR..
	MOVLW H'CF'
	MOVWF CURSOR
	CALL KOMUT
	MOVLW H'0F'	;KURSÖR AÇIK, DISPLAY ON, BLINK ON
	CALL KOMUT
	MOVLW D'250'
	MOVWF KEY2
	CALL WAIT	;BİRAZ MOLA..
	GOTO RUTIN	;RUTIN İŞLERE DEVAM EDİLİR
;***************************************************
TUS12	;AU BASILDI
	MOVF TUSMOD, 0	;TUSMOD AKÜDE
	XORLW H'02'	;XAYAR1 MODDA İSE
	BTFSS STATUS, 2	;TUSMOD 01H İSE ATLA
	GOTO TUSMOD120	;ZAYAR1 Mİ Bİ DE ONA BAK
	COMF XACISI, 1	;X AÇISI TERSLENDİ
	BTFSS XACISI, 0 
	GOTO TUS1200
	MOVLW "-"
	CALL GONDER
	MOVLW H'CA'
	MOVWF CURSOR
	CALL KOMUT
	GOTO TUS1201
TUS1200
	MOVLW "+"
	CALL GONDER
	MOVLW H'CA'
	MOVWF CURSOR
	CALL KOMUT
TUS1201	
	MOVLW D'250'
	MOVWF KEY2
	CALL WAIT	;BİRAZ MOLA..
	GOTO RUTIN	;RUTIN İŞLERE DEVAM EDİLİR.
TUSMOD120	;ZAYAR1 KONTROLÜ
	MOVF TUSMOD, 0	;TUSMOD AKÜDE
	XORLW H'05'	;ZAYAR1 MODDA İSE
	BTFSS STATUS, 2	;TUSMOD 05H İSE ATLA
	GOTO HATALI	;HATA MESAJI
	COMF ZACISI, 1	;Z ACISI TERSLENDİ
	BTFSS ZACISI, 0 
	GOTO TUS1202
	MOVLW "-"
	CALL GONDER
	MOVLW H'CF'
	MOVWF CURSOR
	CALL KOMUT
	GOTO TUS1203	
TUS1202
	MOVLW "+"
	CALL GONDER
	MOVLW H'CF'
	MOVWF CURSOR
	CALL KOMUT
	TUS1203	
	MOVLW D'250'
	MOVWF KEY2
	CALL WAIT	;BİRAZ MOLA..
	GOTO RUTIN	;RUTIN İŞLERE DEVAM EDİLİR.
;********************************************************
TUS13	;H/R BASILDI
	MOVF TUSMOD, 0		;TUSMOD AKÜDE
	XORLW H'01'		;STATIK MODDA İSE
	BTFSS STATUS, 2		;TUSMOD 01H İSE ATLA
	GOTO HATALI		;YANLIŞ TUŞA BASILDI..
	MOVLW H'00'		;ORGIN MODUNA GEÇTİ..
	MOVWF TUSMOD		;GEÇİŞ TAMAM...
	CALL LCD_ORJIN1	;EKRANDA ORJIN GÖRÜLDÜ
	MOVLW D'250'
	MOVWF KEY2
	CALL WAIT	;BİRAZ MOLA..
	GOTO RUTIN	;RUTIN İŞLERE DEVAM EDİLİR
;***************************************************
TUS14	;RD BASILDI
	GOTO HATALI
;***************************************************
TUS15	;ENTER BASILDI
	MOVF TUSMOD, 0
	XORLW H'00'
	BTFSS STATUS, 2
	GOTO TUSMOD150
	CLRF XACISI
	CLRF ZACISI
	CLRF ZONLAR
	CLRF ZBIRLER
	CLRF XBIRLER
	CLRF XONLAR
	MOVLW D'18'
	MOVWF ZKONUM_E
	MOVLW D'04'
	MOVWF XKONUM_E
	INCF TUSMOD, 1		;STATIK MODA GEÇİŞ..
	CALL LCD_STATIK1
	MOVLW D'250'
	MOVWF KEY2
	CALL WAIT	;BİRAZ MOLA..
	GOTO RUTIN	;RUTIN İŞLERE DEVAM EDİLİR.	
TUSMOD150	;XAYAR1 +,- MODUNDA MI
	MOVF TUSMOD, 0	;TUSMOD AKÜDE
	XORLW H'02'	;XAYAR1 MODDA İSE
	BTFSS STATUS, 2	;TUSMOD 01H İSE ATLA
	GOTO TUSMOD151
	INCF TUSMOD, 1
	MOVLW H'CB'	;XONLARIN ADRESİ
	MOVWF CURSOR
	CALL KOMUT
	MOVLW H'0F'	;KURSÖR AÇIK, DISPLAY ON, BLINK ON
	CALL KOMUT
	MOVLW D'250'
	MOVWF KEY2
	CALL WAIT
	GOTO RUTIN
TUSMOD151
	MOVF TUSMOD, 0	;TUSMOD AKÜDE
	XORLW H'05'	;ZAYAR1 MODDA İSE
	BTFSS STATUS, 2	;TUSMOD 01H İSE ATLA
	GOTO HATALI
	INCF TUSMOD, 1
	MOVLW H'D0'	;ZONLARIN ADRESİ
	MOVWF CURSOR
	CALL KOMUT
	MOVLW H'0F'	;KURSÖR AÇIK, DISPLAY ON, BLINK ON
	CALL KOMUT
	MOVLW D'250'
	MOVWF KEY2
	CALL WAIT
	GOTO RUTIN
;*************************************************
TUS16	;TUŞA BASILMADI...
	GOTO RUTIN
;************************************************
WAIT		
	MOVLW D'250'		;KEY2*1
	MOVWF KEY1	;KEY2*1
W12	
	NOP					; \
	NOP					;   \
	NOP					;     \  KEY2*2 MS 
	NOP					;     /
	NOP					;    /    TOPLAM=5*KEY2+2+2000*KEY2=
	DECFSZ KEY1, 1				;  /      =2005*KEY2+2
	GOTO W12		;8*250*KEY2	;/
	DECFSZ KEY2, 1	;KEY2*1
	GOTO WAIT		;KEY2*2
	RETURN			;2

;************************************************
	
TMK	;TUS MATRİS KONTROL MODÜLER PROGRAMI
	MOVLW B'01111111'
	MOVWF PORTB		;SATIR1 1 YAPILDI
	BTFSS PORTB, 4		;SÜTUN1 "HİGH" MI?
	RETLW D'1'
	BTFSS PORTB, 2		;SÜTUN2 "HİGH" MI?
	RETLW D'2'
	BTFSS PORTB, 1		;SÜTUN3 "HİGH" MI?
	RETLW D'3'
	BTFSS PORTB, 0		;SÜTUN4 "HİGH" MI?
	RETLW D'12'
	MOVLW B'10111111'
	MOVWF PORTB		;SATIR2 1 YAPILDI
	BTFSS PORTB, 4		;SÜTUN1 "HİGH" MI?
	RETLW D'4'
	BTFSS PORTB, 2		;SÜTUN2 "HİGH" MI?
	RETLW D'5'
	BTFSS PORTB, 1		;SÜTUN3 "HİGH" MI?
	RETLW D'6'
	BTFSS PORTB, 0		;SÜTUN4 "HİGH" MI?
	RETLW D'13'
	MOVLW B'11011111'
	MOVWF PORTB		;SATIR3 1 YAPILDI
	BTFSS PORTB, 4		;SÜTUN1 "HİGH" MI?
	RETLW D'7'
	BTFSS PORTB, 2		;SÜTUN2 "HİGH" MI?
	RETLW D'8'
	BTFSS PORTB, 1		;SÜTUN3 "HİGH" MI?
	RETLW D'9'
	BTFSS PORTB, 0		;SÜTUN4 "HİGH" MI?
	RETLW D'14'
	MOVLW B'11110111'
	MOVWF PORTB		;SATIR4 1 YAPILDI
	BTFSS PORTB, 4		;SÜTUN1 "HİGH" MI?
	RETLW D'10'
	BTFSS PORTB, 2		;SÜTUN2 "HİGH" MI?
	RETLW D'0'
	BTFSS PORTB, 1		;SÜTUN3 "HİGH" MI?
	RETLW D'11'
	BTFSS PORTB, 0		;SÜTUN4 "HİGH" MI?
	RETLW D'15'
	RETLW D'16'	;TUSA BASILMADIYSA16 GONDERİR...
;**********************************************
KOMUT	 ;LCD KOMUT SİNYALİZASYONU
	BCF RS
	BCF RW
	MOVWF PORTD	;DATA YOLDA
	BSF EN
	CALL IS_BUSY
	BCF EN
	RETURN
GONDER	 ;LCD VERİ SİNYALİZASYONU	
	MOVWF PORTD	;DATA YOLDA..
	BCF EN
	BSF RS
	BCF RW
	BSF EN
	CALL IS_BUSY
	BCF EN
	RETURN
IS_BUSY	;LCD NİN MEŞGUL OLUP OLMADIĞINI ARAŞTIRIR..
	BCF EN
	BCF RS
	BSF RW
	MOVLW H'FF'
	BSF STATUS, RP0
	MOVWF TRISD
	BCF STATUS, RP0
	BSF EN
IS_BUSY00	;MEŞGULLÜK BİTENE KADAR
	MOVF PORTD, 1
	BTFSC PORTD, 7
	GOTO IS_BUSY00
	BCF EN
	MOVLW H'00'
	BSF STATUS, RP0
	MOVWF TRISD
	BCF STATUS, RP0
	RETURN
;******************************************	
LCD_START	;LCD Yİ RESETLEMEK İÇİN	
	MOVLW D'20'		;40 MİLİSANİYEDEEN FAZLA
	MOVWF KEY2
	CALL WAIT
	BSF EN
	MOVLW H'30'
	MOVWF PORTD
	BCF EN
	MOVLW D'20'		;40 MİLİ SANİYEDEN FAZLA
	MOVWF KEY2
	CALL WAIT
	BSF EN
	MOVLW H'30'
	MOVWF PORTD
	BCF EN
	MOVLW D'5'		;10 MİLİ SANİYEDEN FAZLA
	MOVWF KEY2
	CALL WAIT
	BSF EN
	MOVLW H'30'
	MOVWF PORTD
	BCF EN
	MOVLW D'5'		;10 MİLİ SANİYEDEN FAZLA
	MOVWF KEY2
	CALL WAIT
	MOVLW H'38'		;8 BİT DATA YOLU VE 7*5 FONT
	CALL KOMUT
	MOVLW H'0C'		;KURSÖR GÖRÜNMEZ, DİSPLAY AÇIK, KARARTMA YOK..
	CALL KOMUT
	MOVLW H'01'		;DDRAM BAŞTAN SONA BOŞLUK KARAKTERİ İLE DOLAR..
	CALL KOMUT
	MOVLW H'06'		;VERİLER ARTARAK DİZİLİR DDRAM'A..
	CALL KOMUT
	MOVLW H'84'		;1. SATIR, 5. SÜTUNDAN İTİBAREN..
	CALL KOMUT
	CLRF GIDEN
GIDEMEYEN1	;TABLOYU SIRAYLA BASMAK İÇİN..
	MOVF GIDEN, 0
	CALL TABLO1
	IORLW H'00'
	BTFSC STATUS, 2
	GOTO MESAJ1_END
	CALL GONDER
	MOVLW D'50'
	MOVWF KEY2	;100 MİLİ SANİYE BEKLE
	CALL WAIT
	INCF GIDEN, 1
	GOTO GIDEMEYEN1
MESAJ1_END
	CLRF GIDEN
	MOVLW H'06'
	CALL KOMUT
	MOVLW H'C5'	;2. SATIR, 6. SÜTUNDAN İTİBAREN..
	CALL KOMUT
GIDEMEYEN2	;TABLOYU SIRAYLA BASMAK İÇİN..
	MOVF GIDEN, 0
	CALL TABLO2
	IORLW H'00'
	BTFSC STATUS, 2
	GOTO MESAJ2_END
	CALL GONDER
	MOVLW D'50'
	MOVWF KEY2	;100 MİLİ SANİYE BEKLE
	CALL WAIT
	INCF GIDEN, 1
	GOTO GIDEMEYEN2
MESAJ2_END	
	MOVLW D'250'
	MOVWF KEY2	;500 MİLİ SANİYE BEKLE
	CALL WAIT
	MOVLW H'01'
	CALL KOMUT
	CLRF GIDEN
	MOVLW H'83'		;1. SATIR, 4. SÜTUNDAN İTİBAREN..
	CALL KOMUT
GIDEMEYEN3	;TABLOYU SIRAYLA BASMAK İÇİN..
	MOVF GIDEN, 0
	CALL TABLO3
	IORLW H'00'
	BTFSC STATUS, 2
	GOTO MESAJ3_END
	CALL GONDER
	INCF GIDEN, 1
	GOTO GIDEMEYEN3
MESAJ3_END
	CLRF GIDEN	
	MOVLW H'C6'		;2. SATIR, 7. SÜTUNDAN İTİBAREN..
	CALL KOMUT
GIDEMEYEN4	;TABLOYU SIRAYLA BASMAK İÇİN..
	MOVF GIDEN, 0
	CALL TABLO4
	IORLW H'00'
	BTFSC STATUS, 2
	GOTO MESAJ4_END
	CALL GONDER
	INCF GIDEN, 1
	GOTO GIDEMEYEN4
MESAJ4_END
	CLRF GIDEN
	MOVLW D'250'
	MOVWF KEY2
	CALL WAIT
	MOVLW D'250'
	MOVWF KEY2	;TOPLAM 1 SANİYE BEKLE
	CALL WAIT
	GOTO LCD_ORJIN1	
;***********************************************	
LCD_ORJIN1	;ORJİN MODDA ODAKLANAN LCD
	MOVLW H'01'		;LCD TEMİZLENDİ
	CALL KOMUT
	CLRF GIDEN	
	MOVLW H'80'		;1. SATIR, 1. SÜTUNDAN İTİBAREN..
	CALL KOMUT
GIDEMEYEN5	;TABLOYU SIRAYLA BASMAK İÇİN..
	MOVF GIDEN, 0
	CALL TABLO5
	IORLW H'00'
	BTFSC STATUS, 2
	GOTO LCD_ORJIN2	
	CALL GONDER
	INCF GIDEN, 1
	GOTO GIDEMEYEN5
LCD_ORJIN2	;BU EKRANA ORJİN Z AYARINI YAZAR
	CLRF GIDEN	
	MOVLW H'C0'		;2. SATIR, 1. SÜTUNDAN İTİBAREN..
	CALL KOMUT
GIDEMEYEN6	;TABLOYU SIRAYLA BASMAK İÇİN..
	MOVF GIDEN, 0
	CALL TABLO6
	IORLW H'00'
	BTFSC STATUS, 2
	RETURN			;LCD_START DAN DÖNÜŞ START ANA PROGRAMA DÖNER.
	CALL GONDER
	INCF GIDEN, 1
	GOTO GIDEMEYEN6
;*********************************************************
LCD_STATIK1	;STATIK DURUM YAZICI
	MOVLW H'01'		;LCD TEMİZLENDİ
	CALL KOMUT
	CLRF GIDEN	
	MOVLW H'80'		;1. SATIR, 1. SÜTUNDAN İTİBAREN..
	CALL KOMUT
GIDEMEYEN7	;TABLOYU SIRAYLA BASMAK İÇİN..
	MOVF GIDEN, 0
	CALL TABLO7
	IORLW H'00'
	BTFSC STATUS, 2
	GOTO LCD_STATIK2	;GEREKLİ ORJİN VS.
	CALL GONDER
	INCF GIDEN, 1
	GOTO GIDEMEYEN7
LCD_STATIK2	;BU EKRANA STATIK KONUMU YAZAR
	CLRF GIDEN	
	MOVLW H'C0'		;2. SATIR, 1. SÜTUNDAN İTİBAREN..
	CALL KOMUT
GIDEMEYEN8	;TABLOYU SIRAYLA BASMAK İÇİN..
	MOVF GIDEN, 0
	CALL TABLO8
	IORLW H'00'
	BTFSC STATUS, 2
	RETURN
	CALL GONDER
	INCF GIDEN, 1
	GOTO GIDEMEYEN8
;*******************************************************		
HATA	;LCD DEN HATA MESAJI BİR SÜRE GÖRÜNÜR
	CLRF GIDEN	
	MOVLW H'80'		;1. SATIR, 1. SÜTUNDAN İTİBAREN..
	CALL KOMUT
GIDEMEYENH1	;TABLOYU SIRAYLA BASMAK İÇİN..
	MOVF GIDEN, 0
	CALL TABLO9
	IORLW H'00'
	BTFSC STATUS, 2
	GOTO HATA_WAIT	;HATAYI YAPAN GÖRENE DEK BEKLE
	CALL GONDER
	INCF GIDEN, 1
	GOTO GIDEMEYENH1
HATA_WAIT
	MOVLW H'0C'
	CALL KOMUT	;CURSOR SAKLANDI
	MOVLW D'250'
	MOVWF KEY2	;500 MİLİ SANİYE BEKLE
	CALL WAIT
	MOVF TUSMOD, 0
	XORLW H'00'
	BTFSS STATUS, 2
	GOTO HATA00
	CLRF GIDEN	
	MOVLW H'80'		;1. SATIR, 1. SÜTUNDAN İTİBAREN..
	CALL KOMUT
GIDEMEYENH5	;TABLOYU SIRAYLA BASMAK İÇİN..
	MOVF GIDEN, 0
	CALL TABLO5
	IORLW H'00'
	BTFSC STATUS, 2
	RETURN			;HATA MESAJI İŞİ BİTTİ
	CALL GONDER
	INCF GIDEN, 1
	GOTO GIDEMEYENH5
HATA00		;ORJİN MODDA DEĞİLSE..
	CLRF GIDEN	
	MOVLW H'80'		;1. SATIR, 1. SÜTUNDAN İTİBAREN..
	CALL KOMUT
GIDEMEYENH7	;TABLOYU SIRAYLA BASMAK İÇİN..
	MOVF GIDEN, 0
	CALL TABLO7
	IORLW H'00'
	BTFSC STATUS, 2
	GOTO HATACURSOR	
	CALL GONDER
	INCF GIDEN, 1
	GOTO GIDEMEYENH7
HATACURSOR
	MOVF CURSOR, 0
	CALL KOMUT
	RETURN	
	
;***************************************************
BAGZ	;BİR ADIM GERİ Z
	BTFSS PORTC, 3	;Z=1000 MI?
	GOTO ZG11	;HAYIR
	BCF PORTC, 3	;EVET
	BSF PORTC, 0
	RETURN		;Z=0001
ZG11;STEPPER
	BTFSS PORTC, 2	;Z=0100 Mİ?
	GOTO ZG22	;HAYIR
	BCF PORTC, 2	;EVET
	BSF PORTC, 3	
	RETURN		;Z=1000
ZG22;STEPPER
	BTFSS PORTC, 1	;Z=0010 Mİ?
	GOTO ZG33	;HAYIR
	BCF PORTC, 1	;EVET
	BSF PORTC, 2
	RETURN		;Z=0100
ZG33;STEPPER
	BCF PORTC, 0	;Z=0001 DEMEKTİR
	BSF PORTC, 1
	RETURN		;Z=0010
;*****************************************************
BAIZ	;BİR ADIM İLERİ Z
	BTFSS PORTC, 3	;Z=1000 MI?
	GOTO ZI11	;HAYIR
	BCF PORTC, 3	;EVET
	BSF PORTC, 2
	RETURN		;Z=0100
ZI11;STEPPER
	BTFSS PORTC, 2	;Z=0100 Mİ?
	GOTO ZI22	;HAYIR
	BCF PORTC, 2	;EVET
	BSF PORTC, 1	
	RETURN		;Z=0010
ZI22;STEPPER
	BTFSS PORTC, 1	;Z=0010 Mİ?
	GOTO ZI33	;HAYIR
	BCF PORTC, 1	;EVET
	BSF PORTC, 0
	RETURN		;Z=0001
ZI33;STEPPER
	BCF PORTC, 0	;Z=0001 DEMEKTİR
	BSF PORTC, 3
	RETURN		;Z=1000
;***********************************************	
BAGX	;BİR ADIM GERİ X
	BTFSS PORTC, 7
	GOTO XG56
	BTFSS PORTC, 4	;X=1001 Mİ?
	GOTO XG23	;HAYIR
	BCF PORTC, 7	;EVET
	BSF PORTC, 6
	RETURN		;X=0101
XG23	;STEPPER KONUMU İÇİN
	BCF PORTC, 5
	BSF PORTC, 4
	RETURN		;X=1001
XG56	;STEPPER KONUMU
	BTFSS PORTC, 5	;X=0110 MU?
	GOTO XG89	;HAYIR
	BCF PORTC, 6	;EVET
	BSF PORTC, 7
	RETURN 		;X=1010
XG89	;STEPPER KONUMU	
	BCF PORTC, 4
	BSF PORTC, 5
	RETURN		;X=0110
;************************************************
BAIX	;BİR ADIM İLERİ X
	BTFSS PORTC, 7
	GOTO XI56
	BTFSS PORTC, 4	;X=1001 Mİ?
	GOTO XI23	;HAYIR
	BCF PORTC, 4	;EVET
	BSF PORTC, 5
	RETURN		;X=1010
XI23	;STEPPER KONUMU İÇİN
	BCF PORTC, 7
	BSF PORTC, 6
	RETURN		;X=0110
XI56	;STEPPER KONUMU
	BTFSS PORTC, 5	;X=0110 MU?
	GOTO XI89	;HAYIR
	BCF PORTC, 5	;EVET
	BSF PORTC, 4
	RETURN 		;X=0101
XI89	;STEPPER KONUMU	
	BCF PORTC, 6
	BSF PORTC, 7
	RETURN		;X=1001
;*****************************************************
BAIZ22	;BAIZ PROGRAMINI 22 DEFA USULUNE UYGUN ÇAĞIRIR..
	MOVLW D'23'
	MOVWF ZSAYACI
BAIZ2200
	DECFSZ ZSAYACI, 1
	GOTO ADIMZI
	RETURN
ADIMZI
	CALL BAIZ
	MOVLW D'25'
	MOVWF KEY2	;50 MS ADIM ARASI BEKLEME
	CALL WAIT
	GOTO BAIZ2200
;********************************************************	
BAGZ22	;BAGZ PROGRAMINI 22 DEFA USULUNE UYGUN ÇAĞIRIR..
	MOVLW D'23'
	MOVWF ZSAYACI
BAGZ2200
	DECFSZ ZSAYACI, 1
	GOTO ADIMZG
	RETURN
ADIMZG
	CALL BAGZ
	MOVLW D'25'
	MOVWF KEY2	;50 MS ADIM ARASI BEKLEME
	CALL WAIT
	GOTO BAGZ2200
;***************************************************
ZCTRL	;Z KONUM KONTROLÜ
	BTFSS ZACISI, 0
	GOTO POZITIFZ
	MOVF ZONLAR, 0		;ZONLAR AKÜDE
	IORWF ZBIRLER, 0 		;Z ACISI +00 MI?
	BTFSC STATUS, 2		;HAYIRSA DEVAM
	GOTO NEGNOTR		;EVETSE GIT
	MOVF ZONLAR, 0		;EVET.. ZONLAR 0 MI
	IORLW H'00'
	BTFSC STATUS, 2
	GOTO NEGSIFIR		;0 SA NEGSIFIRA GIT
	MOVLW D'18'		;HAYIR.. DEVAM.
	MOVWF ZKONUM_Y	;YENİ KONUM ORJİN
NEGATIFZTEKRAR
	MOVLW H'02'		;2 AZALACAK
	SUBWF ZKONUM_Y, 1	;KONUM 2 ZALDI
	DECFSZ ZONLAR, 1		;0 OLDUMU
	GOTO NEGATIFZTEKRAR	;HAYIR.. İKİ DAHA AZALT
	MOVF ZBIRLER, 0		
	IORLW H'00'		
	BTFSC STATUS, 2		;ZBIRLER 0 MI
	GOTO ZCTRL_AYAR	;EVETSE NEGSIFIRB YE GIT
	DECF ZKONUM_Y, 1		;1 DAHA AZALDI. ÇÜNKÜ BIRLER BAS. 5
	GOTO ZCTRL_AYAR	
NEGSIFIR		;ZONLAR SIFIRSA GELİR	
	MOVLW D'17'
	MOVWF ZKONUM_Y	;-05 YAPILDI ÇÜNKÜ SON SEÇENEKTİ
	GOTO ZCTRL_AYAR
NEGNOTR	
	MOVLW D'18'
	MOVWF ZKONUM_Y
	GOTO ZCTRL_AYAR
POZITIFZ
	MOVF ZONLAR, 0		;ZONLAR AKÜDE
	IORWF ZBIRLER, 0 		;Z ACISI +00 MI?
	BTFSC STATUS, 2		;HAYIRSA DEVAM
	GOTO POZNOTR		;EVETSE GIT
	MOVF ZONLAR, 0		;EVET.. ZONLAR 0 MI
	IORLW H'00'
	BTFSC STATUS, 2
	GOTO POZSIFIR		;0 SA POZSIFIRA GIT
	MOVLW D'18'
	MOVWF ZKONUM_Y
POZITIFZTEKRAR
	MOVLW H'02'		;2 ARTACAK
	ADDWF ZKONUM_Y, 1	;KONUM 2 ARTTI
	DECFSZ ZONLAR, 1		;0 OLDUMU
	GOTO POZITIFZTEKRAR	;HAYIR.. İKİ DAHA ARTTIR
	MOVF ZBIRLER, 0		
	IORLW H'00'		
	BTFSC STATUS, 2		;ZBIRLER 0 MI
	GOTO ZCTRL_AYAR	;EVETSE POZSIFIRB YE GIT
	INCF ZKONUM_Y, 1		;1 DAHA ARTTI. ÇÜNKÜ BIRLER BAS. 5
	GOTO ZCTRL_AYAR	
POZSIFIR		;ZONLAR SIFIRSA GELİR	
	MOVLW D'19'
	MOVWF ZKONUM_Y	;+05 YAPILDI ÇÜNKÜ SON SEÇENEKTİ
	GOTO ZCTRL_AYAR
POZNOTR	
	MOVLW D'18'
	MOVWF ZKONUM_Y
	GOTO ZCTRL_AYAR
;*************************************
ZCTRL_AYAR	
	MOVF ZKONUM_E, 0
	SUBLW D'18'		;18 DEN BÜYÜK MÜ
	BTFSC STATUS, 0
	GOTO KUCUKZ
	GOTO BUYUKZ
KUCUKZ
	BTFSC STATUS, 2		;18 E EŞİT Mİ	
	GOTO ESITZ 
;KUCUKTUR
	MOVF ZKONUM_E, 0
	SUBLW D'18'
	MOVWF ZADIM
	CALL ZCTRL_BAIZ
	GOTO ZCTRL_AYAR2
BUYUKZ
	MOVLW D'18'
	SUBWF ZKONUM_E, 0
	MOVWF ZADIM
	CALL ZCTRL_BAGZ
	GOTO ZCTRL_AYAR2

ESITZ
	GOTO ZCTRL_AYAR2
;*******************************************
ZCTRL_BAIZ
	
	CALL BAIZ22
	DECFSZ ZADIM, 1
	GOTO ZCTRL_BAIZ
	RETURN
ZCTRL_BAGZ
	CALL BAGZ22
	DECFSZ ZADIM, 1
	GOTO ZCTRL_BAGZ
	RETURN
;*****************************************
ZCTRL_AYAR2
	MOVF ZKONUM_Y, 0
	SUBLW D'18'		;18 DEN BÜYÜK MÜ
	BTFSC STATUS, 0
	GOTO KUCUKZ2
	GOTO BUYUKZ2
KUCUKZ2
	BTFSC STATUS, 2		;18 E EŞİT Mİ	
	GOTO ESITZ2
;KUCUKTUR
	MOVF ZKONUM_Y, 0
	SUBLW D'18'
	MOVWF ZADIM
	CALL ZCTRL_BAGZ
	GOTO ZCTRL_AYAR22	
BUYUKZ2
	MOVLW D'18'
	SUBWF ZKONUM_Y, 0
	MOVWF ZADIM
	CALL ZCTRL_BAIZ
	GOTO ZCTRL_AYAR22
ESITZ2
	GOTO ZCTRL_AYAR22	
ZCTRL_AYAR22
	MOVF ZKONUM_Y, 0
	MOVWF ZKONUM_E
	GOTO RUTIN	
;**************************************************
XCTRL	;X KONUM KONTROLÜ
	BTFSS XACISI, 0
	GOTO POZITIFX
	MOVF XONLAR, 0
	XORLW H'06'
	BTFSS STATUS, 2
	GOTO NEGATIFX45MI
	MOVLW H'00'
	MOVWF XKONUM_Y
	GOTO XCTRL_AYAR
NEGATIFX45MI
	MOVF XONLAR, 0
	XORLW H'04'	
	BTFSS STATUS, 2
	GOTO NEGATIFX30MU
	MOVLW H'01'
	MOVWF XKONUM_Y
	GOTO XCTRL_AYAR
NEGATIFX30MU
	MOVF XONLAR, 0
	XORLW H'03'	
	BTFSS STATUS, 2
	GOTO NEGATIFX15MI
	MOVLW H'02'
	MOVWF XKONUM_Y
	GOTO XCTRL_AYAR	
NEGATIFX15MI	
	MOVF XONLAR, 0
	XORLW H'01'	
	BTFSS STATUS, 2
	GOTO NEGATIFX00DIR
	MOVLW H'03'
	MOVWF XKONUM_Y
	GOTO XCTRL_AYAR
NEGATIFX00DIR	
	MOVLW H'04'
	MOVWF XKONUM_Y
	GOTO XCTRL_AYAR
POZITIFX
	MOVF XONLAR, 0
	XORLW H'06'
	BTFSS STATUS, 2
	GOTO POZITIFX45MI
	MOVLW H'08'
	MOVWF XKONUM_Y
	GOTO XCTRL_AYAR
POZITIFX45MI
	MOVF XONLAR, 0
	XORLW H'04'	
	BTFSS STATUS, 2
	GOTO POZITIFX30MU
	MOVLW H'07'
	MOVWF XKONUM_Y
	GOTO XCTRL_AYAR
POZITIFX30MU
	MOVF XONLAR, 0
	XORLW H'03'	
	BTFSS STATUS, 2
	GOTO POZITIFX15MI
	MOVLW H'06'
	MOVWF XKONUM_Y
	GOTO XCTRL_AYAR	
POZITIFX15MI	
	MOVF XONLAR, 0
	XORLW H'01'	
	BTFSS STATUS, 2
	GOTO POZITIFX00DIR
	MOVLW H'05'
	MOVWF XKONUM_Y
	GOTO XCTRL_AYAR
POZITIFX00DIR	
	MOVLW H'04'
	MOVWF XKONUM_Y
	GOTO XCTRL_AYAR
;**********************************
XCTRL_AYAR
	MOVF XKONUM_E, 0
	SUBLW H'04'		;4 DEN BÜYÜK MÜ
	BTFSC STATUS, 0
	GOTO KUCUKX
	GOTO BUYUKX
KUCUKX
	BTFSC STATUS, 2		;4 E EŞİT Mİ	
	GOTO ESITX 
;KUCUKTUR
	MOVF XKONUM_E, 0
	SUBLW H'04'
	MOVWF XADIM
	CALL XCTRL_BAIX
	GOTO XCTRL_AYAR2
BUYUKX
	MOVLW H'04'
	SUBWF XKONUM_E, 0
	MOVWF XADIM
	CALL XCTRL_BAGX
	GOTO XCTRL_AYAR2
ESITX
	GOTO XCTRL_AYAR2
;*******************************************
XCTRL_BAIX
	
	CALL BAIX
	MOVLW D'150'	;300 MİLİSANİYE BEKLE..
	MOVWF KEY2
	CALL WAIT
	DECFSZ XADIM, 1
	GOTO XCTRL_BAIX
	RETURN
;****************************************
XCTRL_BAGX	
	CALL BAGX
	MOVLW D'150'
	MOVWF KEY2
	CALL WAIT
	DECFSZ XADIM, 1
	GOTO XCTRL_BAGX
	RETURN
;*****************************************
XCTRL_AYAR2
	MOVF XKONUM_Y, 0
	SUBLW H'04'		;4 DEN BÜYÜK MÜ
	BTFSC STATUS, 0
	GOTO KUCUKX2
	GOTO BUYUKX2
KUCUKX2
	BTFSC STATUS, 2		;4 E EŞİT Mİ	
	GOTO ESITX2	
;KUCUKTUR
	MOVF XKONUM_Y, 0
	SUBLW H'04'
	MOVWF XADIM
	CALL XCTRL_BAGX
	GOTO XCTRL_AYAR22
BUYUKX2
	MOVLW H'04'
	SUBWF XKONUM_Y, 0
	MOVWF XADIM
	CALL XCTRL_BAIX
	GOTO XCTRL_AYAR22
ESITX2
	GOTO XCTRL_AYAR22	
	
XCTRL_AYAR22
	
	MOVF XKONUM_Y, 0
	MOVWF XKONUM_E
	GOTO RUTIN	
;**************************************************		
	END