DS1302 Saat bilgisi okuma sorunu

Başlatan Mujdat117, 24 Haziran 2018, 23: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ı:
; 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?TLER? YEDEKLEND?
	ROM_ADR_H :1	;RES	1 ;P?C ?N ROM ADRES? YUKSEK B?T? TAK?B? ?Ç?N KULLANILACAK
	ROM_ADR_L :1	;RES	1;P?C ?N ROM ADRES? DÜ?ÜK B?T? TAK?B? ?Ç?N KULLANILACAK
	CW_DATA	 :1	;RES 1;W REGEST?R?S? YEDE??	
	LOOPCNT :1;	RES 1;GEC?KME RUTUN? DE???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 GEREKL? GEC?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?N? SAYAN DE???KEN. 	
	RTC_DS_DEGISKEN :1 ;	
	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     STATUS, RP0         ; 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 KESMES? AKT?F
		MOVLF	B'00100100',TXSTA   ;ASYNCRON MODU, HIGHT 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??lar? dijital ç?k?? olarak ayarla
		MOVWF		CMCON	;ayar? yü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?N? LCD 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?N XOR ?LE "0" OLUP OLMADI?INI TEST ET.
	BTFSS   STATUS,Z   ; OKUNANA DE?ER "0" ?SE ??LEM? SONLANDIR.    
	RETURN	
	CLRF	DIGIT_4
	INCF	DIGIT_3,F	
	MOVLW	.10
	XORWF   DIGIT_3,W   ; OKUNNAN DE?ER?N XOR ?LE "0" OLUP OLMADI?INI TEST ET.
	BTFSS   STATUS,Z   ; OKUNANA DE?ER "0" ?SE ??LEM? SONLANDIR.    
	RETURN	
	CLRF	DIGIT_3
	INCF	DIGIT_2,F
	MOVLW	.10
	XORWF   DIGIT_2,W   ; OKUNNAN DE?ER?N XOR ?LE "0" OLUP OLMADI?INI TEST ET.
	BTFSS  STATUS,Z   ; OKUNANA DE?ER "0" ?SE ??LEM? SONLANDIR.    
	RETURN	
	CLRF	DIGIT_2
	INCF	DIGIT_1,F
	MOVLW	.10
	XORWF   DIGIT_1,W   ; OKUNNAN DE?ER?N XOR ?LE "0" OLUP OLMADI?INI TEST ET.
	BTFSS   STATUS,Z   ; OKUNANA DE?ER "0" ?SE ??LEM? SONLANDIR.    
	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 ADRES? YUKLE
    CALL    I2C_DATA_YAZ;DÜ?ÜK ADRES B?T?N? YAZ 
    MOVLW    "M"    ;YAZILACAK VER? W YE AL
    CALL    I2C_DATA_YAZ;VER?Y? YAZ 
    MOVLW    "U"    ;YAZILACAK VER? W YE AL
    CALL    I2C_DATA_YAZ;VER?Y? YAZ     
    MOVLW    "J"    ;YAZILACAK VER? W YE AL
    CALL    I2C_DATA_YAZ;VER?Y? YAZ     
    MOVLW    "D"    ;YAZILACAK VER? W YE AL
    CALL    I2C_DATA_YAZ;VER?Y? YAZ     
    MOVLW    "A"    ;YAZILACAK VER? W YE AL
    CALL    I2C_DATA_YAZ;VER?Y? YAZ     
    MOVLW    "T"    ;YAZILACAK VER? W YE AL
    CALL    I2C_DATA_YAZ;VER?Y? YAZ     
   BCF	I2C_EN 
    RETURN
 ;;;;;;;;;;;;;rom OKU;;;;;;;;;;;;;;;;;;;;;;;;;
 DS1302_ROM_OKU:	
   BSF	I2C_EN;I2C.START;?LET???ME BA?LA
    MOVLW   DS1302_RAM_R;YAZILACAK ADRES? YUKLE
    CALL    I2C_DATA_YAZ;DÜ?ÜK ADRES B?T?N? YAZ 
    CALL    I2C_DATA_OKU;VER?Y? OKU
    MOVWF   RTEMP
 ;   SWAPF   RTEMP,F
     RS232.SEND	RTEMP   
    CALL    I2C_DATA_OKU;VER?Y? OKU
    MOVWF   RTEMP
     RS232.SEND	RTEMP   
    CALL    I2C_DATA_OKU;VER?Y? OKU
    MOVWF   RTEMP
     RS232.SEND	RTEMP   
    CALL    I2C_DATA_OKU;VER?Y? OKU
    MOVWF   RTEMP
     RS232.SEND	RTEMP   
    CALL    I2C_DATA_OKU;VER?Y? OKU
    MOVWF   RTEMP
     RS232.SEND	RTEMP   
    CALL    I2C_DATA_OKU;VER?Y? OKU
    MOVWF   RTEMP
     RS232.SEND	RTEMP   
    CALL    I2C_DATA_OKU;VER?Y? OKU
    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;DÜ?ÜK ADRES B?T?N? YAZ ;I2C_DATA_SONRAKI_BIT_YAZ;   
    CALL    I2C_DATA_OKU;OKUMA KODUNU ÇA?IR.
    MOVWF   RTC_DS_DEGISKEN    ;OKUNAN DE?ER? RAM A YÜKLE     
    SWAPF   RTC_DS_DEGISKEN,W
    
    BCF	I2C_EN  ;I2C.STOP ;OKUMA B?TT?. ?LET???M? KES. 
  RETURN
;;;;;;;;;;;;;;;;;;DS1302 YAZ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
 DS1302_YAZ:
   MOVWF    RTC_DS_DEGISKEN 
   BSF	I2C_EN;I2C.START;?LET???ME BA?LA
    MOVFW   RTC_DS_ADR;YAZILACAK ADRES? YUKLE
    CALL    I2C_DATA_YAZ;DÜ?ÜK ADRES B?T?N? YAZ 
    MOVFW    RTC_DS_DEGISKEN    ;YAZILACAK VER? W YE AL
    CALL    I2C_DATA_YAZ;VER?Y? YAZ 
   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;DÜ?ÜK ADRES B?T?N? YAZ 
    MOVLW    0;KORUMA ?PTAL
    CALL    I2C_DATA_YAZ;VER?Y? YAZ 

    MOVLW   DS1302_ENERJI_W;YAZMA KORUMA ?PTAL?
    CALL    I2C_DATA_YAZ;DÜ?ÜK ADRES B?T?N? YAZ 
    MOVLW    H'A4'
    CALL    I2C_DATA_YAZ;VER?Y? YAZ 
    
    MOVLW   DS1302_SANIYE_W;
    CALL    I2C_DATA_YAZ;DÜ?ÜK ADRES B?T?N? YAZ 
    MOVLW    0
    CALL    I2C_DATA_YAZ;VER?Y? YAZ 
   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?N? KONTROL ET GÖNDER?LECEK B?T? TESP?T ET.
    GOTO    I2C_DATA_0_BIT_YAZ
I2C_DATA_1_BIT_YAZ:     
    NOP
    NOP
    BSF	I2C_SDA	;GÖNDER?LECEK B?T "1"
    NOP
    NOP
    GOTO    I2C_CLOCK_YAZ;CLK S?NYAL? GÖNDER
I2C_DATA_0_BIT_YAZ:    
    NOP
    NOP
    BCF	I2C_SDA	;GÖNDER?LECEK B?T "0" 
I2C_CLOCK_YAZ: 
    NOP
    NOP
    BSF	I2C_SCL ;SDA DAK? B?T? YAZ   
    NOP
    NOP
    BCF	I2C_SCL ;SDA DAK? B?T? YAZ     
    NOP
    NOP    
    RRF	SPI_I2C_DATA,F	;B?TLER? B?R ROLA KAYDIR (STATUS C YE YAZ)    
    DECFSZ  SPI_I2C_CND,F;8 B?T GER? SAYIM 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,F ;B?R SOLA KAYDIR. 
    BTFSS   I2C_SDA;SDA KONTROL ET, OKUNAN 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 DAK? B?T? YAZ     
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP
    BCF	I2C_SCL ;SDA DAK? B?T? YAZ         
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP
    DECFSZ  SPI_I2C_CND,F;8 B?T GER? SAYIM 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 DAK? B?T? YAZ     
    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 GEREKL? GEC?KME---------------------
LED_BLINK
	DECFSZ	LED_DELAY,F
	GOTO	DELAY1MS  
	TOGGLE   LED
	MOVLF	.2,LED_DELAY
    RETURN
;-----------------------------------------------------------------------------
  
END

Ana kodda referans verilen KOSUL.inc dosyası:
;*********************************************************
;;;;;;;;;;;;;;;;/Karþýlaþtýrma Komutlarý\;;;;;;;;;;;;;;;;;;
;* Adý Soyad: Mü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önlendirilir. bunlar yapýlacak iþlemin
; ne olduðunu belirlemeye yarar. Makrolardaki 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=L) parametreler yani deðiþken ve Sabit/Deðiþken2 birbirine 
;              ;eþit olup olmadýðýný test eder.
;
;	Büyük=1;(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 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ı:
;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
;;;;;;;;;;;;;;;;;;;;;;;;;;GEREKL? RAM ADRES? YÜ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?TLER? YEDEKLEND?
;INT8	ROM_ADR_H	;RES	1 ;P?C ?N ROM ADRES? YUKSEK B?T? TAK?B? ?Ç?N KULLANILACAK
;INT8	ROM_ADR_L	;RES	1;P?C ?N ROM ADRES? DÜ?ÜK B?T? TAK?B? ?Ç?N KULLANILACAK
;INT8	CW_DATA		;RES 1;W REGEST?R?S? YEDE??	
;INT8	LOOPCNT;	RES 1;GEC?KME RUTUN? DE???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?N? BEL?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ÖLGES? ADRES?N? W'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 DEK? RAM BÖLGES?N? S?L
;	INCF	FSR,F;SONRAK? RAM 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?N? DOLAYLI ADRES BÖLGES?NE YÜKLE
	MOVLW	RAM_CNT;S?L?NECEK ADRES ?NDEKS?N? W'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?N? DOLAYLI ADRES BÖLGES?NE YÜKLE
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
	MOVFW	FSR;BITI? RAM BÖLGES? ADRES?N? W'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?NC? DE???KENE YÜKLE
RAMFF	MACRO	RMBIR,RMIKI
	MOVLW	RMBIR;ADRES? W YE AL
	MOVWF	FSR ;DOLAYLI ADRESLEME BÖLGES?NE YAZ
	MOVF	INDF,W;FSR Y? W YE AL
	MOVLW	RMIKI;?K?NC? RAM ADRES?N? W YE AL
	MOVWF	FSR ;?K?NC? RAM ADRES?N? DOLAYLI ADRESLEME ?Ç?N YÜKLE
	MOVWF	INDF;W DEK?(B?R?NC? ADRES?N ?ÇER???) ?K?NC? ADRESE 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ÐER; BUNUN DEC YANÝ NORMAL SAYI KARÞILIÐI 255 YANÝ 3 BASMAKLI BÝR
; SAYIDIR. BUNA GÖRE	8BÝTLÝK HEX SAYISINI DENÜÞTÜRMEK ÝÇÝN 24BÝT(3 BASASMAK) BÝ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ı:
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));4 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?N XOR ?LE "0" OLUP OLMADI?INI TEST ET.
	BTFSC   STATUS,Z           ; OKUNANA DE?ER "0" ?SE ??LEM? SONLANDIR.
	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

ByTEK

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

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

ByTEK

Alıntı yapılan: Mujdat117 - 25 Haziran 2018, 21: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.

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

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((x & 0x80)!=0)
ds1302_write(0x80,0);

}

FMY

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

Andromeda

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

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