
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.
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 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
