14 Kasım 2018, 06:23:21

Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME


DS1302 Saat bilgisi okuma sorunu

Başlatan Mujdat117, 25 Haziran 2018, 02:03:58

Mujdat117

Herkese selamlar,

DS1302 RTC entegresi kullanarak saat projesi yapmaya çalışıyorum. Simülasyonda (presto) gayet güzel çalışmasına rağmen Boart üzerine kurduğum devrede hatalı değerler okuyorum.  Mikro denetleyici olarak 16f628a ve yazılım dili olarak ASM kullandım. Hatayı düzeltmek adına RTC entegre'sinin SCL ve SDA bacaklarına dirençler bağladım kodlamada düzenleme iyileştirmeler yaptım fakat sonuç alamadım. Kodlamada hata olmadığını test etmek için RTC'nin  RAM adresine adımı yazdırıp bir buton yardımıyla okudum ve okunan veriyi uart üzerinden yazdırdım. RAM'dan okuma esnasında ne simülasyonda bede boart üzerinde kurduğum devrede bir sorunla karşılaşmadım. Değer gayet güzel RTC'nin RAM belleğine yazılıp okuyabilir ve uart üzerinden PC gönderiyor. Aynı kod RTC belleğinden okunurken simülasyonda sorunsuz fakat Boart üzerinde kurduğum devrede hatalı sonuçlar alıyorum.

Kaynak Kodları ve simülasyon dosyalarını aşağıdaki linkten paylaşıyorum. Tecrübeli arkadaşlardan yardımlarını bekliyorum.
https://1drv.ms/f/s!ArtFjbpJGumG6zUyayVE-vGEKhSY

Ana kaynak kodları:
Kod Seç
LCD MAKRO UYGULAMASI 
	
	
LIST 
	
	
P=16F628A
	
	
#INCLUDE
	
"P16F628A.INC"
	
	
TITLE
	
"LCD_MAKRO"
__CONFIG _CP_OFF _WDT_OFF _PWRTE_OFF  _INTOSC_OSC_NOCLKOUT _MCLRE_OFF _BODEN_OFF _LVP_OFF _XT_OSC & & _DATA_CP_OFF _INTOSC_OSC_NOCLKOUT;b'11110100111000';/_XT_OSC _INTOSC_OSC_NOCLKOUT & ; b'11110100111000';
ERRORLEVEL
	
-
205

#include
	
"KOSUL.inc"
	
;Kar??la?t?rma yapabilmek için makro dosyas? yükleniyor.
#include
	
"picConf.inc"
	
;P?C DONANIM AYARLARINI YÜKLEND??? DOSYA
#include
	
"UART_MACRO.inc";
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
	
	
	
  
DS1302  ADRES TANIMLARI
;-------------------------------------------------------------------------------
#DEFINE
	
DS1302_RTC_W
	
H'BE'   ;SAAT MODULÜ CONTROL ADRES?(HIGH ADRES?)/OYAZMA MODU
#DEFINE
	
DS1302_RTC_R
	
H'BF'   ;SAAT MODULÜ CONTROL ADRES?(HIGH ADRES?)/OKUMA MODU  
    
#DEFINE
	
DS1302_RAM_W
	
H'FE'  ;RAM CONTROL ADRES?(HIGH ADRES?)/YAZMA MODU
#DEFINE
	
DS1302_RAM_R
	
H'FF'  ;RAM CONTROL ADRES?(HIGH ADRES?)/OKUMA MODU
RTC ADRESLER?    
#DEFINE
	
DS1302_SANIYE_W
	
H'80'  ;
#DEFINE
	
DS1302_SANIYE_R
	
H'81'  ;
#DEFINE
	
DS1302_DAKIKA_W
	
H'82'  ;
#DEFINE
	
DS1302_DAKIKA_R
	
H'83'  ;
#DEFINE
	
DS1302_SAAT_W
	
H'84'  ;
#DEFINE
	
DS1302_SAAT_R
	
H'85'  ;
    
#DEFINE
	
DS1302_GUN_W
	
H'86'  ;TAR?H?N GÜN SAYISINI YAZAR( 1 ?LE 31 ?)
#DEFINE
	
DS1302_GUN_R
	
H'87'  ;TAR?H?N GÜN SAYISINI OKUR( 1 ?LE 31 ?)
#DEFINE
	
DS1302_AY_W
	
H'88'  ;TAR?H?N AY SAYISINI YAZAR( 1 ?LE 12 S?)
#DEFINE
	
DS1302_AY_R
	
H'89'  ;TAR?H?N AY SAYISINI OKU( 1 ?LE 12 S?)
#DEFINE
	
DS1302_YIL_W
	
H'8C'  ;TAR?H?N YIL SAYISINI YAZAR
#DEFINE
	
DS1302_YIL_R
	
H'8D'  ;TAR?H?N YIL SAYISINI OKUR

#DEFINE
	
DS1302_KORUMA_W
	
H'8E'  ;YAZMA KORUMA B?T? DE?ER YAZMA
#DEFINE
	
DS1302_KORUMA_R
	
H'8F'  ;YAZMA KORUMA B?T? DE?ER OKUMA
	
	

#DEFINE
	
DS1302_ENERJI_W
	
H'90'  ;?ARZ AYARLARI YAZ
#DEFINE
	
DS1302_ENERJI_R
	
H'91'  ;?ARZ AYARLARI OKU
	
	

#DEFINE
	
DS1302_HGUN_R
	
H'8B'  ;HAFTANIN HANG? GÜNÜ OLDUGUNU OKUR (1-PTS/7-PAZ)
#DEFINE
	
DS1302_HGUN_W
	
H'8A'  ;HAFTANIN HANG? GÜNÜ OLDUGUNU YAZAR (1-PTS/7-PAZ)
#DEFINE
	
BIT_SAYISI
	
8
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
	
    
I2C P?N VE PORT TANIMLARI
;------------------------------------------------------------------------------
#DEFINE
	
PIC_I2C_PORT_SCL
	
PORTA;I2C ?LET???M ?Ç?N KULLANILACAK PORT
#DEFINE
	
PIC_I2C_PORT_SDA
	
PORTA;I2C ?LET???M ?Ç?N KULLANILACAK PORT AYARLAMA
#DEFINE
	
PIC_I2C_PORT_EN
	
	
PORTA;I2CENTEGRE SEÇME KULLANILACAK PORT AYARLAMA
#DEFINE
	
PIC_I2C_TRIS_SDA
	
TRISA;I2C ?LET???M ?Ç?N KULLANILACAK PORT YÖNLEND?RME
#DEFINE
	
PIC_I2C_TRIS_SCL
	
TRISA;I2C CLK S?NYAK? KULLANILACAK PORT YÖNLEND?RME
#DEFINE
	
PIC_I2C_TRIS_EN
	
	
TRISA;I2C ENTEGRE SEÇME KULLANILACAK PORT YÖNLEND?RME
#DEFINE
	
PIC_I2C_SCL_PIN
	
0;CLOK S?NYAL? GÖNDER?LERCEK PIN
#DEFINE
	
PIC_I2C_EN_PIN
	
2;ENABLE S?NYAL? GÖNDER?LERCEK PIN
#DEFINE
	
PIC_I2C_SDA_PIN
	
1;DATA GÖNDER?LECEK PIN
#DEFINE
	
I2C_SCL
	
PIC_I2C_PORT_SCL,PIC_I2C_SCL_PIN;CLOK S?NYAL? 
#DEFINE
	
I2C_SDA
	
PIC_I2C_PORT_SDA,PIC_I2C_SDA_PIN;DATA GÖNDER?M P?N?
#DEFINE
	
I2C_EN
	
PIC_I2C_PORT_EN,PIC_I2C_EN_PIN;DATA GÖNDER?M P?N?
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
	
	

;
	
	
	
PIN
	
TANIMLAMALARI
;-----------------------------------------------------------------------------
#DEFINE
	
LED
	
PORTA,3
#DEFINE
	
BUTON
	
PORTA,5
#DEFINE
	
BUTON1
	
PORTA,6
#DEFINE
	
BUTON2
	
PORTA,7
;-------------------------------------------------------------------------------
;***********************
PÝN TANIMLAMALARI SONU**********************
TOGGLE   MACRO   TPORT,TBIT
   MOVLW    1
<<TBIT
   XORWF    TPORT
,F
   ENDM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
	
	
	
DEGI?KEN
	
TANIMLAMALARI
;-----------------------------------------------------------
CBLOCK H'20'
	

;;;;;;;;;;;;;;;;;;;;;;;;;;
CONFIG;;;;;;;;;;;;;;;;;;;;;;;;;;;
	
RW_IND 
	
:
1
	
;
RES 1
	

	
EELEN_IND :1
	
;
RES 1
	

	
EEIND_1
	
 :
1
	
;
RES 1
	
COUND_1
	
 :
1
	
;
RES 1
	
COUND_2
	
 :
1
	
;
RES 1
	
ADRH
	
 :
1
	
;
RES 1
	
S_PCH
	
 :
1
	
 ;
RES 1
	
;
PROGRAM COUNTER IN YUKSEK B?TLERYEDEKLEND?
	
ROM_ADR_H :1
	
;
RES
	
;P??N ROM ADRESYUKSEK B?TTAK?B? ?Ç?N KULLANILACAK
	
ROM_ADR_L :1
	
;
RES
	
1;P??N ROM ADRES?ÜK B?TTAK?B? ?Ç?N KULLANILACAK
	
CW_DATA
	
 :
1
	
;
RES 1;W REGEST?R?SYEDE??
	

	
LOOPCNT :1;
	
RES 1;GEC?KME RUTUNDE???KEN?
;;;;;;;;;;;;;;;;;;;;;;;;;;
LCD;;;;;;;;;;;;;;;;;;;;;;;;;;;
	
W_DATA :1;
	
RES
	
1;ÇEK?RDEK YAZMA PROSÖDÜRÜ ?Ç?N KULLANILAN DE???KEN
	
LCDCMD :1;
	
RES
	
1;KARAKTER YÜKLERKEN CGRAM ADRS? ?Ç?N KULLANILAN DE???KEN
	
LCDIND :1;
	
RES 1
	
;
ET?KET YADRIRILIRKEN SAYIYI TUTAR.
	
LCD_CNT :1;
	
RES 1;LCD ?Ç?N GEREKLGEC?KME SA?LAR
	
LCD_ADR :1;
	
	

;;;;;;;;;;;;;;;;;;;;;;;;;;
DS1302;;;;;;;;;;;;;;;;;;;;;;;;;;;
	
SPI_I2C_DATA :1
	
;
OKUNANA YAZILAN VER?LER
	
SPI_I2C_IND :1
	
;
KULLANILAN SAYAC ALINANA/GÖNDER?LEN VER
	
SPI_I2C_CND :1
	
;
GÖNDER?LEN BYTIN B?TLER?NSAYAN DE???KEN
	

	
RTC_DS_DEGISKEN :;
	

	
RTC_DS_ADR  :1;
	

;;;;;;;;;;;;;;;;;;;;;;;;;;
D??ER;;;;;;;;;;;;;;;;;;;;;;;;;;;
	
 
D1 :1
	
 
D2
	
 :
1
	
 
DIGIT_1 :1
	
 
DIGIT_2 :1
	

	
 
DIGIT_3 :1
	
 
DIGIT_4 :1
	
 
W_TEMP :1
	
 
S_TEMP :1
	
 
RTEMP :1
	
 
LED_DELAY :1
	
 
DS_OKUNAN :1
ENDC
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
	
	
	
P?C16F628A ANA KODLARI
;______________________________________________________________________________
	
	
ORG
	
	
0
	
;
ba?lang?çvektrötünü ayarla
	
	
goto
	
PIC_AYAR;ANA_PROGRAM 
	
	
org
	
	
4;reset vektörünü ayarla
	
	
goto
	
KESME_VEKTORU
PIC_AYAR
	
;
	
RS232.CONFIG
	
9600,1,1,1

      BANKSEL
	
TRISA;BSF     STATUSRP0         Bank 1
        MOVLF
	
B'00000010',TRISB               Set all of PORTB to outputs
	
MOVLW
	
 
b'00010000'
        
MOVWF   TRISA               Set all of PORTA to outputs 
	
MOVLW
	
B'00010111'
	
MOVWF
	
OPTION_REG
	
;
	
bCf
	
	
OPTION_REG,7
	
;
PORTLARIN PULL-UP DÝRENÇLERÝ AKTÝF
	
MOVLW
	
B'00100000' ;EEIE CMIE RCIE TXIE CCP1IE TMR2IE TMR1IE
	
MOVWF
	
PIE1
	
;
UART ALMA KESMESAKT?F
	
	
MOVLF
	
B'00100100',TXSTA   ;ASYNCRON MODUHIGHT SPIT
	
	
MOVLF
	
.25,SPBRG;9600 BUT HIZINDA ?LET???M AYARLANDI.
	
	
BSF
	
	
INTCON,PEIE
	
;
ÇEV0RESEL KESMELERE ÝZÝN VER
	
	
BSF
	
	
PIE1,RCIE
	
;
UART ALMA KESMESÝ KESME AÇIK
	
	
BCF
	
	
PIE1,TXIE
	
;
UART GÖNDERME KESMESÝ KESME AÇIK
	
banksel
	
PORTB
	
	
	
;
BANK 0 GEÇ
	
MOVLF
	
B'10110000',RCSTA;B'10010000',RCSTA   ;UART AKTÝF
	
MOVLF
	
0XFF,PORTB
	
	
MOVLW
	
	
H'07'
	
;
Analog ç?k??lardijital ç?k?? olarak ayarla
	
	
MOVWF
	
	
CMCON
	
;
ayaryükle
	

;
	
LCD.SETUP;
;
	
LCD.CONFIG
	
FONT_5X7 LCD_2X16 LCD_4BIT KURSOR_OFF   KAYMA_OFF KARARTMA_OFF LCD_ON KURSOR_ARTIR
;
	
DS1302.SETUP;CALL
	
I2C_PORT_KUR;
;
	
LCD.LOADCGRM 0,.64,K1;FONTTAB1 DOSYASINDAN K1 ET?KET?NLCD CGRAM 0 ADRES?NDEN ?T?BAREN 64 B?T OLARAK YAZ
;
	
LCD.ADRESL
	
.1,.0;1.SATIR,1.ETKETE G?T
	
CLRF DIGIT_1
	
CLRF DIGIT_2
	

	
CLRF DIGIT_3
	
CLRF DIGIT_4
;RAMCLR
	
DIGIT_1,DIGIT_4
	
MOVLF
	
.2,LED_DELAY
	

	
CALL
	
DS1302_ROM_YAZ
;************************Ana Dnögü******************************
ANA_PROGRAM
	

	
CLRWDT
	
;
LCD.BUYUKFONTL
	
.1,.0,SAYDIR;KR_IND
;
	
CALL
	
SAAT_YAZ
	
CALL
	
UART_YAZ
	
;
BITCC
	
BUTON,SONRAKI_KARAKTER
	
BUTON_TIKLA
	
BUTON,DS1302_ROM_OKU;DS1302_YIL_YAZ;BUTON,SONRAKI_KARAKTER
	
	
GOTO
	
ANA_PROGRAM
;***************************************************************
UART_YAZ:
;
LCD.ADRESL
	
.1,.0
SAAT
:
    
CALL    DS1302_SAAT_OKU
    CALL    DECTOHEX
    MOVWF   DS_OKUNAN
    ANDLW   0X0F
    ADDLW   0X30
    MOVWF   RTEMP
     RS232
.SEND
	
RTEMP
;     LCD.DATA
	
RTEMP;

    
SWAPF   DS_OKUNAN,W
;    CALL    DECTOHEX
    ANDLW   0X0F
    ADDLW   0X30
    MOVWF   RTEMP
     RS232
.SEND
	
RTEMP
;    LCD.DATA
	
RTEMP;

DAKIKA
;    
LCD.DATAL
	
":";
    
RS232.WRITEL    ":"
    
CALL    DS1302_DAKIKA_OKU
     MOVWF   DS_OKUNAN
     CALL    DECTOHEX
    ANDLW   0X0F
    ADDLW   0X30
    MOVWF   RTEMP
     RS232
.SEND
	
RTEMP
;     LCD.DATA
	
RTEMP;

    
SWAPF   DS_OKUNAN,W
 
;   CALL    DECTOHEX
    ANDLW   0X0F
    ADDLW   0X30
    MOVWF   RTEMP
     RS232
.SEND
	
RTEMP
;    LCD.DATA
	
RTEMP;
 

SANIYE
;    
LCD.DATAL
	
":";
    
RS232.WRITEL    ":"
    
CALL    DS1302_SANIYE_OKU
    MOVWF   DS_OKUNAN
;   CALL    DECTOHEX
    ANDLW   0X0F
    ADDLW   0X30
    MOVWF   RTEMP
     RS232
.SEND
	
RTEMP
 
;   LCD.DATA
	
RTEMP;

    
SWAPF   DS_OKUNAN,W
 
;   CALL    DECTOHEX
    ANDLW   0X0F
    ADDLW   0X30
    MOVWF   RTEMP
     RS232
.SEND
	
RTEMP
;    LCD.DATA
	
RTEMP;
GUN:   
;    
LCD.ADRESL
	
.2,.0
    RS232
.WRITEL    "-"
    
CALL    DS1302_GUN_OKU
    MOVWF   DS_OKUNAN
 
;   CALL    DECTOHEX
    ANDLW   0X0F
    ADDLW   0X30
    MOVWF   RTEMP
     RS232
.SEND
	
RTEMP
;     LCD.DATA
	
RTEMP;

    
SWAPF   DS_OKUNAN,W
 
;   CALL    DECTOHEX
    ANDLW   0X0F
    ADDLW   0X30
    MOVWF   RTEMP
     RS232
.SEND
	
RTEMP
;    LCD.DATA
	
RTEMP;

AY
;    
LCD.DATAL
	
"/";
    
RS232.WRITEL    "/"
    
CALL    DS1302_AY_OKU
    MOVWF   DS_OKUNAN
    CALL    DECTOHEX
    ANDLW   0X0F
    ADDLW   0X30
    MOVWF   RTEMP
     RS232
.SEND
	
RTEMP
 
;   LCD.DATA
	
RTEMP;

    
SWAPF   DS_OKUNAN,W
 
;   CALL    DECTOHEX
    ANDLW   0X0F
    ADDLW   0X30
    MOVWF   RTEMP
     RS232
.SEND
	
RTEMP
;    LCD.DATA
	
RTEMP;

YIL
;    
LCD.DATAL
	
"/";
    
RS232.WRITEL    "/"
    
CALL    DS1302_YIL_OKU
    MOVWF   DS_OKUNAN
    CALL    DECTOHEX
    ANDLW   0X0F
    ADDLW   0X30
    MOVWF   RTEMP
     RS232
.SEND
	
RTEMP
;    LCD.DATA
	
RTEMP;
    
SWAPF   DS_OKUNAN,W
    CALL    DECTOHEX
    ANDLW   0X0F
    ADDLW   0X30
    MOVWF   RTEMP
     RS232
.SEND
	
RTEMP
;    LCD.DATA
	
RTEMP;
 
HAFTANIN_GUNU:
;    
LCD.DATAL
	
 
"-";
    
RS232.WRITEL    "-"
    
CALL    DS1302_HGUN_OKU
    MOVWF   DS_OKUNAN
    CALL    DECTOHEX
    ANDLW   0X0F
    ADDLW   0X30
    MOVWF   RTEMP
    RS232
.SEND
	
RTEMP
;    LCD.DATA
	
RTEMP;
ALT_SATIR:;ENTER TUŞ KOMBİNASYONU
    RS232
.WRITEL   .13
	
;
ENTER
     RS232
.WRITEL   .10  ;ENTER
    
RETURN
SAAT_YAZ:
	
LCD.BUYUKFONTL
	
.1,.0,DIGIT_1
	
LCD.BUYUKFONTL
	
.1,.3,DIGIT_2
;
	
LCD.ADRESL  1,.7
;
	
LCD.DATAL   5
;
	
LCD.ADRESL  2,.7
;
	
LCD.DATAL   4
	
LCD.BUYUKFONTL
	
.1,.9,DIGIT_3
 
;
	
LCD.BUYUKFONTL
	
.1,.12,DIGIT_4   
;
	
CALL
	
LCDDELAY1MS
    
RETURN
SONRAKI_KARAKTER:;
	
INCF
	
DIGIT_4,F
	
MOVLW
	
.10
	
XORWF   DIGIT_4,W   OKUNNAN DE?ER?XOR ?LE "0" OLUP OLMADI?INI TEST ET.
	
BTFSS   STATUS,Z   OKUNANA DE?ER "0" ?SE ??LEMSONLANDIR.    
	
RETURN
	

	
CLRF
	
DIGIT_4
	
INCF
	
DIGIT_3,F
	

	
MOVLW
	
.10
	
XORWF   DIGIT_3,W   OKUNNAN DE?ER?XOR ?LE "0" OLUP OLMADI?INI TEST ET.
	
BTFSS   STATUS,Z   OKUNANA DE?ER "0" ?SE ??LEMSONLANDIR.    
	
RETURN
	

	
CLRF
	
DIGIT_3
	
INCF
	
DIGIT_2,F
	
MOVLW
	
.10
	
XORWF   DIGIT_2,W   OKUNNAN DE?ER?XOR ?LE "0" OLUP OLMADI?INI TEST ET.
	
BTFSS  STATUS,Z   OKUNANA DE?ER "0" ?SE ??LEMSONLANDIR.    
	
RETURN
	

	
CLRF
	
DIGIT_2
	
INCF
	
DIGIT_1,F
	
MOVLW
	
.10
	
XORWF   DIGIT_1,W   OKUNNAN DE?ER?XOR ?LE "0" OLUP OLMADI?INI TEST ET.
	
BTFSS   STATUS,Z   OKUNANA DE?ER "0" ?SE ??LEMSONLANDIR.    
	
RETURN
	

	
CLRF
	
DIGIT_1
	
RETURN
;==============================================================================
;
	
	
    
DS1302 RUTINLER?
;------------------------------------------------------------------------------
DS1302_SAAT_OKU:
    
MOVLW   DS1302_SAAT_R
 
;   MOVWF   RTC_DS_ADR
    CALL    DS1302_OKU
;    MOVWF   RTC_DS_SAAT
	
  
        RETURN
DS1302_DAKIKA_OKU:
    
MOVLW   DS1302_DAKIKA_R
 
;   MOVWF   RTC_DS_ADR
    CALL    DS1302_OKU
;    MOVWF   RTC_DS_DAKIKA
    
RETURN
DS1302_SANIYE_OKU:
    
MOVLW   DS1302_SANIYE_R
;    MOVWF   RTC_DS_ADR
    CALL    DS1302_OKU
 
;   MOVWF   RTC_DS_SANIYE
    
RETURN
DS1302_YIL_OKU:
    
MOVLW   DS1302_YIL_R
 
;   MOVWF   RTC_DS_ADR
    CALL    DS1302_OKU
;    MOVWF   RTC_DS_YIL
    
RETURN
DS1302_AY_OKU:
    
MOVLW   DS1302_AY_R
 
;   MOVWF   RTC_DS_ADR
    CALL    DS1302_OKU
 
;   MOVWF   RTC_DS_AY
    
RETURN
DS1302_GUN_OKU:
	

    
MOVLW   DS1302_GUN_R
 
;   MOVWF   RTC_DS_ADR
    CALL    DS1302_OKU
 
;   MOVWF   RTC_DS_GUN
    
RETURN
DS1302_HGUN_OKU:
	

    
MOVLW   DS1302_HGUN_R
 
;   MOVWF   RTC_DS_ADR
    CALL    DS1302_OKU
 
;   MOVWF   RTC_DS_HGUN
    
RETURN
DS1302_YIL_YAZ:
	

    
MOVLW   DS1302_YIL_W
    MOVWF   RTC_DS_ADR
    MOVLW   H
'17'
    
CALL    DS1302_YAZ
 
;   MOVWF   RTC_DS_HGUN
    
RETURN
 ;;;;;;;;;;;;;
rom yaz;;;;;;;;;;;;;;;;;;;;;;;;;
 
DS1302_ROM_YAZ:
	

   
BSF
	
I2C_EN;I2C.START;?LET???ME BA?LA
    MOVLW   DS1302_RAM_W
;YAZILACAK ADRESYUKLE
    CALL    I2C_DATA_YAZ
;?ÜK ADRES B?T?NYAZ 
    MOVLW    
"M"    ;YAZILACAK VERW YE AL
    CALL    I2C_DATA_YAZ
;VER?YYAZ 
    MOVLW    
"U"    ;YAZILACAK VERW YE AL
    CALL    I2C_DATA_YAZ
;VER?YYAZ     
    MOVLW    
"J"    ;YAZILACAK VERW YE AL
    CALL    I2C_DATA_YAZ
;VER?YYAZ     
    MOVLW    
"D"    ;YAZILACAK VERW YE AL
    CALL    I2C_DATA_YAZ
;VER?YYAZ     
    MOVLW    
"A"    ;YAZILACAK VERW YE AL
    CALL    I2C_DATA_YAZ
;VER?YYAZ     
    MOVLW    
"T"    ;YAZILACAK VERW YE AL
    CALL    I2C_DATA_YAZ
;VER?YYAZ     
   BCF
	
I2C_EN 
    
RETURN
 ;;;;;;;;;;;;;
rom OKU;;;;;;;;;;;;;;;;;;;;;;;;;
 
DS1302_ROM_OKU:
	

   
BSF
	
I2C_EN;I2C.START;?LET???ME BA?LA
    MOVLW   DS1302_RAM_R
;YAZILACAK ADRESYUKLE
    CALL    I2C_DATA_YAZ
;?ÜK ADRES B?T?NYAZ 
    CALL    I2C_DATA_OKU
;VER?YOKU
    MOVWF   RTEMP
 
;   SWAPF   RTEMP,F
     RS232
.SEND
	
RTEMP   
    CALL    I2C_DATA_OKU
;VER?YOKU
    MOVWF   RTEMP
     RS232
.SEND
	
RTEMP   
    CALL    I2C_DATA_OKU
;VER?YOKU
    MOVWF   RTEMP
     RS232
.SEND
	
RTEMP   
    CALL    I2C_DATA_OKU
;VER?YOKU
    MOVWF   RTEMP
     RS232
.SEND
	
RTEMP   
    CALL    I2C_DATA_OKU
;VER?YOKU
    MOVWF   RTEMP
     RS232
.SEND
	
RTEMP   
    CALL    I2C_DATA_OKU
;VER?YOKU
    MOVWF   RTEMP
     RS232
.SEND
	
RTEMP   
    CALL    I2C_DATA_OKU
;VER?YOKU
    MOVWF   RTEMP
     RS232
.SEND
	
RTEMP        
    BCF
	
I2C_EN 
GOTO
	
ALT_SATIR;    RETURN
;;;;;;;;;;;;;;;;;;
DS102 OKU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;    
DS1302_OKU:
  
BsF
	
I2C_EN I2C.START;?LET???ME BA?LA    
    CALL    I2C_DATA_YAZ
;?ÜK ADRES B?T?NYAZ ;I2C_DATA_SONRAKI_BIT_YAZ;   
    
CALL    I2C_DATA_OKU;OKUMA KODUNU ÇA?IR.
    
MOVWF   RTC_DS_DEGISKEN    ;OKUNAN DE?ERRAM A YÜKLE     
    SWAPF   RTC_DS_DEGISKEN
,W
    
    BCF
	
I2C_EN  ;I2C.STOP ;OKUMA B?TT?. ?LET???MKES
  RETURN
;;;;;;;;;;;;;;;;;;
DS1302 YAZ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
 
DS1302_YAZ:
   
MOVWF    RTC_DS_DEGISKEN 
   BSF
	
I2C_EN;I2C.START;?LET???ME BA?LA
    MOVFW   RTC_DS_ADR
;YAZILACAK ADRESYUKLE
    CALL    I2C_DATA_YAZ
;?ÜK ADRES B?T?NYAZ 
    MOVFW    RTC_DS_DEGISKEN    
;YAZILACAK VERW YE AL
    CALL    I2C_DATA_YAZ
;VER?YYAZ 
   BCF
	
I2C_EN 
 
RETURN
;==============================================================================
;
	
I2C RUT?NLER?
;==============================================================================
;------------------
PORTLARI KUR------------------------------------------------
I2C_PORT_KUR:
    
BANKSEL PIC_I2C_TRIS_SDA
    BCF
	
PIC_I2C_TRIS_SDA,PIC_I2C_SDA_PIN
    BCF
	
PIC_I2C_TRIS_SCL,PIC_I2C_SCL_PIN
    BCF
	
PIC_I2C_TRIS_EN,PIC_I2C_EN_PIN
    BANKSEL PIC_I2C_PORT_SDA         
    BCF  I2C_EN
    BCF I2C_SCL
    BCF
	
I2C_SDA
;---------KURULUM PARAMATRELER?---------------------------------------------
   
BSF
	
I2C_EN;I2C.START;?LET???ME BA?LA
    MOVLW   DS1302_KORUMA_W
;YAZMA KORUMA ?PTAL?
    
CALL    I2C_DATA_YAZ;?ÜK ADRES B?T?NYAZ 
    MOVLW    0
;KORUMA ?PTAL
    CALL    I2C_DATA_YAZ
;VER?YYAZ 

    MOVLW   DS1302_ENERJI_W
;YAZMA KORUMA ?PTAL?
    
CALL    I2C_DATA_YAZ;?ÜK ADRES B?T?NYAZ 
    MOVLW    H
'A4'
    
CALL    I2C_DATA_YAZ;VER?YYAZ 
    
    MOVLW   DS1302_SANIYE_W
;
    
CALL    I2C_DATA_YAZ;?ÜK ADRES B?T?NYAZ 
    MOVLW    0
    CALL    I2C_DATA_YAZ
;VER?YYAZ 
   BCF
	
I2C_EN      
    
RETURN
;------------------
I2C DATA YAZMA(DS1302 ?Ç?N)----------------------------------
I2C_DATA_YAZ:
    
MOVWF   SPI_I2C_DATA
    MOVLW   BIT_SAYISI
    MOVWF   SPI_I2C_CND
    BANKSEL PIC_I2C_TRIS_SDA
    BCF
	
PIC_I2C_TRIS_SDA,PIC_I2C_SDA_PIN
    BANKSEL PIC_I2C_PORT_SDA     
I2C_DATA_SONRAKI_BIT_YAZ
:
    
BTFSS   SPI_I2C_DATA,0
	
;
C B?T?NKONTROL ET GÖNDER?LECEK B?TTESP?T ET.
    GOTO    
I2C_DATA_0_BIT_YAZ
I2C_DATA_1_BIT_YAZ
:     
    
NOP
    NOP
    BSF
	
I2C_SDA
	
;
GÖNDER?LECEK B?"1"
    
NOP
    NOP
    
GOTO    I2C_CLOCK_YAZ;CLK S?NYALGÖNDER
I2C_DATA_0_BIT_YAZ
:    
    
NOP
    NOP
    BCF
	
I2C_SDA
	
;
GÖNDER?LECEK B?"0" 
I2C_CLOCK_YAZ
    
NOP
    NOP
    BSF
	
I2C_SCL ;SDA DAKB?TYAZ   
    NOP
    NOP
    BCF
	
I2C_SCL ;SDA DAKB?TYAZ     
    NOP
    NOP    
    RRF
	
SPI_I2C_DATA,F
	
;
B?TLERB?R ROLA KAYDIR (STATUS C YE YAZ)    
    
DECFSZ  SPI_I2C_CND,F;8 B?T GERSAYIM TEMEMLANDIMI?
    GOTO    
I2C_DATA_SONRAKI_BIT_YAZ;HAYIR TEKRAR BA?A DÖN 
    
RETURN
;------------------
I2C DATA OKUMA(DS1302 ?Ç?N)----------------------------------
;   
OKU KODLARINDA KALDIN TAMAMLA
I2C_DATA_OKU
:
    
BANKSEL PIC_I2C_TRIS_SDA
    BSF
	
PIC_I2C_TRIS_SDA,PIC_I2C_SDA_PIN
    BANKSEL PIC_I2C_PORT_SDA   
    CLRF   SPI_I2C_DATA
    MOVLW   BIT_SAYISI
    MOVWF   SPI_I2C_CND
    CLRC  
I2C_DATA_SONRAKI_BIT_OKU
:
    
RRF
	
SPI_I2C_DATA,;B?R SOLA KAYDIR
    
BTFSS   I2C_SDA;SDA KONTROL ETOKUNAN B?T    
    
GOTO    I2C_DATA_0_BIT_OKU
I2C_DATA_1_BIT_OKU

    
NOP
    NOP
    BSF
	
SPI_I2C_DATA,7
	
;
OKUNANA B?T"1" VE EN DÜ?ÜK B?TE YAZ
    
GOTO    I2C_CLOCK_OKU
I2C_DATA_0_BIT_OKU
:    
    
NOP
    NOP
   BCF
	
SPI_I2C_DATA,7
	
;
OKUNANA B?T"0" VE EN DÜ?ÜK B?TE YAZ
I2C_CLOCK_OKU

    
NOP
    NOP
    BSF
	
I2C_SCL ;SDA DAKB?TYAZ     
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP
    BCF
	
I2C_SCL ;SDA DAKB?TYAZ         
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP
    DECFSZ  SPI_I2C_CND
,F;8 B?T GERSAYIM TEMEMLANDIMI?
    GOTO    
I2C_DATA_SONRAKI_BIT_OKU;HAYIR TEKRAR BA?A DÖN 
   
SWAPF   SPI_I2C_DATA,W
   MOVFW   SPI_I2C_DATA
 
;   BSF
	
I2C_SCL ;SDA DAKB?TYAZ     
    
RETURN
;==============================================================================
;
	
	
    
HEX TO BCD
;------------------------------------------------------------------------------
;
Z ve C flag içeri?i ç?karma sonucu ?öyle etkilenir.
;
SUBWF File_register,F/W
;File register W Z=0 C=1
;File register W Z=1 C=1
;File register W Z=0 C=0    
DECTOHEX
:
    
MOVWF   D1
    CLRF    D2
    IfGoL   D1
,5,.10,AYRISTIRMA_ISLEMI
    MOVFW   D1
    
RETURN
AYRISTIRMA_ISLEMI:
    
MOVLW   .10
    ADDWF   D2
    SUBWF   D1
,F
    BTFSC   STATUS
,C
    
GOTO    AYRISTIRMA_ISLEMI
    MOVLW   .10
    ADDWF   D1
,F
    SUBWF   D2
,F
    MOVFW   D2
    ADDWF   D1
,W
    
RETURN
;==============================================================================
;
	
	
    
KESME VEKTÖRÜ
;------------------------------------------------------------------------------
KESME_VEKTORU
	
BCF
	
	
INTCON,7;
	
MOVWF
	
W_TEMP
	
MOVFW
	
STATUS
	
MOVWF
	
S_TEMP
;-----------------------------------
;
	
CALL
	
UART_AL
;-----------INT KESME BAYRA?I-------
;
BITSC
	
INTCON,T0IF,TMR0_KESME
;BITSC
	
INTCON,INTF,RB0_INT_KESME
;BITSC
	
INTCON,RBIF,RB_4_7_KESME
;------------PIR1 KESME BAYRAKLARI---
;
BITSC
	
PIR1,TMR1IF,TMR1_KESME
;BITSC
	
PIR1,CMIF,KARSILASTIRMA_KESME
BITSC
	
PIR1,RCIF,UART_ALMA_KESME
;BITSC
	
PIR1,TXIF,UART_GONDERME_KESME
;BITSC
	
PIR1,CCP1IF,YAKALAMA_KESME
;BITSC
	
PIR1,TMR2IF,TMR2_KESME
;BITSC
	
PIR1,EEIF,EEPROM_YAZMA_KESME
	
BCF 
	
PIR1,RCIF
	
MOVLW
	
B'11111000'
	
ANDWF
	
INTCON,F
;----------------------------------
	
MOVFW
	
S_TEMP
	
MOVWF
	
STATUS
	
SWAPF
	
W_TEMP,F
	
SWAPF
	
W_TEMP,W
	
BSF
	
	
INTCON,EEIE;
	
retfie
	
;
Kesmeden dön
;------------------------------------------------------------------------------
UART_ALMA_KESME:
    RETURN
;--------------
LCD ?Ç?N GEREKLGEC?KME---------------------
LED_BLINK
	
DECFSZ
	
LED_DELAY,F
	
GOTO
	
DELAY1MS  
	
TOGGLE   LED
	
MOVLF
	
.2,LED_DELAY
    
RETURN
;-----------------------------------------------------------------------------
  
END



Ana kodda referans verilen KOSUL.inc dosyası:
Kod Seç
;*********************************************************
;;;;;;;;;;;;;;;;/
Karþýlaþtýrma Komutlarý\;;;;;;;;;;;;;;;;;;
;* 
Adý SoyadMüjdat TEKE
;* Mail:      Mujdat117@hotmail.com
;* Tarih :    17/05/2013
;
Projelerde kullanýlmak üzere karþýlatýrma ve dallanma 
komutlarýndan oluþan makrolar içerir.
Makrolar 16 adet komut ile yönlendirilirbunlar yapýlacak iþlemin
ne olduðunu belirlemeye yararMakrolardaki iþlem Parametresini 
altaki komutlarý veya sayý deðerleri yazýlýrsa açýklamada yeralan 
iþlemleri gerçekleþtirir.
;
	
	
	
	
	
	
	
	
//Sabit Komutlar\\
;
	
Esit=0;(w=Lparametreler yani deðiþken ve Sabit/Deðiþken2 birbirine 
;              ;eþit olup olmadýðýný test eder.
;
;
	
Büyük=1;(w>Lparametreler yani deðiþken ve Sabit/Deðiþken2 karþýlaþtýrýr 
;              ;deðiþken Sabit/deðiþken2 den büyük olup olmadýðýný test eder.
;
;
	
Kücük="2 (w<L)
;
	
Esitdegil=3;(w!=L) parametreler yani deðiþken ve Sabit/Deðiþken2 karþýlaþtýrýr 
;              ;deðiþken ve Sabit/deðiþken2 eþit deðil ise etikete dallanýr.
;
;
	
KücükEsit=4;(w<=L) parametreler yani deðiþken ve Sabit/Deðiþken2 karþýlaþtýrýr 
;              ;deðiþken Sabit/deðiþken2 den küçük ve eþit olup olmadýðýný test eder.
;
;
	
BüyükEsit=5;(w>=L) parametreler yani deðiþken ve Sabit/Deðiþken2 karþýlaþtýrýr 
;              ;deðiþken Sabit/deðiþken2 den büyük ve eþit olup olmadýðýný test eder.
;
;                                 /////Makrolar Tanýmlarý\\\\\
;
	
Tanýmlanan makrolar ve parametreler Taným:
;
	
1.
	
******************************************************************************************
;
	
IfGoL
	
Macro
	
Degisken,Islem,Sabit,Etiket ; Deðiþken ve Sabiti karþýlatýrýr.
;
	
	
	
Deðiþken: Mcu nun ram ýnda tanýmlanan alan ör: SAYAC equ
	
200 ;sa 
;
	
	
	
Islem
	
: Sabit komutlarda açýklanan komut parametresi buraya yazýlýr. karþlaþtýrmanýn neye göre yapýlacaðýný belirler.
;
	
	
	
Sabit
	
: Deðiþkenin karþýlaþtýrýlacak sabit sayý buryaya yazýlýr. örnek : .100 gibi
;
	
	
	
Etiket
	
: Deðiþken ve sabit Islem olarak belirtilen koþulu saðlarsa etiket olarak belirtilen
;
	
	
	
	
	
  adrese Gider (Goto Etiket olarak çalýþýr)
;
	
2.
	
******************************************************************************************
;
	
IfGo
	
Macro
	
Degisken,Islem,Deðiþken2,Etiket ; Deðiþken ve Sabiti karþýlatýrýr.
;
	
	
	
Deðiþken
	
: Mcu nun ram ýnda tanýmlanan alan ör: SAYAC equ
	
200 ;sa 
;
	
	
	
Islem
	
	
: "
Sabit komutlarda" açýklanan komut parametresi buraya yazýlýr. karþlaþtýrmanýn neye göre yapýlacaðýný belirler.
;
	
	
	
Deðiþken2
	
: Deðiþkenin karþýlaþtýrýlacak 2. Degiþkeni buryaya yazýlýr. örnek : SAYI2 equ 21 gibi
;
	
	
	
Etiket
	
	
: Deðiþken ve Deðiþken2 ile Islem olarak belirtilen koþulu saðlarsa etiket olarak belirtilen
;
	
	
	
	
	
      adrese Gider (Goto Etiket olarak çalýþýr)

;
	
3.
	
******************************************************************************************
;
	
IfGotoL
	
Macro
	
Degisken,Islem,Sabit,DoðruEtiket,YanlýþEtiket ; Deðiþken ve Sabiti karþýlatýrýr.
;
	
	
	
Deðiþken
	
: Mcu nun ram ýnda tanýmlanan alan ör: SAYAC equ
	
200 ;sa 
;
	
	
	
Islem
	
	
: Sabit komutlarda açýklanan komut parametresi buraya yazýlýr. karþlaþtýrmanýn neye göre yapýlacaðýný belirler.
;
	
	
	
Sabit
	
	
: Deðiþkenin karþýlaþtýrýlacak sabit sayý buryaya yazýlýr. örnek : .100 gibi
;
	
	
	
DoðruEtiket
	
: Deðiþken ve sabit Islem olarak belirtilen koþulu saðlarsa etiket olarak belirtilen
;
	
	
	
	
	
  
	
	
adrese Gider (Goto Etiket olarak çalýþýr)
;
	
	
	
YanlýþEtiket: Deðiþken ve sabit Islem olarak belirtilen koþulu saðlamýyor ise bu etikete dallanýr.
;
	
	
	
	
	
  
	
	
adrese Gider (Goto Etiket olarak çalýþýr)
;
	
4.
	
******************************************************************************************
;
	
IfGoto
	
Macro
	
Degisken,Islem,Deðiþken2,DoðruEtiket,YanlýþEtiket ; Deðiþken ve Sabiti karþýlatýrýr.
;
	
	
	
Deðiþken
	
: Mcu nun ram ýnda tanýmlanan alan ör: SAYAC equ
	
200 ;sa 
;
	
	
	
Islem
	
	
: "
Sabit komutlarda" açýklanan komut parametresi buraya yazýlýr. karþlaþtýrmanýn neye göre yapýlacaðýný belirler.
;
	
	
	
Deðiþken2
	
: Deðiþkenin karþýlaþtýrýlacak 2. Degiþkeni buryaya yazýlýr. örnek : SAYI2 equ 21 gibi
;
	
	
	
DoðruEtiket
	
: Deðiþken ve Deðiþken2 ile Islem olarak belirtilen koþulu saðlarsa etiket olarak belirtilen
;
	
	
	
	
	
      adrese Gider (Goto Etiket olarak çalýþýr)
;
	
	
	
YanlýþEtiket: Deðiþken ve Deðiþken2 Islem olarak belirtilen koþulu saðlamýyor ise bu etikete dallanýr.
;
	
	
	
	
	
  
	
	
adrese Gider (Goto Etiket olarak çalýþýr)
;
	
5.
	
*******************************************************************************************
;
	
IfCallL
	
Macro
	
Degisken,Islem,Sabit,Etiket ; Deðiþken ve Sabiti karþýlatýrýr.
;
	
	
	
Deðiþken: Mcu nun ram ýnda tanýmlanan alan ör: SAYAC equ
	
200 ;sa 
;
	
	
	
Islem
	
: Sabit komutlarda açýklanan komut parametresi buraya yazýlýr. karþlaþtýrmanýn neye göre yapýlacaðýný belirler.
;
	
	
	
Sabit
	
: Deðiþkenin karþýlaþtýrýlacak sabit sayý buryaya yazýlýr. örnek : .100 gibi
;
	
	
	
Etiket
	
: Deðiþken ve sabit Islem olarak belirtilen koþulu saðlarsa etiket olarak belirtilen
;
	
	
	
	
	
  adrese Gider (Call Etiket olarak çalýþýr)
;
	
6.
	
******************************************************************************************
;
	
IfCall
	
Macro
	
Degisken,Islem,Deðiþken2,Etiket ; Deðiþken ve Sabiti karþýlatýrýr.
;
	
	
	
Deðiþken
	
: Mcu nun ram ýnda tanýmlanan alan ör: SAYAC equ
	
200 ;sa 
;
	
	
	
Islem
	
	
: "
Sabit komutlarda" açýklanan komut parametresi buraya yazýlýr. karþlaþtýrmanýn neye göre yapýlacaðýný belirler.
;
	
	
	
Deðiþken2
	
: Deðiþkenin karþýlaþtýrýlacak 2. Degiþkeni buryaya yazýlýr. örnek : SAYI2 equ 21 gibi
;
	
	
	
Etiket
	
	
: Deðiþken ve Deðiþken2 ile Islem olarak belirtilen koþulu saðlarsa etiket olarak belirtilen
;
	
	
	
	
	
      adrese Gider (Call Etiket olarak çalýþýr)

;
	
7.
	
******************************************************************************************
;
	
IfCallElseL
	
Macro
	
Degisken,Islem,Sabit,DoðruEtiket,YanlýþEtiket ; Deðiþken ve Sabiti karþýlatýrýr.
;
	
	
	
Deðiþken
	
: Mcu nun ram ýnda tanýmlanan alan ör: SAYAC equ
	
200 ;sa 
;
	
	
	
Islem
	
	
: Sabit komutlarda açýklanan komut parametresi buraya yazýlýr. karþlaþtýrmanýn neye göre yapýlacaðýný belirler.
;
	
	
	
Sabit
	
	
: Deðiþkenin karþýlaþtýrýlacak sabit sayý buryaya yazýlýr. örnek : .100 gibi
;
	
	
	
DoðruEtiket
	
: Deðiþken ve sabit Islem olarak belirtilen koþulu saðlarsa etiket olarak belirtilen
;
	
	
	
	
	
  
	
	
adrese Gider (Goto Etiket olarak çalýþýr)
;
	
	
	
YanlýþEtiket: Deðiþken ve sabit Islem olarak belirtilen koþulu saðlamýyor ise bu etikete dallanýr.
;
	
	
	
	
	
  
	
	
adrese Gider (Call Etiket olarak çalýþýr)
;
	
8.
	
******************************************************************************************
;
	
IfCallElse
	
Macro
	
Degisken,Islem,Deðiþken2,DoðruEtiket,YanlýþEtiket ; Deðiþken ve Sabiti karþýlatýrýr.
;
	
	
	
Deðiþken
	
: Mcu nun ram ýnda tanýmlanan alan ör: SAYAC equ
	
200 ;sa 
;
	
	
	
Islem
	
	
: "
Sabit komutlarda" açýklanan komut parametresi buraya yazýlýr. karþlaþtýrmanýn neye göre yapýlacaðýný belirler.
;
	
	
	
Deðiþken2
	
: Deðiþkenin karþýlaþtýrýlacak 2. Degiþkeni buryaya yazýlýr. örnek : SAYI2 equ 21 gibi
;
	
	
	
DoðruEtiket
	
: Deðiþken ve Deðiþken2 ile Islem olarak belirtilen koþulu saðlarsa etiket olarak belirtilen
;
	
	
	
	
	
      adrese Gider (Goto Etiket olarak çalýþýr)
;
	
	
	
YanlýþEtiket: Deðiþken ve Deðiþken2 Islem olarak belirtilen koþulu saðlamýyor ise bu etikete dallanýr.
;
	
	
	
	
	
  
	
	
adrese Gider (Call Etiket olarak çalýþýr)
;
	
9.
	
******************************************************************************************
;
	
BITSG
	
Macro
	
Reg,Bit,Label ; Regestirinin bitini kontrol et.
;
	
	
	
Reg
	
: Test edilcek regestiri veya deðiþken. 
;
	
	
	
Bit
	
	
: test edilecek bit.
;
	
	
	
DoðruEtiket
	
: bit Set(1) ise gidilecek etikek (goto komutuyla)
;
	
10.
	
******************************************************************************************
;
	
BITSC
	
Macro
	
Reg,Bit,Label ; Regestirinin bitini kontrol et.
;
	
	
	
Reg
	
: Test edilcek regestiri veya deðiþken. 
;
	
	
	
Bit
	
	
: test edilecek bit.
;
	
	
	
DoðruEtiket
	
: bit Set(1) ise gidilecek etikek (call komutuyla)
;
	
11.
	
******************************************************************************************
;
	
BITCG
	
Macro
	
Reg,Bit,Label ; Regestirinin bitini kontrol et.
;
	
	
	
Reg
	
: Test edilcek regestiri veya deðiþken. 
;
	
	
	
Bit
	
	
: test edilecek bit.
;
	
	
	
DoðruEtiket
	
: bit Set(0) ise gidilecek etikek (goto komutuyla)
;
	
12.
	
******************************************************************************************
;
	
BITCC
	
Macro
	
Reg,Bit,Label ; Regestirinin bitini kontrol et.
;
	
	
	
Reg
	
: Test edilcek regestiri veya deðiþken. 
;
	
	
	
Bit
	
	
: test edilecek bit.
;
	
	
	
DoðruEtiket
	
: bit Set(0) ise gidilecek etikek (call komutuyla)
;
	
13.
	
******************************************************************************************
;
	
Jz
	
Macro
	
Etiket ; Status reg. in Z bitini kontrol eder.
;
	
	
	
Etiket
	
:Z biti Set(1) ise etikete atla (goto komutuyla)
;
	
14.
	
******************************************************************************************
;
	
Jnz
	
Macro
	
Etiket ; Status reg. in Z bitini kontrol eder.
;
	
	
	
Etiket
	
:Z biti clear(0) ise etikete atla (goto komutuyla)
;
	
15.
	
******************************************************************************************
;
	
Jc
	
Macro
	
Etiket ; Status reg. in C bitini kontrol eder.
;
	
	
	
Etiket
	
:C biti Set(1) ise etikete atla (goto komutuyla)
;
	
16.
	
******************************************************************************************
;
	
Jnc
	
Macro
	
Etiket ; Status reg. in C bitini kontrol eder.
;
	
	
	
Etiket
	
:Z biti clear(0) ise etikete atla (goto komutuyla)
;***********************************************************************************************************************************

;********************\Parametre olarak kullanýcalcak Deðerler/***********
#Define
	
Esit 0
	
	
; Deðiþken = Sabit/Deðiþken2
#define
	
Büyük 1
	
	
; Deðiþken > Sabit/Deðiþken2
#define
	
Kücük 2
	
; Deðiþken < Sabit/Deðiþken2
#define
	
Esitdegil 3
	
;Deðiþken != Sabit/Deðiþken2
#define
	
KücükEsit 4
	
;Deðiþken <= Sabit/Deðiþken2
#define
	
BüyükEsit 5
	
;Deðiþken >= Sabit/Deðiþken2
;variable
	
BüyükEsit=5
	
;Deðiþken >= Sabit/Deðiþken2;
;************************************************************************

;extern
	
IfGoL
;extern
	
IfGo
;extern
	
IfGotoL
;extern
	
IfGoto
;extern
	
IfCallL
;extern
	
IfCall
;extern
	
IfCallElseL
;extern
	
IfCallElse
;global
	
IfGoL
;Global
	
IfGo
;global
	
IfGotoL
;global
	
IfGoto
;global
	
IfCallL
;global
	
IfCall
;global
	
IfCallElseL
;global
	
IfCallElse
NOLIST
;*************************************************************************************************
;
	
	
	
	
	
	
	
	
	
\\ Makrolar //
;*************************************************************************************************
;
	
1. Makro
	
	
	
	

;*********************** Deðiþken ve sabiti karþýlaþtýrýr. Etikete dallanýr.**********************
IfGoL
	
macro
	
Degisken,Islem,Sabit,Etiket
;Z ve C flag içeri?i ç?karma sonucu ?öyle etkilenir.
;File register > W Z=0 C=1
;File register = W Z=1 C=1
;File register < W Z=0 C=0 
	

CLRZ
CLRZ
CLRDC
	
IF
	
Islem==0;"
=
	
	
movfw
	
Degisken;karþýlaþtýmak için deðiþkeni w alýr.
	
	
sublw
	
Sabit;,W
	
;D1 
	
	
btfss
	
STATUS,Z
	
;Test et
	
	
goto
	
$+2;Y;YAnlýþ
	
	
goto
	
Etiket;Doðru
	
ENDIF
	
IF
	
Islem==2;"
<
	
	
movfw
	
Degisken;karþýlaþtýmak için deðiþkeni w alýr.
	
	
sublw
	
Sabit;,W
	
;Deðiþken ve sabit sayýyý karþýlaþtýr
	
	
btfsc
	
STATUS,C
	
; iþlem negatif mi?
	
	
btfsc
	
STATUS,Z
	
; sýfýrdan farklýmý
	
	
goto
	
$+2
	
	
goto
	
Etiket
	
	
;Doðru, W<L den etikete git.
	
ENDIF
	

	
IF
	
Islem==1;"
>
	
	
movfw
	
Degisken;karþýlaþtýmak için deðiþkeni w alýr.
	
	
sublw
	
Sabit;,W
	
;D1 
	
	
btfsc
	
STATUS,C
	
;Test et
	
	
goto
	
$+2;Y;YAnlýþ
	
	
goto
	
Etiket;Doðru
	
ENDIF
	
IF
	
Islem==3;"
!=" karþýlastýrýlan sayýlar eþit deðilse
	
	
movfw
	
Degisken;karþýlaþtýmak için deðiþkeni w alýr.
	
	
sublw
	
Sabit;,W
	
;Wreg ve L sayýsýn karþýlaþtýr.
	
	
btfsc
	
STATUS,Z
	
; Eþit deðilse (z=0 ise) Bir satýr atla
	
	
goto
	
$+2; Sayýlar eþir (Z=1 ise) kadýðý yerden devam et
	
	
goto
	
Etiket;Doðru sayýlar eþit deðil etikete dallan.
	
ENDIF
	
IF
	
Islem==4;"
<=
	
	
movfw
	
Degisken;karþýlaþtýmak için deðiþkeni w alýr.
	
	
sublw
	
Sabit;,W
	
;Wreg ve L sayýsýn karþýlaþtýr.
	
	
btfss
	
STATUS,C
	
; Küçük ve Eþit ise(C=1 ise) Bir satýr atla
	
	
goto
	
$+2; Sayýlar eþir (C=0 ise) kadýðý yerden devam et
	
	
goto
	
Etiket;Doðru sayýlar Küçük eþit etikete dallan.
	
ENDIF
	

	
IF
	
Islem==5;"
>=
	
	
movfw
	
Degisken;karþýlaþtýmak için deðiþkeni w alýr.
	
	
sublw
	
Sabit;,W
	
;Deðiþken ve sabit sayýyý karþýlaþtýr
	
	
btfss
	
STATUS,Z
	
; iþlem sýfýrmý mi?
	
	
btfss
	
STATUS,C
	
; iþlem negatifmi?
	
	
goto
	
Etiket
	
	
;Doðru, W>L den etikete git.
	
	

	
ENDIF
ENDM
;**************************************************************************************
;
	
2. Makro
;*********************** Deðiþken ve Deðiþken2 karþýlaþtýrýr. Etikete dallanýr.********
IfGo
	
macro
	
Degisken,Islem,Degisken2,Etiket

	
IF
	
Islem==0;"
=
	
	
movfw
	
Degisken;karþýlaþtýmak için deðiþkeni w alýr.
	
	
subwf
	
Degisken2,W
	
;D1 
	
	
btfss
	
STATUS,Z
	
;Test et
	
	
goto
	
$+2;Y;YAnlýþ
	
	
goto
	
Etiket;Doðru
	
ENDIF
	
IF
	
Islem==2;"
<
	
	
movfw
	
Degisken;karþýlaþtýmak için deðiþkeni w alýr.
	
	
subwf
	
Degisken2,W
	
;Deðiþken ve sabit sayýyý karþýlaþtýr
	
	
btfsc
	
STATUS,C
	
; iþlem negatif mi?
	
	
btfsc
	
STATUS,Z
	
; sýfýrdan farklýmý
	
	
goto
	
$+2
	
	
goto
	
Etiket
	
	
;Doðru, W<L den etikete git.
	
ENDIF
	

	
IF
	
Islem==1;"
>
	
	
movfw
	
Degisken;karþýlaþtýmak için deðiþkeni w alýr.
	
	
subwf
	
Degisken2,W
	
;D1 
	
	
btfsc
	
STATUS,C
	
;Test et
	
	
goto
	
$+2;Y;YAnlýþ
	
	
goto
	
Etiket;Doðru
	
ENDIF
	
IF
	
Islem==3;"
!=" karþýlastýrýlan sayýlar eþit deðilse
	
	
movfw
	
Degisken;karþýlaþtýmak için deðiþkeni w alýr.
	
	
subwf
	
Degisken2,W
	
;Wreg ve L sayýsýn karþýlaþtýr.
	
	
btfsc
	
STATUS,Z
	
; Eþit deðilse (z=0 ise) Bir satýr atla
	
	
goto
	
$+2; Sayýlar eþir (Z=1 ise) kadýðý yerden devam et
	
	
goto
	
Etiket;Doðru sayýlar eþit deðil etikete dallan.
	
ENDIF
	
IF
	
Islem==4;"
<=
	
	
movfw
	
Degisken;karþýlaþtýmak için deðiþkeni w alýr.
	
	
subwf
	
Degisken2,W
	
;Wreg ve L sayýsýn karþýlaþtýr.
	
	
btfss
	
STATUS,C
	
; Küçük ve Eþit ise(C=1 ise) Bir satýr atla
	
	
goto
	
$+2; Sayýlar eþir (C=0 ise) kadýðý yerden devam et
	
	
goto
	
Etiket;Doðru sayýlar Küçük eþit etikete dallan.
	
ENDIF
	

	
IF
	
Islem==5;"
>=
	
	
movfw
	
Degisken;karþýlaþtýmak için deðiþkeni w alýr.
	
	
subwf
	
Degisken2,W
	
;Deðiþken ve sabit sayýyý karþýlaþtýr
	
	
btfss
	
STATUS,Z
	
; iþlem sýfýrmý mi?
	
	
btfss
	
STATUS,C
	
; iþlem negatifmi?
	
	
goto
	
Etiket
	
	
;Doðru, W>L den etikete git.
	
	

	
ENDIF
ENDM
;*************************************************************************************************
;
	
3. Makro
	
	
	
	

;*********************** Deðiþken ve sabiti karþýlaþtýrýr. DoðruEtikete deðilse Yanlýþetiket dallanýr.**********************
IfGotoL
	
macro
	
Degisken,Islem,Sabit,DoðruEtiket,Yanlýþetiket

	
IF
	
Islem==0;"
=
	
	
movfw
	
Degisken;karþýlaþtýmak için deðiþkeni w alýr.
	
	
sublw
	
Sabit;,W
	
;D1 
	
	
btfss
	
STATUS,Z
	
;Test et
	
	
goto
	
Yanlýþetiket;$+2;Y;YAnlýþ
	
	
goto
	
DoðruEtiket;Doðru
	
ENDIF
	
IF
	
Islem==2;"
<
	
	
movfw
	
Degisken;karþýlaþtýmak için deðiþkeni w alýr.
	
	
sublw
	
Sabit;,W
	
;Deðiþken ve sabit sayýyý karþýlaþtýr
	
	
btfsc
	
STATUS,C
	
; iþlem negatif mi?
	
	
btfsc
	
STATUS,Z
	
; sýfýrdan farklýmý
	
	
goto
	
Yanlýþetiket;$+2
	
	
goto
	
DoðruEtiket
	
;Doðru, W<L den etikete git.
	
ENDIF
	

	
IF
	
Islem==1;"
>
	
	
movfw
	
Degisken;karþýlaþtýmak için deðiþkeni w alýr.
	
	
sublw
	
Sabit;,W
	
;D1 
	
	
btfsc
	
STATUS,C
	
;Test et
	
	
goto
	
Yanlýþetiket;$+2;Y;YAnlýþ
	
	
goto
	
DoðruEtiket;Doðru
	
ENDIF
	
IF
	
Islem==3;"
!=" karþýlastýrýlan sayýlar eþit deðilse
	
	
movfw
	
Degisken;karþýlaþtýmak için deðiþkeni w alýr.
	
	
sublw
	
Sabit;,W
	
;Wreg ve L sayýsýn karþýlaþtýr.
	
	
btfsc
	
STATUS,Z
	
; Eþit deðilse (z=0 ise) Bir satýr atla
	
	
goto
	
Yanlýþetiket;$+2; Sayýlar eþir (Z=1 ise) kadýðý yerden devam et
	
	
goto
	
DoðruEtiket;Doðru sayýlar eþit deðil etikete dallan.
	
ENDIF
	
IF
	
Islem==4;"
<=
	
	
movfw
	
Degisken;karþýlaþtýmak için deðiþkeni w alýr.
	
	
sublw
	
Sabit;,W
	
;Wreg ve L sayýsýn karþýlaþtýr.
	
	
btfss
	
STATUS,C
	
; Küçük ve Eþit ise(C=1 ise) Bir satýr atla
	
	
goto
	
Yanlýþetiket;$+2; Sayýlar eþir (C=0 ise) kadýðý yerden devam et
	
	
goto
	
DoðruEtiket;Doðru sayýlar Küçük eþit etikete dallan.
	
ENDIF
	

	
IF
	
Islem==5;"
>=
	
	
movfw
	
Degisken;karþýlaþtýmak için deðiþkeni w alýr.
	
	
sublw
	
Sabit;,W
	
;Deðiþken ve sabit sayýyý karþýlaþtýr
	
	
btfss
	
STATUS,Z
	
; iþlem sýfýrmý mi?
	
	
btfss
	
STATUS,C
	
; iþlem negatifmi?
	
	
goto
	
DoðruEtiket
	
	
;Doðru, W>L den etikete git.
	
	
goto
	
Yanlýþetiket
	
ENDIF
ENDM
;**************************************************************************************
;
	
4. Makro
;*********************** Deðiþken ve Deðiþken2 karþýlaþtýrýr. DoðruEtikete yada Yanlýþetiket dallanýr.********
IfGoto
	
macro
	
Degisken,Islem,Degisken2,DoðruEtiket,Yanlýþetiket

	
IF
	
Islem==0;"
=
	
	
movfw
	
Degisken;karþýlaþtýmak için deðiþkeni w alýr.
	
	
subwf
	
Degisken2,W
	
;D1 
	
	
btfss
	
STATUS,Z
	
;Test et
	
	
goto
	
Yanlýþetiket;$+2;Y;YAnlýþ
	
	
goto
	
DoðruEtiket;Doðru
	
ENDIF
	
IF
	
Islem==2;"
<
	
	
movfw
	
Degisken;karþýlaþtýmak için deðiþkeni w alýr.
	
	
subwf
	
Degisken2,W
	
;Deðiþken ve sabit sayýyý karþýlaþtýr
	
	
btfsc
	
STATUS,C
	
; iþlem negatif mi?
	
	
btfsc
	
STATUS,Z
	
; sýfýrdan farklýmý
	
	
goto
	
Yanlýþetiket;$+2
	
	
goto
	
DoðruEtiket
	
;Doðru, W<L den etikete git.
	
ENDIF
	

	
IF
	
Islem==1;"
>
	
	
movfw
	
Degisken;karþýlaþtýmak için deðiþkeni w alýr.
	
	
subwf
	
Degisken2,W
	
;D1 
	
	
btfsc
	
STATUS,C
	
;Test et
	
	
goto
	
Yanlýþetiket;$+2;Y;YAnlýþ
	
	
goto
	
DoðruEtiket;Doðru
	
ENDIF
	
IF
	
Islem==3;"
!=" karþýlastýrýlan sayýlar eþit deðilse
	
	
movfw
	
Degisken;karþýlaþtýmak için deðiþkeni w alýr.
	
	
subwf
	
Degisken2,W
	
;Wreg ve L sayýsýn karþýlaþtýr.
	
	
btfsc
	
STATUS,Z
	
; Eþit deðilse (z=0 ise) Bir satýr atla
	
	
goto
	
Yanlýþetiket;$+2; Sayýlar eþir (Z=1 ise) kadýðý yerden devam et
	
	
goto
	
DoðruEtiket;Doðru sayýlar eþit deðil etikete dallan.
	
ENDIF
	
IF
	
Islem==4;"
<=
	
	
movfw
	
Degisken;karþýlaþtýmak için deðiþkeni w alýr.
	
	
subwf
	
Degisken2,W
	
;Wreg ve L sayýsýn karþýlaþtýr.
	
	
btfss
	
STATUS,C
	
; Küçük ve Eþit ise(C=1 ise) Bir satýr atla
	
	
goto
	
Yanlýþetiket;$+2; Sayýlar eþir (C=0 ise) kadýðý yerden devam et
	
	
goto
	
DoðruEtiket;Doðru sayýlar Küçük eþit etikete dallan.
	
ENDIF
	

	
IF
	
Islem==5;"
>=
	
	
movfw
	
Degisken;karþýlaþtýmak için deðiþkeni w alýr.
	
	
subwf
	
Degisken2,W
	
;Deðiþken ve sabit sayýyý karþýlaþtýr
	
	
btfss
	
STATUS,Z
	
; iþlem sýfýrmý mi?
	
	
btfss
	
STATUS,C
	
; iþlem negatifmi?
	
	
goto
	
DoðruEtiket
	
;Doðru, W>L den etikete git.
	
	
goto
	
Yanlýþetiket
	
ENDIF
ENDM
;*************************************************************************************************
;
	
5. Makro
	
	
	
	

;*********************** Deðiþken ve sabiti karþýlaþtýrýr. Etikete Altprogramýný çaðýrýr.*********
IfCallL
	
macro
	
Degisken,Islem,Sabit,Etiket

	
IF
	
Islem==0;"
=
	
	
movfw
	
Degisken;karþýlaþtýmak için deðiþkeni w alýr.
	
	
sublw
	
Sabit;,W
	
;D1 
	
	
btfss
	
STATUS,Z
	
;Test et
	
	
goto
	
$+2;Y;YAnlýþ
	
	
call
	
Etiket;Doðru
	
ENDIF
	
IF
	
Islem==2;"
<
	
	
movfw
	
Degisken;karþýlaþtýmak için deðiþkeni w alýr.
	
	
sublw
	
Sabit;,W
	
;Deðiþken ve sabit sayýyý karþýlaþtýr
	
	
btfsc
	
STATUS,C
	
; iþlem negatif mi?
	
	
btfsc
	
STATUS,Z
	
; sýfýrdan farklýmý
	
	
goto
	
$+2
	
	
call
	
Etiket
	
	
;Doðru, W<L den etikete git.
	
ENDIF
	

	
IF
	
Islem==1;"
>
	
	
movfw
	
Degisken;karþýlaþtýmak için deðiþkeni w alýr.
	
	
sublw
	
Sabit;,W
	
;D1 
	
	
btfsc
	
STATUS,C
	
;Test et
	
	
goto
	
$+2;Y;YAnlýþ
	
	
call
	
Etiket;Doðru
	
ENDIF
	
IF
	
Islem==3;"
!=" karþýlastýrýlan sayýlar eþit deðilse
	
	
movfw
	
Degisken;karþýlaþtýmak için deðiþkeni w alýr.
	
	
sublw
	
Sabit;,W
	
;Wreg ve L sayýsýn karþýlaþtýr.
	
	
btfsc
	
STATUS,Z
	
; Eþit deðilse (z=0 ise) Bir satýr atla
	
	
goto
	
$+2; Sayýlar eþir (Z=1 ise) kadýðý yerden devam et
	
	
call
	
Etiket;Doðru sayýlar eþit deðil etikete dallan.
	
ENDIF
	
IF
	
Islem==4;"
<=
	
	
movfw
	
Degisken;karþýlaþtýmak için deðiþkeni w alýr.
	
	
sublw
	
Sabit;,W
	
;Wreg ve L sayýsýn karþýlaþtýr.
	
	
btfss
	
STATUS,C
	
; Küçük ve Eþit ise(C=1 ise) Bir satýr atla
	
	
goto
	
$+2; Sayýlar eþir (C=0 ise) kadýðý yerden devam et
	
	
call
	
Etiket;Doðru sayýlar Küçük eþit etikete dallan.
	
ENDIF
	

	
IF
	
Islem==5;"
>=
	
	
movfw
	
Degisken;karþýlaþtýmak için deðiþkeni w alýr.
	
	
sublw
	
Sabit;,W
	
;Deðiþken ve sabit sayýyý karþýlaþtýr
	
	
btfss
	
STATUS,Z
	
; iþlem sýfýrmý mi?
	
	
btfss
	
STATUS,C
	
; iþlem negatifmi?
	
	
call
	
Etiket
	
	
;Doðru, W>L den etikete git.
	
	

	
ENDIF
ENDM
;**************************************************************************************
;
	
6. Makro
;*********************** Deðiþken ve Deðiþken2 karþýlaþtýrýr. Etikete dallanýr.********
IfCall
	
macro
	
Degisken,Islem,Degisken2,Etiket

	
IF
	
Islem==0;"
=
	
	
movfw
	
Degisken;karþýlaþtýmak için deðiþkeni w alýr.
	
	
subwf
	
Degisken2,W
	
;D1 
	
	
btfss
	
STATUS,Z
	
;Test et
	
	
goto
	
$+2;Y;YAnlýþ
	
	
call
	
Etiket;Doðru
	
ENDIF
	
IF
	
Islem==2;"
<
	
	
movfw
	
Degisken;karþýlaþtýmak için deðiþkeni w alýr.
	
	
subwf
	
Degisken2,W
	
;Deðiþken ve sabit sayýyý karþýlaþtýr
	
	
btfsc
	
STATUS,C
	
; iþlem negatif mi?
	
	
btfsc
	
STATUS,Z
	
; sýfýrdan farklýmý
	
	
goto
	
$+2
	
	
call
	
Etiket
	
	
;Doðru, W<L den etikete git.
	
ENDIF
	

	
IF
	
Islem==1;"
>
	
	
movfw
	
Degisken;karþýlaþtýmak için deðiþkeni w alýr.
	
	
subwf
	
Degisken2,W
	
;D1 
	
	
btfsc
	
STATUS,C
	
;Test et
	
	
goto
	
$+2;Y;YAnlýþ
	
	
call
	
Etiket;Doðru
	
ENDIF
	
IF
	
Islem==3;"
!=" karþýlastýrýlan sayýlar eþit deðilse
	
	
movfw
	
Degisken;karþýlaþtýmak için deðiþkeni w alýr.
	
	
subwf
	
Degisken2,W
	
;Wreg ve L sayýsýn karþýlaþtýr.
	
	
btfsc
	
STATUS,Z
	
; Eþit deðilse (z=0 ise) Bir satýr atla
	
	
goto
	
$+2; Sayýlar eþir (Z=1 ise) kadýðý yerden devam et
	
	
call
	
Etiket;Doðru sayýlar eþit deðil etikete dallan.
	
ENDIF
	
IF
	
Islem==4;"
<=
	
	
movfw
	
Degisken;karþýlaþtýmak için deðiþkeni w alýr.
	
	
subwf
	
Degisken2,W
	
;Wreg ve L sayýsýn karþýlaþtýr.
	
	
btfss
	
STATUS,C
	
; Küçük ve Eþit ise(C=1 ise) Bir satýr atla
	
	
goto
	
$+2; Sayýlar eþir (C=0 ise) kadýðý yerden devam et
	
	
call
	
Etiket;Doðru sayýlar Küçük eþit etikete dallan.
	
ENDIF
	

	
IF
	
Islem==5;"
>=
	
	
movfw
	
Degisken;karþýlaþtýmak için deðiþkeni w alýr.
	
	
subwf
	
Degisken2,W
	
;Deðiþken ve sabit sayýyý karþýlaþtýr
	
	
btfss
	
STATUS,Z
	
; iþlem sýfýrmý mi?
	
	
btfss
	
STATUS,C
	
; iþlem negatifmi?
	
	
call
	
Etiket
	
	
;Doðru, W>L den etikete git.
	
	

	
ENDIF
ENDM
;*************************************************************************************************
;
	
7. Makro
	
	
	
	

;*********************** Deðiþken ve sabiti karþýlaþtýrýr. DoðruEtikete deðilse Yanlýþetiket dallanýr.**********************
IfCallElseL
	
macro
	
Degisken,Islem,Sabit,DoðruEtiket,Yanlýþetiket

	
IF
	
Islem==0;"
=
	
	
movfw
	
Degisken;karþýlaþtýmak için deðiþkeni w alýr.
	
	
sublw
	
Sabit;,W
	
;D1 
	
	
btfss
	
STATUS,Z
	
;Test et
	
	
call
	
Yanlýþetiket;$+2;Y;YAnlýþ
	
	
call
	
DoðruEtiket;Doðru
	
ENDIF
	
IF
	
Islem==2;"
<
	
	
movfw
	
Degisken;karþýlaþtýmak için deðiþkeni w alýr.
	
	
sublw
	
Sabit;,W
	
;Deðiþken ve sabit sayýyý karþýlaþtýr
	
	
btfsc
	
STATUS,C
	
; iþlem negatif mi?
	
	
btfsc
	
STATUS,Z
	
; sýfýrdan farklýmý
	
	
call
	
Yanlýþetiket;$+2
	
	
call
	
DoðruEtiket
	
;Doðru, W<L den etikete git.
	
ENDIF
	

	
IF
	
Islem==1;"
>
	
	
movfw
	
Degisken;karþýlaþtýmak için deðiþkeni w alýr.
	
	
sublw
	
Sabit;,W
	
;D1 
	
	
btfsc
	
STATUS,C
	
;Test et
	
	
call
	
Yanlýþetiket;$+2;Y;YAnlýþ
	
	
call
	
DoðruEtiket;Doðru
	
ENDIF
	
IF
	
Islem==3;"
!=" karþýlastýrýlan sayýlar eþit deðilse
	
	
movfw
	
Degisken;karþýlaþtýmak için deðiþkeni w alýr.
	
	
sublw
	
Sabit;,W
	
;Wreg ve L sayýsýn karþýlaþtýr.
	
	
btfsc
	
STATUS,Z
	
; Eþit deðilse (z=0 ise) Bir satýr atla
	
	
call
	
Yanlýþetiket;$+2; Sayýlar eþir (Z=1 ise) kadýðý yerden devam et
	
	
call
	
DoðruEtiket;Doðru sayýlar eþit deðil etikete dallan.
	
ENDIF
	
IF
	
Islem==4;"
<=
	
	
movfw
	
Degisken;karþýlaþtýmak için deðiþkeni w alýr.
	
	
sublw
	
Sabit;,W
	
;Wreg ve L sayýsýn karþýlaþtýr.
	
	
btfss
	
STATUS,C
	
; Küçük ve Eþit ise(C=1 ise) Bir satýr atla
	
	
call
	
Yanlýþetiket;$+2; Sayýlar eþir (C=0 ise) kadýðý yerden devam et
	
	
call
	
DoðruEtiket;Doðru sayýlar Küçük eþit etikete dallan.
	
ENDIF
	

	
IF
	
Islem==5;"
>=
	
	
movfw
	
Degisken;karþýlaþtýmak için deðiþkeni w alýr.
	
	
sublw
	
Sabit;,W
	
;Deðiþken ve sabit sayýyý karþýlaþtýr
	
	
btfss
	
STATUS,Z
	
; iþlem sýfýrmý mi?
	
	
btfss
	
STATUS,C
	
; iþlem negatifmi?
	
	
call
	
DoðruEtiket
	
	
;Doðru, W>L den etikete git.
	
	
call
	
Yanlýþetiket
	
ENDIF
ENDM
;**************************************************************************************
;
	
8. Makro
;*********************** Deðiþken ve Deðiþken2 karþýlaþtýrýr. DoðruEtikete yada Yanlýþetiket dallanýr.********
IfCallElse
	
macro
	
Degisken,Islem,Degisken2,DoðruEtiket,Yanlýþetiket

	
IF
	
Islem==0;"
=
	
	
movfw
	
Degisken;karþýlaþtýmak için deðiþkeni w alýr.
	
	
subwf
	
Degisken2,W
	
;D1 
	
	
btfss
	
STATUS,Z
	
;Test et
	
	
call
	
Yanlýþetiket;$+2;Y;YAnlýþ
	
	
call
	
DoðruEtiket;Doðru
	
ENDIF
	
IF
	
Islem==2;"
<
	
	
movfw
	
Degisken;karþýlaþtýmak için deðiþkeni w alýr.
	
	
subwf
	
Degisken2,W
	
;Deðiþken ve sabit sayýyý karþýlaþtýr
	
	
btfsc
	
STATUS,C
	
; iþlem negatif mi?
	
	
btfsc
	
STATUS,Z
	
; sýfýrdan farklýmý
	
	
call
	
Yanlýþetiket;$+2
	
	
call
	
DoðruEtiket
	
;Doðru, W<L den etikete git.
	
ENDIF
	

	
IF
	
Islem==1;"
>
	
	
movfw
	
Degisken;karþýlaþtýmak için deðiþkeni w alýr.
	
	
subwf
	
Degisken2,W
	
;D1 
	
	
btfsc
	
STATUS,C
	
;Test et
	
	
call
	
Yanlýþetiket;$+2;Y;YAnlýþ
	
	
call
	
DoðruEtiket;Doðru
	
ENDIF
	
IF
	
Islem==3;"
!=" karþýlastýrýlan sayýlar eþit deðilse
	
	
movfw
	
Degisken;karþýlaþtýmak için deðiþkeni w alýr.
	
	
subwf
	
Degisken2,W
	
;Wreg ve L sayýsýn karþýlaþtýr.
	
	
btfsc
	
STATUS,Z
	
; Eþit deðilse (z=0 ise) Bir satýr atla
	
	
call
	
Yanlýþetiket;$+2; Sayýlar eþir (Z=1 ise) kadýðý yerden devam et
	
	
call
	
DoðruEtiket;Doðru sayýlar eþit deðil etikete dallan.
	
ENDIF
	
IF
	
Islem==4;"
<=
	
	
movfw
	
Degisken;karþýlaþtýmak için deðiþkeni w alýr.
	
	
subwf
	
Degisken2,W
	
;Wreg ve L sayýsýn karþýlaþtýr.
	
	
btfss
	
STATUS,C
	
; Küçük ve Eþit ise(C=1 ise) Bir satýr atla
	
	
call
	
Yanlýþetiket;$+2; Sayýlar eþir (C=0 ise) kadýðý yerden devam et
	
	
call
	
DoðruEtiket;Doðru sayýlar Küçük eþit etikete dallan.
	
ENDIF
	

	
IF
	
Islem==5;"
>=
	
	
movfw
	
Degisken;karþýlaþtýmak için deðiþkeni w alýr.
	
	
subwf
	
Degisken2,W
	
;Deðiþken ve sabit sayýyý karþýlaþtýr
	
	
btfss
	
STATUS,Z
	
; iþlem sýfýrmý mi?
	
	
btfss
	
STATUS,C
	
; iþlem negatifmi?
	
	
call
	
DoðruEtiket
	
;Doðru, W>L den etikete git.
	
	
call
	
Yanlýþetiket
	
ENDIF
ENDM
;******************************************************************************************
;
	
	
	
	
	
Bit test komutlarý
;******************************************************************************************
;
	
9. Makro
;*************** bit set(1) ise etikete atlar.
BITSG
	
macro
	
Reg,Bit,Label
	
;regin bitini kontrol et set ise etikete atla
	
btfsc
	
Reg,Bit
	
;regestirinni bitini kontrol et
	
goto
	
Label
	
;Bit set durumdaysa etikete atla.
Endm
;******************************************************************************************
;
	
10. Makro
;*************** bit set(1) ise etiketi çaðýr.
BITSC
	
macro
	
Reg,Bit,Label
	
;regin bitini kontrol et set ise etiketi çaðýr.
	
btfsc
	
Reg,Bit
	
;regestirinni bitini kontrol et
	
Call
	
Label
	
;Bit set durumdaysa etiketi çaðýr.
Endm
;******************************************************************************************
;
	
11. Makro
;*************** bit clear(0) ise etikete atlar.
BITCG
	
macro
	
Reg,Bit,Label
	
;regin bitini kontrol et set ise etikete atla
	
btfss
	
Reg,Bit
	
;regestirinni bitini kontrol et
	
goto
	
Label
	
;Bit set durumdaysa etikete atla.
Endm
;******************************************************************************************
;
	
12. Makro
;*************** bit clear(0) ise etiketi çaðýr.
BITCC
	
macro
	
Reg,Bit,Label
	
;regin bitini kontrol et set ise etiketi çaðýr.
	
btfss
	
Reg,Bit
	
;regestirinni bitini kontrol et
	
Call
	
Label
	
;Bit set durumdaysa etiketi çaðýr.
Endm
;******************************************************************************************
;
	
13. Makro
;*************** Status reg. z bitini test et
Jz
	
macro
	
Etiket
	

	
BITSG
	
STATUS,Z,Etiket
	
;SÝTATUSUN Z. BÝTÝ SETMÝ(1)?,Evetse etikete atla.
endm
;******************************************************************************************
;
	
14. Makro
;*************** Status reg. z bitini test et
Jnz
	
macro
	
Etiket
	

	
BITCG
	
STATUS,Z,Etiket
	
;SÝTATUSUN Z. BÝTÝ clearMÝ(0)?,Evetse etikete atla.
endm
;******************************************************************************************
;
	
15. Makro
;*************** Status reg. C bitini test et
Jc
	
macro
	
Etiket
	

	
BITSG
	
STATUS,C,Etiket
	
;SÝTATUSUN Z. BÝTÝ SETMÝ(1)?,Evetse etikete atla.
endm
;******************************************************************************************
;
	
16. Makro
;*************** Status reg. C bitini test et
Jnc
	
macro
	
Etiket
	

	
BITCG
	
STATUS,C,Etiket
	
;SÝTATUSUN Z. BÝTÝ clearMÝ(0)?,Evetse etikete atla.
endm
;******************************************************************************************
;
	
17. Makro
;*************** SELECT CASE YAPISI
;SELECT MACRO
	
PARAM
;
	
MOVF
	
PARAM,W
	

;ENDM
;CASE
	
MACRO
	
KOSUL,PARAM
;
	
IF
;ENDM

;***************************Makro Son******************************************************
LIST
;end

Ana kodda kullanılan picConf.inc dosyası:
Kod Seç
;Pic Donaným ayarlarý
;#DEFINE
	
XTAL
	
4000000
	
	
SUBTITLE
	
"PIC STANDART MAKRO"
;
	
	
/
RS232\
;
	
RS232.WRITE MACRO
	
TEXT
;
	
RS232.READ MACRO
	
TEXT
;
	
RS232.STRING MACRO
	
LEN,TEXT
;
	
RS232.CONFIG MACRO
	
BRATE,Kesme,Alma,Giden
;
	
RS232.BEGIN MACRO
	
BRATE
;
	
	
/
PWM\
;
	
PWM.SETUP
;
	
PWM.SETUP MACRO
	
PERIOT,DUTY
;
	
	
/
GENEL\
;
	
TOGGLEBIT
	
macro
	
Reg,Bit
;
	
MOVFF MACRO
	
REG1,REG2
;
	
MOVLF MACRO
	
Sabit,REG2
;#INCLUDE
	
<UART.ASM>
	
;
;extern
	
RS232_WRITE
;global
	
RS232_WRITE
;-------------------------------------------------------
;
	
	
	
	
/
Deðiþken TANIMLAMALAR\
#DEFINE
	
PORT_RX
	
PORTB,1
	
;RX PÝNÝ
#DEFINE
	
PORT_TX
	
PORTB,2
	
;TX PÝNÝ
#DEFINE
	
CCP1_PIN 3
	
	
;PWM 1 PÝNÝ
#DEFINE
	
TMR2_ON
	
	
BSF
	
T2CON,TMR2ON
	
;TMR2 ÇALIÞTIR
#DEFINE
	
TMR2_OFF
	
BCF
	
T2CON,TMR2ON
	
;TMR2 KAPAT


;
	
SAYAC_DEG_0
	
EQU
	
RW_IND-3
;
	
SAYAC_DEG_1
	
EQU
	
SAYAC_DEG_0-1
;*********DEÐÝÞKEN TANIMLAMA***************************
;
	
BANK0 RAM ADRESLERÝ
VARIABLE
	
RAM_START=0X20
VARIABLE
	
RAM_END=0X6F
;
	
BANK1 RAM ADRESÝ
VARIABLE
	
RAM_START1=0XA0
VARIABLE
	
RAM_END1=0XEF
;
	
BANK2 RAM ADRESÝ
VARIABLE
	
RAM_START2=0X120
VARIABLE
	
RAM_END2=0X14F
;
	
BANK3 RAM ADRESÝ
;VARIABLE
	
RAM_START3=0X20
;VARIABLE
	
RAM_END3=0X6F
;
VARIABLE
	
RAM_BANK_IND=0
	
;
BANK ÝNDEKSÝ
VARIABLE
	
DEGISKEN_IND=.0;TANIMLANANA RAM ÝNDEKSÝ
VARIABLE
	
DEGISKEN_ADRES=RAM_START
VARIABLE
	
_BTN_SAY 0
;*********YAZILIMDA KULLANILACAK DEÐÝÞKENLER***********
	

DEGISKEN_TANIMLARI:  UDATA  ;H'a0' 0X20;udata_shr;udata_ovr ;UDATA   ;0X20
	
;
RW_IND 
	
	
EQU
	
RAM_END;6FH;
	

	
;
EELEN_IND
	
EQU
	
RAM_END-1;6EH;
	

	
;
EEIND_1
	
	
EQU
	
RAM_END-2;6DH;
	

	
;
COUND_1
	
	
EQU
	
RAM_END-3;6CH;
	
;
COUND_2
	
	
EQU
	
RAM_END-4;6BH;

;******************************************************
;
KOD_BASLANCICI CODE
;---------------------8 bit tanýmlama-----------------
INT8
	
macro
	
D
	
;
UDATA_OVR
	
D   RES
	
1
	
;
CODE
endm
;----------------------16 bit tanýmlama---------------
INT16
	
macro
	
D
	
;
UDATA_OVR
	

	
D   RES
	
2
	
;
CODE
endm
;----------------------24 bit tanýmlama--------------
INT24
	
macro
	
D
	
;
UDATA_OVR
	

	
D   RES
	
3
	
;
CODE
endm
;----------------------32 bit tanýmlama--------------
INT32
	
macro
	
D
	
;
UDATA_OVR
	

	
D   RES
	
4
	
CODE
endm
;----------------------Dizi tanýmlama--------------
INTARRAY
	
macro
	
D,ALEN
	
;
UDATA_OVR
	

	
D   RES
	
ALEN
KOD CODE
endm
;;;;;;;;;;;;;;;;;;;;;;;;;;GEREKLRAM ADRESYÜKLEND?;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
INT8
	
RW_IND 
	
	
;
RES 1
	

;
INT8
	
EELEN_IND
	
;
RES 1
	

;
INT8
	
EEIND_1
	
	
;
RES 1
;INT8
	
COUND_1
	
	
;
RES 1
;INT8
	
COUND_2
	
	
;
RES 1
;INT8
	
ADRH
	
	
;
RES 1
;INT8
	
S_PCH
	
	
 ;
RES 1
	
;
PROGRAM COUNTER IN YUKSEK B?TLERYEDEKLEND?
;
INT8
	
ROM_ADR_H
	
;
RES
	
;P??N ROM ADRESYUKSEK B?TTAK?B? ?Ç?N KULLANILACAK
;INT8
	
ROM_ADR_L
	
;
RES
	
1;P??N ROM ADRES?ÜK B?TTAK?B? ?Ç?N KULLANILACAK
;INT8
	
CW_DATA
	
	
;
RES 1;W REGEST?R?SYEDE??
	

;
INT8
	
LOOPCNT;
	
RES 1;GEC?KME RUTUNDE???KEN?
;;;;;;;;;;;;;;;;;;;;;;;;;
RAM ADRES TANIMLARI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
NOLIST
;---------------sabit sayý atama-----------------------
MOVLF MACRO
	
Sabit,REG7
	
MOVLW
	
Sabit
	
MOVWF
	
REG7
	
;
MOVLW
	
REG7
	
;
MOVWF
	
FSR
	
;
MOVLW
	
Sabit
	
;
MOVWF
	
INDF
	
;
RAMLF
	
Sabit,REG7
ENDM
MOVLF16 MACRO
	
Sabit,REG2
	
MOVLF
	
(
Sabit 0XFF),REG2
	
MOVLF
	
((
Sabit 0XFF00)/0X100),REG2+1
;
	
MOVLF
	
LOW (Sabit),REG2
;
	
MOVLF
	
HIGH
	
(
Sabit),(REG2)+1
ENDM
MOVLF24 MACRO
	
Sabit,REG2
	
MOVLF
	
(
Sabit 0XFF),REG2
	
MOVLF
	
((
Sabit 0XFF00)/0X100),REG2+1
	
MOVLF
	
((
Sabit 0XFF0000)/0X10000),REG2+2
	
;
MOVLF
	
((
Sabit 0XFF000000)/0X1000000),REG2+3
ENDM
MOVLF32 MACRO
	
Sabit,REG2
	
MOVLF
	
(
Sabit 0XFF),REG2
	
MOVLF
	
((
Sabit 0XFF00)/0X100),REG2+1
	
MOVLF
	
((
Sabit 0XFF0000)/0X10000),REG2+2
	
MOVLF
	
((
Sabit 0XFF000000)/0X1000000),REG2+3
ENDM
;----------------------------------------------------
FRETURN
	
MACRO;
	
GITETIKET
	
MOVF
	
ADRH,W
	
MOVWF
	
PCLATH
	
RETURN
ENDM
FCALL
	
MACRO
	
GITETIKET
	
MOVLW
	
HIGH
	
GITETIKET
	
MOVWF
	
ADRH
	
MOVWF
	
PCLATH
	
CALL
	
GITETIKET
;--------------RAM BÖLGES?NBEL?RT?LEN ?NDEK KADAR TEM?ZLER
	

;
RAMCLRI
	
MACRO RM1_CNT,_RMBASLANGIC
;VARIABLE    
	
_RAM_IND=0
;_RAM_IND    SET _RAM_IND+1;RAM SAYDIRMA SATIRI SAYICI
;LOCAL
	
_SONTAKI_RAM#V(_RAM_IND);RAM SAYDIRMA ET?KET?
;
	
MOVLW
	
_RMBASLANGIC;BA?LANGIÇ RAM BÖLGESADRES?NW'YE AL
;
	
MOVWF
	
FSR ;BÖLGE ADRES?N? DOLAYLI ADRES BÖLGES?NE YÜKLE
;
	
MOVLW
	
RM1_CNT;S?L?NECEK ADRES ?NDEKS?N? W'
YE AL
;_SONTAKI_RAM#V(_RAM_IND):
;
	
CLRF
	
INDF;FSR DEKRAM BÖLGES?NS?L
;
	
INCF
	
FSR,F;SONRAKRAM BÖLGES?NÇA?IR
;
	
SUBLW
	
1   ;W'DEN 1 EKS?LT
;
	
BTFSS
	
STATUS,Z;SONUÇ 0 ?SE ??LEM? B?T?R,DE??LSE DEVAM ET
;
	
GOTO
	
_SONTAKI_RAM#V(_RAM_IND);SONUC 0 DAN FARKLI
;
	
ENDM
;--------------RAM BÖLGES?N? BEL?RT?LEN ?NDEK KADAR TEM?ZLER
	

RAMCLRI
	
MACRO
	
RAMSTART,RAM_CNT
LOCAL
	
SONTAKI_RAM_;RAM SAYDIRMA ET?KET?
VARIABLE    _PIC_RAM_IND=0
	
_PIC_RAM_IND
	
SET _PIC_RAM_IND+1;RAM SAYDIRMA SATIRI SAYICI
	
MOVLW
	
RAMSTART;BA?LANGIÇ RAM BÖLGES? ADRES?N? W'
YE AL
	
MOVWF
	
FSR ;BÖLGE ADRES?NDOLAYLI ADRES BÖLGES?NE YÜKLE
	
MOVLW
	
RAM_CNT;S?L?NECEK ADRES ?NDEKS?NW'YE AL
SONTAKI_RAM_#V(_PIC_RAM_IND):
	
CLRF
	
INDF;FSR DEK? RAM BÖLGES?N? S?L
	
INCF
	
FSR,F;SONRAK? RAM BÖLGES?N? ÇA?IR
	
SUBLW
	
1   ;FSR DE?ER?NDEN(STOP) RAM BÖLGES?N? KAR?ILA?TIR
	
BTFSS
	
STATUS,Z;SONUÇ 0 ?SE ??LEM? B?T?R,DE??LSE DEVAM ET
	
GOTO
	
SONTAKI_RAM_#V(_PIC_RAM_IND);SONUC 0 DAN FARKLI

	
ENDM
;--------------RAM BÖLGES?N? BEL?RT?LEN ?NDEK KADAR TEM?ZLER
	

RAMCLR
	
MACRO
	
RAMSTART,RAMSTOP
LOCAL
	
SONTAKI_RAM;RAM SAYDIRMA ET?KET?
VARIABLE    _PIC_RAM_IND=0
	
_PIC_RAM_IND
	
SET _PIC_RAM_IND+1;RAM SAYDIRMA SATIRI SAYICI
	
MOVLW
	
RAMSTART;BA?LANGIÇ RAM BÖLGES? ADRES?N? W'
YE AL
	
MOVWF
	
FSR ;BÖLGE ADRES?NDOLAYLI ADRES BÖLGES?NE YÜKLE
SONTAKI_RAM
#V(_PIC_RAM_IND):
	
CLRF
	
INDF;FSR DEKRAM BÖLGES?NS?L
	
INCF
	
FSR,F;SONRAKRAM BÖLGES?NÇA?IR
	
MOVFW
	
FSR;BITIRAM BÖLGESADRES?NW'YE AL
	

	
SUBLW
	
RAMSTOP   ;FSR DE?ER?NDEN(STOP) RAM BÖLGES?N? KAR?ILA?TIR
	
BTFSS
	
STATUS,Z;SONUÇ 0 ?SE ??LEM? B?T?R,DE??LSE DEVAM ET
	
GOTO
	
SONTAKI_RAM#V(_PIC_RAM_IND);SONUC 0 DAN FARKLI
	
CLRF
	
INDF;FSR DEK? RAM BÖLGES?N? S?L
	
ENDM
;-------------BEL?RT?LEN RAM ADRE?N? S?LER
	

CLRRAM
	
MACRO
	
RMADR
	
MOVLW
	
RMADR
	
MOVWF
	
FSR
	
CLRF
	
INDF
	
ENDM
;--------------SAB?T DE?ER? RAM ADRES?NE YÜKLER
RAMLF
	
MACRO
	
RMSABIT,RMADR
	
MOVLW
	
RMADR
	
MOVWF
	
FSR
	
MOVLW
	
RMSABIT
	
MOVWF
	
INDF
	
ENDM
;--------------B?R?NC? DE???KENDEK? DE?ER? W'
YE AL VE ?K?NCDE???KENE YÜKLE
RAMFF
	
MACRO
	
RMBIR,RMIKI
	
MOVLW
	
RMBIR;ADRESW YE AL
	
MOVWF
	
FSR ;DOLAYLI ADRESLEME BÖLGES?NE YAZ
	
MOVF
	
INDF,W;FSR YW YE AL
	
MOVLW
	
RMIKI;?K?NCRAM ADRES?NW YE AL
	
MOVWF
	
FSR ;?K?NCRAM ADRES?NDOLAYLI ADRESLEME ?Ç?N YÜKLE
	
MOVWF
	
INDF;W DEK?(B?R?NCADRES??ÇER???) ?K?NCADRESE YÜKLE
	
ENDM
;______________________________________________________

;******************************************************
;
	
	
	
	
/
PWM AYARLARI\
;
______________________________________________________
PWML
.SETUP MACRO
	
PERIOT,DUTY
	
BANKSEL
	
TRISB
	
BCF
	
	
TRISB,CCP1_PIN
	
MOVLF
	
PERIOT,PR2
	
;
PWM FREKANSI BELÝRLENDÝ
	
BANKSEL
	
PORTB
	
bCf
	
T2CON,T2CKPS0;;IF
	
(
PERIOT<=0XFF)
	
bCf
	
T2CON,T2CKPS1
IF
	
(
PERIOT>0XFF
	
IF (
PERIOT<=.1023);(PERIOT<=0XFFFF)
	
	
bSf
	
T2CON,T2CKPS0
	
	
bcf
	
T2CON,T2CKPS1
	
ELSE
	
	
bCf
	
T2CON,T2CKPS0
	
	
bSf
	
T2CON,T2CKPS1
	
ENDIF
ENDIF
	
MOVLF
	
0X0C,CCP1CON
	
;
PWM MODUNA GEÇÝLDÝ
	
BCF
	
	
CCP1CON,CCP1X
	
;
1. BÝT SIFIRLANDI
	
BCF
	
	
CCP1CON,CCP1Y
	
;
0. BÝT
	
SIFIRLANDI
IF
	
(
DUTY>=0X01) ;
	
IF (
DUTY<0X200)
	
BSF
	
	
CCP1CON,CCP1Y
	
;
0. BÝT
ENDIF
IF
	
DUTY>=0X02
	
BSF
	
	
CCP1CON,CCP1X
	
;
1. BÝT
ENDIF
;
	
MOVLF
	
(
DUTY/100),CCPR1H
	
;
PWM DOLULUK ORANI BELÝRLENDÝ.
	

	
MOVLF
	
DUTY 0XFF,CCPR1L
	
;
PWM DOLULUK ORANI BELÝRLENDÝ.
	

	
TMR2_ON
	
	
	
	
;
TMR2 ÇALIÞTIR PWM BAÞLAT
ENDM
;--------------------------------------------------------
PWM.SETUP MACRO
	
PERIOT,DUTY
	
BANKSEL
	
TRISB
	
BCF
	
	
TRISB,CCP1_PIN
	
MOVLF
	
PERIOT,PR2
	
;
PWM FREKANSI BELÝRLENDÝ
	
BANKSEL
	
PORTB
IF
	
(
PERIOT<=0XFF)
	
bCf
	
T2CON,T2CKPS0
	
bCf
	
T2CON,T2CKPS1
ENDIF
IF
	
(
PERIOT>0XFF
	
IF (
PERIOT<=.1023);(PERIOT<=0XFFFFFFFF)
	
	
bSf
	
T2CON,T2CKPS0
	
	
bcf
	
T2CON,T2CKPS1
	
ELSE
	
	
bCf
	
T2CON,T2CKPS0
	
	
bSf
	
T2CON,T2CKPS1
	
ENDIF
ENDIF
	
MOVLF
	
0X0C,CCP1CON
	
;
PWM MODUNA GEÇÝLDÝ
	
BCF
	
	
CCP1CON,CCP1X
	
;
1. BÝT
	
BCF
	
	
CCP1CON,CCP1Y
	
;
0. BÝT
	
BTFSC
	
DUTY,0
	
BSF
	
	
CCP1CON,CCP1Y
	
;
0. BÝT
	
BTFSC
	
DUTY,1
	

	
BSF
	
	
CCP1CON,CCP1X
	
;
1. BÝT
	
MOVLF
	
LOW
	
DUTY,CCPR1L
	
;
PWM DOLULUK ORANI BELÝRLENDÝ.
	

	
TMR2_ON
	
	
	
	
;
TMR2 ÇALIÞTIR PWM BAÞLAT
ENDM
;--------------------------------------------------------
PWM
	
MACRO
	
DEGER1
BANKSEL
	
CCP1CON
	
MOVFF
	
DEGER1,COUND_1
	
BCF
	
	
CCP1CON,CCP1X
	
;
1. BÝT
	
BCF
	
	
CCP1CON,CCP1Y
	
;
0. BÝT
;
	
BTFSC
	
DEGER1,0;
	
BSF
	
	
CCP1CON,CCP1Y
	
;
0. BÝT;
	
BTFSC
	
DEGER1,1;
	
BSF
	
	
CCP1CON,CCP1X
	
;
1. BÝT
	
rRf COUND_1,F
	
BTFSC
	
STATUS,C
	
BSF
	
	
CCP1CON,CCP1Y
	
;
0. BÝT
	
rRf COUND_1,F
	
BTFSC
	
STATUS,C
	
BSF
	
	
CCP1CON,CCP1X
	
;
1. BÝT
	
MOVFF
	
COUND_1,CCPR1L
ENDM
;---------------------------------------------------------
PWM16
	
MACRO
	
DEGER1
BANKSEL
	
CCP1CON
	
MOVFF
	
DEGER1,COUND_1
;
	
MOVFF
	
DEGER1+1,COUND_2
	
BCF
	
	
CCP1CON,CCP1X
	
;
1. BÝT
	
BCF
	
	
CCP1CON,CCP1Y
	
;
0. BÝT
;
	
BTFSC
	
COUND_1,0;DEGER1,0
;
	
BSF
	
	
CCP1CON,CCP1Y
	
;
0. BÝT
;
	
BTFSC
	
COUND_1,1;DEGER1,1
;
	
BSF
	
	
CCP1CON,CCP1X
	
;
1. BÝT
	
rRf COUND_1,F
	
BTFSC
	
STATUS,C
	
BSF
	
	
CCP1CON,CCP1Y
	
;
0. BÝT
	
rRf COUND_1,F
	
BTFSC
	
STATUS,C
	
BSF
	
	
CCP1CON,CCP1X
	
;
1. BÝT
;;
	
BCF
	
COUND_1,6;
	
BCF
	
COUND_1,7
	
BTFSC
	
DEGER1+1,0;COUND_2,0
	
BSF
	
	
COUND_1,6
	
;
0. BÝT
	
BTFSC
	
DEGER1+1,1;COUND_2,1
	
BSF
	
	
COUND_1,7
	
;
1. BÝT
	
MOVFF
	
COUND_1,CCPR1L
ENDM
;------------------------------------------------------------
PWML
	
MACRO
	
DEGER
BANKSEL
	
CCP1CON
	
BCF
	
	
CCP1CON,CCP1X
	
;
1. BÝT
	
BCF
	
	
CCP1CON,CCP1Y
	
;
0. BÝT
IF
	
(
DEGER 0X01
	
BSF
	
CCP1CON,CCP1Y
	
;
0. BÝT
ENDIF
IF
	
DEGER 0X02
	
BSF
	
CCP1CON,CCP1X
	
;
1. BÝT
ENDIF
	
MOVLF
	
(
DEGER>>2),CCPR1L;(DEGER/4),CCPR1L
ENDM
;______________________________________________________
;------------------------------------------------------
;
	
	
	
	
	
/
EEPROM\
EEPROM.CONFIG
	
macro
	
KESME

ENDM
;--------------------ADRES YAZ
EEPROM
.ADRESL
	
macro
	
ADRS
	
	
BANKSEL
	
EEADR
	
;
ADRESÝ BANKINA GEÇ
;
	
	
MOVLF
	
ADRS,EEADR
	
;
ADRES BÝLGÝSÝNÝ ADRES YAZMACINA YÜKLE
	
	
movlw
	
ADRS
	
	
MOVWF
	
EEADR
	
	
BANKSEL
	
PORTA
	
	
;
BANK0 GEÇ
ENDM
EEPROM
.ADRES
	
macro
	
ADRS
	
	
MOVFW
	
ADRS
	
	
BANKSEL
	
EEADR
	
;
ADRESÝ BANKINA GEÇ
	
	
MOVWF
	
EEADR
	
;
ADRES BÝLGÝSÝNÝ ADRES YAZMACINA YÜKLE
	
	
BANKSEL
	
ADRS
	
;
BANK0 GEÇ
ENDM
;-------------------SABÝT DEÐER YAZMA---------------------
WRITEL
	
MACRO
	
VERI
	
;
	
BANKSEL
	
PORTA
	
;
BANK0 GEÇ
	
	
MOVLW
	
VERI
	
;
GÖNDERÝLECEK VERÝYÝ W YÜKLLE
	
	
BANKSEL
	
EEDATA
	
	
MOVWF
	
EEDATA
	
;
KAYDEDÝLECEK VERÝ YÜKLE
	
	
;
BCF
	
	
EECON1,EEPGD
        BSF
	
	
EECON1,WREN
	
;
YAZMA ÝÞLEMÝ AKTÝF
	
	
MOVLF
	
0X55,EECON2;YAZMA KOMUTU 1
	
	
MOVLF
	
0XAA,EECON2;YAZMA KOMUTU 2
	
	
BSF
	
	
EECON1,WR
	
;
EPROMA YAZMA TAMAMLANDI
	
	
BCF
	
	
EECON1,EEIF
	
;
KESME BÝTÝNÝ TERMÝZLE
	

;
	
	
BITSG
	
EECON1,WR,$-1;YAZMA BÝTTÝMÝ KOMTROL ET,
	
	
BTFSC
	
EECON1,WR
	
	
GOTO
	
$-
1
	
	

	
	
BCF
	
	
EECON1,WREN
	
;
YAZMA ÝÞLEMÝNÝ KAPAT
	
	
BANKSEL
	
PORTA
ENDM
;-------------------DEÐÝÞKEN YAZMA------------------------
WRITE
	
MACRO
	
VERI
	
	
BANKSEL
	
VERI
	
;
BANK0 GEÇ
	
	
MOVFW
	
VERI
	
;
GÖNDERÝLECEK VERÝYÝ W YÜKLLE
	
	
BANKSEL
	
EEDATA
	
	
MOVWF
	
EEDATA
	
;
KAYDEDÝLECEK VERÝ YÜKLE
	
	
;
BCF
	
	
EECON1,EEPGD
        BSF
	
	
EECON1,WREN
	
;
YAZMA ÝÞLEMÝ AKTÝF
	
	
MOVLF
	
0X55,EECON2;YAZMA KOMUTU 1
	
	
MOVLF
	
0XAA,EECON2
	
;
YAZMA KOMUTU 2
	
	
BSF
	
	
EECON1,WR
	
;
EPROMA YAZMA TAMAMLANDI
	
	
BCF
	
	
EECON1,EEIF
	
;
KESME BÝTÝNÝ TERMÝZLE
	

;
	
	
BITSG
	
EECON1,WR,$-1;YAZMA BÝTTÝMÝ KOMTROL ET,
	
	
BTFSC
	
EECON1,WR
	
	
GOTO
	
$-
1
	
	
BCF
	
	
EECON1,WREN
	
;
YAZMA ÝÞLEMÝNÝ KAPAT
	
	
BANKSEL
	
PORTA
	

ENDM
EEPROM
.WRITEL
	
macro
	
ADRES,VERI
	
	
EEPROM.ADRESL
	
ADRES
	
;
ADRESÝ YÜKLE
	
	
WRITEL
	
VERI
	
	
	
;
VERÝYÝ YAZ
ENDM
EEPROM
.WRITELF
	
macro
	
ADRES,VERI
	
	
EEPROM.ADRESL
	
ADRES
	
;
ADRESÝ YÜKLE
	
	
WRITE
	
VERI
	
	
	
;
VERÝYÝ YAZ
ENDM
EEPROM
.WRITE
	
macro
	
ADRES,VERI
	
	
EEPROM.ADRES
	
ADRES
	
;
ADRESE GÝT
	
	
WRITE
	
VERI
	
	
	
;
VERÝYÝ KAYDET
ENDM
;<<<<<<<<<<<<<<<<<<<<<<<<<<KÜME YAZDIRMA PROSÖDÜRÜN YAZDIR>>>>>>>>>>>>>
EEPROM.LONGWRITEL
	
MACRO
	
ADR,EELEN,RAMADR
	
LOCAL
	
READ_LABEL
;
	
EELEN_IND
	
RES
	
1
;
	
EEIND_1
	
RES
	
1
	

	
	
CLRF
	
EEIND_1
	
	
MOVLF
	
(
EELEN),EELEN_IND
	
READ_LABEL
	
	
MOVFW
	
EEIND_1
	
;
BÝR SONRAKÝ ADRES ÝNDÝSÝNÝ YÜKLE
	
	
ADDLW
	
ADR
	
	
	
BANKSEL
	
EEADR
	
;
ADRESÝ BANKINA GEÇ
	
	
	
MOVWF
	
EEADR
	
;
ADRES BÝLGÝSÝNÝ ADRES YAZMACINA YÜKLE
	
	
	
BANKSEL
	
RAMADR
	
	
MOVFW
	
EEIND_1
	
	
ADDLW
	
RAMADR
	
	
MOVWF
	
FSR
	
	
WRITE
	
INDF;SIRADAKÝ RAM ADRESÝNE YAZ
	
	
INCF
	
EEIND_1,F
	
	
DECFSZ
	
EELEN_IND,F
	
	
GOTO
	
READ_LABEL
ENDM
;CLRF
	
EEIND_2
;MOVLF
	
.9,EELEN_IND1
;
	
READ_LABEL
;
	
	
MOVFW
	
EEIND_2
	
;
BÝR SONRAKÝ ADRES ÝNDÝSÝNÝ YÜKLE
;
	
	
ADDLW
	
0;ADR
;
	
	
	
BANKSEL
	
EEADR
	
;
ADRESÝ BANKINA GEÇ
;
	
	
	
MOVWF
	
EEADR
	
;
ADRES BÝLGÝSÝNÝ ADRES YAZMACINA YÜKLE
;
	
	
	
BANKSEL
	
IND
;
	
	
MOVFW
	
(
EELEN_IND1);EEIND_2
;
	
	
ADDLW
	
EEMETIN-1;RAMADR
;
	
	
MOVWF
	
FSR
;
	
	
READL
	
	
;
BÝLGÝYÝ EEPROMDAN AL
;
	
	
MOVWF
	
INDF;SIRADAKÝ RAM ADRESÝNE YAZ
;
	
	
INCF
	
EEIND_2,F
;
	
	
DECFSZ
	
EELEN_IND1,F
;
	
	
GOTO
	
READ_LABEL
EEPROM
.LONGWRITE
	
MACRO
	
ADR,LEN,RAMADR
	
LOCAL
	
READ_LABEL
	
MOVFF
	
(
LEN),EELEN_IND
	
READ_LABEL
	
	
MOVFW
	
ADR
	
;
BÝR SONRAKÝ ADRES ÝNDÝSÝNÝ YÜKLE
	
	
	
BANKSEL
	
EEADR
	
;
ADRESÝ BANKINA GEÇ
	
	
	
MOVWF
	
EEADR
	
;
ADRES BÝLGÝSÝNÝ ADRES YAZMACINA YÜKLE
	
	
	
BANKSEL
	
RAMADR
	
	
MOVLF
	
RAMADR,FSR
	
	
WRITE
	
INDF;SIRADAKÝ RAM ADRESÝNE YAZ
	
	
INCF
	
ADR,F
	
	
INCF
	
RAMADR,F
	
	
DECFSZ
	
EELEN_IND,F
	
	
GOTO
	
READ_LABEL
ENDM
;-------------------OKUMA--------------------------------------
READL
	
MACRO
	

	
	
BANKSEL
	
EECON1
	
	
;
BAKA GEÇ
	
	
BSF
	
	
EECON1,RD
	
;
OKUYMAYI AKTÝF ET
	
	
MOVFW
	
EEDATA
	
	
;
VERÝ AL
	
	
BCF
	
	
EECON1,RD
	
;
OKUMA KAPAT
	
	
BANKSEL
	
PORTA
	

ENDM
EEPROM
.READ
	
MACRO
	
ADR,VERI
	
	
EEPROM.ADRES
	
ADR
	
	
READL
	
	
BANKSEL
	
VERI
	

	
	
MOVWF
	
VERI
ENDM
;--------------------BELÝRTÝLEN ADETTE VERÝ OKUR--------------
EEPROM.LONGREADL
	
MACRO
	
EADR,LEN,RAMADR
	
LOCAL
	
READ_LABEL
	
	
CLRF
	
EEIND_1
	
	
MOVLF
	
LEN,EELEN_IND
	
READ_LABEL
	
	
MOVFW
	
EEIND_1
	
;
BÝR SONRAKÝ ADRES ÝNDÝSÝNÝ YÜKLE
	
	
ADDLW
	
EADR
	
	
	
BANKSEL
	
EEADR
	
;
ADRESÝ BANKINA GEÇ
	
	
	
MOVWF
	
EEADR
	
;
ADRES BÝLGÝSÝNÝ ADRES YAZMACINA YÜKLE
	
	
	
BANKSEL
	
RAMADR
	
	
MOVFW
	
EEIND_1
	
	
ADDLW
	
RAMADR
	
	
MOVWF
	
FSR
	
	
READL
	
	
;
BÝLGÝYÝ EEPROMDAN AL
	
	
MOVWF
	
INDF;SIRADAKÝ RAM ADRESÝNE YAZ
	
	
INCF
	
EEIND_1,F
	
	
DECFSZ
	
EELEN_IND,F
	
	
GOTO
	
READ_LABEL
ENDM
EEPROM
.LONGREAD
	
MACRO
	
EPADR,LEN,RAMADR
	
LOCAL
	
READ_LABEL
	
MOVLF
	
RAMADR,EEIND_1
	
MOVFF
	
LEN,EELEN_IND
	
READ_LABEL
	
	
MOVFW
	
ADR
	
;
BÝR SONRAKÝ ADRES ÝNDÝSÝNÝ YÜKLE
	
	
	
BANKSEL
	
EEADR
	
;
ADRESÝ BANKINA GEÇ
	
	
	
MOVWF
	
EEADR
	
;
ADRES BÝLGÝSÝNÝ ADRES YAZMACINA YÜKLE
	
	
	
BANKSEL
	
RAMADR
	
	
MOVFF
	
EEIND_1,FSR
	
	
READL
	
	
;
BÝLGÝYÝ EEPROMDAN AL
	
	
MOVWF
	
INDF;SIRADAKÝ RAM ADRESÝNE YAZ
	
	
INCF
	
ADR,F
	
	
INCF
	
EEIND_1,F
	
	
DECFSZ
	
EELEN_IND,F;LEN,F
	
	
GOTO
	
READ_LABEL
ENDM
;---------------------SABÝT DEÐER YÜKLEMEYE YARAR-------
EEPROM.YUKLE MACRO
	
EPADR,EDATA
	
;
ORG
	
0x2100+EPADR;YAZILACAK ADRES GÝT
	
DE
	
EDATA
ENDM
;______________________________________________________
;******************************************************
;
	
	
	
	
/
GENEL MAKOLAR\
;----------------
bit tersleme--------------------------
TOGGLEBIT
	
macro
	
Reg,Bit
	
MOVLW
	
1<<Bit
	
xorwf
	
Reg,F
ENDM
;---------------deðiþken taþýma------------------------
MOVFF MACRO
	
REG1,REG2
	
MOVFW
	
REG1
	
MOVWF
	
REG2
ENDM
MOVFF16 MACRO
	
REG1,REG2
	
MOVFF
	
REG1,REG2
	
MOVFF
	
(
REG1)+1,(REG2)+1
ENDM
MOVFF24 MACRO
	
REG1,REG2
	
MOVFF
	
REG1,REG2
	
MOVFF
	
(
REG1+1),(REG2+1)
	
MOVFF
	
(
REG1)+2,(REG2)+2
	
MOVFF
	
(
REG1)+3,(REG2)+3
ENDM
MOVFF32 MACRO
	
REG1,REG2
	
MOVFF
	
REG1,REG2
	
MOVFF
	
(
REG1+1),(REG2+1)
	
MOVFF
	
(
REG1)+2,(REG2)+2
	
MOVFF
	
(
REG1)+3,(REG2)+3
ENDM
;=======================D??ER MAKROLAR==================================

;
HEXTODEC
	
MACRO
	
HEXSAYI,DSP3
;
	
LOCAL
	
NEXTHEX
;
	
LOCAL
	
NEXTDEC
;
	
LOCAL
	
HEXTODEC_END
;#DEFINE
	
HEXDEGER 
;
	
MOVFF
	
HEXSAYI,EEIND_1
;
	
MOVLF
	
3,RW_IND
	
	
;
SAYAÇ DEÐÝÞKENÝ (HEX BASAMAK SAYISI)
;
	
MOVLF
	
DSP3,FSR;EEIND_1;DÝJÝTLERÝN DEÐERÝNÝ SAKLAYAN DEÐÝKENLERÝN BAÞLANGIÇ ADRESÝ
ÖZETLEMEK GEREKÝRSE 0XFF=255 YANÝ HEX OLARAK 8BÝTLÝK ENYÜKSEK DEÐER
0XFF YANÝ 2 BASAMAKLI BÝR DEÐERBUNUN DEC YANÝ NORMAL SAYI KARÞILIÐI 255 YANÝ 3 BASMAKLI BÝR
SAYIDIRBUNA GÖRE
	
8BÝTLÝK HEX SAYISINI DENÜÞTÜRMEK ÝÇÝN 24BÝT(3 BASASMAKBÝR DEÐÝÞKEN TANIMLAMAK 
VE BUNU DECÝMEL SAYI ÝÇÝN KULLANMAK GEREKECEK
;
	
CLRF
	
DSP3
;
	
CLRF
	
DSP3+1
;
	
CLRF
	
DSP3+2

;
	
MOVLF
	
0X0A,EELEN_IND;



;
	
DECFSZ
	
EEIND_1,F;SAYIYI AZALT
;
	
GOTO
	
NEXTDEC
	
;
DEC ÇEVÝR
;
	
GOTO
	
HEXTODEC_END
;NEXTHEX
;
	
clrf
	
INDF
;
	
INCF
	
FSR,F
	
;
SIRADAKÝ ADRESÝ GETÝR
;
	
DECFSZ
	
RW_IND,F;BASAMAK ÝNDEKSÝ AZALT
;
	
GOTO
	
NEXTHEX;BÝTMEDÝ DEVAM ET
;
	
GOTO
	
HEXTODEC_END
	

;
NEXTDEC
;
	
DECF
	
EELEN_IND,F
	

;
GOTO
	
HEXTODEC_END
	

;
HEXTODEC_END
;ENDM
;----------------------------------------------------
SN74LS164
	
MACRO
	
DPORT,_DPIN,CPORT,_CPIN,SIFDATA;
;
____________________________________________________
;SEND_DATA
LOCAL
	
CLOCK
LOCAL
	
SEND1
	
MOVLF
	
.8,RW_IND 
SEND1
	
RRF
	
SIFDATA,F;74LS164'E GÖNDERÝLECEK DATAYI BÝR BÝT SAÐA KAYDIR.
	
BTFSS
	
STATUS,C;KAYAN BÝT DEÐERÝNÝ 1 MÝ?
	
GOTO
	
$+2;HAYIR,BÝT 0 DATA PÝNÝNÝ 0 YAPAN KODA GÝT
	
GOTO
	
$+3;EVET, BÝTÝN DEÐERÝ 1 DATA PÝNÝNÝ SET ET
	
BCF
	
	
DPORT,_DPIN
	
;DEÐER 0 (PÝN 0 A ÇEK)
	
GOTO
	
CLOCK
	
;CLOCK PALSI ÜRET
	
BSF
	
	
DPORT,_DPIN
	
;DEÐER 1
CLOCK
	
;CLOK PALSI ÜRETEN KOD
	
BCF
	
CPORT,_CPIN
	
;CLOK PÝNÝ RESETLE
	
NOP;CALL
	
DELAY;BEKLE
	
NOP
	
NOP
	
BSF
	
CPORT,_CPIN
	
;CLOCK PÝNÝ SETT DURUMA GETÝR
	
NOP;CALL
	
DELAY;BEKLE
	
NOP
	
NOP
	
BCF
	
CPORT,_CPIN
	
DECFSZ
	
RW_IND,F
	
;GÖNDERÝLEN BÝTSAYISIN 1 DÜÞÜR VE 0 MI KONTROL ET
	
GOTO
	
SEND1;8 ADET DATA BÝTMEDÝ
	
RRF
	
SIFDATA,F
ENDM

;*******************BUTON FONKS?YONU*******************************************
BUTON_TIKLA
	
MACRO
	
BTNPORT,BTNPIN,BTNETIKET
_BTN_SAY    SET
	
_BTN_SAY+1
LOCAL
	
BTN_TEST_ET#v(_BTN_SAY)
LOCAL
	
BTN_SONU#v(_BTN_SAY)
	
BITCG
	
BTNPORT,BTNPIN,BTN_TEST_ET#v(_BTN_SAY)
	
GOTO
	
BTN_SONU#v(_BTN_SAY)
BTN_TEST_ET#v(_BTN_SAY):
	
BITCG
	
BTNPORT,BTNPIN,BTN_TEST_ET#v(_BTN_SAY)
	
CALL
	
BTNETIKET
BTN_SONU#v(_BTN_SAY):
	
NOP
	
ENDM
;*************************BEKLEM RUT?N?****************************************
GLOBAL
	
DELAY1MS,DELAYL10US
YAZILIM_KOD_BASLANGICI:CODE
DELAY1MS:                            ;lms PAUSE
    MOVLW    .155;.155;.100    ;1CYC
    MOVWF    LOOPCNT    ;1CYC
DELAYL10US:       
    NOP        ;lCYC
    NOP        ;lCYC
    NOP        ;lCYC
    NOP        ;lCYC
    NOP        ;lCYC
    NOP        ;lCYC
    NOP        ;lCYC
    DECFSZ    LOOPCNT,F    ;8*LOOPCNT
    GOTO DELAYL10US    ;2CYC, (8*LOOPCNT-1)*2
RETURN  ;2CYC
; TOPLAM GEC?KME=1+1+(8*LOOPCNT-1)+(8*LOOPCNT-1)*2+2
; LOOPCNT=155DECIMAL   
; TOPLAM GEC?KME=   1+1+(8*155-1)+(8*155-1)*2+2
; TOPLAM GEC?KME=C   
BEKLE_10CYC:GOTO
	
BEKLE_08CYC
BEKLE_08CYC:GOTO
	
BEKLE_06CYC
BEKLE_06CYC:GOTO
	
BEKLE_04CYC
BEKLE_04CYC:RETURN     
;****************son***********************************

;;global
	
RS232_WRITE
;R_WRITE
	
macro
;;local
	
RS232_WRITE
;;RS232_WRITE
;;
	
MOVWF
	
TXREG
;
	
BANKSEL
	
TXSTA
;
	
BTFSS
	
TXSTA,TRMT;1
;
	
GOTO
	
$-1
;
	
BANKSEL
	
TXREG
;
	
RETURN
;endm
LIST


Ana kodda kullanılan UART_MACRO.inc dosyası:
Kod Seç
VARIABLE    UART_SEND_IND
VARIABLE    RS232_SEND_IND
,RS232_TEXT_IND
CODE
	

;******************************************************
;
	
	
	
	
/
RS232 AYARLARI\
;-------------
GELEN VERÝYÝ OKU-------------------------
RS232.READ MACRO
	
TEXT
	
BITSG
	
PIR1,RCIF,-1
	
MOVFF
	
RCREG,TEXT
ENDM
;-------------GÖNDERME---------------------------------
RS232.WRITEL MACRO
	
TEXT
LOCAL
	
UART_SEND_TXT#V(UART_SEND_IND)
UART_SEND_IND SET UART_SEND_IND+1
	
MOVLF
	
TEXT,TXREG
	
BANKSEL
	
TXSTA
UART_SEND_TXT
#V(UART_SEND_IND):
	
BTFSS
	
TXSTA,TRMT;1
	
GOTO
	
UART_SEND_TXT#V(UART_SEND_IND);$-1
	
BANKSEL
	
TXREG
ENDM
;-----------16BIT SABÝT VERÝ GÖNDERME-----------------
RS232.WRITE16 MACRO
	
TEXT
	
RS232.WRITE
	
LOW
	
TEXT
	
RS232.WRITE
	
HIGH
	
TEXT
ENDM
;-------------------------24BIT SABÝT VERÝ GÖNDERME-----------------
RS232.WRITE24 MACRO
	
Sabit
	
RS232.WRITE
	
(
Sabit 0XFF)
	
RS232.WRITE
	
((
Sabit 0XFF00)/0X100)
	
RS232.WRITE
	
((
Sabit 0XFF0000)/0X10000)
ENDM
;-------------------------32BIT SABÝT VERÝ GÖNDERME-----------------
RS232.WRITE32 MACRO
	
Sabit
	
RS232.WRITE
	
(
Sabit 0XFF)
	
RS232.WRITE
	
((
Sabit 0XFF00)/0X100)
	
RS232.WRITE
	
((
Sabit 0XFF0000)/0X10000)
	
RS232.WRITE
	
((
Sabit 0XFF000000)/0X1000000)
ENDM
;--------------------8BÝT VERÝ GÖNDERME------------------------
RS232.SEND MACRO
	
RS_TEXT
    local
	
RS_GONDER#V(RS232_SEND_IND)
    
RS232_SEND_IND SET RS232_SEND_IND+1
	
MOVFF
	
RS_TEXT,TXREG
	
BANKSEL
	
TXSTA
RS_GONDER
#V(RS232_SEND_IND):
	
BTFSS
	
TXSTA,TRMT;1
	
GOTO
	
RS_GONDER#V(RS232_SEND_IND);$-1
	
BANKSEL
	
TXREG
;R_WRITE
ENDM

;-------------------------16BÝT VERÝ GÖNDERME-----------------
RS232.SEND16 MACRO
	
TEXT
	
RS232.SEND
	
(
TEXT)+1
;
	
incf
	
FSR,F
	
RS232.SEND
	
(
TEXT);+1

ENDM
;-------------------------24BÝT VERÝ GÖNDERME-----------------
RS232.SEND24 MACRO
	
TEXT
	
;
	
RW_IND24
	
RES
	
1
	
	
LOCAL
	
TEKRAR_RW
	
	
MOVLF
	
3,RW_IND;24
	
;
GÖNDERÝLEN VERÝ BOYUTU
	
	
MOVLF
	
TEXT+2,FSR
	
;
BELLEK ADRESÝNÝ YÜKLE
	
	
CALL
	
RS232_SAYARAK_YAZ
ENDM
;---------------------32BÝT VERÝ GÖNDERME---------------
RS232.SEND32 MACRO
	
TEXT
	
;
	
RW_IND32
	
RES
	
1
	
	
LOCAL
	
TEKRAR_RW32
	
	
MOVLF
	
4,RW_IND;32
	
;
GÖNDERÝLEN VERÝ BOYUTU
	
	
MOVLF
	
TEXT+3,FSR
	
;
BELLEK ADRESÝNÝ YÜKLE
	
	
CALL
	
RS232_SAYARAK_YAZ
ENDM
;
	
-----------
SABÝT METÝNLERÝ GÖNDERME METNÝ------------
;
RS232.STRING MACRO
	
LEN,TEXT
;
	
COUNT
	
RES
	
1
;
	
TADRES
	
RES
	
1
;LOCAL
	
STRING_NEXT
;LOCAL
	
_MESAJ
	
;;
EXTERN
;
	
MOVLF
	
LEN,COUNT
;
	
CLRF
	
TADRES
;
	
GOTO
	
STRING_NEXT
;_MESAJ
;
	
PAGESEL
	
_MESAJ
	

;
	
addwf
	
PCL,F
	
;
ADRESE DALLAN
;
	
DT
	
TEXT
;STRING_NEXT
	

;
	
MOVFW
	
TADRES
	
;
TABLO ADRESÝ
;
	
CALL
	
_MESAJ;
	
MOVWF
	
PCL;,F
	
;
ADRESE DALLAN
;
	
MOVWF
	
TXREG
	
;
TABLO BÝLGÝSÝNÝ GÖNDER
;
	
BANKSEL
	
TXSTA
	
;
BANK1 GEÇ
;
	
BTFSS
	
TXSTA,1;TRMT
;
	
GOTO
	
$-
1
	
	
;
GÖNDERME TAMAMLANDI
;
	
BANKSEL
	
TXREG
	
;
BANK0 GEÇ
;
	
INCF
	
TADRES,F;ADRESÝ ARTIR
;
	
DECFSZ
	
COUNT,F
	
;
KARAKTER SAY
;
	
GOTO
	
STRING_NEXT
	
;
TÜM KAREKTERLER BÝTENEKADAR DEVAM ET
;ENDM

	

	

;
	
-----------
VER?LEN YAZIYI UARTTAN GÖNDEREN MAKRO------------
RS232.TEXT MACRO
	
RS_TEXT
LOCAL
	
RS232_TXT_MESAJ#V(RS232_TEXT_IND)  ;YAZDIRILACAK MESAJ ADRES TABLOSU
LOCAL
	
RS232_YENIDEN_YAZ#V(RS232_TEXT_IND)  ;YAZMA KOD ADRES? 
RS232_TEXT_IND
	
SET RS232.TEXT+1
	
MOVLF
	
HIGH RS232_TXT_MESAJ,ROM_ADR_H
	
MOVLF
	
LOW RS232_TXT_MESAJ,ROM_ADR_L
	
MOVFF
	
PCLATH,S_PCH
	
GOTO 
RS232_YENIDEN_YAZ#V(RS232_TEXT_IND);RS232_YENIDEN_YAZ
RS232_TXT_MESAJ#V(RS232_TEXT_IND):
	
DT
	
RS_TEXT,H'0'
RS232_YENIDEN_YAZ#V(RS232_TEXT_IND):CALL
	
RS232_Karakter_YAZ
ENDM
;---------------------------------------------------------------------------

RS232.SENDSTRINGL MACRO
	
LEN,TEXT
	
	
MOVLF
	
LEN,RW_IND;32
	
;
GÖNDERÝLEN VERÝ BOYUTU
	
	
MOVLF
	
TEXT,FSR
	
;
BELLEK ADRESÝNÝ YÜKLE
	
	
CALL
	
RS232_SAYARAK_YAZ
ENDM
;
	
-----------
RAMDAKÝ METÝNLERÝ GÖNDERME------------
RS232.SENDSTRING MACRO
	
LEN,TEXT
	
	
MOVFF
	
LEN,RW_IND;32
	
;
GÖNDERÝLEN VERÝ BOYUTU
	
	
MOVLF
	
TEXT,FSR
	
;
BELLEK ADRESÝNÝ YÜKLE
	
	
CALL
	
RS232_SAYARAK_YAZ
ENDM

;-------------AYARLAR----------------------------------
RS232.CONFIG MACRO
	
BRATE,Kesme,Alma,G

VARIABLE    HIZ
=0;LOW SPID,1 HIG SPID 
	
BANKSEL SPBRG
	
;
BANK1
	
IF
	
BRATE==19200
        HIZ SET 1
;0 LOW SPID,1 HIG SPID 
	

	
MOVLW
	
.12
	
ENDIF
	
IF
	
BRATE==2400
        HIZ SET 0
;0 LOW SPID,1 HIG SPID 
	

	
MOVLW
	
.103
	
ENDIF
	
IF
	
BRATE==9600
	
MOVLW
	
.25
        HIZ SET 1
;0 LOW SPID,1 HIG SPID 
	
ENDIF
	
IF
	
BRATE==1200
        HIZ SET 0
;0 LOW SPID,1 HIG SPID 
	
MOVLW
	
.207
	
ENDIF
	
IF
	
BRATE==28800
        HIZ SET 1
;0 LOW SPID,1 HIG SPID 
	

	
MOVLW
	
.8
	
ENDIF
	
IF
	
BRATE==33600
        HIZ SET 1
;0 LOW SPID,1 HIG SPID 
	
MOVLW
	
.6
	
ENDIF
	
IF
	
BRATE==57600
        HIZ SET 1
;0 LOW SPID,1 HIG SPID 
	

	
MOVLW
	
.3
	
ENDIF
	
CONSTANT
	
_TXSTA=((HIZ<<2)|(G<<5));BRGH=2 TXEN=5
	
;
movlw
	
4000000/(.64(x+1))
	
MOVWF
	
SPBRG
	
;
ERÝÞÝM HIZI BELÝRLENDÝ
	
movlw
	
_TXSTA;(1<<2)|(Gönderme<<TXEN);((Gönderme<<5)|(1<<2));
	
MOVWF
	
TXSTA
	
	
;
ÇALIÞMA MODU AYARÞANDI
	
if
	
Kesme==1
	
BSF
	
	
INTCON,PEIE
	
;
ÇEVRESEL KESMELERE ÝZÝN VER
	
BSF
	
	
PIE1,RCIE
	
;
UART ALMA KESMESÝ KESME AÇIK
;
	
BSF
	
	
PIE1,TXIE
	
;
UART GÖNDERME KESMESÝ KESME AÇIK
	
endif
	
BSF
	
	
PORT_RX
	
BCF
	
	
PORT_TX
	
BANKSEL
	
RCSTA
	
;
bak0
	
MOVLW
	
((
1<<SPEN)|(Alma<<CREN));B'10010000'
	
;
SÜREKLÝ VERÝ ALMA AÇIK,PORT AÇIK
	
MOVWF
	
RCSTA
	
	
;
PORT AYARLARI TAMAM PORT AÇIK

ENDM
RS232
.BEGIN MACRO
	
BRATE
	
BANKSEL SPBRG
	
IF
	
BRATE=9600
	
MOVLW
	
.25
	
ENDIF
	
IF
	
BRATE=19200
	
MOVLW
	
.12
	
ENDIF
	
IF
	
BRATE=2400
	
MOVLW
	
.103
	
ENDIF
	
IF
	
BRATE=9600
	
MOVLW
	
.25
	
ENDIF
	
IF
	
BRATE=1200
	
MOVLW
	
.207
	
ENDIF
	
IF
	
BRATE=28800
	
MOVLW
	
.8
	
ENDIF
	
IF
	
BRATE=33600
	
MOVLW
	
.6
	
ENDIF
	
IF
	
BRATE=57600
	
MOVLW
	
.3
	
ENDIF
	
MOVWF
	
SPBRG
	
;
ERÝÞÝM HIZI BELÝRLENDÝ
	
BANKSEL
	
RCSTA
	
;
bak0
ENDM

;______________________________________________________________________________
;CODE
;
	
-----------
VER?LEN YAZIYI UARTTAN GÖNDEREN MAKRO------------
RS232_Karakter_YAZ:
	
;
CALL
	
MEMORY_KARAKTER_0KU
	
MOVWF
	
CW_DATA
	
XORLW   B'00000000'         OKUNNAN DE?ER?XOR ?LE "0" OLUP OLMADI?INI TEST ET.
	
BTFSC   STATUS,Z           OKUNANA DE?ER "0" ?SE ??LEMSONLANDIR.
	
RETURN;GOTO    
RS_YAZMA_SONA_ERDI 
	
RS232.SEND
	
CW_DATA
	
INCFSZ
	
ROM_ADR_L,F
	
GOTO
	
RS232_Karakter_YAZ
	
INCF
	
ROM_ADR_H,F
	
GOTO
	
RS232_Karakter_YAZ

;-----------RAMDAKÝ METÝNLERÝ GÖNDERME------------
RS232_SAYARAK_YAZ:
	
	
RS232.SEND
	
INDF
	
	
INCF
	
FSR,F
	
;
BÝRSONRAKÝ ADRESÝ YÜKLEDECF
	
	
DECFSZ
	
RW_IND,F;32,F
	
;
BÝTTÝM
	
	
GOTO
	
RS232_SAYARAK_YAZ
	
;
HAYIR BAÞA DON TEKRARLA
	
	
RETURN

Simülasyon dosyası görüntüsü


Bord'dan okunan veri görüntüsü
Ayinesi iştir kişinin lâfa bakılmaz.Şahsın görünür rütbe-i aklı eserinde

SercanTEK

25 Haziran 2018, 13:24:51 #1 Son düzenlenme: 25 Haziran 2018, 13:40:59 SercanTEK
Hocam bende ayni sorunu yaşamıştım geçmişte. Bozuk diyerek ayni yerden baska aldım. Guzelmeyince Baska bir satıcıdan rtc yi aldim. Düzelmişti. Birde kristali eski pc anakartından söktüm ve kullandım. 2-3 günümü aldı sorunu çözmek. İmkanınız varsa Başka donanım deneyin. Kodlara baktım ama asm ye hakim değilim.
Hayat sadece bir araçtır amaca ulaşmak için; Amaç ise Hayata birşeyler Katmaktır Benim için.. www.sercanca.com

Mujdat117

Hocam ilginiz için teşekkürler,

elimde aşağıdaki modülden ayrıca bir tanede yedek entegre var her ikisinde de aynı durun RAM bölgesinden okuma yazma sorunsuz yapabiliyorum. İş SAAT bilgisi okumaya geldiğinde sabit değer okuyorum. Elimde Arduino UNO var hazır kütüphane ile test ettim her iki entegre de sorunsuz çalışıyor gibi görünüyor.
Kodda ve entegre de hata olmadığını düşündürüyor ancak Kodda eksiklik olabilir. Yani ilk kurulumda güncel saat bilgisini yükledikten sonra RTC'yi çalıştırmak için bir start komutu göndermek mi gerekiyor?
Arduino kütüphanesini inceleyeceğim bakalım bir sonuç elde edebilecek miyim.


Ayinesi iştir kişinin lâfa bakılmaz.Şahsın görünür rütbe-i aklı eserinde

SercanTEK

Alıntı yapılan: Mujdat117 - 26 Haziran 2018, 00:25:54Hocam ilginiz için teşekkürler,

elimde aşağıdaki modülden ayrıca bir tanede yedek entegre var her ikisinde de aynı durun RAM bölgesinden okuma yazma sorunsuz yapabiliyorum. İş SAAT bilgisi okumaya geldiğinde sabit değer okuyorum. Elimde Arduino UNO var hazır kütüphane ile test ettim her iki entegre de sorunsuz çalışıyor gibi görünüyor.
Kodda ve entegre de hata olmadığını düşündürüyor ancak Kodda eksiklik olabilir. Yani ilk kurulumda güncel saat bilgisini yükledikten sonra RTC'yi çalıştırmak için bir start komutu göndermek mi gerekiyor?
Arduino kütüphanesini inceleyeceğim bakalım bir sonuç elde edebilecek miyim.


Ayar yaparken Stop ettirip sonra start ettirmek gerekiyor diye biliyorum. Çünkü kodu öyle yazmışım.

Ben Jalv2 ile yazmıştım. onun kütüphanesinden aşağıdaki örneği verebilirim. Start kısmını inceleyin. Sizin kodta varmı bilmiyorum.

Kod Seç
procedure rtc_start() is
   
var byte second rtc_read_second()
   
rtc_write_reg_(rtc_reg_second_second 0b0111_1111)  -- clear halt bit
end procedure


Buda Hitech-C için örnek

Kod Seç
void ds1302_init(void)
{
unsigned char x;
RST=0;
DelayUs(2);
SCLK=0;
DelayUs(2);
ds1302_write(0x8E,0);
ds1302_write(0x90,0xA6);

-- 
RTC Start
x
=ds1302_read(0x81);
if((
0x80)!=0)
ds1302_write(0x80,0);

}
Hayat sadece bir araçtır amaca ulaşmak için; Amaç ise Hayata birşeyler Katmaktır Benim için.. www.sercanca.com

fatihmehmet00

ds1302 ile bende hep sorun yaşadım. Bence ds1307 kullanırsanız sorun çözülecektir.

elek

..ds1302 de sorun yok.ben ilk başta 2*16 lcd ye yazdıran hazır kod kullanmıştım picbasic..
zaten iki bölümden oluşan basit bir kod..
" Tanrı, iradesini hakim kılmak için yeryüzündeki iyi insanları kullanır, yeryüzündeki kötü insanlar ise kendi iradelerini hakim kılmak için Tanrı'yı kullanırlar." ..." Tanrı'dan mesaj gelmiyor, biz Tanrı'ya mesaj gönderiyoruz"

RaMu

Kod DsPic30F2010 için,
biraz karışık pekte hoş bir örnek değil ama çalışıyor.
https://rmtulay.wordpress.com/2015/05/22/asm-dspic-ds18b20-2x16-lcd-ile-termometre-uygulamasi/

Başlatma için şöyle bir şey yapmışım:
Kod Seç
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<AÇIILIŞ DEĞERLERİ KURMA SON<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>CH WP KALDIRMA SARZ AYARLAM>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DSKUR:  MOV
	
	
#0x008E,w0
	
;WP KALDIRMA
	
	
CALL
	
DSYAZ
	
	
CLR
	
	
w0
	
	
CALL
	
DSYAZ
	
	
BCLR
	
PORTB,#CE
	
	
REPEAT
	
#14
	
	
NOP

	
	
;
MOV
	
	
#0X0090,W0     ;SARZ AYARLAMA
	
	
;
CALL
	
DSYAZ

	
	
;
mov
	
	
#0X00A5,W0
	
	
;
CALL
	
DSYAZ
	
	
;
BCLR
	
PORTB,#CE
	
	
;
REPEAT
	
	
#14
	
	
;
NOP

	
	
MOV
	
	
#0x80,w0
	
;
	
SANİYE YAZMA ADRESİ(CH KALDIRMA)
	
	
CALL
	
DSYAZ

	
	
MOV
	
	
#0x45,w0         ;W8 İDİİİİİİİİİİİİİ     SANİYEYİ 45 DEN BAŞLAT  (CH I DA KALDIRIR AYNI ZAMANDA)
	
	
CALL
	
DSYAZ
	
	
BCLR
	
PORTB,#CE
	
	
REPEAT
	
#14
	
	
NOP
RETURN
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
GEREKİRSE SAAT DURDURMA>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
SAATDURDUR:
	
MOV
	
	
#0x80,w0
	
;
	
SANİYE YAZMA ADRESİ BIT7SET EDİLİRSE (CH SET) SAAT DURDURULUR
	
	
    
CALL
	
DSYAZ

	
    
	
MOV
	
	
#0x80,w0         ;W8 İDİİİİİİİİİİİİİ     SANİYEYİ 18 DEN BAŞLAT
	
	
    
CALL
	
DSYAZ
	
    
	
BCLR
	
PORTB,#CE
	
    
	
REPEAT
	
#14
	
     
	
NOP
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<


Kod Seç
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;
1302 YE YAZMA İŞLEMİ
DSYAZ
:
	
BCLR
	
TRISB,#IO
	
	
REPEAT
	
#14
	
	
NOP
	

	
	
BSET
	
PORTB,#CE
	
	
REPEAT
	
#14
	
	
NOP

	
	
MOV
	
	
#8,w1
	
	
DO
	
	
#7,SAR
	
	
RRC.B
	
	
w0,w0                 
	
	
BCLR
	
PORTB,#IO
	
	
BTSC
	
SR,#C
	
	
BSET
	
PORTB,#IO
	
	
REPEAT
	
#14
	
	
NOP
	
	
BSET
	
PORTB,#SCLK
	
	
REPEAT
	
#14
	
	
NOP
	
	
dec
	
	
w1,w1
	
	
btss
	
SR,#Z
	
	
BCLR
	
PORTB,#SCLK
	
	
REPEAT
	
#14
	
	
NOP
SAR
:    NOP
	
	
BSET
	
TRISB,#IO
	
	
REPEAT
	
#14
	
	
NOP
	
	
BCLR
	
PORTB,#SCLK
	
	
REPEAT
	
#14
	
	
NOP
	
    RETURN
;;;;;
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

Mujdat117

Öncelikle ilginiz ve yardımlarınız için hepinize teşekkür ederim.

şuanda kod istediğin gibi çalışıyor kod içerisinde 2 adet hata yaptığımı fark ettim;
1.si ds1302 Kurulum için bir kod yazdım fakat kodu mcu başlatırken çağırmayı gözden kaçırmışım.
ikinci hatam ise RTC kurulum ve saat ayarlarını yüklerken her adres ve veri yazılmadan önce RESET/CE pini durumunu değiştirmeyi atlamışım.

DS1302 Veri yazmak için:
1-RST/En pini set edilecek
2-adres verisi byte yazma rutini ile yazılır,
3-yazılacak veri için byte yazma rutini tekrar çağrılır,
4-RST/En pini low edilerek yazma işlemi sonlandırılır.

DS1302 Veri okuma için:
1-RST/En pini set edilecek
2-adres verisi byte yazma rutini ile yazılır,
3-byte okuma rutini çağrılır, ve okunan veri bir değişkene(ram adresi) aktarılır,
4-RST/En pini low edilerek yazma işlemi sonlandırılır.

ben 1. ve 4. işlemleri atlamışım şuan düzeltim ve sorun çözüldü.
Projem bittiğinde tüm dosyaları paylaşmayı düşünüyorum şimdilik iyi akşamlar diklerim.
Ayinesi iştir kişinin lâfa bakılmaz.Şahsın görünür rütbe-i aklı eserinde